1.1软件危机
1、什么是软件危机?
软件危机,是指在计算机软件的开发和维护过程中,所遇到的一系列严重问题。
2、软件危机的典型表现
- 对软件开发成本和进度的估计,常常很不准确。
- 用户对“已完成的“软件系统不满意的现象,经常发生。
软件开发人员常常在对用户要求只有模糊的了解,甚至对所要解决的问题还没有确切的认识的情况下,就匆忙着手编写程序。软件开发人员与用户之间的信息交流往往很不充分,“闭门造车“必然导致最终的产品不符合用户的实际需要。 - 软件产品的质量往往靠不住。
软件可靠性和质量保证的确切的定量概念刚刚出现不久,软件质量保证技术(审查、复审、程序正确性证明、测试)还没有坚持不懈地应用到软件开发的全过程中,这些都导致软件产品发生质量问题。 - 软件常常是不可维护的。
- 软件通常没有适当的文档资料。
计算机软件不仅仅是程序,还应该有一整套文档资料。这些文档资料应该是在软件开发过程中产生出来的,而且应该是“最新式“(和程序代码完全一致的)。
软件开发组织的管理人员,可以适用这些文档资料作为“里程碑“,来管理和评价软件开发工程的进展状况。
软件开发人员,可以利用它们作为通信工具,在软件开发过程中准确地交流信息。
对于软件维护人员而言,这些文档资料更是必不可少的。
缺乏必要的文档资料,或文档资料不合格,必然给软件开发和维护带来许多严重的困难和问题。 - 软件成本在计算机系统总成本中所占的比重逐年上升。
- 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
3、产生软件危机的原因
-
与软件本身的特点有关
(1)由于软件缺乏“可见性“,在写出程序代码并在计算机上试运行之前,软件开发过程的的进展情况较难衡量,软件的质量也较难评价,因此,管理和控制软件开发过程相当困难。
(2)软件在运行过程中不会因为使用时间过长而被“用坏“,如果运行中发现了错误,很可能是遇到了一个在开发时期引入的、在测试阶段没能被检测出来的错误。因此,软件维护通常意味着改正或修改原来的设计,这就在客观上使得软件较难维护。
(3)软件不同于一般程序,它的一个显著特点是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。
为了在预定时间内开发出规模庞大的软件,必须由许多人分工合作,然而,如何保证每个人完成的工作合在一起确实能构成一个高质量的、大型软件系统,更是一个极端复杂困难的问题,这不仅涉及许多技术问题,诸如分析方法、设计方法、形式说明方法、版本控制等,更重要的是必须有严格而科学的管理。 -
与软件开发与维护的方法不正确有关
(1)忽视软件需求分析的重要性。
对用户要求没有完整准确的认识就匆忙着手编写程序,是许多软件开发工程失败的主要原因之一。只有用户才真正了解他们自己的需要,但是许多用户在开始时并不能准确具体地叙述他们的需要,软件开发人员需要做大量深入细致的调查研究工作,反复多次地和用户交流信息,才能真正全面、准确、具体地了解用户的要求。
软件生命周期:
第一步:定义问题(确定要求解决的问题是什么)
第二步:可行性研究(确定该问题是否存在一个可行的解决办法)
第三步:需求分析(深入具体地了解用户的要求,在所要开发的系统必须做什么这个问题上和用户取得完全一致的看法)
第四步:设计(概要设计、详细设计)
第五步:测试(需要的工作量通常占软件开发全部工作量的40%-50%)
第六步:交付。
(2)只重视程序而忽视软件配置的其余成分,没有认识到程序只是完整的软件产品的一个组成部分。
在上述“软件生命周期“的每个阶段都要得出最终产品的一个或几个组成部分(这些组成部分通常以文档资料的形式存在),也就是说,一个软件产品必须由一个完整的配置组成,软件配置主要包括程序、文档、数据等成分。
(3)轻视软件维护。
在软件开发的不同阶段进行修改需要付出的代价是很不相同的。
在早起引入变动,涉及的面较少,因而代价也比较低。
在开发的中期,软件配置的许多成分已经完成,引入一个变动要对软件工程学的一个重要目标就是提高软件的可维护性,减少软件维护的代价。
4、消除软件危机的途径
为了消除软件危机,首先应该付哦计算机软件有一个正确的认识,应该彻底消除“软件就是程序“的错误观念。一个软件必须由一个完整的配置组成,事实上,软件是程序、数据、及相关文档的完整集合。
程序是能够完成预定功能和性能的可执行的指令序列;
数据是使程序能够适当地处理信息的数据结构;
文档是开发、使用和维护程序所需要的图文资料。
总之,为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。