第一章 软件工程概述
1.1 软件开发有哪些特点?
难以描述性、缺乏可见性、复杂性、变化性、风险性、强合作性。
1.2 什么是软件危机?有哪些表现?怎么解决?
软件危机是指在计算机软件开发和维护的过程中所遇到的一系列严重问题。包括两点:
- 如何开发软件,以满足对软件日益增长的需求;
- 如何维护数量不断膨胀的已有软件。
- 软件是逻辑部件而不是物理部件;
- 软件的规模越来越大,复杂性越来越大;
- 轻视需求分析的重要性,轻视软件维护的错误观点和方法。
解决手段:采用工程的方法。软件开发人员必须运用科学、系统、有组织的工程方法,才能制作出高质量、低成本的软件产品。
1.3 什么是软件工程?
软件工程是以质量为核心,为了经济地开发满足客户需求的软件而研究、建立和应用的系统化的有规则的、可度量的和可控制的工程原则、方法,涉及软件过程、项目管理、开发方法、开发工具,甚至企业文化等各个方面。
1.4 在软件工程的发展史上,有哪些重要的开发方法?
以结构化方法为代表的传统软件工程方法和以面向对象技术为核心的面向对象的软件工程方法。
1.5 项目管理涉及哪些方面?
涉及人力资源管理、项目计划、风险管理、项目跟踪、质量保证、配置管理等等方面。
1.6 软件工程工具有哪些作用?
需求分析、优化软件设计手段、加快代码实现速度、提高软件测试水平等等
第二章 软件开发过程和活动
问题定义—可行性研究—需求分析—设计活动(总体设计)—实施活动(详细设计)—测试活动—部署活动
2.1 什么是软件开发过程?在开发过程中,有哪些主要活动?哪些是基本活动,哪些是辅助性活动?
软件开发过程由开发和维护软件以及相关产品的一系列活动构成,这些活动从不同方面定义了软件开发过程中的步骤、交付物、涉众以及职责等流程要素。
在开发过程中,存在一系列活动,可分为Basic Activities(基本活动,如问题定义活动、可行性研究活动、需求分析活动、设计活动、编码活动、测试活动、部署活动和交付活动等)和Umbrella Activities(保护性活动,如风险管理活动、计划活动、项目跟踪活动、质量保证活动和软件配置管理活动等)
2.2为什么需要一个“问题定义”的活动?什么时间开展这项活动?
问题定义是软件开发过程中一个对所有要解决的问题进行定义并确定系统范围的活动。
客户与开发商达成共识,确定系统的大致范围和投资额等等,避免损失。“问题定义”像一个项目的“探路者”。
问题定义活动处于项目日程表的最前端。
2.3什么是可行性研究?为什么需要一个“可行性研究”的活动?什么时间开展这项活动?哪些涉众会参与这项活动?
可行性研究是以相对短的时间和相对低的成本来确定给定的问题在其约束内是否有解、有几种解以及哪个是最佳解。
由于任何项目都有约束条件,必须首先确立满足约束条件的方案是否存在、可行、最优,然后在最优方案的基础上进行开发;如果省略这个步骤,就会在一个本质上不可能实现的项目上造成人力物力浪费,或造成项目大量返工、功能不足、性能失真。
可行性研究活动处于项目的早期阶段。
系统分析师、出资方领导、出资方技术人员、用户代表、开发方领导、项目经理、系统架构师、领域专家等等。
2.4 什么是需求?
需求:主要是在产品构建之前确定的系统必须符合的条件或者具备的功能,它们关于系统将要完成什么工作的一段描述语句,它们必须经过所有相关人员的认可,其目的是彻底地解决客户的问题。
2.5 什么是需求文档?有哪些类型的需求文档?
一组需求的集合被称为需求文档。可分为用户需求文档、系统需求文档和软件规约文档。
2.6 描述需求的标准是什么?
一个优秀的需求描述应该是完整的、正确的、必要的、无歧义的、可行的、可验证的以及被设置了优先级别的。
2.7 怎样理解“贯穿于整个软件开发过程的需求活动”这句话?
在项目的设计、编码、测试和使用中,新的需求可能会浮现,旧的需求可能被变更。因此,实际上,需求活动贯穿于整个软件开发过程中,但大部分需求应在早期被确认。
2.8 什么是设计?为什么设计活动非常重要?
设计是在系统的约束条件下,为了实现系统的功能性需求与非功能性需求,而找到并描述的一种遵循高质量的通用原则的方法,其交付文档能够指导开发人员实现系统。
软件设计活动主要任务是解决“如何做”的问题,是软件开发过程的关键活动之一。
2.9 请解释设计中的各个粒度的部件,如系统、子系统、框架、构件、组件、模块、类和方法等。
系统:由软件、硬件或者两者共同构成的一个逻辑实体,它可以被许多构件共同实现。
子系统:是大型系统的一部分,有着明确的借口。
框架:可以被复用的子系统,实现了一般问题的通用解决方案,通过“服务”向外部提供可应用于不同应用程序的公共功能。
构件:开发流程的物理资产。包括各种类型文件。
组件:一种特殊的构件,是指有定义完备接口的、明确规定了上下文依赖关系的合成单元。
模块:具体的部件,定义在程序设计语言级别上的构件。
类:面向对象程序中数据抽象的单元,一个软件模块,描述并定义了一组相似的对象。
方法:一个更小粒度的软件模块,是实现类的行为和过程抽象。
2.10 什么是总体设计?什么是详细设计?
总体设计:任务是根据软件需求规约文档,确定一个合理的软件体系结构,包括合理地划分组成系统的模块、模块间的调用关系以及模块间的接口关系。
详细设计:任务是在总体设计的基础上,进一步确定如何实现目标系统,包括系统的数据对象的设计、人机接口的设计以及模块逻辑的详细设计。
2.11 怎样理解“贯穿于整个软件开发过程的设计活动”这句话?
在开发迭代中,随着需求描述趋于完善,软件构架从一个粗略的轮廓开始,逐步完善构架,先处理高优先级的、已经被确定的重要需求,在解决次要的、趋于完善的其他需求——直到得到一个稳定的框架为止。代码工人在开发迭代中,根据设计的已有成果,逐步实现系统。
2.12 请解释实施活动中的编码、单元测试和集成。
编码:将软件设计结果转成用某种程序设计语言书写的程序。
单元测试:一个模块作为独立的程序单元进行测试,以保证它能够正确执行规定的功能。
集成:将单独的软件构件合并成一个整体的软件系统。
2.13 什么是工作版本?
工作版本是迭代生命周期不可缺少的组成部分。代表正在进行的尝试活动,目的是展示最新开发的功能。
2.14 以实施为中心的软件开发会导致什么问题?而轻视实施活动又会存在哪些问题?
以实施为中心的软件开发会导致:弱化的需求与设计、对实施人员的过度依赖。
轻视的问题:①增加和替换人手时,实施人员接受需要熟悉一段时间。②所需的实施人员需要具有一定的技术含量,需要长期的培训来掌握技能。③实施人员的施工水平存在差异。④不易度量实施人员的实施质量。
2.15 为什么在展开实施活动时,建议实施地点选择在软件企业内部进行?如果在企业内部,那么应该注意哪些问题?
优点:节省成本,便于资源调配,便于交流,便于并行开发。
要注意和用户保持足够的接触。每个迭代的工作版本都应该和用户交流,以便在下一轮迭代中,对错误或者不足之处作出改进。
2.16 什么是测试?请分别解释缺陷、错误和失败的概念。
测试是选择适当的测试用例执行被测程序的过程,目的在于发现程序错误。
缺陷:是系统任一方面(包括需求、设计或者代码)的缺点。
错误:指程序中的缺陷所产生的不正确结果。
失败:当一个程序不能运行或者其表现不可以被接受时,称为失败。失败源于代码缺陷。
2.17 请分别解释单元测试、集成测试、系统测试、α测试、β测试和验收测试。
单元测试:当且仅当被测试的是一个程序单位,称为单元测试。
集成测试:是为了测试和验证几个构件集成在一起时,是否能按照预期目标正常工作。
系统测试:关注于系统作为整体运行时的实际效果。
α测试:由客户和用户在软件开发团队的管理下执行的测试。
β测试:由客户和用户在他们的工作现场进行的测试。
验收测试:部署软件之前的最后一个测试操作。
2.18 什么是测试用例?它包括哪些内容?
测试用例:为特定目标开发的测试输入、执行条件和预期结果的集合。
包括标识、目标、相关文档、重要级别、优先级别、指令、期望结果、清理。
2.19 测试活动贯穿于整个软件开发过程,这会有什么益处?
缩短测试时间、易于定位缺陷、避免错上加错。
2.20 怎样在测试活动中选择合适的执行地点?
建议单元测试、集成测试和系统测试在程序员所在的开发现场以其附近进行,便于实施人员与测试人员交流,对系统缺陷作出快速响应;β测试和验收测试则完全在用户现场测试,这样能够从用户真实的现场环境来验证系统,并能够从用户的角度发现错误。
2.21 什么是部署?有哪几种部署模式?
部署是为了确保最终用户可以正常使用软件产品而进行的活动。
部署分为三种模式:自定义安装模式、现场支持模式、Internet模式。
2.22 什么是部署计划?在制定部署计划时,要考虑哪些问题?
说明如何将产品从开发商转移到用户群。要考虑:兼容、转换和迁移策略,部署时间表,部署顺序,用户培训。
第三章 软件过程模型
3.1 传统“软件生命周期”理论是什么?它有什么缺点?
传统的软件工程理论常把这些过程中的活动视为“阶段”,它们被划分到软件开发的三个时期里,即软件定义时期(问题定义、可行性研究、需求分析)、软件开发时期(总体设计、详细设计、编码、单元测试、集成测试)和运行维护时期(每次维护的本质上都是一次简化的定义和开发过程)。
缺点是并未明确地包括保护性活动以及不能并发进行过程中的各项活动。
3.2 什么是软件过程模型?为什么要对过程进行抽象表示?
软件过程模型:是组织项目活动的一般方法,是对实际开发过程的抽象表示。
抽象表示进程可以有效地提高开发质量、加快开发进度、减少开发成本。
3.3 线性系列模型有哪些?演进系列模型有哪些?
线性系列模型有线性顺序模型、瀑布模型、RAD模型。
演进系列模型有边建边改模型、增量模型、螺旋模型、RUP模型。
3.4 线性顺序模型的缺点是什么?
线性顺序模型也称传统生命周期模型。缺点有:对项目作出“线性”过程的假设太过理想化,复杂过程简单化;各项活动不是并行的,所以项目中常常出现“阻塞状态”,造成巨大的人力浪费,拉长项目时间;开发方不能很好地与用户交互;需求在分析阶段无法完全获取。
3.5 瀑布模型的优点和缺点是什么?
优点:具有一定的反馈性质;严格地规定了每个阶段必须提交的交付物;每个阶段结束前,都必须有正式的审查。
缺点:开发方不能很好地与用户交互;反馈效果有限。

