终于等到国庆了,有时间来写点自己的想法。这学期我们新开设了《软件工程》这门课,通过前两次的学习,再结合自己暑期实习的一些经历,我认为这门课就是教我们如何组织、配合完成一项工程。老师要求我们写一些思维导图,博客等内容,我个人觉得这是十分有用的,当我能够通过观看网课等资源,写下一些学习笔记,这样才能使我更好地掌握这些内容。

第一周的学习成果,我一开始使用的是思维导图的方式,但我发现有些内容并不是一个个的知识点,有许多用于解释性的话放在思维导图里显得十分繁琐,反而用博客的方式更能方便的记录自己的学习心得体会。这也是为什么第一章的博客来的那么晚..

课程资源

1. 清华大学国家级精品课程《软件工程》网课

① 学堂在线课程网址:

软件工程 - 清华大学 - 学堂在线

B站备份网址:

【软件工程】清华大学_哔哩哔哩_bilibili

本文所做的所有笔记、学习心得均来自该网课

1.1 软件无处不在

软件工程涵盖软件工程两个部分

软件是软件工程的研究对象,也是软件工程的产品形态与客观存在

工程是将理论和知识应用于实践的科学,目的是经济有效地解决实际问题。

软件工程:为了解决开发成本效益和软件质量的问题而产生的,倡导以工程的原理原则方法进行软件开发,用系统的、可控的和有效的方式构建高质量的软件产品。

软件工程是一种支持专业化软件开发的方法

1.2 软件的本质特性

对于用户:一系列实现各种功能的图形化界面

计算机内部:实际运行这一些程序代码

软件 程序 + 数据 + 文档

程序:计算机可以接受的一系列指令,运行时可以提供所要求的功能和性能

数据:使得程序能够适当地操作信息的数据结构

文档:描述程序的研制过程、方法和使用的图文资料

软件的行为只有通过运行才能呈现出来

程序运行才能观察到软件的功能性能

软件更像是嵌入式的数字化知识、知识载体

软件的本质特性:复杂性、一致性、可变性和不可见性等固有的内在特性

造成软件开发困难的根本原因,使软件开发变得难以控制

复杂性

Google搜索引擎全球30多个站点,超100万台服务器的云计算设施

Amazon拥有28个云计算中心,超150万服务器

阿里云:国内最大的云计算平台

软件的复杂性给软件开发管理和质量保证带来很多困难

一致性

不能独立存在

需要依附于一定的环境(硬件、网络、其他软件等)必须遵从人为的惯例

适应已有的技术和系统,随着接口的不同而改变,都是人为设计的结果

保持与其他系统接口的一致性也会造成软件设计的复杂性

可变性

软件只要使用,就会一直在变,随需而变

eg:微信发展历史

软件变更更为频繁,容易修改,但是具有副作用

理想情况:随着软件使用,故障率逐渐下降,趋于稳定

实际情况:软件的每一次修改会造成故障率的升高,可能对软件结构造成破坏,最终可能导致软                      件发生退化,结束生命周期

成功的软件都是会发生演化的

没有变化的软件一定是没有用的

软件的可变性给开发带来很多难题,但也给软件带来生命力

积极态度有效方法控制变更,使软件在演化过程中保持高质量

不可见性

“看不见,摸不着”的逻辑实体,不具有空间的形体特征

开发人员可以直接看到程序代码,但是源代码并不是软件本身

软件是以机器代码的形式运行,但开发人员无法看到源代码是如何执行的

不可见性限制软件的设计过程

严重阻碍相互之间的人与人的交流

对开发过程的管理造成困难

需要寻找解决问题的有效方法,保证软件开发过程的高效、有序和可控

1.3 软件工程的产生与发展

Standish集团:专门跟踪调查软件项目的研究机构

软件项目的平均成功率大概在30%左右

在计划的时间和预算内实现项目的目标

50%左右的项目超出预算或最后期限或存在特性缺陷

20%彻底失败

总是存在错误多、性能低、不可靠、不安全等质量问题

软件失败的典型事例

ARIANE 5 火箭

程序中试图将64位浮点数转换成16位整数时产生溢出,缺少对数据溢出的错误处理程序,备份软件通过复制而成

Windows Vista系统

系统过于庞杂,程序错误总数多,开发管理混乱,浪费了时间。运行效率低,兼容性差,频繁死机的缺陷

12306网络购票系统

购票高峰日崩溃,扣钱不出票,重复排队

软件开发面临的挑战

客户不满意:交付客户不需要的功能,交付日期没有保障,客户使用发现bug

风险与成本问题:开发团队专注技术,忽视风险,无能力预测成本,导致预算超支

项目过程失控:客户需求变化频繁,无力应对,无法预见交付质量,对流程盲从,忽视客户                                     业务价值

无力管理团队:无法评估开发人员能力及工作进度,困扰于如何提升团队的能力与效率

软件工程一直致力于探索软件开发问题的解决之道

1968年北大西洋公约组织提出“软件工程”概念和术语。

软件的生产有必要建立在某些理论基础实践指导之上。

软件工程的发展

1968年以前

        史前阶段,无方法可寻,20世纪60年代末,爆发了软件危机

1968-20世纪80年代末

        瀑布模型成为软件开发的经典模型

整个软件开发过程划分成需求,设计,编码,测试等不同阶段线性方式执行

1983-1995

过程质量对产品质量的重大影响

面向对象的方法和过程改进运动逐渐盛行提出了CMM/ISO9000/SPICE等质量标准体系

20世纪90年代至今

互联网技术和应用迅速发展,应对需求变化和快速交付的需要

人们开始采用一种新型的敏捷开发方法,采用迭代和增量的开发过程

强调更紧密的团队协作,广泛应用于软件企业之中。

软件工程已经成为线代软件产业一个关键的技术,并正在向成熟发展

1.4 软件工程的基本概念        

工程:是与建造活动密切相关的“人造系统”

应用有关的科学知识和技术手段

通过有组织的群体协作活动

建造具有预期使用价值的人造产品过程。

软件工程:系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护,即工程化应                      用到软件上,并且对这种方法进行研究。

目标:创造“足够好”的软件

较低的开发成本

按时完成开发任务并及时交付

实现客户要求的功能

具有良好性能、可靠性、可扩展性、可移植性

软件维护费用低

软件开发是一个复杂的过程,注重过程质量的控制,先进的方法和工具可以帮助开发高质量的产品

过程,方法,工具是软件工程的三个基本要素

软件过程是一系列开发活动,将用户的需求转化为用户满意的产品。通过对开发过程中,各个活动环节质量的有效控制,保证最终产品的质量

研究和定义用户的问题

确定和分析用户的实际需求

设计整个系统的总体结构

编程实现系统的各个部分

将各个部分集成起来进行测试

交付用户满意的产品

包含开发过程管理等支持性的活动

软件项目管理计划

软件配置管理计划

软件质量保证计划

评审记录

软件工程方法:先进的开发方法和技术手段可以提高开发效率,有助于构件高质量的产品

面向服务:在应用表现层次上将软件构件化,即应用业务过程由服务组成,而服务由构件组装而成

面向构件:寻求比类的力度更大的且易于复用的构件,期望实现软件的再工程

面向对象:类为基本程序单元,对象是类的实例化,对象之间以消息传递为基本手段。

面向过程:算法作为基本构造单元,强调自顶向下的功能分解,功能和数据进行一定程度的分离

代码分装的力度从函数到类再到力度更大的构件以及在应用表现层次上的服务

软件开发工具贯穿于整个开发过程

软件建模工具可以支持建立系统的需求和设计模型

软件构造的工具包括程序编辑器,编译器,解释器和调试器

软件测试工具可以帮助人们分析代码质量,执行软件测试和评价产品的质量

软件维护工具,一些代码分析工具和重构工具帮助人们理解额维护代码

软件工程管理工具:有效管理开发过程,支持团队进行协作开发

软件开发的基本策略

软件复用

构造一个新的系统直接复用已有的构件进行组装

构件是经过反复验证的,由其组成的新系统具有较高的质量,降低维护成本

软件复用不仅仅是代码复用,也有对库函数、类库、模板、设计模式、组建、框架的复用

分而治之

将一个复杂问题分解成若干个简单的问题,逐个解决

来源于人们生活与工作的经验完全适合于技术领域

逐步演进

软件开发是自底向上逐步有序的生长过程

小步快跑:每走完一步再调整并为下一步确定方向,直到终点

遵循软件的客观规律,不断进行迭代式增量开发,最终完成交付

优化折中

优化:优化软件的各个质量特性,如运行速度、资源利用、用户体验

折中:通过协调各个质量特性,实现整体质量的最优

软件工程的Wasserman规范

抽象:降低复杂性的处理方法

软件建模方法:帮助工程师理解和刻画系统的分析和设计结果,便于开发人员进行沟通和交流

用户界面原型化:可以克服需求难以确定的困难

软件体系结构:对产品质量是至关重要的

工程方法:软件过程 + 软件复用 + 度量

工具和集成环境:对于提高软件开发效率是必不可少的

1.6业界人士谈软件工程

把软件做成好用、能用、易用的软件

软件的质量和软件的开发周期两者间的平衡

软件工程提供了很多项目管理的模型和方法,能够并行开发,不同思维的耦合

软件工程的发展使软件出现的问题变得越来越少

软件工程教我们如何进行软件的质量保证测试管理

软件工程通过规范的方式和指定规则让每一个人发挥相同的效能,让软件品质均一化,可保证。

用户测试反馈使开发得到迭代,非常重要

软件工程让我们每一个人把自己的习惯归结成一些规则,写出来的代码都是同样的思维、思路。

标准的设计模式,让想问题的方式得到统一

科学的软件工程管理方法

程序员的基本素质

代码阅读,理解,书写能力

软件工作人员具有极强的责任心,敬畏感,自我反省,自我提升

职业道德

