第一ç«?/p>
一、什么是软件危机?它有哪些典型表现?为什么会出现软件危机ï¼?/p>
软件危机是指在计算机软件开发ã€?/p>
使用与维护过程中遇到的一系列严重问题和难题ã€?/p>
它包括两æ–?/p>
面:如何开发软件,已满足对软件日益增长的需求;如何维护数量不断增长的已有软件ã€?/p>
软件危机的典型表现:
(1)
对软件开发成本和进度的估计常常很不准确。常常出现实际成本比估算成本高出一个数é‡?/p>
级ã€?/p>
实际进度比计划进度拖延几个月甚至几年的现象ã€?/p>
而为了赶进度和节约成本所采取的一些权宜之
计又往往损害了软件产品的质量。这些都降低了开发商的信誉,引起用户不满ã€?/p>
(2)
用户对已完成的软件不满意的现象时有发生ã€?/p>
(3)
软件产品的质量往往是靠不住的ã€?/p>
(4)
软件常常是不可维护的ã€?/p>
(5)
软件通常没有适当的文档资料ã€?/p>
文档资料不全或不合格ï¼?/p>
必将给软件开发和维护工作带来è®?/p>
多难以想象的困难和难以解决的问题ã€?/p>
(6)
软件成本、软件维护费在计算机系统总成本中所占比例逐年上升ã€?/p>
(7)
开发生产率提高的速度远跟不上计算机应用普及的需求ã€?/p>
软件危机出现的原因:
(1)
来自软件自身的特点:是逻辑部件,缺乏可见性;规模庞大、复杂,修改、维护困难ã€?/p>
(2)
软件开发与维护的方法不当:忽视需求分析;认为软件开发等于程序编写;轻视软件维护ã€?/p>
(3)
供求矛盾将是一个永恒的主题:面对日益增长的软件需求,人们显得力不从心ã€?/p>
二、假设自己是一家软件公司的总工程师,当把图
1.1
给手下的软件工程师们观看,告诉他们及
时发现并改正错误的重要性时ï¼?/p>
有人不同意这个观点,
认为要求在错误进入软件之前就清楚它们是不
现实的,
并举例说ï¼?/p>
“如果一个故障是编码错误造成的,
那么ï¼?/p>
一个人怎么能在设计阶段清除它呢?â€?/p>
应该怎么反驳他?
答:
在软件开发的不同阶段进行修改付出的代价是很不相同的,
在早期引入变动,
涉及的面较少ï¼?/p>
因而代价也比较低;在开发的中期,软件配置的许多成分已经完成,引入一个变动要对所有已完成çš?/p>
配置成分都做相应的修改,
不仅工作量大ï¼?/p>
而且逻辑上也更复杂,
因此付出的代价剧增;
在软ä»?/p>
“已经完成â€?/p>
是在引入变动ï¼?/p>
当然付出的代价更高。一个故障是代码错误造成的,有时这种错误是不可避免的,但要修改的成本æ˜?/p>
很小的,因为这不æ˜?/p>
整体构架的错误ã€?/p>
三、什么是软件工程?它有哪些本质特征?怎样用软件工程消除软件危机?
1993
å¹?/p>
IEEE
的定义:软件工程是:â‘?/p>
把系统的、规范的、可度量的途径应用于软件开发、运
行和维护过程,也就是把工程应用于软件;②
研究①中提到的途径ã€?/p>
软件工程的本质特征:
(1)
软件工程关注于大型程åº?/p>
(
软件系统
)
的构é€?/p>
(2)
软件工程的中心课题是分解问题ï¼?/p>
控制复杂æ€?/p>
(3)
软件是经常变化的,开发过程中必须考虑软件将来可能的变åŒ?/p>
(4)
开发软件的效率非常重要,因此,软件工程的一个重要课题就是,寻求开发与维护软件的更
好更有效的方法和工具
(5)
和谐地合作是开发软件的关键
(6)
软件必须有效地支持它的用æˆ?/p>
(7)
在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的äº?/p>
(
完成一些工ä½?/p>
)
消除软件危机的途径ï¼?/p>