1.2 课后习题详解
1什么是软件危机?它有哪些典型表现?为什么会出现软件危机?
答:(1)软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
(2)软件危机的典型表现:
①对软件开发成本和进度的估计不准确;
②用户对“已完成的”软件系统不满意的现象经常发生;
③软件产品的质量往往靠不住;
④软件常常是不可维护的;
⑤软件通常没有适当的文档资料;
⑥软件成本在计算机系统总成本中所占的比例逐年上升;
⑦软件开发跟不上计算机应用迅速普及深入的趋势。
(3)软件危机出现的原因:
①客观原因
a.软件是计算机系统中的逻辑部件,缺乏“可见性”,因此管理和控制软件开发过程相当困难。
b.软件维护通常意味着改正或修改原来的设计,因此软件较难维护。
c.软件规模庞大,而程序复杂性将随着程序规模的增加而呈指数上升。
②主观原因
a.存在与软件开发和维护有关的许多错误认识和做法。
b.对用户要求没有完整准确的认识就匆忙着手编写程序。
c.开发人员只重视程序而忽视软件配置的其余成分(文档和数据等)。
d.软件开发人员轻视维护。
2假设自己是一家软件公司的总工程师,当把图1-13给手下的软件工程师们观看,告诉他们及早发现并改正错误的重要性时,有人不同意这个观点,认为要求在错误进入软件之前就清除它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,一个人怎么能在设计阶段清除它呢?”应该怎么反驳他?
图1-13 引入同一变动付出的代价随时间变化的趋势
答:可以从以下两方面来反驳他:
(1)在软件开发的不同阶段进行修改需要付出的代价是很不相同的。在软件“已经完成”时再引入变动,当然需要付出更高的代价。在后期引入一个变动比在早期引入相同变动所需付出的代价高2~3个数量级。
(2)发生在编码时期的错误极有可能是在需求分析阶段由于操作不当产生的,所以必须及时消除错误,否则,到了后期软件运行和维护阶段再回过头来修改,将会付出更大的代价。
3什么是软件工程?它有哪些本质特性?怎样用软件工程消除软件危机?
答:(1)软件工程定义:
采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
(2)软件工程本质特征:
①软件工程关注于大型程序的构造;
②软件工程的中心课题是控制复杂性;
③软件经常变化;
④开发软件的效率非常重要;
⑤和谐地合作是开发软件的关键;
⑥软件必须有效地支持它的用户;
⑦由具有一种文化背景的人替具有另一种文化背景的人创造产品。
(3)消除软件危机的方法:
①应该对计算机软件有一个正确的认识;
②应该充分认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目;
③应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法;
④应该开发和使用更好的软件工具。
4简述结构化范型和面向对象范型的要点,并分析它们的优缺点。
答:(1)结构化范型
①要点
结构化范型属于传统方法学。传统的软件开发方法大部分采用瀑布模型。这种模型要求每一阶段都以前一阶段形成的文档为基础完成工作。每一阶段将要完成时,都要求开发人员进行验证或确认。
②优点
a.把软件生命周期划分成若干相对独立、简单的阶段,便于不同人员分工协作,降低开发的困难程度。
b.开发过程中采用科学的管理技术和良好的技术方法,且在每个阶段结束之前都进行严格的审查,保证了软件的质量,提高了软件的可维护性;
c.大大提高了软件开发的成功率和生产率。
③缺点
a.不适用于软件规模庞大、或者对软件的需求是模糊的或会随时间变化而变化的情况。
b.结构化范型技术把数据和操作人为地分离成两个独立的部分,增加了软件开发与维护的难度。
(2)面向对象范型
①要点
a.把对象作为融合了数据及在数据上的操作行为的统一的软件构件。
b.把所有对象划分成各种对象类。
c.继承性。
d.对象彼此之间仅能通过传递消息互相联系。
②优点
a.降低了软件产品的复杂性;
b.提高了软件的可理解性;
c.简化了软件的开发和维护工作;
d.提高了软件的可重用性。
③缺点
面向对象性能比面向过程低。
5根据历史数据可以进行如下的假设。对计算机存储容量的需求大致按下面公式描述的趋势逐年增加:M=4080e0.28(Y-1960),存储器的价格按下面公式描述的趋势逐年下降:P1=0.3×0.72Y-1974(美分/位),如果计算机字长为16位,则存储器价格下降的趋势为:P2=0.048×0.72Y-1974(美分/字)。在上列公式中y代表年份,M是存储容量(字数),P1和P2代表价格。基于上述假设可以比较计算机硬件和软件成本的变化趋势。要求计算:
(1)在1985年对计算机存储容量的需求估计是多少?如果字长为16位,这个存储器的价格是多少?
(2)假设在1985年一名程序员每天可开发出10条指令,程序员的平均工资是每月4000美元。如果一条指令为一个字长,计算使存储器装满程序所需用的成本。
(3)假设在1995年存储器字长为32位,一名程序员每天可开发出30条指令,程序员的月平均工资为6000美元,重复(1)、(2)题。
答:(1)在1985年对计算机存储容量的需求,估计是:M=4080e0.28(1985-1960)=4080e7=4474263(字)。如果字长为16位,则这个存储器的价格是:P=0.048×0.72(1985-1974)×4474263=5789(美元)
(2)如果一条指令的长度为一个字,则使存储器装满程序共需4474263条指令。如果每月有20个工作日,则每人每月可开发200条指令。需要的工作量是:4474263/200=22371(人月)。程序员的月平均工资是4000美元,开发出4474263条指令的成本是:22371×4000=8948400(美元)。
(3)在1995年对存储容量的需求估计为:M=4080e0.28(1995-1960)=4080e9.8=73577679(字),如果字长为32位,则这个存储器的价格是:P=0.003×32×0.72(1995-1974)×73577679=7127(美元)。如果一条指令的长度为一个字,则使存储器装满程序共需73577679条指令。如果每月有20个工作日,则每人每月可开发600条指令。需要的工作量是:73577679/600=122629(人月)。开发出成本是:122629×6000=735776790(美元)。
6什么是软件过程?它与软件工程方法学有何关系?
答:(1)软件过程是为了开发出高质量的软件产品所需完成的一系列任务的框架,它规定了完成各项任务的工作步骤。软件过程定义了运用技术方法的顺序、应该交付的文档资料、为保证软件质量和协调软件变化必须采取的管理措施,以及标志完成了相应开发活动的里程碑。
(2)软件过程是软件工程方法学的三个重要组成部分之一。软件工程方法学的三个要素为:方法、工具和过程。
7什么是软件生命周期模型?试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明每种模型的适用范围。
答:软件生命周期模型是软件开发的全部过程、活动和任务的结构框架。软件生命周期模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为项目开发的基础。
(1)瀑布模型
①优点
a.可强迫开发人员采用规范的方法;
b.严格地规定了每个阶段必须提交的文档;
c.要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证;
d.对文档的约束,使软件维护变得容易一些,且能降低软件预算。
②缺点
a.瀑布模型是由文档驱动的;
b.缺乏对于需求变更和项目变化的适应性;
c.用户只有在生命周期的后期才能看到结果;
③适用范围
适用于用户需求明确、完整、无重大变化的软件项目开发。
(2)快速原型模型
①优点
a.克服了瀑布模型的缺点,对于需求变更具有更好的适应性;
b.开发费用低、开发周期短且对用户更友好。
②缺点
a.客户与开发者对原型理解不同;
b.本质是快速,没有考虑软件的总体质量和可维护性,最终产品质量较差;
c.不利于开发人员的创新。
③适用范围
a.对所开发的领域比较熟悉而且有快速的原型开发工具;
b.项目招投标时,可以以原型模型作为软件的开发模型;
c.进行产品移植或升级时,或对已有产品原型进行客户化工作时。
(3)增量模型
①优点
a.能在较短时间内向用户提交可完成部分工作的产品;
b.逐步增加产品功能,可以使用户有较充裕的时间学习和适应新产品。
②缺点
a.要求软件体系结构必须是开放的。
b.增量模型的灵活性很容易退化为边做边改模型,从而使软件过程的控制失去整体性。
c.增量模型本身是自相矛盾的。它一方面要求开发人员把软件看作一个整体,另一方面又要求开发人员把软件看作构件序列,每个构件本质上都独立于另一个构件。
③适用范围
a.进行已有产品升级或新版本开发;
b.对完成期限严格要求的产品;
c.对所开发的领域比较熟悉而且已有原型系统。
(4)螺旋模型
①优点
a.有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;
b.减少了过多测试或测试不足所带来的风险;
c.在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。
②缺点
a.软件开发人员需要具备丰富的风险评估经验和专门知识,如果未能够及时标识风险,会造成重大损失;
b.过多的迭代次数会增加开发成本,延迟提交时间。
③适用范围
适用于内部开发的大规模软件项目。
8为什么说喷泉模型较好地体现了面向对象软件开发过程无缝和迭代的特性?
答:“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。喷泉模型的开发流程图中代表不同阶段的圆圈相互重叠,表示两个活动之间存在交迭;而面向对象方法在概念和表示方法上的一致性,保证了在各项开发活动之间的无缝过渡。在一个阶段内的向下箭头代表该阶段内的迭代(或求精)。
9试讨论Rational统一过程的优缺点。
答:(1)优点
提高了团队生产力,在迭代的开发过程、需求管理、基于组件的体系结构、可视化软件建模、验证软件质量以及控制软件变更等方面、针对所有关键的开发活动为每个开发成员提供了必要的准则、模板和工具指导,并确保全体成员共享相同的知识基础、它具有简洁和清晰的过程结构,为开发过程提供了较大的通用性。
(2)缺点
RUP只是一个开发过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运行和支持等方面的内容,此外,它没有支持多项目的开发结构,在一定程度上降低了在开发组织内大范围实现重用的可能性。
10Rational统一过程主要适用于何种项目?
答:适用于大型的需求不断变化的复杂软件系统项目。
11说明敏捷过程的适用范围。
答:敏捷过程具有对变化和不确定性的更快速、更敏捷的反应特性,而且在快速的同时仍然能够保持可持续的开发速度。因此适用于商业竞争环境下对小型项目提出的有限资源和有限开发时间的约束。
12说明微软过程的适用范围。
答:适用于商业环境下具有有限资源和有限开发时间约束的小型项目。