四川大学软件工程课后习题答案

更新时间:2023-12-06 19:45:02 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第一章

1.1举出至少5个例子来说明“意外效应法则”在计算机软件方面的应用。 答:典型的例子包括使用“数字汽车仪表板”的软件,赋予高科技,高品质的图像的软件;如广泛的消费类电子产品的软件;个人电脑,工业仪器仪表和机器的软件。软件分化出的在电子商务方面的应用。

1.2举例说明软件对社会的影响(包括正面影响和负面影响)。 答:这是一个很好的课堂讨论问题(如果时间允许),而不是专注于老生常谈的(但很重要)隐私问题,生活质量等问题。您可能想要讨论关于”技术恐惧“方面的问题,软件也许会使它恶化但也可能减少”技术恐惧“。另一个有趣的方面是使用诺依曼的“风险”列在SEN中做重点讨论。你也可以考虑基于软件的“现金”经济,新模式的互动娱乐,虚拟现实,电子商务等方面来思考软件对社会的影响。

1.3针对1.1节提出的5个问题,请给出你的答案,并与同学讨论。 答:软件需要如此长的开发时间: a)设施不上线

b)开发工具并不如预期般运作

c)客户提出的新要求,需要重新设计和返工 d)产品依赖于政府的规定,被意外更改。

e)严格的要求,与现有系统的兼容性需要超过预期更多的测试,设计和实现。 f)多个操作系统下运行的任务需求比预期需要更长的时间。 g)软件项目风险管理比预期需要更多的时间。

h)依赖的技术仍处于开发阶段,从而延长日程安排。 开发成本高:

a)比当时预期低得令人无法接受的质量,需要进行更多的测试,设计和实施工作。

b)制定了错误的软件功能需要重新设计和实施。 c)开发错误的用户界面,而导致重新设计和实施。

d)开发了不需要的额外的软件功能而延长了开发日程安排。 在将软件交付顾客使用之前,我们无法找到所有错误: a)产品依赖于政府监管,意外而改变。 b)产品技术标准草案,会意外更改。 c)有时会在项目后期添加新的开发人员。

d)因为团队内的冲突有时会导致沟通不畅,而产生糟糕的设计。 e)破坏高效调度产生的项目管理成果和无效的规划

f)有时装备部件质量差,导致额外的测试,设计和集成工作和管理额外的客户关系。

软件开发和维护的过程仍旧难以度量: a)有时该项目的目的是不明确。 b)有大量的业务所涉及的风险。 c)如果产品内置没有装好。

d)我们需要不断检讨我们的工作。 e)进行维护检查的时间。

f)在整个软件开发过程中要彻底组织项目团队。

1.4在交付最终用户之前,或者首个版本投入使用之后,许多应用程序都会有频繁的变更。为防止变更引起软件退化,请提出一些有效的解决措施。

答:许多现代应用程序在他们呈现给最终用户之前和第一个版本别使用后经常改变,以下几个方面来阻止软件恶化: a)收集所需的信息。

b)设计师和客户定义软件的总体目标。 c)识别已知的需求。

d)使用现有的程序片段后,有助于建立原型的开发人员的工作计划快速完成。 e)只有通过合格的培训或经验和充分揭露相关的不足,才能保持和提高我们的技术能力和让

f)其他人承担技术任务

g)文件应该被及时制定出来,在文件中应该有标准定义和机制建立。 h)完成某一特定阶段的审查工作。

i)每一个关键团队成员应该配有一个后备人员 j)检查规避风险的步骤是否应用正确

k)对未来的风险分析中检查是否有必要收集必要的信息。

1.5思考1.1.2节中提到的7个软件分类。请问能否采用一个软件工程方法,应用于所有的软件分类?并就你的答案加以解释。

答:七个软件分类可应用于同样的方法。在这不确定的今天这些“新的挑战”,无疑有很大的影响(对于商务人士,软件工程师和最终用户来说)然而,软件工程师可以准备通过实例化一个过程,使其有足够的灵活性和适应性,以适应剧烈变化的技术,这技术一定要在未来的很长一段时间被商业规则所接受。

