1.什么是软件危机?它有哪些典型表现?为什么会出现软件危机?
答:(1)软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。软件危机包含两方面的问题:
①如何开发软件,以满足对软件日益增长的需求;
②如何维护数量不断膨胀的已有软件。
(2)软件危机的典型表现:
①对软件开发成本和进度的估计不准确;
②用户对“已完成的”软件系统不满意的现象经常发生;
③软件产品的质量往往靠不住;
④软件常常是不可维护的;
⑤软件通常没有适当的文档资料;
⑥软件成本在计算机系统总成本中所占的比例逐年上升;
⑦软件开发跟不上计算机应用迅速普及深入的趋势。
(3)软件危机出现的原因:
①软件是计算机系统中的逻辑部件而不是物理部件;
②软件显著特点是规模庞大;
③对软件开发和维护还有不少糊涂观念,采用了错误的方法和技术;
④存在与软件开发和维护有关的许多错误认识和做法;
⑤对用户要求没有完整准确的认识就匆忙着手编写程序;
⑥一个软件从定义、开发、使用和维护,直到最终被废弃,要经历一个漫长的时期;
⑦一个软件产品必须由一个完整的配置组成,要包括程序、文档和数据等成分;
⑧在软件开发的不同阶段进行修改需要付出的代价是很不相同的;
⑨轻视维护。
2.假设自己是一家软件公司的总工程师,当把图1-14给手下的软件工程师们观看,告诉他们及早发现并改正错误的重要性时,有人不同意这个观点,认为要求在错误进入软件之前就清除它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,一个人怎么能在设计阶段清除它呢?”应该怎么反驳他?
图1-14 引人同一变动付出的代价随时间变化的趋势
答:可以从以下两方面来反驳他:
(1)在软件开发的不同阶段进行修改需要付出的代价是很不相同的,在早期引入变动,涉及的面较少,因而代价也比较低;而在开发的中期,软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都做相应的修改,不仅工作量大,而且逻辑上也更复杂,因此付出的代价剧增。
(2)在软件“已经完成”时再引入变动,当然需要付出更高的代价。在后期引入一个变动比在早期引入相同变动所需付出的代价高2~3个数量级。
3.什么是软件工程?它有哪些本质特性?怎样用软件工程消除软件危机?
答:(1)软件工程定义: