软件工程是高等院校计算机相关学科各专业的专业基础课,其研究范围非常广泛。《软件工程理论及应用/普通高等教育“十二五”规划教材》从实用的角度出发,在系统讲解软件工程理论和方法的同时,注重结合实例,分析软件工程技术与工具的综合应用;在强调传统的结构化方法的同时,着重介绍面向对象方法。
《软件工程理论及应用/普通高等教育“十二五”规划教材》共分10章,包括软件产品、软件过程、项目管理和软件项目计划、项目进度安排及跟踪、软件工程的需求工程、软件设计、面向对象的分析方法、面向对象设计、面向对象测试和软件维护工程。
《软件工程理论及应用/普通高等教育“十二五”规划教材》将理论知识与实践案例相结合,便于教学与应用,文字通俗易懂,概念清晰,实例丰富,实用性强,并配有习题。《软件工程理论及应用/普通高等教育“十二五”规划教材》可作为高等院校计算机类专业软件工程相关课程的教材,也可作为软件开发人员的参考书。
前言
第1章 软件产品
1.1 软件的发展
1.1.1 软件产业
1.1.2 软件的竞争
1.2 软件危机与软件工程
1.2.1 软件特征
1.2.2 软件工程
1.2 -3软件应用
1.2.4 软件语言
1.2.5 软件文档
1.3 软件生存周期模型
1.3.1 瀑布模型
1.3.2 快速原型模型
1.3.3 螺旋模型
1.3.4 喷泉模型和其他模型
1.4 软件工程工具及环境
本章小结
习题
第2章 软件过程
2.1 软件过程规范
2.2 软件过程成熟度模型
2.2.1 初始级
2.2.2 可重复级
2.2.3 已定义级
2.2.4 已管理级
2.2.5 优化级
2.3 软件过程管理案例
本章小结
习题
第3章 项目管理和软件项目计划
3.1 对估算的观察
3.2 项目计划目标
3.3 软件范围
3.4 软件项目估算
3.5 项目管理实验
本章小结
习题
第4章 项目进度安排及跟踪
4.1 人员与工作量之间的关系
4.2 为软件项目定义任务集合
4.2.1 严格度
4.2.2 定义适应准则
4.2.3 计算任务集合选择因子的值
4.3 主要任务的求精
4.4 进度安排
4.5 软件项目计划案例
本章小结
习题
第5章 软件工程的需求工程
5.1 软件工程需求分析案例
5.2 需求分析的基本内容
5.2.1 需求分析的必要性
5.2.2 需求分析的原则
5.2.3 需求的类型
5.2.4 需求分析的方法
5.3 结构化分析的技巧
5.3.1 创建实体一关系图
5.3.2 创建数据流模型
5.3.3 加工规范化
5.3.4 数据字典
5.3.5 其他分析方法概述
本章小结
习题
第6章 软件设计
6.1 设计和软件质量
6.2 软件设计的演化
6.3 设计目标与任务
6.4 设计概念
6.4.1 抽象
6.4.2 求精
6.4.3 模块化
6.4.4 软件体系结构
6.4.5 控制层次
6.4.6 结构划分
6.4.7 数据结构
6.4.8 信息隐藏与局部化
6.5 有效的模块设计案例
6.5.1 模块独立性
6.5.2 内聚
6.5.3 耦合
本章小结
习题
第7章 面向对象的分析方法
7.1 面向对象分析概述
7.1.1 常用的00A方法
7.1.2 OOA模型
7.2 领域分析
7.2.1 复用和领域分析
7.2.2 领域分析过程
7.2.3 面向对象分析模型的类属成分
7.3 OOA过程
7.3.1 用例
7.3.2 类一责任一协作者建模
7.3.3 定义结构和层次
7.3.4 定义主题和子系统
7.4 对象一关系模型
7.5 对象一行为模型
本章小结
习题
第8章 面向对象设计
8.1 面向对象系统的设计
8.1.1 OOD概述
8.1.2 统一的OOD方法
8.2 系统设计过程
8.2.1 划分分析模型
8.2.2 并发性和子系统分配
8.2.3 任务管理构件
8.2.4 人机界面构件
8.2.5 数据管理构件
8.2.6 资源管理构件
8.2.7 子系统间通信
8.3 对象设计过程
8.3.1 对象描述
8.3.2 设计算法和数据结构
8.3.3 程序构件与接口
8.4 设计模式
8.4.1 描述设计模式
8.4.2 在设计中使用设计模式
本章小结
习题
第9章 面向对象测试
9.1 OOA和OOD模型的正确性
9.2 OOA和OOD的测试
9.3 OO软件的测试案例设计的影响
9.3.1 OO概念的测试用例设计的含义
9.3.2 传统测试案例设计方法的可用性
9.3.3 基于故障的测试
9.4 在类级别可用的测试方法
9.4.1 对OO类的测试
9.4.2 系统测试
本章小结
习题
第10章 软件维护工程
10.1 软件维护案例介绍
10.2 软件维护概述
10.2.1 软件维护的类型
10.2.2 软件维护的困难
10.2.3 软件维护的费用
10.2.4 软件维护的方式
10.3 软件系统的维护
10.3.1 概述
10.3.2 软件维护的过程
10.3.3 软件维护技术
10.3.4 影响维护工作量的因素
10.3.5 软件维护的策略
10.3.6 维护成本
本章小结
习题
参考文献
这个阶段要回答的关键问题是:“对于上一个阶段所确定的问题有可行的解决办法吗?”为了回答这个问题,系统分析员需要进行一次大大压缩和简化了的系统分析和设计过程,也就是在较抽象的高层次上进行的分析和设计过程。可行性研究应该比较简短,这个阶段的任务不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。可行性研究的结果是使部门负责人做出是否继续进行这项工程的决定的重要依据,一般来说,只有投资可能取得较大经济效益的那些工程项目才值得继续进行下去。可行性研究以后的那些阶段将需要投入更多的人力物力。及时终止不值得投资的工程项目可以避免更大的浪费。
可行性研究的目的不是解决问题,而是确定问题“是否值得去解决”。怎样达到这个目的?当然不能靠主观猜想,而是要靠客观分析。系统分析员必须分析几种主要的可能解法的利弊,从而判断原定的系统规模和目标是否现实,以及系统完成后所能带来的效益是否大到值得投资开发这个系统的程度。
首先需要进一步分析和澄清问题定义。在问题定义阶段初步确定的规模和目标,如果是正确的就进一步加以肯定;如果有错误就应该及时改正;如果对目标系统有任何约束和限制,也必须把它们清楚地列举出来。在澄清了问题定义之后,系统分析员应该导出系统的逻辑模型。然后从系统逻辑模型出发,探索若干种可供选择的主要解法(即系统实现方案)。对每种解法,系统分析员都应该仔细研究它的可行性,一般说来,至少应该从3个方面研究每种解法的可行性;①技术可行性,即使用现有的技术能实现这个系统吗?②经济可行性,即这个系统的经济效益能超过它的开发成本吗?③操作可行性,即系统的操作方式在这个用户组织内行得通吗?
必要时还应该从法律、社会效益等更广泛的方面研究每种解法的可行性。系统分析员应该为每个可行的解法制订一个粗略的实现进度。
可行性研究最根本的任务是对以后的行动方针提出建议。如果问题没有可行的解,系统分析员应该建议停止这项开发工程,以避免时间、资源、人力和金钱的浪费;如果问题有可行的解,分析员应该推荐一个较好的解决方案,并且为工程制定一个初步的计划。可行性研究需要的时间长短取决于工程的规模。一般说来,可行性研究的成本只是预期工程总成本的5%~10%。
需求分析阶段的任务仍然不是具体地解决问题,而是准确地确定“为了解决这个问题,目标系统必须做什么”,主要是确定目标系统必须具备哪些功能。用户了解他们所面对的问题,知道必须做什么,但通常不能完整准确地表达出他们的要求,更不知道怎样利用计算机解决他们的问题;软件开发人员知道怎样用软件实现人们的要求,但是对特定用户的具体要求并不完全清楚。因此,系统分析员在需求分析阶段必须和用户密切配合,充分交流信息,以得出经过用户确认的系统逻辑模型。通常用数据流图、数据字典和简要的算法表示系统的逻辑模型。在需求分析阶段确定的系统逻辑模型是以后设计和实现目标系统的基础,因此必须准确完整地体现用户的要求。这个阶段的一项重要任务,是用正式文档准确地记录对目标系统的需求,即《需求分析规格说明书》。
3.系统设计
系统设计阶段必须回答的关键问题是:“概括地说,应该怎样实现目标系统?”系统设计的主要任务是进行总体设计和详细设计。总体设计又称为概要设计。首先,应该设计出实现目标系统的几种可能的方案。通常至少应该设计出低成本、中等成本和高成本3种方案。软件工程师应该用适当的表达工具描述每种方案,分析每种方案的优缺点,并在充分权衡每种方案利弊的基础上推荐一个最佳方案。此外,还应该制订出实现最佳方案的详细计划。如果客户接受所推荐的方案,则应进一步完成下一项主要任务。总体设计工作确定了解决问题的策略及目标系统中应包含的程序,但是,怎样设计这些程序呢?软件设计的_条基本原理就是,程序应该模块化,也就是说,一个程序应该由若干个规模适中的模块按合理的层次结构组织而成。因此,总体设计的另一项主要任务就是设计程序的体系结构,也就是确定程序由哪些模块组成以及模块问的关系。
总体设计阶段以比较抽象概括的方式提出了解决问题的办法。详细设计阶段即程序实现的任务就是把解法具体化,也就是回答“应该怎样具体地实现这个系统呢?”这个关键问题。这个阶段的任务还不是编写程序,而是设计出程序的详细规格说明。详细规格说明的作用类似于其他工程领域中工程师经常使用的工程蓝图,应该包含必要的细节。程序员可以根据详细规格说明写出实际的程序代码。
4.程序实现
程序实现也被称为模块设计,开发人员在这个阶段将详细地设计每个模块,并确定实现模块功能所需要的算法和数据结构。
这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块,具体包括编码和单元测试。程序员应该根据目标系统的性质和实际环境,选取一种适当的高级程序设计语言(必要时用汇编语言),把详细设计的结果翻译成使用选定的语言书写的程序,并应仔细测试编写的每一个模块。
5.测试确认
这个阶段的关键任务是通过各种类型的测试及调试,使软件达到预定的要求。最基本的测试是集成测试和验收测试。所谓集成测试是根据设计的软件结构,把经过单元测试检验的模块按某种选定的策略装配起来,在装配过程中对程序进行必要的测试。所谓验收测试则是按照需求规格说明书的规定,由用户对目标系统进行验收,必要时还可以再通过现场测试或平行运行等方法对目标系统进一步测试检验。为了使用户能够积极参加验收测试,并且在系统投入生产性运行以后能够正确有效地使用这个系统,通常需要以正式的或非正式的方式对用户进行培训。通过对软件测试结果进行分析,可以预测软件的可靠性;反之,根据对软件可靠性的要求,用户也可以决定测试和调试过程什么时候结束。软件测试人员应该用正式的文档资料把测试计划、详细测试方案以及实际测试结果保存下来,作为软件配置的一个组成部分。
……