1.6图1-3中,将软件工程三个层次放在了“质量关注点”这层之上。这意味着在整个开发组织内采用质量管理活动,如“全面质量管理”。仔细研究,并列出全面质量管理活动中关键原则的大纲。

答:你也许建议同学阅读第十六章的知识来解决问题。

1.7随着软件的普及,由于程序错误所带来的公众风险已经成为一个愈加重要的问题。设想一个真实场景,由于软件错误而引起“世界末日”般重大危害(危害社会经济或是人类生命财产安全)。

答:确实有很多现实生活中的情况来选择,例如,软件错误,造成了重大的电话网络失败。

如在航空电子设备故障导致飞机坠毁。计算机病毒(如米开朗基罗)的攻击给主要的电子商务网站造成了重大的经济损失。

1.8用自己的话描述过程框架。当我们谈到框架活动适用于所有的项目时,是否意味着对于不同规模和复杂度的项目,可应用相同的工作任务?请解释。

答:过程框架适用于所有的项目,在相同的工作任务,适用于所有项目,无论其规模大小或复杂性。一个过程框架涉及大量的与客户沟通来收集需求;这个活动建立了一个软件工程工作计划。它涉及到创建模型,这将有助于开发人员

了解顾客的要求从而进行设计。从而涉及构建(代码生成和错误测试)。最后,它提供了基于评价的反馈。

1.9普适性活动存在于整个软件过程中,你认为他们均匀分布于软件过程中,还是会集中在某个或者某些框架活动中?

答:伞活动在整个软件过程中发生,它们被均匀地应用在整个过程中,分析还包含一系列的工作任务(例如需求收集,制定,协商规范和验证),一个过程框架有一组伞被应用在整个软件过程活动中。这些活动包括:软件项目跟踪和控制,风险管理,软件质量保证,和正式的技术审查,测量,软件配置管理,可重用性管理和工作产品的制作和生产。

1.10在1.5节所列举的神话中,增加两种软件神话,同时指出与其相对应的真实情况。

答:没有标准答案(例如测试可以解决所有的程序错误)。

第二章

2.1在本章的介绍中,Baetjer说过:“软件过程为用户和设计者之间、用户和开发工具之间以及设计者和开发工具之间提供交互的途径[技术]”。对于要构建的软件产品,在以下方面设计五个问题:(a)设计者应该问用户的问题;(b)用户应该问设计者的问题;(c)用户对将要构建的软件自问的问题;(d)设计者对于软件产品和建造该产品采取的软件过程自问的问题。 答:a)设计人员询问用户:

产品满意吗或者它需要重新设计或返工吗? 征求用户输入来避免产品不满意和要求返工。 有新要求的需要吗? 该产品比估计的大吗?

与预期的相比模块需要更多的测试,设计和实行工作来纠正吗? b) 用户询问设计者的问题: 范围明确吗?

我们是否有开发工具和人员开发软件所需的技能? 定义的需求是正确的吗?还有没有额外的需要? 特定领域的软件产品比平时的花费更多的时间吗? 该模块是否需要更多的设计测试?

c)用户对将要构建的软件自问的问题: 软件产品的范围和目的是什么? 该产品比估计的大吗? 有优秀的人可用吗?

工作人员可靠吗有没有具备所需要的技能? 能保持工作人员的离职率足够低吗?

d)设计者对于软件产品和建造该产品采取的软件过程自问的问题: 范围和目的文件是什么? 要使用什么样的工具?

有什么目标和规避风险的优先事项?

对风险分析,识别,估计,评价和管理会有什么样的步骤?

2.2为沟通活动设计一些列的动作,选定一个动作作为其设计一个任务集。 答:任务交流活动设置:任务组将定义实际的工作需要,以完成一个软件工程的行动。这些都是对于通信的活动: a)利益相关者对项目做一个列表。

b)邀请所有利益相关者的非正式会议。 c)要求他们作出特性和功能列表。

d)讨论需求并建立一个最终的的列表。

e)他不确定的优先级的要求和要注意的地方。

这些任务可能是一个复杂的软件项目,然后,他们可能包括:

a)要进行一系列的规范会议,基于利益相关者的输入,建立了初步的功能和特性列表。

b)要建立一个股权持有人要求的修订清单。 c)使用质量功能展开技术来满足需求。 d)注意在系统上的约束和限制。 e)讨论验证系统的方法。

2.3在沟通过程中,遇到两位对软件如何做有着不同想法的利益相关者是很常见的问题。也就是说你得到了相互冲突的需求。设计一种过程模式(可以是步骤模式),利用2.13节中针对此类问题的模板,给出一种行之有效的解决方法。 答:

模式名:利益相关者的需求冲突。

意图:此模式描述的方式是解决利益相关者之间在通信框架活动中的冲突。 类型:阶段模式。

初始背景:(1)利益相关者已确定(2)利益相关者和软件工程师已经建立了协作通信(3) 软件要解决的主要问题由软件开发团队已建立。(4)对已开发的项目范围,基本的业务需求和项目的限制有了初步的了解。

问题:对正在开发的软件,利益相关者的需求出现了相互的矛盾。

解决办法:所有的利益相关者被要求区分需求的优先级,暂时保住利益相关者的优先级最高或投票的最多的需求从而解决这一问题。

结果:由利益相关方的确定的需求优先顺序列表来指导软件开发团队构件软件初始模型。

相关模式:定义指导和协作方针,范围隔离,需求收集,约束描述和混合需求。 已知用途/范例:必要的沟通是贯通整个软件工程中。

2.4阅读[Nog001],然后写一篇2-3页的论文,讨论混乱对软件工程的影响。 答案略。

2.5详细描述三个适用于采用瀑布模型的软件项目。

答:适合瀑布模型的项目例如数据结构,软件架构,程序的细节和接口表征的对象。

2.6详细描述三个适用于采用原型模型的软件项目。

答:相对容易的原型模型几乎总是涉及人机交互和/或复杂计算机图形软件应用

程序,有时适合原型模型是某些类别的数学算法,命令驱动系统和其他应用在没有实时交互时结果可以很容易地检查。难以用原型模型的应用程序,包括控制和过程控制功能许多种类的实时应用程序和嵌入式软件。

2.7如果将原型变成一个可发布的系统或产品,应该如何调整过程?

答:如果将原型变成一个可发布的系统或产品,软件工程师和客户需要满足和定义软件的总体目标,识别已知的任何要求,对整体轮廓进一步的强制定义。原型作为一种机制,用于识别软件需求。如果一个工作原型被建立了,开发商会试图利用现有的程序片段或应用工具(例如,报表生成器,窗口管理等)使工作方案,可以快速生成。

2.8详细描述三个适于采用增量模型的软件项目。 答: 每一个线性序列产生的“增量”交付的软件,例如字处理软件开发使用增量范式可能会提供基本的文件管理,编辑和文件制作功能在第一增量,更复杂的编辑和文件制作能力在第二增量;拼写和语法检查在第三增量,先进的页面布局能力在第四增量。任何增量的处理流程

可以纳入原型范式。增量发展是特别有用当人员无法在经营期限为一个已成立的项目做完美的实施。

2.9当沿着螺旋过程流发展的时候,你对正在开发或者维护的软件的看法是什么?

答:随着工作的螺旋向外移动,产品走向一个更完整的状态,执行工作的抽象层次减少了。

2.10可以合用几种过程模型吗?如果可以,举例说明。

答:过程模型可以合用,每个模型都有个有点不同的处理流程,但都执行相同的通用框架活动集:沟通,规划,建模,施工和交付/反馈。例如线性顺序模型可以作为一个有用的过程模型,在被固定的情况下,要求工作以线性的方式继续进行,直至完成。在这情况下,开发者可能无法确定一种算法的效率,一个操作系统的适应性或应采取的人机交互的形式。在这之中,以及许多其他场合原型模型可以提供最好的办法。在其他情况下,以渐进的方式可能是有意义的和螺旋模型的流动可能是有效率,特殊过程模型具有许多的一个或多个传统的特性。