3.6 RAD模型中的“RAD”是什么意思?为什么说RAD模型是从线性顺序模型“泛化”出来的一个“高速”变种?RAD模型的优点和缺点是什么?它适合哪种项目?
RAD模型:快速应用开发(Rapid Application Development),之所以称为“高速”,是因为该模型强调在很短的开发周期内,快速地完成软件开发。
优点:开发速度快;鼓励复用。
缺点:如果一个系统难以被适当地模块化,那么很难组织多个开发团队并行开发;如果项目早期不能完整地/正确地获取需求,那么很难按时完成开发任务;如果缺乏以往的类似项目经验,那么难以快速地设计系统;RAD不适合高技术风险的项目。
RAD模型适合应用在需求完整且明确、设计正确且清楚、模块化程度高、技术风险低、有过类似系统经验、有足够人力资源和需要在很短的开发周期内(如60-90天)完成的软件项目。

3.7 为什么说边建边改模型的缺点十分明显?
它否认了在项目实施之前需求分析和设计活动的重要性;无法控制项目时间和成本导致开发费用变得很高;永不结束的修改往往造成重建系统。

3.8 什么是增量模型?增量模型的优点是什么?难点是什么?
增量模型是一种演进模型。它规定软件开发过程是一次开发一个部分。增量模型采用随着开发日程时间的进展而交错的线性序列,每一个线性序列都和线性顺序模型的序列完全一样,不同之处在于每个线性序列都可以产生一个可发布的工作版本,这些工作版本都是在上一个工作版本的基础上,做了一些增量。
优点:可以在开发过程中与用户很好地交互;减少开发风险;有利于试验性产品的开发;应对“最后期限”的一种办法。
难点是必须做出一个统一的软件构架,要根据这个构架,安排合适的迭代开发计划,并且可以在较小的代价下,容易地扩展出新的功能。另外要求项目经理、设计人员和集成人员等涉众有较高的水平。

3.9 螺旋模型是谁提出的?螺旋模型的优点和难点各是什么?
美国著名的软件工程专家B.W.Boehm。
优点:不断调整的开发计划符合软件开发的实际情况;降低软件开发的风险;有利于试验性产品的开发;应对“最后期限”的一种办法。
难点:需要较高的风险评估技术;由于模型较新,它不像瀑布模型或增量模型那样广泛使用。

3.10 怎样理解RUP模型中的“迭代化生命周期”?
为了保证项目质量,一种较灵活的方法是多次执行各个开发工作流程,从而更好地理解需求,设计出强壮的构架,组建好开发组织,并最终交付一系列渐趋完善的实施成果,这被称为迭代式生命周期。

3.11 RUP将软件开发过程分为哪些大的阶段?
先启、精化、构建和产品化。
3.12 RUP中的开发周期和演进周期有什么不同?
开发周期中,每个迭代所产生的交付物最终目标都是为了产生这个产品。产品被交付给用户后,可能要开发它的下一代产品,可以通过重复同样的先启、精化、构建和产品化阶段的顺序,将产品演进为下一代的新产品,这些随后的周期被称为演进周期。
3.13 RUP模型中的横轴、纵轴和图形中的各种曲线代表什么意思?
横轴表示一个开发周期的时间。
纵轴表示业务建模、需求、分析设计、实施、测试和部署6个基本活动以及配置与变更管理、项目管理和环境3个保护性或者支持性活动。
各种曲线表达了各个活动在开发周期的各个迭代中的工作量。

3.14 RUP的优点是什么?
体系完整;理论成熟;实践性强;可裁剪;可扩充。
第四章 问题定义和可行性研究方法
4.1 问题定义的目的是什么?
弄清楚用户需要软件系统解决的根本问题,以及项目所需的资源和经费。
4.2 问题定义报告有哪些内容?
项目目前问题、项目目标、项目范围、初步设想、预计投资金额和开发周期等内容。
4.3 列举5方面的可行性考虑
技术可行性(技术是否成熟)、操作可行性(用户能够接受操作方式么)、经济可行性(是否盈利)、调度可行性(规定期限是否能够完成)、其他可行性(社会可行性、市场可行性、竞争可行性等等)。
4.4 项目方案是否经济可行的依据是什么?
获得的效益必须等于或者大于建议系统的启动与运营成本。
4.6 什么是项目的启动成本和运营成本?什么是项目的运营效益?
项目的启动成本:是指为了建立新系统所支付的一次性开支。
项目的运营成本:是指为了维持这个系统运行所发生的费用。
项目的运营效益:是指正式运行系统后能够产生的收益。
4.7 什么是投资回收分析?该方法的缺点是什么?
投资回收分析是一个决定新系统所生成的经济效益超过它的开发费用所用时间长度的技术。
缺点是完全忽略了资金的时间因素。
4.8 什么是净资金现值法?该方法的优点是什么?
一个投资方案的净资金现值定义为所得经济效益的现值之和减去该项目的投资的现值。
优点:资金现值的使用承认了货币的时间价值,可以将不同成本和经济效益的投资进行比较。
4.9 示例
假定在开发在线宠物商店系统时,提出两种方案,即方案A和方案B,这两种方案都可行。方案A的开发成本为20万元,在5年期限内每年可得收益为6万元;方案B的开发成本为80万元,在5年期限内每年可得收益为20万元。假定最小可接受的折扣率为10%,哪种方案是可以接受的呢?
100/110=0.909 先看方案A NPV=6*0.909+6*0.9090*909+…(一共加五年的)-20=5.454+4.958+4.507+4.096+3.724-20=2.739 净资金现值系数=2.739/20=0.137 再看方案B NPV=20*0.909+…- 80=18.18+16.526+15.022+13.655+12.412-80=-4.205 净资金现值系数=-4.205/80=-0.052 所以方案A是可以接受的。
4.10 可行性研究报告包括哪些内容?
说明各种版本的修改日期、版本编号、修改说明和修改作者;在报告前部对本文档进行说明;描述本产品的定位;分别描述各类用户的情况;产品概述;方案说明;多套方案的可行性比较;推荐方案的风险评估;整理出客户方和开发方对本报告的意见;产品的市场营销计划和软件开发计划。
4.11 在可行性研究报告中,系统方案应包括哪些方面的内容?
方案的硬件环境;方案的技术策略;方案的软件模型及其模型描述;采用该方案后,客户的投资成本、运营成本和运营效益;开发方的资源配置计划;方案存在的风险和不足。
4.12 提交一张在线宠物商店的词汇表,其中至少包括5个词汇。
登录验证、购物车、收藏夹、宠物种类、商品价格
第五章 需求分析方法
5.1 需求收集和需求分析在项目开发的不同时期的工作量有何变化?
在早期,需求收集的工作量较大、需求分析的工作量较小。随着项目的开发,需求收集的工作量逐渐减少,需求分析的工作量逐渐增多。
5.2 在需求分析活动中,为什么要采用自顶向下、逐层分解的原则?
通常,一个庞大的、复杂的系统很难一下子被完全理解。如果过早陷入细节,就会得到一个不完整的需求,甚至忽略系统更重要的部分。
5.3 为什么需要通过模型来表达需求?
易于理解、便与组织。
5.4 为什么在需求分析活动中,不宜过多考虑系统的实现方式?
避免记录一些因为当前的技术才存在的需求,或者使用一些可能不适合新产品的技术;避免对实现的方式作出束缚。
5.5 为什么需求必须是可验证的?
需求通过了“验证”,才能表明所开发的系统符合客户和用户的要求;
不可验证的需求,仅仅是对需求的一种主观愿望,对于设计和测试等活动而言,都是缺乏意义的;
通过需求的验证标准,可以度量出系统实现的质量。
5.6某高等学校学籍管理系统的易用性需求是“系统应该用户友好”。请为该需求设计一个验收标准。
验收标准①:用户第一次使用该产品时,他们能在一个小时内掌握下载数据,上传数据等权限内的操作。
验收标准②:经过开发方提供培训服务,管理员能够在三个培训工作日内掌握系统的所有功能,并能独立工作。
5.7 为什么需求应该是可追溯的?
在转换过程中,可能会出现很多问题,或由于各种原因而变更需求。当需求在课追踪性链接的任意一端发生问题时,所有与该需求关联的链接都将被标记为可疑。有助于分析潜在变更的影响,或者核实通过实施系统所有的需求都已经被实现。
5.8 状态变迁图(STD)的两种主要符号是什么?
状态和变迁。状态是可以被观察到的系统的行为模式。变迁表示一种状态向另一种状态的迁移。
5.9 在需求分析活动中,使用数据字典有何意义?在数据字典中定义了哪四种元素?请分别解释。
数据字典可以统一项目中数据的定义与格式,便于开发人员之间的交流,保证组织内部的数据共享,避免因数据不统一而造成的理解差异,以及由此导致的人力浪费和工期延误。
数据元素:是软件系统中的最小数据单元,是构成数据库以及系统模块间交换数据的最小单元。
数据流:是外部实体和系统之间以及系统内部的处理之间进行数据交换的基本数据单元,是由有关的数据元素组成的数据结构。
数据存储:也是定义数据结构,是数据流程图中数据结构的载体。相对于数据流而言,它是一个静态的数据结构。
处理:处理的过程定义应该包括处理的名称、说明、所有需要的输入输出、要存取的数据库以及该处理对应的结构图内的模块号。
5.10判定表和判定树是为了解决什么问题?
对于复杂的条件组合问题(在处理过程定义中,有时存在多重嵌套的情况),直观、清楚地表述处理的过程。
5.11 UML从建模的角度将类分为哪几种?
用例模型、对象—行为模型、对象—关系模型。
5.12 请分别解释泛化、关联、聚集、合成和依赖的概念。
泛化:从一般到特殊的关系。
包含:指一个用例的行为包含了另一个用例。
扩展:对一个已经存在的用例增加新的功能。
关联:模型元素间的一种语义联系。
聚集:聚集是一种特殊的关联,用来表示类与类之间整体与部分的关系。
合成:一种更特殊的聚集,也表示类与类之间的整体和部分关系。但特殊之处在于他是一种强聚集,组合关系中的类具有相同的生存期,即主体对象不存在时,其包含的对象也不存在。
依赖:类与类之间较弱的关系,若修改类A的定义可能导致对类B的定义的修改,则称类B依赖于类A。
5.13 识别泛化关系时,应考虑哪些问题?
根据领域知识识别泛化;自上而下识别泛化;自下而上识别泛化;考虑领域内的复用;判断泛化是否在系统的责任范围内;判断是否在结构上真正构成泛化关系;判断子类之间的差别是否由超类的属性值改变来实现;判断子类是否有自己特有的属性和操作;判断父类下面是否只有一个子类。
5.14 单向关联和双向关联有何不同?
单向关联有箭头、双向关联用一条无箭头的直线表示。
单向关联A→B表示A可以用B的属性和方法,而B不可以用A的。
5.15 聚集与合成关系有何不同?
合成是一种更特殊的聚集,也表示类与类之间的整体和部分关系。但特殊之处在于他是一种强聚集,组合关系中的类具有相同的生存期,即主体对象不存在时,其包含的对象也不存在。
5.16 依赖关系常常出现在哪些情况下?
一个类向另一个类发送消息;一个类是另一个类的某个或者某些操作的数据成员类型;一个类是另一个类的操作的参数模型。
5.17 什么是交互图?
交互图用来对软件系统的动态行为建模,显示了Actor和对象之间是如何进行通信来完成用例的各个步骤或者其他功能的。
第六章 软件设计方法
6.1 设计活动的总体原则包括哪些?
设计过程不应陷入片面性;设计应能够追踪分析模型;设计应该选择合适的技术;设计应该选择合适的技术;设计应该选择合适的技术;设计应该是可集成的;设计应该尽可能地提高抽象层次;设计应该是可复用的;设计应该是可维护和可拓展的;设计的系统应该有韧性;设计应该具有一致性;设计的交互界面应该是友好的;设计评审。
6.2 什么是软件构架?
在UML中,构架是指系统的组织结构,它可以递归解析为通过接口交互的部件、连接部件的关系以及组装部件的一些限制条件,通过接口交互的部件有类、构件和子系统。总之,软件构架反映了系统整体的组织结构和基本特征
6.3 详细设计的任务是什么?
详细设计的任务是在软件构架的基础上,进一步确定如何实现目标系统,具体包括系统的模块逻辑的详细设计、系统数据结构的设计、系统数据结构的设计、系统人机接口的设计等。
6.4 分治的优点是什么?分治要考虑哪些问题?
缩小问题空间,减少问题复杂度和开发工作量;便于并发执行,缩短开发时间;适合团队协作,降低实施难度;预防开发中的多米诺骨牌效应;容易产生可复用部件。
分治要考虑的问题:分治程度不应太大或是太小;从技术角度,如何分治?
6.5 抽象的优点是什么?
抽象有利于认识事物的普遍特征和基本原理;抽象可以帮助设计人员制定出模块的框架;抽象有利于软件的复用;抽象可以提高系统的可扩展性。
6.6 请分别解释里氏替换选择、开-闭原则、依赖倒转原则和接口隔离原则。
里氏替换选择:子类可以替换父类,可以出现在父类能出现的任何地方。
开-闭原则:一个软件实体应当对扩展开放,对修改关闭。
依赖倒转原则:要依赖于抽象,不要依赖与具体类。
接口隔离原则:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
6.7 什么是抽象类?什么是接口?他们有什么不同?
抽象类:不可被实例化的类。
接口:是一些不包含具体实现的方法特征的集合。
接口没有具体的实现方法,抽象可以有。抽象类只支持单继承,即继承它的子类只能有它这一个超类;对于接口而言,一个具体类可以有多个实现的接口。
6.8 什么是内聚?请列举内聚的种类,并说明哪些内聚类型较理想?
内聚是一个模块内部各部件之间联系紧密程度的度量。
功能内聚:所有部件处理同一组数据,共同完成单一的功能,用符号F表示。
顺序内聚:各部件之间既有数据联系,又有控制联系,用符号S表示。
通信内聚:所有部件都访问同一组数据,各部件只有数据关系、没有控制关系。用符号C表示。
过程内聚:只有控制联系,没有数据联系。符号P表示。
下面内聚较弱:
时间内聚:无数据、控制联系,部件之间具有时间联系。符号T表示。
实用程序内聚:不能归入上述内聚类型的部件放到一起。符号U表示。
偶然内聚(X)和层内聚(L)。
6.9 什么是耦合?请列举耦合的种类,并解释耦合谱系。
耦合是模块间相互联系强弱的度量。
内容耦合:一个模块直接进入另一个模块中存取其数据或者使用其服务时。
公共耦合:两个模块间通过一个公共环境进行数据交换。
外部耦合:模块对外部系统有依赖关系。
控制耦合:两个模块之间通过接口的参数表交换开关数据,旨在控制另一个模块的执行逻辑。
印记耦合:不同专家有不同定义。
数据耦合:两个模块之间通过接口的参数表交换信息数据,并且这些信息数据的类型是基本数据类型。
谱系从左到右,耦合程度越来越高。当然,我们的目标是高内聚、低耦合。
6.10 什么是软件复用?什么是CBSD?什么是产品线工程?
软件复用是指重复使用为了复用目的而设计的软件的过程。
6.11 传统的设计建模方法有哪些?
层次图:用于描述程序的组成,即组成系统的程序模块及其调用关系。
结构图:克服了层次图的缺点;
程序流程图:
盒图(N-S图) :出于要有一种不允许违背结构程序设计精神的图形工具的考虑
HIPO图:
6.12 面向对象的设计建模方法有哪些?请分别介绍。
包、类图、构件图和部署图。
6.13 请举出一些不良界面的例子
对用户的主观臆测;不友好;晦涩难懂;行为不当;界面复杂等。
6.14 为了达到以用户为中心的设计目标,有哪些主要做法?
使用UCD:理解用户的特征、任务;确保用户参与;遵循良好的界面设计原则。
6.15 人机界面设计应遵循哪些指导准则?
系统的全部界面格式和风格应该保持一致;适当组织菜单层次和菜单项;为不同的用户或者功能提供不同的界面服务;力求用户需要的输入量最少;对于一些破坏性指令应确认;提供有效的系统保障能力;布局合理;简单易懂、整洁有序、条理清晰;界面具有帮助功能;有一定的智能。
第七章 软件实施与测试方法
7.1 有哪些广泛使用的程序设计语言?
汇编语言、BASIC语言、Fortran语言、COBOL语言、C语言、Ada语言、Java语言、.NET系列语言。
7.2 开发在线宠物商店系统时,你打算用什么语言开发?为什么?
C语言或者JAVA语言
7.3 编写一个好风格的程序,要从几个方面着手?对于程序语句的处理,你还有哪些好的建议?
注释、清晰的逻辑结构以及代码格式。
先将逻辑结构化为最简洁最易于理解的。
7.4 什么是白盒测试?有哪些主要方法?
白盒测试又称玻璃盒测试。使用白盒方法导出测试用例是依据模块的编码,即模块的内部逻辑,对测试者是可见的,故称白盒测试。又称“结构测试”
基本途径测试(每条完整的路径都要测试一次)、条件测试(检查程序所包含的逻辑条件)、循环测试(确定循环结构是否有效)
7.5 什么是黑盒测试?有哪些主要方法?
黑盒测试在程序或者模块的接口级进行,而不考虑程度内部逻辑。又称为“功能测试”
等价类划分法
- 把程序的输入域划分成若干数据类,从每一数据类选取少数有代表性数据做为测试用例。每一个等价类相对于输入条件表示为一组有效或无效的输入。
- 为每一等价类设计一个测试用例。
边界值分析法
是等价类分析技术的补充,并且基于等价类划分技术。边界值分析技术不是随意选择等价类中的原则,而是专门选择等价类“边”上的元素。
示例:现规定网上智能家具城的每个订单中物品的种类限制为1~100种,
划分等价类:
- 等价类一:少于1种;
- 等价类二:1~100种
- 等价类三:多于100种
测试用例:0、1、2、50、99、100、101种
7.6 什么是单元测试?
单元测试是把一个模块作为独立的程序单元进行测试,以保证它能够正确执行规定的功能。
7.7 什么是驱动模块和存根模块?如何实现它们?
驱动模块:提供对待测模块的语句调用,并按照测试用例提供输入参数,并显示输出结果。在大多数场合称为“主程序”。
存根模块:将根据待测模块的实际需要,提供不同程度上的功能支持。比如对函数A做单元测试时,被测的函数单元下还包括了一个函数B,为了更好的测试错误,定位错误,就要为函数B写桩,来模拟函数B的功能,保证其正确。
7.8 什么是集成测试?有哪几种?各有什么优缺点?
集成测试将已经通过彻底测试的模块组装起来,已形成一个系统或者软件产品。
自顶向下集成测试:优点是能够早期发现主要的设计错误。缺点是潜在的,可再使用模块可能没有得到充分的测试。
自底向上集成测试:优点是在合理的调度下,可以减少甚至避免开发存根模块的开销。
缺点是逻辑控制模块测试较晚,将导致大量的程序修改。
自顶向下和自底向上相结合的集成测试:将二者优点结合并且弱化缺点。
7.9 什么是回归测试?为什么要进行回归测试?回归测试的用例应该包括哪些类型的测试用例?
回归测试:当有新模块加入时,要对原测试通过的测试模块重新进行测试。
当新模块引入时,原来成功的测试用例失效,错误通常在新加入的模块或者接口上。
回归测试用例应包括下面三种类型的测试用例:
- 执行测试所有软件功能的代表性测试用例;
- 测试可能受改变影响的那些功能的测试用例;
- 测试已经改变的软件部件的测试用例。
第八章 软件项目管理方法
8.1 什么是项目管理?
项目管理是一种对人力和资源进行管理、分配和调度的过程。
8.2 什么是软件特征量?有哪些主要的基础特征量?
一个系统、部件或者过程的一个给定属性的程度的定量度量。
基础特征量:软件规模、开发成本、开发期限、开发工作量、软件质量。
8.3 面向功能点的软件特征量和面向尺寸的软件特征量相比,有哪些优点?
面向功能的软件特征量是使用应用程序交付的功能度的度量作为规范值。功能点是根据软件信息域内直接度量的量和对软件复杂程度的估计值估算出来。
8.4 软件企业中的人力资源具有哪些特点?
高技术更新性、高主观经验性、效率波动性、不可存储性、角色灵活性、绩效模糊性。
8.5 软件企业人力资源管理的主要任务是什么?
启动、计划、实施、收尾阶段
8.6 什么是SQA?SQA的主要任务是什么?执行SQA的难点是什么?
SQA:软件质量保证是为了保证软件的质量所要需要的一系列有计划的和有系统的活动。
主要任务:
- 为项目准备SQA计划;
- 执行技术审查;
- 执行项目的软件开发过程的评审;
- 收集和分析软件度量信息;
- 持续跟踪项目的错误或者问题;
- 向上级管理者提供质量分析报告;
- 向软件项目团队提供反馈;
- 协调变更控制和变更管理。
难点:缺乏专业的SQA工程师;容易出现沟通问题;不受管理层重视;缺乏对项目的整体观;可验证性差。
8.7基于统计的软件质量包括哪些步骤?
- 收集和分类软件缺陷信息
- 尝试追踪的基本原因
- 使用Pareto原理
- 校正引起这些缺陷的关键少数原因。
8.8 软件风险的特性是什么?
不确定性和可能损失。
8.9 什么是软件配置?什么是软件配置管理?什么是基线?SCM的任务包括哪些?
软件配置是指软件开发过程中的三个主要类别的信息,包括计算机程序、描述计算机程序的文档,以及程序内部和外部的数据。
软件配置管理是贯穿于整个软件工程过程的一种保护性活动,该活动标识、组织和控制对正在开发软件进行的修改,能够有效地保证软件质量,并提高软件生产率。
基线:已经通过正式评审和批准的规格说明或者产品。
SCM的任务:统一标志配置项;版本控制;变更控制;配置审核;状态报告。