第2章 软件工程
2.1 软件工程的基本概念
1. 工程
为生产创建基础设施的过程,称为工程。
2. 生产
利用工程提供的基础设施生产产品的过程,称为生产。
3. 工程的生命周期
复杂工程需要按时间、分阶段进行,复杂工程中各个阶段按时序构成的有序序列,称为工程的生命周期。
4. 软件工程
软件的开发过程,称为软件工程。
5. 软件工程的生命周期
软件工程需要按时间分为各个阶段进行,软件工程中各个阶段按时序构成的有序序列,称为软件工程的生命周期,或称为软件工程的生命周期法。
2.2 软件工程的基本原理
1. 用分阶段的生命周期计划严格管理
强调软件开发过程严格按照生命周期的各个阶段进行,禁止在前一个阶段的工作尚未完成之前,进行下一个阶段的工作。
2. 坚持进行阶段评审
强调软件开发过程各个阶段的技术审查与管理复审,确保软件质量和开发速度。
3. 实行严格的质量控制
严禁劣质软件上市。
4. 采用现代系统开发技术
强调尽量采用最先进的系统开发工具,避免在软件上市之前就已经过时的现象出现。
5. 成果应该是可审查的
强调软件文档的完备性和可读性,两者称为文档的规范化。
6. 开发团队的人员应该是少而精
强调对软件开发队伍管理的规范化。
7. 承认不断改进的软件工程实践的必要性
软件工程学是对软件开发实践经验的总结与升华,需要不断经历时间的检验,并在实践过程中逐步完善。
2.3 生命周期法
软件生命周期由软件定义、软件开发和软件维护三个时期组成,每个时期又可以进一步划分为若干个阶段。
软件生命周期的定义不十分一致,相对准确的定义为:系统分析、系统设计、系统实现、系统实施、系统维护和系统淘汰。
图 2-1 软件生命周期
1. 问题定义
问题定义阶段必须回答的问题是“要解决的问题是什么?”。问题定义一般要求在三天之内完成,问题陈述文档长度不超过500字。
这个问题看似简单,实际并不简单,这是因为大部分用户不是对自己要解决
的问题不十分清楚,就是阐述不清楚。
2. 可行性研究
这个阶段要回答的关键问题是“对于上一个阶段所确定的问题是否有行的通的解决方法吗?”。可行性研究一般要求在10~20天内完成,阶段性成果为系统的高层逻辑框架,文档长度不超过5000字。
可行性研究包括三方面内容:
1) 技术可行性
2) 经济可行性
3) 操作可行性
有很多问题不是利用计算机解决的问题,或者,计算机不是解决问题的最有效的工具;除此之外,所谓“行的通”还包括成本/效益,如果用户不能负担软件的开发费用,或者问题的解决本身不会对用户产生重大影响,即:不会给用户带来近期或长期的经济效益,则同属不可行。
3. 需求分析
这个阶段的任务仍然不是具体地解决问题,而是准确地确定“为了解决这个问题,目标系统必须做什么”,阶段性成果为系统的逻辑框架。
需求分析的工作性质与前两个阶段的工作性质基本相同,只是比前两个阶段
的工作更细致、更具体一些,所以有时把这三个阶段都称为需求分析。
4. 总体设计
这个阶段必须回答的关键问题是“应该如何解决这个问题?”。即:确定和提出解决问题的总体方案。阶段性成果为系统的高层物理框架。
5. 详细设计
这个阶段必须回答的关键问题是“应该怎样具体地实现这个系统”。即:详细设计是上一个阶段的细化或具体化。阶段性成果为系统的物理框架。
详细设计阶段成果的表达方式为软件蓝图,即:利用伪指令编写的程序。
6. 编码与单元测试
这一个阶段的任务是根据上一个阶段的成果,编写并测试每一个程序模块。 在编写程序的过程中,正确是相对的,错误是绝对的,成功的测试是发现程
序中错误的测试。
7. 综合测试
这一个阶段的任务是对由各个模块构成的软件进行总体测试。测试的目的:一是软件的功能是否达到设计要求;二是软件是否有错误,错在那里。 综合测试中发现的错误一般为各个模块之间的调用关系方面的错误。
8. 技术培训与部署
这一个阶段的任务是安装与配置软件,并对软件的使用者进行培训。
9. 版本升级
这一个阶段的任务是跟踪用户的进一步需求,为软件添加新的功能,使得软件能够长时间的满足用户需求。
10. 软件淘汰
这一个阶段的任务是跟踪系统软、硬件的变化和用户需求的变化,定义新的软件,并确定新的软件的开始开发的时间。
软件淘汰的准则为:软件的信息结构发生变化。
2.4 瀑布模型
系统(软件)开发方法一般可分为两种,结构化系统开发方法和面向对象开发方法。结构化系统开发方法有时也称为瀑布模型,之所以称之为瀑布模型,是因为结构化系统开发方法有如下要求:
1. 结构化系统开发方法中各个阶段必须在前一个基础之上进行,不允许跨阶段
2. 结构化系统开发方法中各个阶段的阶段性成果一定大于前一个阶段的阶段性成果
3. 当系统开发速度过快时,其各个阶段的阶段性成果中可能存在很多问题和错
误,一旦发现错误,可能需要回溯的前一个阶段,这种回溯称之为湍流
2.5 技术审查与管理复审
2.5.1 进行审查和复审的必要性
1. 审查
审查及检查,不同之处在于审查是由别人来检查,而不是完成工作的人本人来检查,这是因为参加工作的人自己常常不能发现自己工作中的问题,即所谓“当局者迷、旁观者清”。
审查是保证软件质量和降低成本,提高速度的重要措施,从软件的生命周期
理论来看,软件错误具有传递、积累、派生和放大等特点,即:软件生命周期中某个阶段产生的错误,会传递到后续的各个阶段,并在后续各阶段中积累、派生和放大。
2. 复审
复审即复杂的审查。复审不是单纯的从技术的角度审查软件中可能出现的错误,而是从成本、效益、技术、进度等方面对工程进行综合评价。
一般来讲,复审工作不是技术性的,而是从工程管理的角度进行的。软件生
命周期各个阶段的复审工作实际上是对本阶段工作的总结,并提出下一个阶段工作的具体方案和措施。从管理的角度看:复审具有决策的特点。
2.5.2 技术审查的标准和方法
1. 审查内容
软件工程各个阶段的文档、程序(包括测试程序)。
2. 审查标准
文档的规范性和完备性,程序的正确性、鲁棒性。
3. 审查组织
一般由工程负责人、用户和工程参加者组成审查委员会或技术审查小组。
第2章 软件工程
2.1 软件工程的基本概念
1. 工程
为生产创建基础设施的过程,称为工程。
2. 生产
利用工程提供的基础设施生产产品的过程,称为生产。
3. 工程的生命周期
复杂工程需要按时间、分阶段进行,复杂工程中各个阶段按时序构成的有序序列,称为工程的生命周期。
4. 软件工程
软件的开发过程,称为软件工程。
5. 软件工程的生命周期
软件工程需要按时间分为各个阶段进行,软件工程中各个阶段按时序构成的有序序列,称为软件工程的生命周期,或称为软件工程的生命周期法。
2.2 软件工程的基本原理
1. 用分阶段的生命周期计划严格管理
强调软件开发过程严格按照生命周期的各个阶段进行,禁止在前一个阶段的工作尚未完成之前,进行下一个阶段的工作。
2. 坚持进行阶段评审
强调软件开发过程各个阶段的技术审查与管理复审,确保软件质量和开发速度。
3. 实行严格的质量控制
严禁劣质软件上市。
4. 采用现代系统开发技术
强调尽量采用最先进的系统开发工具,避免在软件上市之前就已经过时的现象出现。
5. 成果应该是可审查的
强调软件文档的完备性和可读性,两者称为文档的规范化。
6. 开发团队的人员应该是少而精
强调对软件开发队伍管理的规范化。
7. 承认不断改进的软件工程实践的必要性
软件工程学是对软件开发实践经验的总结与升华,需要不断经历时间的检验,并在实践过程中逐步完善。
2.3 生命周期法
软件生命周期由软件定义、软件开发和软件维护三个时期组成,每个时期又可以进一步划分为若干个阶段。
软件生命周期的定义不十分一致,相对准确的定义为:系统分析、系统设计、系统实现、系统实施、系统维护和系统淘汰。
图 2-1 软件生命周期
1. 问题定义
问题定义阶段必须回答的问题是“要解决的问题是什么?”。问题定义一般要求在三天之内完成,问题陈述文档长度不超过500字。
这个问题看似简单,实际并不简单,这是因为大部分用户不是对自己要解决
的问题不十分清楚,就是阐述不清楚。
2. 可行性研究
这个阶段要回答的关键问题是“对于上一个阶段所确定的问题是否有行的通的解决方法吗?”。可行性研究一般要求在10~20天内完成,阶段性成果为系统的高层逻辑框架,文档长度不超过5000字。
可行性研究包括三方面内容:
1) 技术可行性
2) 经济可行性
3) 操作可行性
有很多问题不是利用计算机解决的问题,或者,计算机不是解决问题的最有效的工具;除此之外,所谓“行的通”还包括成本/效益,如果用户不能负担软件的开发费用,或者问题的解决本身不会对用户产生重大影响,即:不会给用户带来近期或长期的经济效益,则同属不可行。
3. 需求分析
这个阶段的任务仍然不是具体地解决问题,而是准确地确定“为了解决这个问题,目标系统必须做什么”,阶段性成果为系统的逻辑框架。
需求分析的工作性质与前两个阶段的工作性质基本相同,只是比前两个阶段
的工作更细致、更具体一些,所以有时把这三个阶段都称为需求分析。
4. 总体设计
这个阶段必须回答的关键问题是“应该如何解决这个问题?”。即:确定和提出解决问题的总体方案。阶段性成果为系统的高层物理框架。
5. 详细设计
这个阶段必须回答的关键问题是“应该怎样具体地实现这个系统”。即:详细设计是上一个阶段的细化或具体化。阶段性成果为系统的物理框架。
详细设计阶段成果的表达方式为软件蓝图,即:利用伪指令编写的程序。
6. 编码与单元测试
这一个阶段的任务是根据上一个阶段的成果,编写并测试每一个程序模块。 在编写程序的过程中,正确是相对的,错误是绝对的,成功的测试是发现程
序中错误的测试。
7. 综合测试
这一个阶段的任务是对由各个模块构成的软件进行总体测试。测试的目的:一是软件的功能是否达到设计要求;二是软件是否有错误,错在那里。 综合测试中发现的错误一般为各个模块之间的调用关系方面的错误。
8. 技术培训与部署
这一个阶段的任务是安装与配置软件,并对软件的使用者进行培训。
9. 版本升级
这一个阶段的任务是跟踪用户的进一步需求,为软件添加新的功能,使得软件能够长时间的满足用户需求。
10. 软件淘汰
这一个阶段的任务是跟踪系统软、硬件的变化和用户需求的变化,定义新的软件,并确定新的软件的开始开发的时间。
软件淘汰的准则为:软件的信息结构发生变化。
2.4 瀑布模型
系统(软件)开发方法一般可分为两种,结构化系统开发方法和面向对象开发方法。结构化系统开发方法有时也称为瀑布模型,之所以称之为瀑布模型,是因为结构化系统开发方法有如下要求:
1. 结构化系统开发方法中各个阶段必须在前一个基础之上进行,不允许跨阶段
2. 结构化系统开发方法中各个阶段的阶段性成果一定大于前一个阶段的阶段性成果
3. 当系统开发速度过快时,其各个阶段的阶段性成果中可能存在很多问题和错
误,一旦发现错误,可能需要回溯的前一个阶段,这种回溯称之为湍流
2.5 技术审查与管理复审
2.5.1 进行审查和复审的必要性
1. 审查
审查及检查,不同之处在于审查是由别人来检查,而不是完成工作的人本人来检查,这是因为参加工作的人自己常常不能发现自己工作中的问题,即所谓“当局者迷、旁观者清”。
审查是保证软件质量和降低成本,提高速度的重要措施,从软件的生命周期
理论来看,软件错误具有传递、积累、派生和放大等特点,即:软件生命周期中某个阶段产生的错误,会传递到后续的各个阶段,并在后续各阶段中积累、派生和放大。
2. 复审
复审即复杂的审查。复审不是单纯的从技术的角度审查软件中可能出现的错误,而是从成本、效益、技术、进度等方面对工程进行综合评价。
一般来讲,复审工作不是技术性的,而是从工程管理的角度进行的。软件生
命周期各个阶段的复审工作实际上是对本阶段工作的总结,并提出下一个阶段工作的具体方案和措施。从管理的角度看:复审具有决策的特点。
2.5.2 技术审查的标准和方法
1. 审查内容
软件工程各个阶段的文档、程序(包括测试程序)。
2. 审查标准
文档的规范性和完备性,程序的正确性、鲁棒性。
3. 审查组织
一般由工程负责人、用户和工程参加者组成审查委员会或技术审查小组。