2.11协同过程模型定义了一套“状态”,用你自己的话描述一下这些状态表示什么,并指出他们在协同过程模型中的作用。

答:简而言之,并发进程模型假定不同的部分项目会有所不同阶段的完整性,因此,不同的软件工程活动都被同时执行。目前的挑战是管理的并发,并能够评估该项目的状态。

2.12开发质量“足够好”的软件,其优点和缺点是什么?也就是说,当我们追求开发速度胜过产品质量的时候,会产生什么后果?

答:开发质量“足够好”的软件可能会碰到死亡线(截止时间),但质量会是比

10.13答案略。

10.14如果你想要给你的学生一些工作项目表的范例,互联网是一个很好的可用性调查表的来源(大部分都应该有超过20道的问题,所以你的学生应该需要优先考虑他们的选择)

第十四章

14.1用自己的话描述验证与确认的区别。两者都要用测试用例的设计方法和测试策略吗? 答:“验证”是通过尝试在功能或性能上发现错误来保证程序的正确性,“确认”是保证软件与需求相一致——这也是质量的基本特征。

14.2列出一些可能与独立测试组(ITG)的创建相关的问题。IGT与SQA小组由相同的人员组成吗?

答:组建ITG(独立测试组)最常见的问题是获得并留住人才,除此之外,如果ITG与软件工程小组的交流组织地不恰当的话,两组之间可能会产生敌意。最后,ITG有可能太晚接手项目,导致没有时间完成一个周密测试的计划和执行。ITG和SQA(软件质量保证)小组不必是同一组人。ITG只关注测试,SQA小组则需要考虑到质量保证相关的所有方面。

14.3使用14.1.3节中描述的测试步骤来建立测试软件的策略总是可行的嘛?对于嵌入式系统,出现哪些可能的复杂情况?

答:它并不总是能够进行单元测试的测试环境,完成单元测试的复杂性(如复杂的驱动和存根)可能无法证明效益。集成测试是复杂的通过单元测试的模块合并计划的有效性(特别是当这些模块滞后的时候)。在很多情况下(尤其是嵌入式系统)软件不能充分进行验证测试硬件配置外的目标。因此,验证和系统测试要相结合。

14.4为什么对具有较高耦合度的模块进行单元测试?

答:一个高度耦合的模块要与其他模块的数据和其他系统元素进行交互。因此,其功能往往是依赖于这些耦合元件的操作。为了彻底的单元测试这样一个模块,耦合因素的功能必须以某种方式模拟。这将会是困难和费时的。

14.5“防错法”的概念是一个非常有效的方法。当发现错误时,他提供了内置调试帮助:

a.为防错发开发一组知道原则。 b.讨论利用这种技术的优点。 c.讨论利用这种技术的缺点。

答:一个单一的规则涵盖了多种情况:所有数据在软件接口(外部和内部)应当经过验证(如果可能的话)。

优点:错误不会―滚雪球‖——越滚越大

缺点:需要额外的处理时间和内存(那通常只是一个很小的代价)。

14.6项目的进度安排是如何影响集成测试的?

答:完成模块的可用性的影响顺序和战略整合。项目状态必须是已知的,可以成功地实现整合规划。

14.7在所有的情况下,单元测试都是可能的或是值得做的吗?提供实例来说明你的理由。

答:如果一个模块有3或4个下属供应数据模块的一个有意义的评价是至关重要的,没有―聚类‖所有的模块作为一个单元,它可能无法进行单元测试。

14.8谁应该完成确认测试——是软件开发人员还是软件的使用者,说明你的理由。

答:开发商,如果客户验收测试计划。开发人员和客户(用户)如果没有进一步的测试计划。一个独立的测试组可能是这里最好的选择,但这不是一个选择。

14.9为本书讨论的safehouse系统开发一个完整的测试策略,并以测试规格说明的方式形成文档。 答:略

