《软件工程及应用》习题答案
第1章 软件工程概述
1.1 软件危机
1.1 软件开发有哪些特点?
特点:
1. 难以描述性
2. 缺乏可见性
3. 复杂性
4. 变化性
5. 风险性
6. 强合作性
1.2 什么是软件危机?软件危机有哪些表现?怎么解决软件危机?
软件危机:
软件危机是指在软件开发和维护过程中存在的周期长、成本高、质量低等问题。
表现在:
1. 缺乏计划性
2. 软件需求获取不充分、不准确
3. 缺乏团队开发的合作、协调能力
4. 缺乏良好的软件质量评测手段
5. 软件的可维护性差
6. 软件的可复用性差
7. 软件开发过程不规范
8. 缺乏自动化的工具来协助开发
9. 缺乏变更管理措施
10. 缺乏风险管理手段
解决方法:
采用“工程”的方法。
1.2 软件工程概念
1.3 什么是软件工程?
软件工程:
软件工程是以质量为核心,为了经济地开发满足客户需求的软件而研究、和应用的系统化的、有规则的、可度量的和可控制的工程原则、方法,涉及软件过程、项目管理、开发方法、开发工具,甚至企业文化等各个方面。
1.4 在软件工程的发展史上,有哪些重要的开发方法?
开发方法:
1. 以结构化方法为代表的传统软件工程方法
2. 以面向对象技术为核心的面向对象的软件工程方法
3. 基于组件的软件开发
4. 面向方面的软件开发
5. 基于产品线的软件开发
等。
1.5 项目管理涉及哪些方面?
涉及:
1. 人力资源管理
2. 项目计划
3. 风险管理
4. 项目跟踪
5. 质量保证
6. 配置管理
等。
1.6 软件工程工具有哪些作用?
作用:
1. 辅助进行需求分析
2. 优化软件设计手段
3. 加快代码实现速度
4. 提高软件测试水平
等。
1.3 教材涉及的案例
第2章 软件开发过程和活动
2.1 过程概念
2.1 什么是软件开发过程?在开发过程中,有哪些主要活动?哪些是基本活动,哪些是辅助性活动?
软件开发过程:
软件过程由开发和维护软件以及相关产品的一系列活动构成,这些活动从不同方面定义了软件开发过程中的步骤、交付物、涉众以及职责等流程要素。
基本活动:
1. 问题定义活动
2. 可行性研究活动
3. 需求分析活动
4. 设计活动
5. 编码活动
6. 测试活动
7. 部署活动
8. 交付活动
等。
保护性活动:
1. 风险管理活动
2. 计划活动
3. 项目跟踪活动
4. 质量保证活动
5. 软件配置管理活动
等。
2.2 问题定义活动
2.2 为什么需要一个“问题定义”的活动?什么时间开展这项活动?
原因:
这是由于在软件开发初期,客户与开发商之间需要用较少的投入,来确定项目最根本的“什么和为什么”的问题,为双方形成一个早期的判断,达成一个最初的共识,这个共识包括系统的大致范围和投资额。
时间:
“问题定义”活动处于项目日程表的最前端。
2.3 可行性研究活动
2.3 什么是可行性研究?为什么需要一个“可行性研究”的活动?什么时间开展这项活动?哪些涉众会参与这项活动?
可行性研究:
可行性研究是以相对短的时间和相对低的成本来确定给定的问题在其约束内是否有解、有几种解以及哪个是最佳解。
原因:
由于任何项目都有约束条件,必须首先确立满足约束条件的方案是否存在、可行、最优,然后在最优方案的基础上进行开发;如果“省略”这个步骤,就会在一个本质上不可能实现的项目上造成人力物力浪费,或造成项目大量返工、功能不足、性能“失真”。
时间:
可行性研究活动处于项目的早期阶段。
人员:
1. 系统分析师
2. 出资方领导
3. 出资方技术人员
4. 用户代表
5. 开发方领导
6. 项目经理
7. 系统架构师
8. 领域专家
9. 财务人员
10. 市场人员
11. 软件质量保证人员
等。
2.4 需求分析活动
2.4 什么是需求?为什么软件开发需要需求活动?
需求:
主要是在产品构建之前确定的系统必须符合的条件或者具备的功能,它们关于系统将要完成什么工作的一段描述语句,它们必须经过所有相关人员的认可,其目的是彻底地解决客户的问题。
原因:
需求活动能够为后续活动(如设计、编码和测试等)提供良好的基础。
在需求活动中,完全根除或者尽量减少需求错误的个数、完全识别或者尽量识别出系统的关键需求的内容,这对降低软件在开发后期的高昂的维护费用、提高软件开发生产率和软件质量,具有关键作用。
2.5 什么是需求文档?有哪些类型的需求文档?
需求文档:
一组需求的集合。
类型:
1. 用户需求文档
2. 系统需求文档
3. 软件规约文档。
2.6 描述需求的标准是什么?
标准:
一个优秀的需求描述应该是完整的、正确的、必要的、无歧义的、可行的、可验证的以及被设置了优先级别的。
2.7 怎样理解“贯穿于整个软件开发过程的需求活动”这句话?
答:
在项目的设计、编码、测试和使用中,新的需求可能会“浮现”,旧的需求可能被变更。
2.5 设计活动
2.8 什么是设计?为什么设计活动非常重要?
设计:
设计是在系统的约束条件(如预算,时间,人力资源,用户软、硬件环境和用户对系统的操作能力等)下,为了实现系统的功能性需求和非功能性需求,而找到并描述的一种遵循高质量的通用原则的方法,其交付文档能够指导开发人员实现系统。
原因:
1. 软件架构师软件系统的核心,软件开发过程是以架构为中心的。
2. 通过设计,可以使开发者应付项目中复杂多变的情况,同时保持系统的完整性。
3. 设计活动可以应对系统在扩展功能中出现的问题。
4. 设计活动是大规模复用的有效基础。
5. 设计活动还可以作为项目管理的基础。
2.9 请解释设计中的各个粒度的部件,如系统、子系统、框架、构件、组件、模块、类和方法等。
系统:
是一个抽象的概念,它是由软件、硬件或者两者共同构成的一个逻辑实体,它可以被许多构件共同实现。
子系统:
也是一个抽象的概念,它是大型系统的一部分,有着明确的接口。
框架:
是一种特殊的子系统,即它是可以被复用的子系统,实现了一般问题的通用解决方案,通过“服务”向外部提供可应用于不同应用程序的公共功能。
构件:
是开发流程的物理资产,包括源文件、配置文件、可执行文件、动态链接库和数据库等多种类型文件,以及其他开发出来的实际产品。
组件:
是一种特殊的构件,是指有定义完备接口的、明确规定了上下文依赖关系的合成单元,它可以被第三方开发,并且能够被独立地部署,它具有自包含的属性,其内部构造和特征不可见。
模块:
是具体的部件,是定义在程序设计语言级别上的构件,例如,Java语言中的包、类和方法,C语言中的文件和函数,都是模块,只是粒度不同而已。
类:
面向对象程序中数据抽象的单元,一个软件模块,描述并定义了一组相似的对象。
方法:
一个更小粒度的软件模块,是实现类的行为和过程抽象。
2.10 什么是总体设计?什么是详细设计?
总体设计:
其任务是根据软件需求规约文档,确定一个合理的软件体系结构。
详细设计:
其任务是在总体设计的基础上,进一步确定如何实现目标系统,包括系统的数据对象的设计、人机接口的设计以及模块逻辑的详细设计。
2.11 怎样理解“贯穿于整个软件开发过程的设计活动”这句话?
答:
由于需求很难在项目的早期阶段就完全被掌握,因此,实际上,设计活动也贯穿于整个软件开发过程中。
2.6 实施活动
2.12 请解释实施活动中的编码、单元测试和集成。
编码:
编码是将软件设计结果转成用某种程序设计语言书写的程序。
单元测试:
单元测试是把一个模块作为独立的程序单元进行测试,以保证它能够正确执行规定的功能。
集成:
集成是指将单独的软件构件合并成一个整体的软件系统。
2.13 什么是工作版本?
工作版本:
它们代表正在进行的尝试活动,目的是展示最新开发新功能。
2.14 以实施为中心的软件开发会导致什么问题?而轻视实施活动又会存在哪些问题?
以实施为中心的软件开发会导致:
1. 弱化的需求
2. 弱化的设计
3. 对实施人员的过度依赖。
对实施活动的轻视:
1. 为了增加或者替换人手时,实施人员被插入到一个项目里,一般需要一定的时间来熟悉系统,弄清自己所承担的任务喝已有的工作。
2. 实施人员所从事的是脑力工作,具有一定的技术含量,需要通过长期的培训来掌握技能,需要通过不断的自学来完善自我,需要通过大量地参与项目实施来积累工作经验。
3. 实施人员的施工水平存在差异。
4. 不易度量实施人员的实施质量。
2.15 为什么在展开实施活动时,建议实施地点选择在软件企业内部进行?如果在企业内部,那么应该注意哪些问题?
优点:
1. 节省成本
2. 便于资源调配
3. 便于交流
4. 便于并行开发。
注意:
在企业内部开发时,要注意和用户保持足够的接触。每个迭代的工作版本都应该和用户交流,以便在下一轮迭代中,对错误或者不足之处作出改进。
2.7 测试活动
2.16 什么是测试?请分别解释缺陷、错误和失败的概念。
测试:
测试是选择适当的测试用例执行被测程序的过程,目的在于发现程序错误。
缺陷:
是系统任一方面(包括需求、设计或者代码)的缺点。