1.1 软件开发有哪些特点?
特点:
1. 难以描述性
2. 缺乏可见性
3. 复杂性
4. 变化性
5. 风险性
6. 强合作性
1.2 什么是软件危机?软件危机有哪些表现?怎么解决软件危机?
软件危机:
软件危机是指在软件开发和维护过程中存在的周期长、成本高、质量低等问题。
表现在:
1. 缺乏计划性
2. 软件需求获取不充分、不准确
3. 缺乏团队开发的合作、协调能力
4. 缺乏良好的软件质量评测手段
5. 软件的可维护性差
6. 软件的可复用性差
7. 软件开发过程不规范
8. 缺乏自动化的工具来协助开发
9. 缺乏变更管理措施
10. 缺乏风险管理手段
解决方法:
采用“工程”的方法。
1.3 什么是软件工程?
软件工程:
软件工程是以质量为核心,为了经济地开发满足客户需求的软件而研究、和应用的系统化的、有规则的、可度量的和可控制的工程原则、方法,涉及软件过程、项目管理、开发方法、开发工具,甚至企业文化等各个方面。
1.4 在软件工程的发展史上,有哪些重要的开发方法?
开发方法:
1. 以结构化方法为代表的传统软件工程方法
2. 以面向对象技术为核心的面向对象的软件工程方法
3. 基于组件的软件开发
4. 面向方面的软件开发
5. 基于产品线的软件开发
等。
1.5 项目管理涉及哪些方面?
涉及:
1. 人力资源管理
2. 项目计划
3. 风险管理
4. 项目跟踪
5. 质量保证
6. 配置管理
等。
1.6 软件工程工具有哪些作用?
作用:
1. 辅助进行需求分析
2. 优化软件设计手段
3. 加快代码实现速度
4. 提高软件测试水平
等。
2.1 什么是软件开发过程?在开发过程中,有哪些主要活动?哪些是基本活动,哪些是辅助性活动?
软件开发过程:
软件过程由开发和维护软件以及相关产品的一系列活动构成,这些活动从不同方面定义了软件开发过程中的步骤、交付物、涉众以及职责等流程要素。
基本活动:
1. 问题定义活动
2. 可行性研究活动
3. 需求分析活动
4. 设计活动
5. 编码活动
6. 测试活动
7. 部署活动
8. 交付活动
等。
保护性活动:
1. 风险管理活动
2. 计划活动
3. 项目跟踪活动
4. 质量保证活动
5. 软件配置管理活动
等。
2.2 为什么需要一个“问题定义”的活动?什么时间开展这项活动?
原因:
这是由于在软件开发初期,客户与开发商之间需要用较少的投入,来确定项目最根本的“什么和为什么”的问题,为双方形成一个早期的判断,达成一个最初的共识,这个共识包括系统的大致范围和投资额。
时间:
“问题定义”活动处于项目日程表的最前端。
2.3 什么是可行性研究?为什么需要一个“可行性研究”的活动?什么时间开展这项活动?哪些涉众会参与这项活动?
可行性研究:
可行性研究是以相对短的时间和相对低的成本来确定给定的问题在其约束内是否有解、有几种解以及哪个是最佳解。
原因:
由于任何项目都有约束条件,必须首先确立满足约束条件的方案是否存在、可行、最优,然后在最优方案的基础上进行开发;如果“省略”这个步骤,就会在一个本质上不可能实现的项目上造成人力物力浪费,或造成项目大量返工、功能不足、性能“失真”。
时间:
可行性研究活动处于项目的早期阶段。
人员:
1. 系统分析师
2. 出资方领导
3. 出资方技术人员
4. 用户代表
5. 开发方领导
6. 项目经理
7. 系统架构师
8. 领域专家
9. 财务人员
10. 市场人员
11. 软件质量保证人员
等。
2.4 什么是需求?为什么软件开发需要需求活动?
需求:
主要是在产品构建之前确定的系统必须符合的条件或者具备的功能,它们关于系统将要完成什么工作的一段描述语句,它们必须经过所有相关人员的认可,其目的是彻底地解决客户的问题。
原因:
需求活动能够为后续活动(如设计、编码和测试等)提供良好的基础。
在需求活动中,完全根除或者尽量减少需求错误的个数、完全识别或者尽量识别出系统的关键需求的内容,这对降低软件在开发后期的高昂的维护费用、提高软件开发生产率和软件质量,具有关键作用。
2.5 什么是需求文档?有哪些类型的需求文档?
需求文档:
一组需求的集合。
类型:
1. 用户需求文档
2. 系统需求文档
3. 软件规约文档。
2.6 描述需求的标准是什么?
标准:
一个优秀的需求描述应该是完整的、正确的、必要的、无歧义的、可行的、可验证的以及被设置了优先级别的。
2.7 怎样理解“贯穿于整个软件开发过程的需求活动”这句话?
答:
在项目的设计、编码、测试和使用中,新的需求可能会“浮现”,旧的需求可能被变更。
2.8 什么是设计?为什么设计活动非常重要?
设计:
设计是在系统的约束条件(如预算,时间,人力资源,用户软、硬件环境和用户对系统的操作能力等)下,为了实现系统的功能性需求和非功能性需求,而找到并描述的一种遵循高质量的通用原则的方法,其交付文档能够指导开发人员实现系统。
原因:
1. 软件架构师软件系统的核心,软件开发过程是以架构为中心的。
2. 通过设计,可以使开发者应付项目中复杂多变的情况,同时保持系统的完整性。
3. 设计活动可以应对系统在扩展功能中出现的问题。
4. 设计活动是大规模复用的有效基础。
5. 设计活动还可以作为项目管理的基础。
2.9 请解释设计中的各个粒度的部件,如系统、子系统、框架、构件、组件、模块、类和方法等。
系统:
是一个抽象的概念,它是由软件、硬件或者两者共同构成的一个逻辑实体,它可以被许多构件共同实现。
子系统:
也是一个抽象的概念,它是大型系统的一部分,有着明确的接口。
框架:
是一种特殊的子系统,即它是可以被复用的子系统,实现了一般问题的通用解决方案,通过“服务”向外部提供可应用于不同应用程序的公共功能。
构件:
是开发流程的物理资产,包括源文件、配置文件、可执行文件、动态链接库和数据库等多种类型文件,以及其他开发出来的实际产品。
组件:
是一种特殊的构件,是指有定义完备接口的、明确规定了上下文依赖关系的合成单元,它可以被第三方开发,并且能够被独立地部署,它具有自包含的属性,其内部构造和特征不可见。
模块:
是具体的部件,是定义在程序设计语言级别上的构件,例如,Java语言中的包、类和方法,C语言中的文件和函数,都是模块,只是粒度不同而已。
类:
面向对象程序中数据抽象的单元,一个软件模块,描述并定义了一组相似的对象。
方法:
一个更小粒度的软件模块,是实现类的行为和过程抽象。
2.10 什么是总体设计?什么是详细设计?
总体设计:
其任务是根据软件需求规约文档,确定一个合理的软件体系结构。
详细设计:
其任务是在总体设计的基础上,进一步确定如何实现目标系统,包括系统的数据对象的设计、人机接口的设计以及模块逻辑的详细设计。
2.11 怎样理解“贯穿于整个软件开发过程的设计活动”这句话?
答:
由于需求很难在项目的早期阶段就完全被掌握,因此,实际上,设计活动也贯穿于整个软件开发过程中。
2.12 请解释实施活动中的编码、单元测试和集成。
编码:
编码是将软件设计结果转成用某种程序设计语言书写的程序。
单元测试:
单元测试是把一个模块作为独立的程序单元进行测试,以保证它能够正确执行规定的功能。
集成:
集成是指将单独的软件构件合并成一个整体的软件系统。
2.13 什么是工作版本?
工作版本:
它们代表正在进行的尝试活动,目的是展示最新开发新功能。
2.14 以实施为中心的软件开发会导致什么问题?而轻视实施活动又会存在哪些问题?
以实施为中心的软件开发会导致:
1. 弱化的需求
2. 弱化的设计
3. 对实施人员的过度依赖。
对实施活动的轻视:
1. 为了增加或者替换人手时,实施人员被插入到一个项目里,一般需要一定的时间来熟悉系统,弄清自己所承担的任务喝已有的工作。
2. 实施人员所从事的是脑力工作,具有一定的技术含量,需要通过长期的培训来掌握技能,需要通过不断的自学来完善自我,需要通过大量地参与项目实施来积累工作经验。
3. 实施人员的施工水平存在差异。
4. 不易度量实施人员的实施质量。
2.15 为什么在展开实施活动时,建议实施地点选择在软件企业内部进行?如果在企业内部,那么应该注意哪些问题?
优点:
1. 节省成本
2. 便于资源调配
3. 便于交流
4. 便于并行开发。
注意:
在企业内部开发时,要注意和用户保持足够的接触。每个迭代的工作版本都应该和用户交流,以便在下一轮迭代中,对错误或者不足之处作出改进。
2.16 什么是测试?请分别解释缺陷、错误和失败的概念。
测试:
测试是选择适当的测试用例执行被测程序的过程,目的在于发现程序错误。
缺陷:
是系统任一方面(包括需求、设计或者代码)的缺点。该缺点会促成或者潜在地促成一个或者多个失败发生。
错误:
是指程序中的缺陷所产生的不正确结果。
失败:
当一个程序不能运行或者其表现不可以被接受时,称为失败。失败是系统执行中出现的情况。失败源于代码缺陷。
2.17 请分别解释单元测试、集成测试、系统测试、α测试、β测试和验收测试。
单元测试:
当且仅当被测试的是一个程序单位,称为单元测试。
集成测试:
是为了测试和验证几个构件集成在一起时,是否能按照预期目标正常工作。
系统测试:
关注于系统作为整体运行时的实际效果。
α测试:
由客户和用户在软件开发团队的管理下执行的测试。
β测试:
由客户和用户在他们的工作现场进行的测试。
验收测试:
部署软件之前的最后一个测试操作。
2.18 什么是测试用例?它包括哪些内容?
测试用例:
为特定目标开发的测试输入、执行条件和预期结果的集合。
内容:
1. 包括标识
2. 目标
3. 相关文档
4. 重要级别
5. 优先级别
6. 指令
7. 期望结果
8. 清理
2.19 测试活动贯穿于整个软件开发过程,这会有什么益处?
益处:
1. 缩短测试时间
2. 易于定位缺陷
3. 避免错上加错
2.20 怎样在测试活动中选择合适的执行地点?
答:
建议单元测试、集成测试和系统测试在程序员所在的开发现场以其附近进行,便于实施人员与测试人员交流,对系统缺陷作出快速响应;β测试和验收测试则完全在用户现场测试,这样能够从用户真实的现场环境来验证系统,并能够从用户的角度发现错误。
2.21 什么是部署?有哪几种部署模式?
部署:
部署是为了确保最终用户可以正常使用软件产品而进行的活动。
部署分为三种模式:
1. 自定义安装模式
2. 现场支持模式
3. Internet模式
2.22 什么是部署计划?在制定部署计划时,要考虑哪些问题?
部署计划:
说明如何将产品从开发商转移到用户群。
要考虑:
1. 兼容、转换和迁移策略
2. 部署时间表
3. 部署顺序
4. 用户培训
2.23 讨论各个基本活动中的角色和步骤。
3.1 传统“软件生命周期”理论是什么?它有什么缺点?
理论:
一些传统的软件工程理论常常把这些过程中的活动视为“阶段”,它们被划分到软件开发的三个时期里,即软件定义时期(问题定义、可行性研究、需求分析)、软件开发时期(总体设计、详细设计、编码、单元测试、集成测试)和运行维护时期(每次维护的本质上都是一次简化的定义和开发过程),这三个构成著名的传统“软件生命周期”理论。
缺点:
传统的软件生命周期理论并未明确地包括保护性活动以及不能并发进行过程中的各项活动。更大的问题是,用各个阶段构成软件生命周期,往往容易给人一种“串行”的感觉,即一个阶段结束了,才能进入下一个阶段。
3.2 什么是软件过程模型?为什么要对过程进行抽象表示?
软件过程模型:
软件过程模型是组织项目活动的一般方法,是对实际开发过程的抽象表示。
原因:
抽象表示进程可以有效地提高开发质量、加快开发进度、减少开发成本。
3.3 线性系列模型有哪些?演进系列模型有哪些?
线性系列模型:
1. 线性顺序模型
2. 瀑布模型
3. RAD模型
演进系列模型:
1. 有边建边改模型
2. 增量模型
3. 螺旋模型
4. RUP模型
3.4 线性顺序模型的缺点是什么?
缺点:
1. 实际项目往往不是按照“线性”顺序开发的。
2. 由于要按照线性顺序进行,该模型严格要求在分析阶段完全获取需求。
3. 在这种模型下,开发方不能很好地与用户交互。
4. 由于各项活动不是并行的,所以项目中常常出现“阻塞状态”,例如,某些项目组成员不得不等待组内其他成员先完成其依赖的任务。
3.5 瀑布模型的优点和缺点是什么?
优点:
1. 具有一定的反馈性质。
2. 严格地规定了每个阶段必须提交的交付物。
3. 每个阶段结束前,都必须有正式的审查。
缺点:
1. 它和线性顺序模型一样,开发方不能很好地与用户交互。
2. 尽管具有一定的反馈性质,但反馈效果是有限的。
3.6 RAD模型中的“RAD”是什么意思?为什么说RAD模型是从线性顺序模型“泛化”出来的一个“高速”变种?RAD模型的优点和缺点是什么?它适合哪种项目?
RAD模型:
快速应用开发(Rapid Application Development)
原因:
之所以称为“高速”,是因为该模型强调在很短的开发周期内(如60~90天),快速地完成软件开发。
优点:
1. 开发速度快
2. 鼓励复用
缺点:
1. 如果一个系统难以被适当地模块化,那么很难组织多个开发团队并行开发。
2. 如果项目早期不能完整地、正确地获取需求,那么很难按时完成开发任务。
3. 如果缺乏以往的类似项目经验,那么难以快速地设计系统。
4. RAD不适合高技术风险的项目。
5. 如果系统规模较大,要想在60~90天内完成开发,那么RAD模型需要一个成熟的项目团队。
适合:
RAD模型适合应用在需求完整且明确、设计正确且清楚、模块化程度高、技术风险低、有过类似系统经验、有足够人力资源和需要在很短的开发周期内(如60-90天)完成的软件项目。
3.7 为什么说边建边改模型的缺点十分明显?
答:
1. 它否认了在项目实施之前需求分析活动和设计活动的重要性。
2. 由于没有计划和明确的最终目标,所以在边建边改模型中,无法控制项目时间和成本。
3. “永不结束”的修改往往造成重建系统。
3.8 什么是增量模型?增量模型的优点是什么?难点是什么?
增量模型:
增量模型是一种演进模型,它规定软件开发过程是一次开发一个部分。增量模型采用随着开发日程时间的进展而交错的线性序列,每一个线性序列都和线性顺序模型的序列完全一样,不同之处在于每个线性序列都可以产生一个可发布的工作版本,这些工作版本都是在上一个工作版本的基础上,做了一些“增量”。
优点:
1. 可以在开发过程中与用户很好地交互
2. 减少开发风险
3. 有利于试验性产品的开发
4. 应对“最后期限”的一种办法
难点:
实施增量模型的难点是必须做出一个统一的软件构架,要根据这个构架,安排合适的迭代开发计划,并且可以在较小的代价下,容易地扩展出新的功能。另外,后开发的构件必须能够集成到先前已经开发的产品中,而不毁坏已经开发的功能。这要求项目经理、设计人员和集成人员等涉众有较高的水平。
3.9 螺旋模型是谁提出的?螺旋模型的优点和难点各是什么?
提出:
美国著名的软件工程专家B.W.Boehm
优点:
1. 不断调整的开发计划符合软件开发的实际情况
2. 降低软件开发的风险
3. 可以在开发过程中与用户很好地交互
4. 和增量模型一样,螺旋模型有利于试验性产品的开发
5. 和增量模型一样,螺旋模型也是应对“最后期限”的一种办法
难点:
1. 需要较高的风险评估技术
2. 由于模型较新,它不像瀑布模型或增量模型那样广泛使用。
3.10 怎样理解RUP模型中的“迭代化生命周期”?什么是总体设计?什么是详细设计?
迭代化生命周期:
为了保证项目质量,一种较灵活(并且风险更小)的方法是多次执行各个开发工作流程,从而更好地理解需求,设计出强壮的构架,组建好开发组织,并最终交付一系列渐趋完善的实施成果。
3.11 RUP将软件开发过程分为哪些大的阶段?
阶段:
1. 先启
2. 精化
3. 构建
4. 产品化。
3.12 RUP中的开发周期和演进周期有什么不同?
开发周期中,每个迭代所产生的交付物最终目标都是为了产生这个产品。产品被交付给用户后,可能要开发它的下一代产品,可以通过重复同样的先启、精化、构建和产品化阶段的顺序,将产品演进为下一代的新产品,这些随后的周期被称为演进周期。
3.13 RUP模型中的横轴、纵轴和图形中的各种曲线代表什么意思?
横轴:
一个开发周期产生一代产品。它要经历一定的时间,这段时间被表示在横轴上。横轴被分为4个阶段,每个阶段又被细分为若干迭代。每个阶段都有自己的目标和里程碑。
纵轴:
每一个迭代一般都要经历业务建模、需求、分析设计、实施、测试和部署6个基本活动(RUP将之称为核心工作流),以及配置与变更管理、项目管理和环境3个保护性或者支持性活动。
曲线:
各种曲线表达了各个活动在开发周期的各个迭代中的工作量。
3.14 RUP的优点是什么?
优点:
1. 体系完整
2. 理论成熟
3. 实践性强
4. 可裁剪
5. 可扩充
4.1 问题定义的目的是什么?
目的:
其目的是弄清楚用户需要软件系统解决的根本问题,以及项目所需的资源和经费。
4.2 问题定义报告有哪些内容?
内容:
1. 项目目前问题
2. 项目目标
3. 项目范围
4. 初步设想
5. 预计投资金额
6. 开发周期等内容
等。
4.3 根据你对宠物商店的理解,制定一个在线宠物商店系统的问题定义报告。
书本56页,图4.1 某在线宠物商店项目的问题定义报告
4.4 列举5方面的可行性考虑,简单解释其中的每一个方面。
方面:
1. 技术可行性
2. 操作可行性
3. 经济可行性
4. 调度可行性
5. 其他可行性
4.5 项目方案是否经济可行的依据是什么?
依据:
获得的效益必须等于或者大于建议系统的启动与运营成本。
4.6 什么是项目的启动成本和运营成本?什么是项目的运营效益?
系统的启动成本:
系统的启动成本是指为了建立新系统所支付的一次性开支。
系统的运营成本:
系统的运营成本是指为了维持这个系统运行所发生的费用。
系统的运营效益:
系统的运营效益是指正式运行系统后能够产生的收益。
4.7 根据你对在线宠物商店系统方案的理解,请描述一下该系统的启动成本、运营成本和运营效益。
4.8 什么是投资回收分析?该方法的缺点是什么?
投资回收分析:
投资回收分析是一个决定新系统所生成的经济效益超过它的开发费用所用时间长度的技术。
缺点:
完全忽略了资金的时间因素。
4.9 什么是净资金现值法?该方法的优点是什么?
净资金现值法:
一个投资方案的净资金现值定义为所得经济效益的现值之和减去该项目的投资的现值。
优点:
资金现值的使用承认了货币的时间价值,可以将不同成本和经济效益的投资进行比较。
4.10 假定在开发在线宠物商店系统时,提出两种方案,即方案A和方案B,这两种方案都可行。方案A的开发成本为200000元,在5年期限内每年可得收益为60000元;方案B的开发成本为800000元,在5年期限内每年可得收益为200000元。假定最小可接受的折扣率为10%,哪种方案是可以接受的呢?
参考书本62页,例4.6
4.11 可行性研究报告包括哪些内容?
内容:
1. 说明各种版本的修改日期、版本编号、修改说明和修改作者。
2. 应在报告前部对本文档进行说明
3. 描述本产品的定位
4. 分别描述各类用户的情况
5. 产品概述
6. 方案说明
7. 对所提出的多套方案在技术可行性、经济可行性、操作可行性和调度可行性等方面进行比较,确定选择方案的标准,最终提出推荐方案
8. 推荐方案的风险评估
9. 整理出客户方和开发方对本报告的意见
10. 产品的市场营销计划和软件开发计划
4.12 在可行性研究报告中,系统方案应包括哪些方面的内容?
内容:
1. 方案的硬件环境
2. 方案的技术策略
3. 方案的软件模型及其模型描述
4. 采用该方案后,客户的投资成本、运营成本和运营效益
5. 开发方的资源配置计划,如人员、设备和资金
6. 方案存在的风险和不足
4.13 提交一张在线宠物商店的词汇表,其中至少包括5个词汇。
参考书本65页,图4.4 词汇表例子
5.1 需求收集和需求分析在项目开发的不同时期的工作量有何变化?
变化:
最初只完成少量的分析工作,大量的工作在需求收集上。随着需求活动的进展,分析活动的工作量所占的比例越来越大。
5.2 在需求分析活动中,为什么要采用自顶向下、逐层分解的原则?
原因:
通常,一个庞大的、复杂的系统很难一下子被完全理解。在需求分析中,如果过早陷入细节,就会得到一个不完整的需求,甚至忽略系统更重要的部分。
5.3 为什么需要通过模型来表达需求?
5.4 为什么在需求分析活动中,不宜过多考虑系统的实现方式?
原因:
1. 避免记录一些因为当前的技术才存在的需求,或者使用一些可能不适合新产品的技术。
2. 避免对实现的方式作出束缚。
5.5 为什么需求必须是可验证的?
原因:
1. 需求通过了“验证”,才能表明所开发的系统符合客户和用户的要求。
2. 不可验证的需求,仅仅是对需求的一种主观愿望,对于设计和测试等活动而言,都是缺乏意义的。
3. 通过需求的验证标准,可以度量出系统实现的质量。
5.6 某高等学校学籍管理系统的易用性需求是“系统应该用户友好”。请为该需求设计一个验收标准。
参考书本70页,例5.4
5.7 为什么需求应该是可追溯的?
原因:
在转换过程中,可能会出现很多问题,如开发成员误解需求、错误地使用需求,或者由于各种原因而变更需求。 当需求(或者其他可追踪性项)在可追踪性链接的任意一端发生问题时,所有与该需求关联的链接都将被标记为“可疑”。这样,有关角色即可依据标记检査变更,并确定关联关系项是否应做相应变更。此概念也有助于分析潜在变更的影响,或者核实通过实施系统所有的需求都已经被实现。
5.8 绘制一个高等学校学籍及成绩管理系统的数据流程图,包括学生注册功能、成绩管理功能,以及相应的变动管理和查询功能等。要求画出总体图、零级图和部分细节图。
5.9 状态变迁图的两种主要符号是什么?
符号:
1. 状态
2. 变迁
5.10 绘制一个缓冲区管理程序的状态图,它的开始状态为空,只能进行输入字符的操作,若缓冲区满,则只能进行输出字符的操作。当缓冲区既不满也不空时,可进行输入或者输出操作。规定一次只能输入或者输出一个字符。
参考书本79页,图5.15 复印机软件的状态变迁图
5.11 在需求分析活动中,使用数据字典有何意义?在数据字典中定义了哪4种元素?请分别解释。
意义:
数据字典可以统一项目中数据的定义与格式,便于开发人员之间的交流,保证组织内部的数据共享,避免因数据不统一而造成的理解差异,以及由此导致的人力浪费和工期延误。
数据元素:
数据元素是软件系统中的最小数据单元,它是构成数据库以及系统模块间交换数据的最小单元,不可再分。
数据流:
数据流是外部实体和系统之间以及系统内部的处理之间进行数据交换的基本数据单元,是由有关的数据元素组成的数据结构,主要用于说明数据结构在系统中的作用和流动方向,因此也被称为“流动的数据结构”。
数据存储:
数据存储也是定义数据结构,它是数据流程图中数据结构的载体。相对于数据流而言,它是一个静态的数据结构。
处理:
处理的过程定义应该包括处理的名称、说明、所有需要的输入和输出;要存取的数据库以及该处理对应的结构图内的模块号。
5.12 判定表和判定树是为了解决什么问题?
答:
在处理过程定义中,有时存在多重嵌套的情况。对于复杂的条件组合问题,用自然语言往往不能直观、清楚地表述处理的过程。
5.13 根据你的理解,绘制一个在线宠物商店系统的用例模型。
参考书本87页,图5.25 一个用例模型的例子
5.14 UML从建模的角度将类分为哪几种?
种类:
1. 用例模型
2. 对象——行为模型
3. 对象——关系模型。
5.15 请分别解释泛化、关联、聚集、合成和依赖的概念。
泛化:
由一个超类和几个直接子类构成的两层结构。
关联:
模型元素间的一种语义联系。
聚集:
聚集是一种特殊的关联,用来表示类与类之间整体与部分的关系。
合成:
一种更特殊的聚集,也表示类与类之间的整体和部分关系,但特殊之处在于他是一种强聚集,组合关系中的类具有相同的生存期,即主体对象不存在时,其包含的对象也不存在。
依赖:
类与类之间较弱的关系。假设有两个类,若修改类A的定义可能导致对类B的定义的修改,则称类B依赖于类A。
5.16 识别泛化关系时,应考虑哪些问题?
答:
1. 根据领域知识识别泛化
2. 自上而下识别泛化
3. 自下而上识别泛化
4. 考虑领域内的复用
5. 判断泛化是否在系统的责任范围内
6. 判断是否处于同一个业务范围
7. 判断是否在结构上真正构成泛化关系
8. 判断子类之间的差别是否由超类的属性值改变来实现
9. 判断子类是否有自己特有的属性和操作
10. 判断父类下面是否只有一个子类
5.17 单向关联和双向关联有何不同?
答:
类之间的关联关系用一条把类连接在一起的实线表示,用一条无箭头直线代表双向关联,用一条从类C指向类D的直线代表C关联到D,即C可以用D的属性和方法,而D不可以用C的。
5.18 聚集与合成关系有何不同?
答:
合成是一种更特殊的聚集,也表示类与类之间的整体和部分关系。但特殊之处在于他是一种强聚集,组合关系中的类具有相同的生存期,即主体对象不存在时,其包含的对象也不存在。合成关系的表示方法类似于聚集关系,不同之处在于其菱形符号为实心。
5.19 依赖关系常常出现在哪些情况下?
答:
1. 一个类向领一个类发送消息
2. 一个类是另一个类的某个或者某些操作的数据成员类型
3. 一个类是另一个类的操作的参数模型
5.20 什么是交互图?
交互图:
交互图用来对软件系统的动态行为建模,显示了Actor和对象之间是如何进行通信来完成用例的各个步骤或者其他功能的。
6.1 设计活动的总体原则包括哪些?
设计活动的总体原则:
1. 设计过程不应陷入片面性
2. 设计应能够追踪分析模型
3. 设计应该选择合适的技术
4. 设计应该选择合适的技术
5. 设计应该选择合适的技术
6. 设计应该是可集成的
7. 设计应该尽可能地提高抽象层次
8. 设计应该是可复用的
9. 设计应该是可维护和可拓展的
10. 设计的系统应该有韧性
11. 设计应该具有一致性
12. 设计的交互界面应该是友好的
13. 设计评审
6.2 什么是软件构架?
软件构架:
在UML中,构架是指系统的组织结构,它可以递归解析为通过接口交互的部件、连接部件的关系以及组装部件的一些限制条件,通过接口交互的部件有类、构件和子系统。
总之,软件构架反映了系统整体的组织结构和基本特征
6.3 详细设计的任务是什么?
详细设计的任务:
详细设计的任务是在软件构架的基础上,进一步确定如何实现目标系统,具体包括系统的模块(如类及其方法)逻辑的详细设计、系统数据结构的设计、系统数据结构的设计、系统人——机接口的设计等。
6.4 分治的优点是什么?分治要考虑哪些问题?
优点:
1. 缩小问题空间,减少问题复杂度和开发工作量
2. 便于并发执行,缩短开发时间
3. 适合团队协作,降低实施难度
4. 预防开发中的多米诺骨牌效应
5. 容易产生可复用部件
分治要考虑的问题:
1. 分治是否可以无限分解,是否越细越好?
2. 从技术的角度讲,如何分治?
3. 软件开发需要一个时间周期,从开发过程的角度讲,如何将任务分解到不同的时间域上?
6.5 抽象的优点是什么?
优点:
1. 抽象有利于认识事物的普遍特征和基本原理
2. 抽象可以帮助设计人员制定出模块的“框架”
3. 抽象有利于软件的复用
4. 抽象可以提高系统的可扩展性
6.6 请分别解释里氏替换选择、开-闭原则、依赖倒转原则和接口隔离原则。
里氏替换选择:
子类可以替换父类,可以出现在父类能出现的任何地方。
开——闭原则:
一个软件实体应当对扩展开放,对修改关闭。
依赖倒转原则:
要依赖于抽象(接口或者抽象类),不要依赖与具体类。
接口隔离原则:
使用多个专门接口比使用单一的总接口要好得多。
6.7 什么是抽象类?什么是接口?他们有什么不同?
抽象类:
不可被实例化的类。
接口:
是一些不包含具体实现的方法特征的集合。
不同:
1. 接口没有具体的实现方法,抽象可以有。
2. 抽象类只支持单继承,即继承它的子类只能有它这一个超类。
3. 对于接口而言,一个具体类可以有多个实现的接口。
6.8 什么是内聚?请列举内聚的种类,并说明哪些内聚类型较理想?
内聚:
内聚是一个模块内部各部件之间联系紧密程度的度量。
功能内聚:
所有部件处理同一组数据,共同完成单一的功能,用符号F表示。
顺序内聚:
各部件之间既有数据联系,又有控制联系,用符号S表示。
通信内聚:
所有部件都访问同一组数据,各部件只有数据关系、没有控制关系。用符号C表示。
过程内聚:
只有控制联系,没有数据联系。符号P表示。
时间内聚:
无数据、控制联系,部件之间具有时间联系。符号T表示。
实用程序内聚:
不能归入上述内聚类型的部件放到一起。符号U表示。
偶然内聚:
模块执行一些无关的功能或者难以定义的功能,模块内部各部件之间没有任何关系,如数据关系、控制关系、时间关系,或者为了复用目的而放到一起的实用逻辑关系。符号X表示。
层内聚:
将相关服务的功能放到一起,成为一层,而将其他内容排除在外。符号L表示。
6.9 什么是耦合?请列举耦合的种类,并解释耦合谱系。
耦合:
耦合是模块间相互联系强弱的度量。
内容耦合:
一个模块直接进入另一个模块中存取其数据或者使用其服务时。
公共耦合:
两个模块间通过一个公共环境进行数据交换。
外部耦合:
模块对外部系统有依赖关系。
控制耦合:
两个模块之间通过接口的参数表交换开关数据,旨在控制另一个模块的执行逻辑。
印记耦合:
两个模块之间通过参数交换方式产生耦合,并且交换的是数据结构,而不是数据元素。
数据耦合:
两个模块之间通过接口的参数表交换信息数据,并且这些信息数据的类型是基本数据类型。
6.10 什么是软件复用?什么是CBSD?什么是产品线工程?
软件复用:
软件复用是指重复使用为了复用目的而设计的软件的过程。
CBSD:
基于组件的软件开发(Component-Based Software Development)通过一些预先构建的软件组件来组装成新的软件,而不是从头开始开发。
6.11 传统的设计建模方法有哪些?
传统的设计建模方法:
1. 层次图
2. 结构图
3. HIPO图
等。
6.12 根据你的理解,绘制一张在线宠物商店的层次图。
书本127页,图6.27 宠物商店系统的层次图
6.13 设计一张在线宠物商店登录功能的程序流程图。
参考书本129页,图6.31 工资计算问题的流程图
6.14 面向对象的设计建模方法有哪些?请分别介绍。
方法:
1. 包
2. 类图
3. 构件图
4. 部署图
等。
6.15 根据你的理解,设计一张在线宠物商店与购物车功能相关的类图。
参考书本133页,图6.35 宠物商店与系统登录相关的类图
6.16 请举出一些不良界面的例子
例子:
1. 对用户的主观臆测
2. 不友好
3. 晦涩难懂
4. 行为不当
5. 界面复杂
6.17 为了达到以用户为中心的设计目标,有哪些主要做法?
答:
为了避免或者减少因人机交互界面的问题而造成的软件风险,提倡以用户为中心的设计(User- Centered Design,简称UCD)。
1. 理解用户的特征
2. 理解用户的任务
3. 确保用户参与
4. 遵循良好的界面设计原则
6.18 人机界面设计应遵循哪些指导准则?
指导原则:
1. 系统的全部界面格式和风格应该保持一致
2. 适当组织菜单层次和菜单项
3. 为不同的用户或者功能提供不同的界面服务
4. 力求用户需要的输入量最少
5. 对于一些破坏性命令或者功能选项,应该要求进行确认,以避免误操作,造成不能恢复的结果
6. 提供有效的系统保障能力
7. 布局合理
8. 简单易懂,整洁有序,条理清晰
9. 界面具有帮助功能
10. 有一定的智能
7.1 有哪些广泛使用的程序设计语言?
语言:
1. 汇编语言
2. BASIC语言
3. COBOL语言
4. C语言
5. Ada语言
6. Java语言
7. .NET系列语言。
7.2 开发在线宠物商店系统时,你打算用什么语言开发?为什么?
7.3 编写一个好风格的程序,要从几个方面着手?对于程序语句的处理,你还有哪些好的建议?
方面:
1. 程序的内部文档
2. 程序的标识符
3. 程序清单的安排
4. 程序中的语句
7.4 对于赋值语句
A1 = B * C + 3 ** D / -3 * X + Y * 4
与
A2 = (B * C) + ((3 ** D) / (一3)) * X + (Y * 4))
哪一个更容易阅读?对于第二个表达式使用了括号,你认为括号的嵌套层次数限制到多少是适当的?如果嵌套的层次太多,超过了规定的层次数,如何解决这个问题?
答:
第二个表达式更容易阅读。
7.5 某单位计算员工工资的方法是
工资总额 = 基本工资 + 奖金 + 工龄数 * 150 - 迟到次数 * 30 - 缺勤次数 * 100。
请设计相关变量,并描述这个程序的表达式。
7.6 什么是白盒测试?有哪些主要方法?
白盒测试:
使用白盒方法导出测试用例是依据模块的编码,即模块的内部逻辑,对测试者是可见的,故称白盒测试。
白盒测试的主要方法:
1. 基本途径测试
2. 条件测试
3. 循环测试
7.7 什么是黑盒测试?有哪些主要方法?
黑盒测试:
黑盒测试在程序或者模块的接口级进行,而不考虑程度内部逻辑。
黑盒测试的主要方法:
1. 等价类划分
2. 边界值分析
7.8 什么是单元测试?设计一个针对在线宠物商店系统身份验证模块的单元测试策略。
单元测试:
单元测试是把一个模块作为独立的程序单元进行测试,以保证它能够正确执行规定的功能。
7.9 什么是驱动模块和存根模块?如何实现他们?
驱动模块:
用以模拟被测模块的上级模块。驱动模块在集成测试中接受测试数据,把相关的数据传送给被测模块,启动被测模块,并打印出相应的结果。
存根模块:
用以模拟被测模块工作过程中所调用的模块。存根模块由被测模块调用,它们一般只进行很少的数据处理,例如打印入口和返回,以便于检验被测模块与其下级模块的接口。
7.10 什么是集成测试?有哪几种?各有什么优缺点?
集成测试:
集成测试将已经通过彻底测试的模块组装起来,已形成一个系统或者软件产品。
集成测试有以下测试方式:
1. 自顶向下集成测试
2. 自底向上集成测试
3. 自顶向下和自底向上相结合的集成测试
自顶向下集成测试:
优点:
能够早期发现主要的设计错误。
缺点:
潜在的,可再使用模块可能没有得到充分的测试。
自底向上集成测试:
优点:
在合理的调度下,可以减少甚至避免开发存根模块的开销。
缺点:
逻辑控制模块测试较晚,将导致大量的程序修改。
自顶向下和自底向上相结合的集成测试:
将二者优点结合并且弱化缺点。
7.11 什么是回归测试?为什么要进行回归测试?回归测试的用例应该包括哪些类型的测试用例?
回归测试:
当有新模块加入时,要对原测试通过的测试模块重新进行测试。
进行回归测试的原因:
当新模块引入时,原来成功的测试用例失效,错误通常在新加入的模块或者接口上。
回归测试用例应包括下面三种类型的测试用例:
1. 执行测试所有软件功能的代表性测试用例
2. 测试可能受改变影响的那些功能的测试用例
3. 测试已经改变的软件部件的测试用例
7.12 对在线宠物商店系统设计一个集成测试策略。
8.1 什么是项目管理?
项目管理:
一种对人力和资源进行管理、分配和调度的过程。
8.2 什么是软件特征量?有哪些主要的基础特征量?
软件特征量:
一个系统、部件或者过程的一个给定属性的程度的定量度量。
基础特征量:
1. 软件规模
2. 开发成本
3. 开发期限
4. 开发工作量
5. 软件质量
8.3 面向功能点的软件特征量和面向尺寸的软件特征量相比,有哪些优点?
答:
编码行度量依赖于程序设计语言。完成同样的功能,对于不同的设计语言所需的编码条数可能显著不同。特别是项目的计划者必须在项目的分析和完成之前去估计它,这是相当困难的,于是人们提出了面向功能的特征量。
面向功能的软件特征量是使用应用程序交付的功能度的度量作为规范值。
8.4 假设你的团队要开发一个在线宠物商店系统,你怎样估算项目的开发成本和工作量?
8.5 对在线宠物商店系统设计一个进度计划。
8.6 软件企业中的人力资源具有哪些特点?
软件企业中的人力资源的特点:
1. 高技术更新性
2. 高主观经验性
3. 效率波动性
4. 不可存储性
5. 角色灵活性
6. 绩效模糊性
8.7 软件企业人力资源管理的主要任务是什么?
8.8 对在线宠物商店项目设计一个人员配置方案,包括角色、职责及相关人数等。
8.9 什么是SQA?SQA的主要任务是什么?执行SQA的难点是什么?
SQA:
软件质量保证是为了保证软件的质量所要需要的一系列有计划的和有系统的活动。
SQA的主要任务:
1. 为项目准备SQA计划
2. 执行技术审查
3. 执行项目的软件开发过程的评审
4. 收集和分析软件度量信息
5. 持续跟踪项目的错误或者问题
6. 向上级管理者提供质量分析报告
7. 向软件项目团队提供反馈
8. 协调变更控制和变更管理
执行SQA的难点:
1. 缺乏专业的SQA工程师
2. 容易出现沟通问题
3. 不受管理层重视
4. 缺乏对项目的“整体观“
5. 可验证性差
8.10 基于统计的软件质量包括哪些步骤?
基于统计的软件质量的步骤:
1. 收集和分类软件缺陷信息
2. 尝试追踪的基本原因
3. 使用Pareto原理,孤立关键少数原因
4. 校正引起这些缺陷的关键少数原因
8.11 软件风险的特性是什么?
软件风险的特性:
1. 不确定性
2. 可能损失
8.12 假设你要带领一个团队开发在线宠物商店系统,你认为会存在哪些风险?如何管理这些风险?
8.13 什么是软件配置?什么是软件配置管理?什么是基线?SCM的任务包括哪些?
软件配置:
软件配置是指软件开发过程中的三个主要类别的信息,包括计算机程序、描述计算机程序的文档,以及程序内部和外部的数据。
软件配置管理:
软件配置管理是贯穿于整个软件工程过程的一种保护性活动,该活动标识、组织和控制对正在开发软件进行的修改,能够有效地保证软件质量,并提高软件生产率。
基线:
已经通过正是评审和批准的规格说明或者产品。
SCM的任务:
1. 统一标志配置项
2. 版本控制
3. 变更控制
4. 配置审核
5. 状态报告