14.10作为一个班级项目,为你的安装开发调试指南。这个指南应该提供面向语言和面向系统的建议。这些建议是通过总结学校学习过程中所遇到的挫折得到的。从一个经过全班和老师评审过的大纲开始,并在你局部范围内将这个指南发布给其他人。 答:略

第十五章

15.1 Myers[mye79]用以下程序作为测试能力的自我评估:某程序读入三个整数值表示三角形的三条边。改程序打印信息表明三角形是不规则的,等腰的或等边的。开发一组测试用例测试改程序。

答:参考Myers[mye79]对此问题提出的极其详细的―解决方案‖。

15.2设计并实现15.1描述的程序(适当使用错误处理)。从该程序中导出流图并用基本路径测试方法设计测试,以保证程序中的所有语句都被测试到。执行测试用例并显示结果。

答:你可以选择发布程序源代码给您的学生(故意地嵌入一些错误)。

15.3你能够想出15.1.1节中没有讨论的其他测试目标吗? 答:除了那些目标之外还有:

a) 一个成功的测试显示功能和性能要求; b) 一个成功的测试发现文件错误; c) 一个成功的测试发现接口问题;

d) 一个成功的测试验证了程序结构,了解数据结构,界面设计和程序设计; e) 一个成功的测试,建立了一个进入一个测试案例数据库,以后可以用于回归测试。

15.4选择一个你最近设计和实现的构建。设计一组测试用例,保证利用基本路径测试执行所有语句。 答:略

15.5-15.8

答:进行一些拓展,这些问题可以被指定为一个长期的项目。

15.9至少给出三个例子,在这些例子中,黑盒测试能给人“一切正常”的印象,而白盒测试可能发现错误。再至少给出三个例子,在这些例子中白盒测试能给人“一切正常”的印象,而黑盒测试可能发现错误。 答:对于特定的输入,一个内部发生的错误导致: 1) 不恰当的数据被设在一个全局数据域里;

2) 不恰当的标记将在随后进行的一系列测试中被测试;

3) 不恰当硬件控制,只可能在系统测试时被发现;但是却产生了正确的输出。

15.10不,即使穷举测试(如果可能的话)也不能发现软件说明书中的性能问题和错误。在这种情况下需要同时考虑输入和输出的等价类。对每一个类来说,学生应当根据数值范围,集合的元素,系统命令等划定边界。这可以作为笔试以及一些著名应用GUI的测试用例的素材

15.11生成一系列用例来帮助测试用户的文件材料是一个好办法。

第十六章

16.1用自己的话,描述为什么在面向对象系统中,类是最小的合理测试单元。 答:类封装了数据以及处理数据的操作。由于数据和操作被打包成一个整体,一个一个地测试方法没有作用,不能发现与消息传送,职责和协作相关的错误。

16.2若现有类已进行了彻底的测试,为什么我们必须对从现有类 实例化的子类进行重新测试?我们可以使用为现有类设计的测试用例么?

答:由于每一个子类都继承了父类的私有属性和操作(事实上这些私有属性和操作会增加复杂度),这些子类必须在他们的操作环境中重新测试。测试用例可以重复使用,但需要针对子类的私有属性和操作进行扩充。

16.3为什么―测试‖应该从面向对象分析和设计开始?

答:在之后的开发过程中,面向对象分析和设计模型提供了大量与系统结构和行为相关的信息,因此,在生成代码之前,这些模型必须经过严格的审查。所有面向对象的模型应当在模型的语法,语义以及语用论的上下中经过正确性,

完整性,一致性的测试(包括技术评审)。这些评审有可能省去很多不必要的工作和修改(错误越早发现,维护的成本越低)。

16.4为SafeHome导出一组CRC索引卡片,按照16.2.2节讲述的步骤确定是否存在不一致性。 答:答案会有不同

16.5基于线程和基于使用的集成测试策略有什么不同?簇测试如何适应?

答:基于线程的测试用来集成一系列需要对单独一个程序输入或事件响应的类。基于使用的测试属于集成测试的一种,通过测试那些很少使用服务器类的类(称为独立类)开始系统的构造。测试完独立类之后,测试使用独立类的下一层类(称为依赖类),按照这样的顺序逐层测试依赖类直到整个系统构造完成。