代码品质保证

秘密保护

与他人协同的能力

与人相处

开发经验

本章小结

通过对第一章的章节学习,我对软件工程有了基本的了解,知道了一些基本概念,以及软件工程的发展历史、演变过程、开发策略等内容。对业界从业人士的采访也让我了解到一个程序员或者说一个软件工程师所应该具备的基本品质。

第1章 初识软件工程相关推荐

  1. Hadoop权威指南 _03_第I部分Hadoop基础知识_第1章初识Hadoop.

    第I部分Hadoop基础知识 第1章初识Hadoop. 比较喜欢这句极其形象的比喻. "在古时候,人们用牛来拉重物.当一头牛拉不动根圆木时,人们从来没有考虑过要想方设法培育出一种更强壮的牛. ...

  2. 第一章 初识Mathematica

    第一章  初识Mathematica   1.Mathematica是什么 Matematica是由美国Wolfram公司研究开发的一个著名的数学软件,它提供了非常强大的功能,能够完成符号运算.数学图 ...

  3. 《Python爬虫开发与项目实战》——第3章 初识网络爬虫 3.1 网络爬虫概述

    本节书摘来自华章计算机<Python爬虫开发与项目实战>一书中的第3章,第3.1节,作者:范传辉著,更多章节内容可以访问云栖社区"华章计算机"公众号查看 第3章 初识网 ...

  4. 《开源硬件创客——15个酷应用玩转树莓派》——第1章 初识树莓派

    本节书摘来异步社区<开源硬件创客--15个酷应用玩转树莓派>一书中的第1章,作者:朱铁斌,更多章节内容可以访问云栖社区"异步社区"公众号查看 第1章 初识树莓派 开源硬 ...

  5. 《起跑吧,Opa》 -- 中译本 第一章 初识Opa

    第一章 初识opa 本章,你将初识opa.你将学习如何安装Opa,编写opa程序以及熟悉Opa开发周期中的各个步骤. 安装opa 需要你预先从opa网站(http://opalang.org/)下载适 ...

  6. 第一章 初识EmguCV

    第一章 初识EmguCV 1.1 EmguCV的基本介绍 1.1.1 计算机视觉.OpenCV和EmguCV 计算机视觉是一门研究如何使机器"看"的科学,更进一步的说,就是是指用摄 ...

  7. 第一章 初识HTML

    第一章 初识HTML 学习HTML: 开发网页.微信小程序.跨端界面开发.web游戏 hyper text markup language 超文本标记语言 网页的源码,解释和执行 w3c:万维网联盟/ ...

  8. 第一章 初识OpenHarmony

    序言 本书以3W1H教学法对每个知识点进行多维度介绍,笔者认为这样写更符合人类对新知识的学习.本书以教学场景续写,一章为半天知识点. 本书读者对象 阅读本书您需要具备html.css.js基础知识,所 ...

  9. 第1章 初识计算机病毒 1.1 计算机病毒基础知识

    第1章   初识计算机病毒 这一章将从概念上简要介绍计算机病毒的基本知识以及计算机病毒的命名,通过对这些概念的了解,从而使我们能更方便的阅读有关计算机病毒信息的文档和书籍. 1.1 计算机病毒基础知识 ...

最新文章

  1. Android C组件的经济意义
  2. 技术解析系列 | PouchContainer 富容器技术
  3. jsp可以使用iframe_使用 JavaScript object URLs,可以处理图像、音频和视频
  4. mysql数据库blob换行_mysql Blob存取的一个简单例子
  5. How does SAP OData framework interpret $expand=Notes
  6. ffmpeg 命令添加文字水印
  7. GridView调用setAdapter()函数时发生错误
  8. CSS——基础选择器
  9. c# 中崎_C# 打开钱箱支持北洋、佳博、爱普生
  10. 网易云音乐API 分析
  11. 上海启用大数据捉拿套牌车 被套牌应立即报案
  12. C#爬取数据_详细篇
  13. Autodesk 3ds Max 2014选择集闪退问题
  14. 达芬奇密码 第三十章
  15. 悉尼mit it硕士选课 INFO5990
  16. 03-CGB-DB-INIT-V1.01
  17. 图片转成base64格式上传至数据库
  18. linux 计算内存使用率
  19. 分享一个MySQL数据库表结构导出word文档最方便的方法
  20. 4和2大于号小于号箭头那边_认识﹥﹤=(大于号、小于号和等号), 会用符号表示两个数的大小 导学案(青岛版一年级上册)...

热门文章

  1. 2022 年最值得学习的 10 种编程语言 [更新]
  2. 华东师大计算机专业非全日制,华东师范大学非全日制研究生遇冷?
  3. Mybatis的学习
  4. SRS 代码分析【HLS切片】
  5. 微信端H5的相关问题总结
  6. java 设置图片像素_java设置图片像素
  7. word2vec——训练自己的word2vec模型
  8. 教你用HTML做一个超链接按钮
  9. English Learning NetSource
  10. python编程练习:10000位的圆周率飞花令