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