16.6将随机测试和划分方法运用到设计SafeHome系统时定义的3个类。产生展示操作调用序列的测试用例。 答:答案会有不同

16.7运用多类测试及从SafeHome设计的行为模型中生成的测试。 答:答案会有不同

16.8运用随机测试、划分方法、多类测试及16.5节和16.6节所描述的银行应用的行为模型导出的测试,再生成另外生成4个测试。 答:答案会有不同

第十八章

18.1基于本章给出的信息和自己的经验,列举出能够增强软件工程师能力的“十条戒律”。即,列出10条指导原则,使得软件人员能够在工作中发挥其全部潜力。 答:

(1)你要变得更聪明。 (2)你要注重质量。 (3)你要倾听客户。 (4)你要了解问题

(5)你要对一个工作过程不断的重复。 (6)你不可同意荒唐的时间表。 (7)你要测量产品,过程和你自己。 (8)你要制定最有效的工作方法。 (9)你要记住,别人也会软件工作。 (10)你要不断地提高。

18.2 SEI的人员能力成熟度模型定义了培养优秀软件人员的“关键实践域”。你的老师将为你指派一个关键实践域,请你对它进行分析和总结。 答:略。

18.3描述3种现实生活中的实际情况,其中客户和最终用户是相同的人。也描述3种他们是不同人的情况。

答:相同的人:(1)一个工程师必须开发一个供个人使用的程序。(2)一个商人创建供个人使用的电子表格模型。(3)一个拥有迷人的手机客户端这一新概念的企业家。 不同的人:(1)一个通信部门的一些业务功能的服务。(2)一个软件开发团队服务营销的需求。(3)承包商建立的客户的规格。

18.4高级管理者所做的决策会对软件工程团队的效率产生重大影响。也描述3种他们是不同人的情况。

答:在今天的环境,裁员和外包有最直接的、重大的影响。此外,“减少开支的措施”,导致较低的产品质量;不切实际的项目最后期限;对用户的需求了解失败;或者,反过来说,对软件工程师的工作提出警告。

18.5温习Weiberg的书[Wei86],并写出一份2-3页的总结,说明在使用MOI模型时应该考虑的问题。 答案:略。

18.6在一个信息系统组织中,你被指派为项目经理。你的工作是开发一个应用程序,该程序类似于你的团队已经做过的项目,只是规模更大而且更复杂。需求已经由用户改写成文档。你会选择哪种团队结构?为什么?你会选择哪(些)种软件过程模型?为什么?

答:一个封闭范型方法的团队结构是一种选择。由于需求明确,这可能会要求和配置多个分区小组。规模大的项目缓和了利于CD团队的方面。由于没有讨论日程,我们假设的交货日期是合理的。因此,有可能使用一个线性的顺序过程模型。然而,迭代模型(例如,螺旋)也是一个很好的可能性。

18.7你被指派为一个小型软件产品公司的项目经理。你的工作是开发一个有突破性的产品,该产品结合了虚拟现实的硬件和高超的软件。因为家庭娱乐市场的竞争非常激烈,完成这项工作的压力很大。你会选择哪种团队结构?为什么?你会选择哪种过程模型?为什么?

答:随机式范型的团队结构可能是唯一可行的选择,给出了模糊的要求和工作性质的实验。应该使用原型开发方法或者一个曾量的过程模型。

18.8你被指派为一个大型软件产品公司的项目经理。你的工作是管理该公司已被广泛使用的字处理软件的新版本的开发。由于竞争激烈,已经规定了紧迫的最后期限,并对外公布。你会选择哪种团队结构?为什么?你会选择哪些软件过程模型?为什么?

答:一个开放式范型团队结构可能是最好的,给定的时间压力和熟悉的工作(然而,封闭的方法范式团队可能也很好)。一个曾量过程模型被推动这项工作性质的最后期限所指明。

本文来源:https://www.bwwdw.com/article/u3pt.html

Top