赞
踩
目录
软件工程教程课后参考答案
(1)D (2)B (3)C (4)D (5)D (6)A (7)D
(1)什么是软件危机?软件危机表现在哪些方面?
答:具体来说,软件危机出现的原因可以概括如下。
① 忽视软件开发前期的需求分析。
② 开发过程缺乏统一的、规范化的方法论指导。
③ 文档资料不齐全或不准确。
④ 忽视与用户之间、开发组成员之间的交流。
⑤ 忽视测试的重要性。
⑥ 不重视维护或由于上述原因造成维护工作的困难。
⑦ 从事软件开发的专业人员对这个产业的认识不充分,缺乏经验。
⑧ 没有完善的质量保证体系。
具体地说,软件危机的表现形式可以概括如下。
① 软件开发费用和进度失控。
② 软件系统实现的功能与实际需求不符。
③ 软件的可靠性差。
④ 软件难以维护。
⑤ 软件通常没有适当的文档资料。
⑥ 软件成本在计算机系统总成本中所占的比例居高不下,且逐年上升。
⑦ 软件生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
(2)简述软件和软件工程的定义以及软件工程的形成过程。
答:软件是计算机系统中与硬件相对应的另一部分,是一系列程序、数据及其相关的文档集合。在这里,程序是按照特定顺序组织的计算机数据和指令的集合;数据是使程序能正常执行的数据结构;文档是是开发、使用和维护程序所需要的图文资料。
软件工程是应用计算机科学理论和技术以及工程管理原则和方法,按预算和进度,实现满足用户要求的软件产品的定义、开发、发布和维护的工程或进行研究的学科。
软件工程的发展经历了以下四个阶段。
① 20世纪70年代。为了解决软件项目失败率高、错误率高以及软件维护任务重等问题,人们提出了软件生产工程化的思想,希望使软件生产走上正规化的道路,并努力克服软件危机。人们发现将传统工程学的原理、技术和方法应用于软件开发,可以起到使软件生产规范化的作用。
② 20世纪80年代。面向对象的方法与技术受到了广泛的重视,maltalk-80的出现标志着面向对象的程序设计进入了实用和成熟阶段。20世纪80年代末,逐步发展起来的面向对象的分析与设计方法,已经形成了完整的面向对象技术体系,使系统的生存周期更长,适应更大规模、更广泛的应用。
③ 20世纪90年代末。出现了许多的敏捷方法,如自适应软件开发、水晶项目开发、动态系统开发、极限编程、特征驱动开发和Scrum等。这些主要的敏捷方法的创始人在2001年聚集一堂,并发表了敏捷开发宣言。
④ 21世纪。对快速应用开发(Rapid Application Development,RAD)追求的趋势仍在继续,在信息技术、组织、竞争对策及环境等方面的变革步伐也正在加快。云计算、大数据、物联网、人工智能和机器学习、移动互联网、三维打印、可穿戴式技术、虚拟现实、增强现实、社交媒体、无人驾驶汽车和飞机等技术不断涌现。“大规模计算”、“自治和生化计算机”、“模型驱动体系结构”和“构件化软件开发”等新领域都可能成为接下来软件工程发展的主要方向。
(3)软件工程的目标是什么?如何解决多目标之间的矛盾?
答:软件工程要达到的基本目标包括以下六方面。
① 达到要求的软件功能。
② 取得较好的软件性能。
③ 开发出高质量的软件。
④ 付出较低的开发成本。
⑤ 需要较低的维护费用。
⑥ 能按时完成开发工作,及时交付使用。
软件工程的首要问题是软件质量。软件工程的目的就是在以上目标的冲突之间取得一定程度的平衡。因此,在涉及平衡软件工程目标这个问题的时候,软件的质量应该摆在最重要的位置加以考虑。软件质量可用功能性、可靠性、可用性、效率、可维护性和可移植性等六个特性来评价。
(4)什么是软件生存周期?它分为几个时期?几个阶段?
答:软件生存周期是指从设计该产品的构想开始,到软件需求的确定、软件设计、软件实现、产品测试与验收、投入使用,以及产品版本的不断更新,到该产品最终被市场淘汰的全过程。软件生存周期由软件定义、软件开发和运行维护三个时期组成,划分为问题定义、可行性研究、需求分析、概要设计、详细设计、软件实现和单元测试、综合测试和运行维护八个阶段。
(5)什么是软件生存周期模型?有哪些主要软件过程模型?
答:软件生存期模型也称为软件过程模型,是从软件项目需求定义直至软件运行维护为止,跨越整个生命周期的系统开发、运行和维护所实施的全部过程、活动和任务的结构框架。典型的包括瀑布模型、快速原型模型、增量模型、螺旋模型、统一过程、敏捷过程等。
答:SWEBOK将软件工程知识体系划分为10个知识域,包含在两类过程中。一类过程是开发与维护过程,包括软件需求、软件设计、软件构造、软件测试和软件维护;另一类过程是支持过程,包括软件配置管理、软件工程管理,软件工程过程、软件工程工具写方法、软件质量。每个知识域还可进一步分解为若干个论题,在论题描述中引用有关知识的参考文献,形成一个多级层次结构,以此确定软件工程知识体系的内容和边界。
(1)用最小的代价在尽可能短的时间内确定问题是否能够解决
(2)投资效益分析
(3)值得去开发
(4)需求分析,设计
(5)开发成本、比较和权衡
(6)经济角度
(7)编写可行性分析报告
(8)技术可行性、经济可行性、社会可行因素方面的可行性、操作可行性
(9)直接成本、间接成本、有形收益、无形收益
(10)因使用新系统而增加的收入、使用新系统可以节省的运行费用
(11)货币的时间价值、投资回收期、纯收入
(12)经济效益、投资
(13)最初投资
(14)软件的工作范围、估算开发所需要资源、估算软件成本费用和进度安排
(15)软件系统的功能、软件系统的性能、接口、可靠性
(16)泡泡图
(17)同时出现,只取其一
(18)输入,输出
(19)加工,名字
(20)数据存储
(1) A (2) C (3)C (4) B (5)D (6) C (7) B (8) A (9) D (10) D
(11)B (12)B (13)D (14) D (15)A
(1) 可行性研究主要研究哪些问题?试说明之。
解:可行性研究的任务是决定软件项目做还是不做。对技术可行性、经济可行性、社会可行性、开发方案的可行性及运行可行性等方面进行分析。
(2)设计一个软件的开发成本为5万元,寿命为3年。未来3年的每年收益预计为:22000元,24000元,26620元。银行年利率为10%。试对此项目进行成本-效益分析,以决定其经济可行性。
解:进行投入产出分析时,未来的收益和现在消耗的成本不能直接进行比较,必须在考虑货币的时间价值后,才能进行准确的投入、产出分析。
22 000/(1+ 10%)+24000/(1.1×1.1)+26 620/(1.1×1.1×1.1)-50 000=20 000+19834.71 + 20 000- 50 000= 9834.71
经济可行性分析投资收益为: 9834.71元。
(3)某软件公司统计发现该公司研发部门每一万行C语言源代码形成的源文件(.c和.h文件)约为250K。某项目的源文件大小为3.75M。
①问该项目的规模是多少KLOC(源代码行数)?该公司研发部门的生产率是0.625KLOC/人月,人工价是10000元/人月。
②问工作量和总成本是多少?
③每行代码的价值是多少?
解:①3.75M/250K=15万行=150KLOC
②工作量=规模/生产率=150KLOC/0.625KLOC=240人月
成本=工作量×人工价=240人月*10000元/人月=240万元
③240万元/15万行=16元/行
(4) 某计算机系统投入使用后,每年可节约人民币20000元,假设软件生存期为4年,系统投资额为50000元,若年利率为5%,试计算效益。
解:表面上看,4年共节约20000*4=80000元,扣除投资50000元可产生纯收入25000元。其实不然,因为投资在前,效益产生有一个时间过程,所以需要把4年内每年预计节约的钱折合成当前价值才能比较。若按年利率5%计算,折合到当前值的数目如表1所示:
表1每年效益折算的当前值
年 效益(元) 利率(1+0.05)n 当前值(元) 预计当前值(元) |
1 20000 1.05 19047 19047 2 20000 1.1025 18140 37187 3 20000 1.1576 17277 54464 4 20000 1.2155 16454 70918 |
根据表1可计算出以下经济指标:
纯收入=4年累计的当前值-系统投资=70918-50000=20918(元)
投资回收期≈3+ (55000-54464)/16454-3.033年
(5)某旅馆的电话号码服务如下:
可以拨分机号和外线号码。分机号是从7201~7299。外线号码先拨9,然后是市话号码或长话号码。长话号码是以区号和市话号码组成。区号是从100~300中任意的数字串。市话号码是以局号和分句号组成。局号可以是455、466、888、552中任意一个号码。分局号是是任意长度为4的数字串。
要求:写出在数据字典中,电话号码的数据条目的定义(即组成)
解:电话号码 = 分机号 | 外线号码
分机号 = 7201…7299
外线号码 = 9+[市话号码 | 长话号码]
长话号码 = 区号+市话号码
区号 = 100…300
市话号码 = 局号+分局号
局号 = [455|466|888|552]
分局号 = 4{数字}4
(6)某工厂的采购部每天需要一张订货报表,报表按零件编号排序,表中列出所有需要再次订货的零件。对于每个需要再次订货的零件,应该列出下述数据:零件编号,零件名称,订货数量,目前价格,主要供应者,次要供应者。零件入库或出库称为事务,通过存放在库房的CRT终端把事务报告给定货系统。当零件库存量少于库存量临界值,决定再次订货,画出订货系统的数据流图。
解:问题分析:源点/终点,处理,数据存储,数据流
1)源点/终点:系统之外的实体(人,物,系统)
源点:仓库管理员
终点:采购员
2)处理:
需要报表->产生报表
处理日常事务->事务处理
3)数据存储:
订货信息
库存清单
4)数据流:
订货报表:零件编号、名称、数量……
事务:零件编号、事务类型、数量……
Step1:顶层数据流图——系统级
正在上传…重新上传取消
表1 订货系统顶层DFD图
构成:基本系统模型+源点+终点
一般采用自顶向下逐步细化的分层绘制方法
Step2:进一步分解——功能级
正在上传…重新上传取消
表2 订货系统0层DFD图
Step3:进一步分解——功能级
正在上传…重新上传取消
表3 订货系统1层DFD图
(7)开发某工程中使用的CAD系统需要投资20万元,经估算在工程中用该CAD系统后将取代大部分人工设计工作,每年可节省9.6万元。若该软件的生存期为5年,年利率按5%计算,试求该项目的净收入。
解:若按年利率5%计算,货币时间价值折合到当前值的数目如表2所示:
表2 货币时间价值( 万元 )
年份 | 将来值 | (1+i)n | 现在值 (万元) | 累计现在值 (万元) |
1 | 9.6 | 1.05 | 9.1429 | 9.1429 |
2 | 9.6 | 1.1025 | 8.7075 | 17.8513 |
3 | 9.6 | 1.1576 | 8.2928 | 26.1432 |
4 | 9.6 | 1.2155 | 7.8979 | 34.0411 |
5 | 9.6 | 1.2763 | 7.5219 | 41.5630 |
纯收入=5年累计的当前值-系统投资=41.5630-20=21.5630 (万元)
(1)B (2)D(3)B(4)B(5)B
(1)答:需求分析需要4个步骤,分别获取、建模、描述和验证。获取需求实质上是一个需求收集的过程,要做充分的调查研究。通常是从分析当前系统包含的数据开始,分析当前系统在处理信息时的不足,用户希望改进的主要问题及迫切性等。收集需求的常用方法有问卷调查、访谈、实地操作、建立原型等,收集的需求主要包括功能需求、性能需求、可靠性需求、可用性、人机界面需求、约束、出错处理等内容。需求分析的核心任务是建立分析模型,即把来自用户的需求信息通过分析、提取、归纳、抽象建立起描述目标系统的模型。传统的面向过程的软件工程方法学,主要采用数据流图建立目标系统的逻辑模型。需求描述是指编制需求分析阶段各类文档。一般情况下,对于大型、复杂软件系统在需求分析阶段会产生3个文档:系统定义文档(用于描述用户需求的报告)、系统需求规格说明书、软件需求规格说明书,分别从不同的角度和层次描述项目开发的需求。对于简单的小规模软件系统,只需编制SRS即可。因为需求分析的成果是后续开发的重要依据和基础,为了提高软件产品的最终质量,降低开发成本,必须对需求分析结果从完整性、一致性、有效性和现实性4个方面进行严格的正确性验证,并且要对需求的变更实施可回溯的管理,避免无法追踪错误来源导致的混乱。
(2)答:包括6个方面:确定对系统的综合要去;分析系统的数据需求;建立系统的逻辑模型;修订系统开发计划;编写软件需求规格说明书;需求分析评审。
(3)答:结构化分析方法采用归纳思维和演绎思维的逻辑方法,逐步建立目标系统的逻辑模型(包括数据模型、功能模型和行为模型),进而描绘出满足用户要求的软件系统。
结构化需求分析方法基于“分解“和”抽象“的基本指导思想,采用面向数据流自顶向下逐步求精的分析策略,逐步建立目标系统的逻辑模型。
“分解“是面对一个复杂系统时,为了将复杂性降低到人类认知能力可以掌握的程度,而把一个大系统(问题)分解成若干个小问题,然后分别解决。
需求分析的目标之一是把数据流图中的数据流和数据存储分解定义到元素级。通常做法是从数据流图的输出端着手分析,这是因为输出数据决定了系统必须具有的最基本的组成元素(即功能)。
具体做法是,沿着数据流图从输出端往输入端回溯,以确定每个数据元素的来源,与此同时也就初步定义了有关的算法。通常把分析过程中得到的数据元素的信息定义成数据字典,对算法的简明描述记录在IPO表中。通过分析而补充的数据流、数据存储和处理,应该添加到数据流图的适当位置。复查的过程是从输入端开始,向用户解释输入的数据是经过怎样的处理一步步变成了输出数据。反复经过上述过程,把数据流图“分解“扩展到更低(即更详细)的层次,从而得到更具体、更令人满意的功能性需求的了解。
(4)答:首先进行初步访谈,通过用户对基本问题的回答,初步确定待解决问题的范围和解决方案。然后开发者和用户分别写出“产品需求”。
定会议的时间和地点以及主持会议的协调人。邀请双方的代表出席会议,并在会前预先把写好的产品需求分发给每一位与会者。
要去每位与会者会前认真审查产品需求,并列出作为系统环境组成的部分对象、系统将产生的对象以及系统为了完成自己的功能将使用的对象。此外,还要求每位与会者列出操作这些对象或与这些对象交互的服务(即处理或功能)。最后还应该列出约束条件(例如成本、规模、完成日期)和性能标准(例如速度、容量)。并不希望每位与会者列出的内容毫无遗漏,但求能够获得对目标系统准确的认识。
会议开始后,讨论的第一个问题是是否需要这个新产品,一旦大家都同意确实需要这个新产品,每位与会者则把他们会前准备好的列表展示出来供大家讨论。在这个阶段,严格禁止批评和争论,以免影响每位与会者深入交流的意愿。
在讨论的基础上,大家一起共同创建一张包含各个议题的组合列表。调整后的组合列表并不真正删除某项内容。在每个议题的组合列表都建立起来后,在由协调人主持讨论这些列表,以形成每个议题都达到意见一致的局面。
一旦得到了意见一致的列表,就把与会者分成更小的小组,针对每张列表中的项目制定小型规格说明(需要对列表中包含的单词或短语进行准确的说明)。
然后,每个小组向全体与会者展示他们制定的小型规格说明,供大家讨论。意见一致后,每个与会者都制定一整套确认标准,并把自己制定的标准再次提交会议讨论,以创建出意见一致的确认标准。最后,有一名或多名与会者根据会议成果起草完整的软件规格说明书。
(1)描绘本系统功能的数据流图如图所示。
正在上传…重新上传取消
描绘本系统数据模型的E-R图如下:
正在上传…重新上传取消
(2)描绘本系统的功能级数据流图如下:
正在上传…重新上传取消
(1)A (2)A B C D (3)B D (4)C (5)A
(1)答:总体设计目标是:是得到良好的软件总体结构,即独立性良好、规模适中的一组模块以及深度、宽度、扇入、扇出合适的系统结构。主要任务是把分析阶段得到的数据模型映射成数据库设计,把数据流图映射成软件功能结构,行为模型可以用于详细设计阶段的流程、算法设计。
(2)答:设想供选择的方案,选取合理的方案,推荐最佳方案,功能分级,设计软件结构,数据库设计,制定测试计划,编写文档,审查和复查。
(3)答:改进软件结构提高模块独立性,模块规模应该适中,深度、宽度、扇入、扇出都应当适中,模块的作用域应该在控制与内,降低模块结构的复杂度,设计单入口、单出口的模块,模块功能应该可以预测。
(4)答:复查基本系统模型,复查并精化数据流图,确定数据流图的类型,确定数据流的边界,完成“第一级分解”,完成“第二级分解”,优化。
(5)答:机械地遵循上述映射规则很可能会得出一些不必要的控制模块,如果它们确实用处不大,那么应该合并它们。如果控制模块功能过分复杂,可以适当地增加中间层的控制模块或者进一步将它们分解。
何优化过程不能违背设计原理,不能违背问题域常识、不能为了最求所谓的“最佳设计”而优化。
设计的优化可能会导出不同的软件结构,要从中选优,力求得到“最好“的结构。避免把结构的优化留到过程设计阶段,这也是把结构设计和过程设计分开的价值所在。
结构简单往往表明效率高。设计优化应该力求做到在有效模块化的前提下使用尽可能少的模块数,以及在能够满足信息要求的前提下使用最简单的数据结构。
(1)答:工资管理子系统数据流图如下所示。
正在上传…重新上传取消
工资管理子系统层次图如下:
正在上传…重新上传取消
(2)顶层数据流图
正在上传…重新上传取消
还书处理分支数据流图
正在上传…重新上传取消
查询处理分支数据流图
正在上传…重新上传取消
借阅处理分支数据流图
注意事项:必须保证登记完借书文件和修改完库存后再出借图书给借阅人,“登记借书文件”和“修改库存”谁先谁后影响不大。
正在上传…重新上传取消
(1) 顺序、选择和循环三种基本控制结构
(2) 完整嵌套
(3) 层次线
(4) 程序流程图
(5) 表格
(6) 模块接口计
(7) 数据结构
(8) 结构化程序设计、自顶向下、逐步求精油
(9) SP、问题分析图
(10) 结构化
(11) 详细设计说明书
(1) D (2) C (3) C (4) B (5) A (6) B (7) B (8) A
(9) D (10) C (11) B (12) B (13) A (14) B (15) D
(1) 详细设计的基本任务是什么?有哪几种描述方法?
答:①为每个模块确定采用的算法。
②确定每一模块的内部数据结构及数据库的物理结构。
③确定模块接口的细节。
④要为每一个模块设计出一组测试用例。
⑤编写文档,参加复审。
详细设计的描述方法有图形、表格和语言,其中,图形常用结构化程序流程图、盒图和PAD(问题分析图)为描述工具,语言常用过程设计语言(PDL)来作为工具。
①采用自顶向下、逐步求精的程序设计方法。
②使用三种基本控制结构构造程序。任何程序都可以由顺序、选择、重复(循环)三种基本控制结构构造。
③每个程序模块只有一个人口和一个出口。
①可随心所欲地控制流程线的流向.容易造成非结构化的程序结构。
②流程图不易反映逐步求精的过程,往往反映最后结果。
③不易表示数据结构。
为克服流程图的最大缺陷,要求流程图由三种控制结构顺序组合和完全嵌套而成,不能交叉,这样的流程图是结构化的流程图。
(5) 答:PAD的特点如下。
①清晰反映程序的层次结构。
②支持逐步求精的设计方法,自左至右逐步细化。
③易读易写,使用方便。
④支持结构化的程序设计原理。
⑤可自动生成程序。
(6) 答:PDL是在伪码的基础上,扩充了模块的定义与调用、数据定义和输入输出而形成的。它是一种用于描述模块算法设计和处理细节的语言。分为内外两层语言,外层语法具有严格的规则;内层表示实际操作和条件的自然语言,语法自由。
PDL表示的程序结构一般有下列几种:顺序结构、选择结构、重复结构、出口结构、扩充结构(模块定义、模块调用、数据定义、输人/输出)等。
PDL的特点如下:
①关键字应有固定的语法,提供结构化的控制结构和数据说明,并在控制结构的头尾都加关键字,体现模块化的特点。
②用自然语言叙述系统处理功能。
③应有说明各种数据结构的手段.
④描述模块定义和调用及模块接口模式。
PDL的优缺点如下:
①可以灵活地表达算法或作为注释直接插人到原程序当中,可用普通的文字处理系统进行书写和编辑,并可用自动处理程序自动生成。就明的道
②不如图形工具形象直观,对复杂的描述不如判定表清晰。
(7)答:用方框图来代替传统流程图的方法,称为N-S图。N-S图的优点是所有程序结构均用方框表示,无论并列或嵌套,程序结构清晰可见。而且它只能表达结构化的程序逻辑,使用它的人必须遵守结构化程序设计的规定。不足是当程序内嵌套的层数增多时,内层的方框会越来越小,从而增加绘图的难度,并使图形清晰性受影响。
(1)用Halstead度量还可以用来预测程序中可能存在的错误E。一个程序对75个数据库项共访问1300次,对150个运算符共使用了1200次,预测该程序的错误数是多少?
那么预测该程序的错误数:
E = (1200+1300)*log2(75+150)/3000 » 6.5
即预测该程序中可能包含6~7个错误。
(2)假设某航空公司规定,乘客可以免费托运重量不超过30kg的行李。当行李重量超过30kg时,对头等舱的国内乘客超重部分每公斤收费4元,对其他舱的国内乘客超重部分每公斤收费6元,对外国乘客超重部分每公斤收费比国内乘客多一倍,对残疾乘客超重部分每公斤收费比正常乘客少一半。用判定树表示计算行李费的算法。
正在上传…重新上传取消
正在上传…重新上传取消
图1 用判定树表示计算行李费的算法
(3)画出下列伪码程序的程序流程图和盒图
START
IF p THEN
WHILE q DO
f
END DO
ELSE
BLOCK
g
n
END BLOCK
END IF
STOP
正在上传…重新上传取消
(11)B (12)A
(1)软件测试应该划分为几个阶段?各个阶段应重点测试的内容是什么?
答:软件测试可分为单元测试,集成测试,系统测试,验收测试四个阶段。
单元测试又称模块测试、逻辑测试或结构测试,是针对软件设计的最小单位——程序模块或功能模块,进行正确性检验的测试工作。其目的在于检验每个程序单元能够正确实现详细设计说明中的模块功能、性能、接口和设计约束等要求,发现各个模块内部可能存在的各种错误。
集成测试又称组装测试、综合测试或联合测试。通常在单元测试的基础上,将所有的程序模块进行有序的、递增的测试。集成测试是检验程序单元或部件的接口关系,逐步集成为符合概要设计要求的程序部件或整个系统。
系统测试为验证和确认系统是否达到其原始目标,而对集成的硬件和软件系统进行的测试。系统测试是在真实或模拟系统运行的环境下,检查完整的程序系统能否和系统(包括计算机硬件、外设、网络和系统软件、支持平台等)正确配置、连接,并满足用户需求。系统测试的主要依据是《系统需求规格说明书》文档。
验收测试又称交付测试,是软件在完成了单元测试、集成测试、系统测试之后,产品发布之前进行的软件测试活动。验收测试又分为Alpha测试(α测试)和Beta测试(β测试),Alpha测试是由一个用户在开发环境下进行的测试,或者是公司内部的用户在模拟实际操作环境下进行的受控测试,Beta测试是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。
(2)在软件测试中,应遵循哪些原则?
答:在软件测试过程中,通常应该遵循以下七个原则。
① 所有的测试都应追溯到用户需求。这是因为软件的目的是使用户完成预定的任务,满足其需求。而软件测试揭示软件的缺陷和错误,一旦修正这些错误,就能更好地满足用户需求。
② 应尽早地和不断地进行软件测试。由于软件的复杂性和抽象性,在软件生命周期各阶段都可能产生错误,所以不应把软件测试仅仅看作是软件开发的一个独立阶段,而应当把它贯穿到软件开发的各个阶段中去。在需求分析和设计阶段就应开始进行测试工作,编写相应的测试计划及测试设计文档,同时坚持在开发各阶段进行技术评审和验证,这样才能尽早发现和预防错误,杜绝某些缺陷和错误,提高软件的质量。测试工作进行得越早,越有利于提高软件的质量,这是预防性测试的基本原则。
③ 在有限的时间和资源下进行完全测试并找出软件所有的错误和缺陷是不可能的,软件测试不能无限进行下去,应适时终止。因为,测试输入量大、输出结果多、路径组合多、用有限的资源来达到完全测试是不现实的。
④ 测试只能证明软件存在错误,而不能证明软件没有错误。测试无法显示潜在的错误和缺陷,继续进一步测试可能还会找到其它错误和缺陷。
⑤ 充分关注测试中的集群现象。在测试的程序段中,若发现的错误数目比较多,则残存在该程序段中的错误数目也会比较多,因此应当花较多的时间和代价测试那些具有更多错误数目的程序模块。
⑥ 程序员应避免检查自己的程序。考虑到人们的心理因素,自己揭露自己程序中的错误是件不愉快的事,自己不愿意否认自己的工作。此外,由于思维定式,自己难以发现自己的错误。因此,测试一般由独立的测试部门或第三方机构进行,这样测试相对比较客观。
⑦ 尽量避免测试的随意性。软件测试是有组织、有计划、有步骤的活动,要严格按照测试计划进行,要避免测试的随意性。
(3)什么是黑盒测试?有哪些常用的黑盒测试方法?
答:黑盒测试又称功能测试或数据驱动测试,指通过软件的外部表现来发现缺陷和错误。黑盒测试把测试对象看成一个黑盒子,完全不考虑程序内部结构和处理过程,测试者仅依据程序功能的需求规范考虑,确定测试用例和推断测试结果的正确性,它是站在使用软件或程序的角度,从输入数据与输出数据的对应关系出发进行的测试。
常用的黑盒测试方法有等价类划分、边界值分析、因果图、决策表、错误推测法、场景法等。
(4)什么是白盒测试?有哪些常用的白盒测试方法?
答:白盒测试又称结构测试或逻辑驱动测试,指通过对程序内部结构的分析、检测来寻找问题。白盒测试把程序看成装在一个透明的白盒子里,也就是清楚了解程序结构和处理过程,检查是否所有的结构及路径都是正确的,检查软件的内部动作是否按照设计说明的规定正常进行。
常用的黑盒测试方法逻辑覆盖、基本路径测试、程序插桩等。
(5)请对比白盒测试和黑盒测试。
答:白盒测试和黑盒测试是软件测试的两种基本方法。
黑盒测试优点如下:
1)比较简单,不需要了解程序的内部的代码及实现;
2)与软件的内部实现无关;
3)从用户的角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题;
4)基于软件开发文档,所以也能知道软件实现了文档中的哪些功能;
5)在做软件自动化测试时较为方便。
黑盒测试缺点如下:
1)不可能覆盖所有的代码,覆盖率较低;
2)自动化测试的复用性较低。
白盒测试优点如下:
白盒测试缺点如下:
1)程序运行会有很多不同的路径,不可能测试所有的运行路径;
2)测试基于代码只能测试开发人员做的对不对,而不能知道设计是否正确,可能会漏掉一些功能需求;
3)系统庞大时,测试开销会非常大。
(6)请简述静态测试和动态测试的区别。
答:静态测试不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。
动态测试通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能指标。
(7)什么是集成测试?非增量测试与增量测试有什么区别?
集成测试又称组装测试、综合测试或联合测试。通常在单元测试的基础上,将所有的程序模块进行有序的、递增的测试。集成测试是检验程序单元或部件的接口关系,逐步集成为符合概要设计要求的程序部件或整个系统。
集成测试有两种方法,一种方法是分别测试各个模块,再把这些模块组合起来进行整体测试,这种方法称为非增量集成测试。另一种方法是把一个要测试的模块组合到已测试好的模块中,测试完后再将一个需要测试的模块组合进来测试,逐步把所有模块组合在一起,并完成测试,该方法称为增量集成测试。
(8)什么是调试?什么是测试?二者有何区别?
答:软件调试是查找、分析和纠正程序中错误的过程。软件测试的目的是充分发现软件的错误信息,软件调试是在测试完成结果分析之后,对结果分析发现的错误进行程序诊断,并且寻求改正的过程。软件测试和软件调试常常交替进行。
(1)如图6.21所示,Nextdate函数包含3个变量:month、day和year,函数的输出为输入日期后一天的日期。例如,输入为2000年3月3日,则函数的输出为2000年3月4日。要求输入变量month、day和year均为整数值,并且满足条件:1≤month≤12,1≤day≤31,1920≤year≤2050。请运用等价类划分法设计测试用例。
正在上传…重新上传取消
图6.21 Nextdate示意图
Nextdate函数包含3个变量month、day和year。根据等价类划分原则第一条的内容“在输入条件规定了取值范围或值的个数的情况下,可以确立一个有效等价类和两个无效等价类”,day、month和year分别可以确立一个有效等价类和两个无效等价类。
① day等价类
D1={日期:1≤日期≤31};D2={日期:日期<1};D3={日期:日期>31}。
② month等价类
M1={月份:1≤月份≤12};M2={月份:月份<1};M3={月份:月份>12}。
③ year等价类
Y1={年:1920≤年≤2050};Y2={年:年<1920};Y3={年:年>2050}。
(2)建立等价类表,列出所有划分出的等价类;
Nextdate函数等价类划分表如表6.1所示。
表6.1 Nextdate函数等价类划分表
输入条件 | 有效等价类 | 无效等价类 |
Day | D1{1,…,28} D2{29} D3{30} D4{31} | D5{day<1} D6{day>31} |
Month | M1{1,3,5,7,8,10,12} M2{2} M3{4,6,9,11} | M4{month<1} M5{month>12} |
Year | Y1{平年,1920≤year≤2050} Y2{闰年,1920≤year≤2050} | Y3{year<1920} Y4{year>2050} |
(3)根据列出的等价类表,设计测试用例。
Nextdate函数预期输出分为如下六种情况。
R1: day=day+1;
R2: day=1,month=month+1;
R3: day=1,month=1,year=year+1;
R4: day越界;
R5: month越界;
R6: year越界。
Nextdate测试用例设计结果如表6.2所示。
表6.2 Nextdate测试用例
测试用例 | day | month | year | 预期输出 | 覆盖的等价类 |
Test1 Test2 Test3 Test4 Test5 Test6 Test7 | 15 28 28 29 31 30 31 | 6 2 2 2 3 4 12 | 1999 1999 2000 2000 2006 2010 2016 | 1999年6月16日 1999年3月1日 2000年2月29日 2000年3月1日 2006年4月1日 2010年5月1日 2017年1月1日 | D1,M3,Y1 R1 D1,M2,Y1 R2 D1,M2,Y2 R1 D2,M2,Y2 R2 D4,M1,Y1 R2 D3,M3,Y1 R2 D4,M1,Y2 R3 |
Test8 Test9 Test10 Test11 Test12 Test13 | -1 32 2 2 20 20 | 6 6 0 13 6 6 | 2001 2001 2001 2001 1919 2051 | Day越界 Day越界 Month越界 Month越界 Year越界 Year越界 | D5,M3,Y1 R4 D6,M3,Y1 R4 D1,M4,Y1 R5 D1,M5,Y1 R5 D1,M3,Y3 R6 D1,M3,Y4 R6 |
解:(1)根据题意。原因和结果如下。
原因: c1:第一列字符是A;
c2:第一列字符是B;
c3:第二列字符是一数字。
结果: e21:修改文件;
e22:给出信息L;
e23:给出信息M。
正在上传…重新上传取消
图6.1程序规格说明因果图
(3)根据因果图建立判定表如表6.3所示。
表6.3 程序规格说明判定表
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
原因(条件) | c1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
c2 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | |
c3 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | |
11 |
| 1 | 1 | 1 | 1 | 0 | 0 | ||
动作(结果) | e22 | 0 | 0 | 0 | 0 | 1 | 1 | ||
e21 | 1 | 0 | 1 | 0 | 0 | 0 | |||
e23 | 0 | 1 | 0 | 1 | 0 | 1 |
在如表6.3所示的8种情况中,左面两列原因c1和c2同时为1,这是不可能出现的,故应排除这两种情况。这是由于原因c1是第一列字符是A,原因c2是第一列字符是B,所以不可能同时出现第一列字符是A,同时第一列字符是B的情况。
(4)把判定表的每一列拿出来作为依据,设计测试用例如表6.4所示。
表6.4 程序规格说明测试用例
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
原因(条件) | c1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
c2 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | |
c3 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | |
11 |
|
| 1 | 1 | 1 | 1 | 0 | 0 | |
动作(结果) | e22 |
|
| 0 | 0 | 0 | 0 | 1 | 1 |
e21 |
|
| 1 | 0 | 1 | 0 | 0 | 0 | |
e23 |
|
| 0 | 1 | 0 | 1 | 0 | 1 | |
测试用例 |
|
|
| A6 | Aa | B9 | BP | C5 | HY |
|
|
| A0 | A@ | B1 | B* | H4 | E% |
正在上传…重新上传取消
图6.23示例程序流程图
(1) 面向缺陷维护的内容是什么?
答:面向缺陷维护(程序级维护):软件产品能够正常运转,可以满足用户的功能、性能、接口需求,只是个别地方存在缺陷,使用户感到不便。缺陷发生在程序实现的级别上。克服缺陷的方法是修改程序,而不是修改分析与设计,也就是通常说的只修改编码,不修改数据结构。
(2)传统软件维护分哪几大类?
答:完善性维护:满足用户在使用过程中提出增加新的功能或修改已有功能,以满足用户日益增长的需要而进行的工作;
适应性维护:是软件适应新的运行环境而进行的工作;
纠错性维护:纠正开发期间未发现的遗留错误,即在程序使用期间发现的程序错误进行诊断和改正的过程;
预防性维护:为了改善未来的可维护性或可靠性而修改软件的工作。
(3)怎样理解“软件维护是一种面向用户提供的服务”?
答:激烈的软件产品市场竞争中,同类软件产品的价格、功能、性能、接口都是不相上下的,那么用户如何选择呢? 软件厂商要推销自己的产品,推销的焦点就是服务。谁的售后服务及时、到位,谁的产品就可能占领市场。现在流行一句话:“卖软件就是卖服务”。
(4)什么叫结构化维护和非结构化维护?
答:结构化维护的前提是:软件产品或软件项目必须有完善的文档,并且文档与程序代码互相匹配。反之为非结构化维护。
(5)可维护性的软件应具备什么性质?
答:主要有可理解性、可测试性和可修改性。可理解性被定义为人们通过阅读源代码和文档了解软件系统的结构、接口、功能、内部过程以及如何运行的难易程度;可测试性被定义为诊断和测试系统的难易程度;可修改性被定义为修改软件系统的难易程度;它们是密切相关的。
(6)软件维护的副作用表现在哪4个方面?
答:①修改编码:使编码更加混乱,程序结构更不清晰,可读性更差,而且有连锁反应。
②修改数据结构:数据结构是系统的骨架,修改数据结构是对系统伤筋动骨的大手术,在数据冗余与数据不一致方面,可能顾此失彼。
③修改用户数据:需要与用户协商,一旦有疏忽,可使系统发生意外。
④修改文档:对非结构化维护不适应,对结构化维护要严防程序与文档的不匹配。
(7)面向功能维护的内容是什么?
答:面向功能维护(设计级维护):软件产品在功能、性能、接口上存在某些不足。不维护就不能正常运转。维护即要修改分析与设计,又要修改程序,也就是既修改数据结构,又修改编码。
(8)怎么理解UMILCMOMI对软件维护的影响?
答:UML把软件生存周期定义为4个主要阶段:初始、细化、构造、移交。经过这四个阶段的历程被称为一个开发周期,自动产生一个周期内的所有文档,从而生成一个软件产品。
首次经历这四个阶段称为该产品的初始开发周期,除非该产品的生命终止,否则它将重复初始、细化、构造、移交这4个阶段,从而演化为下一代产品,这就是旧产品的维护,也是新产品的升级换代,这就是UML对软件维护工作的影响。由此可见,在软件开发中,若采用UML建模技术和相应的CASET具Rose,高额的软件维护费用将会较快地降下来。
(10)D (11)A (12)C (13)C (14)D (15)D (16)C(17)C
(1)答:封装性、继承性、多态性。
在由封装,继承,多态所组成的环境中,程序员可以编写出比面向过程模型更健壮,更具扩展性的程序.经过仔细设计的类层次结构是重用代码的基础.封装能让程序员不必修改公有接口的代码即可实现程序的移植.多态能使程序员开发出简洁,易懂,易修改的代码。
(2)类是抽象的,不具体的。就像有些东西可以归为一类,比如说狗,猫,猪。它们都是动物,我们就可以归为一类。而猫,狗就是动物类中的一个对象。
(3)答:① 封装性。所谓封装就是把对象的属性和行为结合成一个独立的单位,使外界不能直接访问或修改这些数据和代码,外界只能通过对象提供的接口函数来改变或获取对象的属性数据,这就实现了消息隐蔽。
② 继承性。如果在一个已定义的类上,增加一些特殊属性或操作,可以形成一个新的类,这个类不仅继承了前一个类的全部特征,而且具有新的特性,因此可看作前一个类的特例,是对前一个类的继承。前一个类称为父类,新产生的类叫做子类。通过继承关系可形成一种类层次结构,叫做继承结构。
③ 多态性。在类层次结构的不同类中,可用相同的函数名实现功能不同的函数。
(4)答:统一建模语言(UML)是一种绘制软件蓝图的标准语言。可以用UML对软件密集型系统的制品进行可视化详述和文档化。UML是一种定义良好、易于表达、功能强大且普遍适用的可视化建模语言。它融入了软件工程领域的新思想、新方法和新技术。它的作用域不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程。UML的作用就是用很多图从静态和动态方面来全面描述我们将要开发的系统。
(5)答:定义:由参与者(Actor)、用例(Use Case)以及它们之间的关系构成的用于描述系统功能的图成为用例图。
作用:用例图是从软件需求分析到最终实现的第一步,它显示了系统的用户和用户希望提供的功能,有利于用户和软件开发人员之间的沟通。用例图可视化的表达了系统的需求,具有直观、规范等优点,克服了纯文字性说明的不足。用例方法是完全从外部来定义系统的,它把需求和设计完全分离开来,使用户不用关心系统内部是如何完成各种功能的。
(6)答:顺序图:强调的是消息的时间顺序。
协作图:强调的是参与交互的对象的组织。
顺序图:建模元素有生命线和控制焦点。
协作图:建模元素有路径,消息必须有消息顺序号。
顺序图:在表示算法、对象的生命期、具有多线程特征的对象等方面,相对来说更容易一些。
协作图:如果按组织对控制流建模,应该选择使用协作图
顺序图:不能表示对象与对象之间的链。对于多对象和主动对象,也不能直接显示出来。
协作图:不能表示生命线的分叉。
但是,两者之间可以相互转换,但不能完全相互代替。
(1)不正确,飞机和构成部件之间不是泛化关系,应该是组合关系。
正在上传…重新上传取消
(2)类图如下所示:
正在上传…重新上传取消
(3)答:① 聚合和组合都是一种包含关系,组合是一种更强的聚合关系。
② 组合关系中,容器和包含的对象具有相同的生命周期,聚合是一种相对松散的关系,容器和包含的对象可相对独立。
③ 雁阵由大雁构成,属于一种聚合关系;1只大雁拥有2只翅膀,属于组合关系。
(4)类图如下:
正在上传…重新上传取消
(9)B (10)C (11)B (12)A (13)D (14)B (15)B (16)A
(1) 答:OOA模型采用五层次结构,它们分别是:
① 对象-类层
划分待开发系统及其环境信息的基本构造单位,标出反映问题域的对象和类,并用符号进行规范的描述,用信息提供者熟悉的术语为对象和类命名。
② 属性层
定义对象和某些结构中的数据单元,继承结构中所有类的公共属性可放于通用类中。标识对象类必需的属性并放在合适的继承层次上,属性的特殊限制和实例连接关系也应标识出来。
③ 服务层
表示对象的服务或行为,即是要定义类上的操作。
④ 结构层
标识现实世界中对象之间的关系。当一个对象是另一个对象的一部分时,用"整体-部分"关系表示;当一个类属于另一个类时,用类之间继承关系表示。
⑤ 主题层
(2)答:可将相关类或对象划分为一个主题。
① 识别对象,识别对象包括标识潜在的对象和筛选对象两步。
② 识别对象的属性。
③ 识别对象的行为。
④ 识别对象所属的类。
⑤ 定义主题词。
(3)答:建模步骤:
① 设置交互语境。
② 确定对象。
③ 分析消息和条件。
④ 分析附加约束。
⑤ 对建模结果精化和细化。
(4)答:用例是对一组序列动作的描述,系统执行这些动作将对用例的参与者产生可以观察的结果。
可以根据下面的一些问题来识别用例:
① 参与者希望系统提供什么功能;
② 系统是否存储和检索信息;
③ 当系统改变状态时,是否通知参与者;
④ 是否存在影响系统的外部事件,是哪个参与者通知系统这些外部事件。
(5)答:顺序图是强调消息时间顺序的交互图。是描述系统中类和类之间的交互,它将这些交互建模成消息交换,也就是说,顺序图描述了类相互协作的完成预期行为的动态过程。
顺序图是由类角色、生命线、激活期和消息组成。
(6)答:协作图作为另一种交互图而言,强调的是参加交互的对象的组织。协作图是由类角色、关联角色和消息流组成。
1.解:
(1) 系统用例图
正在上传…重新上传取消
(2) 事件流描述
1)正常事件流
① 用户查看通讯录,选择添加条目功能项,启动该用例;
② 用户输入姓名、电话、邮编和通讯地址;
③ 系统保存通讯录数据,更新视图。
2)可选事件流
第2步(用户输入姓名重复)
① 用户输入姓名已存在,系统提示是否重新输入姓名;
② 用户选择重新输入姓名,用例从第2步正常执行;
③ 用户选择放弃,用例结束。
(3)类图
正在上传…重新上传取消
(4)顺序图
正在上传…重新上传取消
(1) 系统用例图
正在上传…重新上传取消
(2) 事件流描述
1) 正常事件流
① 管理员查看全校课程列表,选择添加课程功能项,启动该用例;
② 管理员输入课程名称、任课教师、课程号;
③ 系统保存课程列表,更新视图
2)可选事件流
第2步(管理员输入课程号重复)
① 管理员输入课程号已存在,系统提示是否重新输入课程号;
② 管理员选择重新输入课程号,用例从第2步正常执行;
③ 管理员选择放弃,用例结束。
(3)类图
正在上传…重新上传取消
(4)顺序图
正在上传…重新上传取消
(1)A (2)B (3)B (4)D (5)A (6)C(7)D (8)A (9)B (10)C
(1)答:在与客户的交谈中,要注意客户用来描述业务实体的名词术语。这些名词可作为领域模型中的类。
还要注意你听到的动词,因为这些动词可能会构成这些类中的操作。
当得到一组类的核心列表后,应当向客户询问在业务过程中每个类的作用。他们的回答将告诉你这些类的职责。
(2)答:作为候选的类有可能和它的父类、子类在谈话中同时被发现。系统分析员意识到某个类的属性和操作也许能被运用到其他多个类当中去。
另一种可能的情况是系统分析员注意到两个或者多个类可能具有相同的属性和操作数
(3)答:参与者(actor ,有些书翻译成“角色”)是一种特殊的类,是系统外部的一个实体,这个实体可以是任何的人或物,它以某种方式参与了用例的执行过程。
在获取用例前首先要确定系统的参与者,可以根据下面的一些问题来寻找系统的参与者:①谁使用系统?②谁安装系统、维护系统?③谁启动系统、关闭系统?④谁从系统中获取信息,谁提供信息给系统?⑤在系统交互中,谁扮演了什么角色?⑥系统会与哪些其他系统相关联?
(4)答:OOD体系结构的各个部分内容:
① 问题论域部分,在OOA模型的基础上,细化分析结果,设计一组构成底层应用模型的类和对象。
② 人机交互部分:设计用户界面模型,该用户界面模型中的类和对象提供实现人机交互操作的接口函数。用户界面设计包括 菜单设计、窗口设计、输入/输出界面设计等等。
③ 任务管理部分:建立一些类,用以负责处理操作系统级的并发问题、中断、调度以及其它与特定平台有关的问题。
(4)答:数据管理部分:提供数据管理系统中存储和检索对象的基本结构,包括对永久性数据的访问和管理。数据管理设计包括:
① 数据存放设计。数据存放设计选择数据存放的方式(文件存放、关系数据库表格存放或面向对象的数据库存放)。
② 设计相应的操作。为每个需要存储的对象和类增加用于存储管理的属性和操作,在类和对象的定义中加以描述。
正在上传…重新上传取消
(1) 系统用例图如下:
正在上传…重新上传取消
对象类图如下:
正在上传…重新上传取消
(3)把需要持久存储的数据实体类及其联系,映射成为如下关系数据库表:
① 学生(学生号、姓名、出生日期、性别、籍贯、地址、电话、入学时间、专业、班级备注)
② 教师(教师号、姓名、出生日期、性别、籍贯、地址、电话、职称、专长、备注)
③ 课程(课程号、课程名、描述、学分、学时、性质、备注)
开设课程(课程号、学期、授课日期、授课时间、地点、选修人数、备注)
(1)B (2)D (3)B(4)D (5)B
(1)为什么类是面向对象系统中测试的最小合理单位?
答:在面向对象软件中,单元的概念发生了变化,不再是传统软件单元测试中关注的算法细节和流经模块接口数据,而是测试由封装在类中的操作和类的状态行为驱动。最小的可测试单元是封装了的类,一个类包含了不同的操作,而一个操作也是有不同的类组成的,传统的单元测试已经不再能满足面向对象软件的特点了,而以类作为最小的测试单元更加合理。
(2)简述面向对象系统开发过程。
答:① 面向对象的分析(OOA);
② 面向对象的设计(OOD)(高层设计和类设计);
③ 面向对象实现与测试;
④ 维护阶段。
(1)项目管理的定义是什么?简述软件项目管理的过程。
答:项目管理的定义:项目管理是以项目为对象,通过使用知识、技能、工具和方法来组织、计划、实施并监控项目,使之满足项目目标需求的过程。
一般认为项目管理的过程是由以下四个基本工作过程组成的:
① 项目确立:包括项目评估、立项、招投标、授权等环节。
② 项目计划:包括软件项目范围计划、成本计划、进度计划、质量计划、人员与沟通计划、风险计划、合同计划等。
③ 项目执行控制:包括项目集成计划执行控制、核心计划执行控制、辅助计划执行控制等。
④ 项目结束:包括合同结束和项目结束。
(2)简述项目计划应该包括哪些内容?
答:软件项目计划的内容包括:
项目范围:对该软件项目的综合描述,定义起所要做的工作以及性能限制,它包括:
① 项目目标;② 主要功能;③ 性能限制;④ 系统接口;⑤ 特殊要求;⑥ 开发概述
项目资源:① 人员资源;② 硬件资源;③ 软件资源;④ 其他
项目进度安排:进度安排的好坏往往会影响整个项目的按期完成,因此这一环节是十分重要的。制定软件进度与其他工程没有很大的区别,其方法主要有:
① 工程网络图;② Gantt图;③ 任务资源表;④ 成本估算;⑤ 培训计划。
(3)软件项目团队的特征是什么,如何组成一个高效的软件开发团队?
答:软件项目团队的特征是:
① 是一个临时性的团队;
② 是跨职能的;
③ 在软件项目不同阶中,团队的成员具有不稳定性;
④ 成员具有极大的流动住;
⑤ 年经化程度高;
⑥ 软件项目团队属于高度集中的知识型团队;
⑦ 员工业绩难以量化考核;
⑧ 软件项目团队非常注重自我。
高效的软件开发团队是建立在台理的开发流及以团队成员密切合作的基出之上,团队成员需共同迎接战、有效的计划、协调和管理各自的工作直至成功完成项目目标。
(4)什么是风险管理?风险管理有哪几种类型?
答:风险管理是指在项目进行过程中不断对风险进行识别、评估,制定策略,监控风险的过程。通过风险识别、风险分析和风险评价去认识项目的风险,并以此为基础合理地使用各种风险应对措施、管理方法、技术和手段对项目的风险进行有效的控制,妥善处理风险事件造成的不利后果,以最小的成本保证项目总体目标的实现。
风险管理可以分为四个层次:
① 危机管理:是在风险已经造成麻烦后才着手处理它们。
② 风险缓解:事先制定好风险发生后的补救措施,但不制定任问的防范措施。
③ 着力预防;将风险识別与风险防范作为软件项目的一部分加以规划和执行。
④ 消灭根源:识别和消灭可能产生风险的根源。
(5)什么是配置管理?配置管理的目的是什么?
答:软件配置管理是对产品进行标志、存储和控制,以维护其完整性、可知识性以及正确性,它为软件开发提供了一套管理办法和活动原则。
目的:
① 记录软件产品的演化过程;
② 确保软件开发者在软件生命周期中的各个阶段都能得到精确的产品配置;
③ 最终保证件产品的完整性、一致性、追溯性和可控性。
(6)什么是软件配置项?其主要属性是什么?
答:软件配置项:凡是纳入配置管理范畴的工作成果统称为配置项。
配置项主要有两大类:
① 属于产品组成部分的工作成果,例如源代码、需求文档、设计文档、测试用例等。
② 在管理过程中产生的文档,例如各种计划、状态报告等,这些文档虽然不是产品的组成部分,但是值得保存。
配置项的主要属性有名称、标识符、文件状态、版本、作者、日期等信息。
(1)答:软件工作的范围从原来的只是使用程序设计语言编写程序,扩展到整个软件生存期。如软件概念的形成、需求分析、设计、实现、测试、制造、安装和检验、运行和维护直到软件引退(为新的软件所代替)。同时还有许多技术管理工作(如过程管理、产品管理、资源管理)以及确认与验证工作(如评审与审计、产品分析、测试等)常常是跨越软件生存期各个阶段的专门工作。所有这些方面都应逐步建立起标准或规范来。
(2)答:高质量的文档应体现在以下几个方面:
① 针对性:文档编制以前应分清读者对象。按不同类型、不同层次的读者,决定怎样适应他们的需要。例如,管理文档主要是面向管理人员的,用户文档主要是面向用户的,这两类文档不应该像面向开发人员的开发文档那样过多地使用软件的额专用术语。
② 精确性:文档的行文应当十分确切,不能出现多义性的描述。同一课题的几个文档的内容应当是协调一致,没有矛盾的。
③ 清晰性:文档的编写应力求简明,如有可能,配以适当的图表,以增强其清晰性。
④ 完整性:任何一个文档都应当是完整的、独立的,它应自成体系。例如,前言部分硬座一般性介绍,征文给出中心内容,必要时还有附录,列出参考资料等。还有,同一课题的几个文档之间可能有部分内容相同,这种重复是必要的。不要在文档中出现转引其他文档内容的情况。例如,一些段落没有具体描述,而用“见XX文档XX节”的方式,这将给读者带来许多不便。
⑤ 灵活性:各个不同软件项目,其规模和复杂程度有着许多实际差别,不能一律看待。
⑥ 可追溯性:由于各开发阶段编制的文档与各个阶段完成的工作有密切的关系,前后两个阶段生成的文档,随着开发工作的逐步延伸,具有一定的继承关系,在一个项目各开发阶段之间提供的文档必定存在着可追溯的关系。例如,某一项软件需求,必定在设计说明书、测试计划、甚至用户手册中有所体现。必要时应能做到跟踪追查。
(3)答:按照文档产生和使用的范围,软件文档大致可分为三类:
① 开发文档:这类文档是在软甲开发过程中,作为软件开发人员前一阶段工作成果的体现和后一阶段工作依据的文档。包括软件啊需求说明书、数据要求说明书、总体设计说明书、详细设计说明书、可行性研究报告、项目开发计划。
② 管理文档:这类文档是在软甲开发过程中,由软件开发人员制定的需提交管理人员的一些工作计划或工作报告。使管理人员能够通过这些文档了解软件开发项目安排、进度、资源使用和成果等。包括项目开发计划、测试计划、测试报告、开发进度月报及项目开发总结。
③ 用户文档:这类文档是软甲开发人员为用户准备的有关该软件使用、操作、维护的资料。包括用户手册、操作手册、维护修改建议、软件需求说明书。
略。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。