第一章 软件的本质
1.1 软件的本质
文档是开发、使用和维护程序所需要的图文资料
数据是使程序能够适当地处理信息的数据结构(包括数据库、一些配置文件等)
软件和硬件具有完全不同的特性
- 软件是设计开发的,而不是传统意义上生产制造的
硬件失效曲线 | 软件失效曲线 |
---|---|
![]() | ![]() |
软件工程方法的目的即在于使实际曲线能与理想曲线接近
- 软件不会“磨损”
不断的变更是软件退化的根本原因 - 基于构件的构造模式
软件应用
系统软件
应用软件
嵌入式软件
产品线软件
Web应用软件
人工智能软件
1.2 软件的变更本质
四类新的软件
-
WebApp
WebApp 这个术语包含了很多事物,从一个简单的帮助消费者计算汽车租借费用的网页,到为商务旅行和度假提供全套旅游服务的大型复杂的Web站点。其中包括完整的Web站点、Web站点的专门功能以及在Internet、Intranet或Extranet上的信息处理应用软件。 -
移动App
-
云计算
最简单的形式是,外部计算设备通过Web浏览器或类似的软件访问云。云提供对存储在数据库或其他数据结构中的数据的访问。
- 产品线软件
第二章 软件工程
2.1 定义软件工程学科
IEEE定义
软件工程是:
(1)将系统化的、规范的、可量化的方法应用于软件的开发、运行和维护,即将工程化方法应用于软件;
(2)对(1)中所述方法的研究
- 质量关注点
任何工程方法(包括软件工程)必须构建在质量承诺的基础之上
支持软件工程的根基在于质量关注点 - 过程层
软件工程的基础是过程层。
软件工程将各个技术层次结合在一起,使得合理、及时地开发计算机软件成为可能。 - 方法层
软件工程方法为构建软件提供技术上的解决方法(如何做)
方法覆盖面很广,包括沟通、需求分析、设计建模、程序构造、测试和技术支持。 - 工具层
软件工程工具为过程和方法提供自动化或半自动化的支持这些工具可以集成起来,使得一个工具产生的信息可被另一个工具使用,这样就建立了软件开发的支撑系统,称为计算机辅助软件工程
2.2 软件过程
软件过程是工作产品构建时所执行的一系列活动、动作和任务的集合。
- 活动:主要实现宽泛的目标(如与利益相关者进行沟通),与应用领域、项目大小、结果复杂性或者实施软件工程的重要程度没有直接关系
- 动作:包含了主要工作产品(如体系结构设计模型)生产过程中的一系列任务
- 任务:关注小而明确的目标,能够产生实际产品(如构建一个单元测试)
过程框架通常包括5个活动
普适性活动(补充过程框架)
- 软件项目跟踪和控制 —— 项目组根据计划来评估项目进度,并且采取必要的措施保证项目按进度计划进行
- 风险管理 —— 对可能影响项目成果或者产品质量的风险进行评估
- 技术质量保证 —— 确定和执行保证软件质量的活动
- 技术评审 —— 评估软件工程产品,尽量在错误传播到下一个活动之前发现并清除错误
- 测量 —— 定义和收集过程、项目以及产品的度量,以帮助团队在发布软件时满足利益相关者的要求。同时,测量还可与其他框架活动和普适性活动配合使用
- 软件配置管理 —— 在整个软件过程中管理变更所带来的影响
- 可复用管理 —— 定义工作产品复用的标准(包括软件构件),并且建立构件复用机制
- 工作产品的准备和生产 —— 包括生成产品(如建模、文档、日志、表格和列表等)所必需的活动
2.3 软件工程实践
软件工程实践的精髓
- 理解问题(沟通和分析)
- 策划解决方案(建模和软件设计)
- 实施计划(代码生成)
- 检查结果的正确性(测试和质量保证)
通用原则
- 第1原则:存在价值
- 第2原则:保持简洁
- 第3原则:保持愿景
- 第4原则:关注使用者
- 第5原则:面向未来
- 第6原则:提前计划复用
- 第7原则:认真思考
2.4 软件开发神话
软件开发神话,即关于软件及其开发过程的一些被人盲目相信的说法,这可以追溯到计算技术发展的初期。
2.5 这一切是如何开始的
每个软件工程项目都来自业务需求——对现有应用程序缺陷的纠正,改变遗留系统以适应新的业务环境,扩展现有应用程序功能和特性,或者开发某种新的产品、服务或系统。