西门子TP1900控制面板
开发和维护过程中所遇到的一系列严重问题。软件危机主要包含了两方面的问题:一是如何开发软件以满足软件日益增长的需求;二是如何维护数量不断增长的已有软件。
2.软件危机表现形式
(1)对软件开发成本和研制进度的估计常常很不**。经费预算经常突破,完成时间一拖再拖。这种现象降低了软件开发组织的信誉,而且有时为了赶进度和节约成本所采取的一些权宜之计又往往影响了软件产品的质量,从而不可避免地会引起用户的不满。
(2)“已完成”的软件不能满足用户要求。软件开发人员常常在对用户需求只有模糊的了解,甚至对所要解决的问题还没有确切认识的情况下,就匆忙着手编写程序了。软件开发人员和用户又未能及时交换意见,使得一些问题不能得到及时解决,导致开发的软件不能满足用户要求,使得开发失败。
(3)软件产品质量差,可靠性得不到保证。软件质量保证技供的巨大潜力。
以上列举的仅仅是软件危机的典型表现,与软件开发和维护有关的问题远远不止这些。
1.1.3 软件危机的产生原因及解决途径
1.产生软件危机的原因
身特点有关,也与软件开发人员在开发和维护时所采用的生产方式、方法、技术有关,可概括为以下几个方面。
(1)软件是计算机系统中的逻辑部件。软件产品往往规模庞大,结构复杂,这给软件的开发和维护带来客观的困难。
(2)软件开发的管理困难。软件规模大、结构复杂,又具有无形性,这导致管理困难,进度控制困难,质量控制困难,可靠性无法保证。
(3)软件开发费用不断增加,维护费用急剧上升,直接威胁计算机应用的扩大。
(4)软件开发技术落后。在20世纪60年代,人们注重如编译原理、操作系统原理、数据库原理等一些计算机理论问题的研究,而不注重软件开发技术的研究,用户要求的软件复杂性与软件技术解决复杂性的能力不相适应。
(5)生产方式落后。有人统计,硬件的性能价格比在过去30年中增长了106。一种新器件的出现,其性能较旧器件提高,价格反而有所下降,而软件则相形见绌。软件规模与复杂性增长了几个数量级,但生产方式仍然采用个体手工方式开发,根据个人习惯爱好工作,无章可循,无规范可依靠,带有很强的“个性化”特征的程序,因缺乏文档而根本不能维护,加剧了供需之间的矛盾。
(6)开发工具落后,生产效率提高缓慢。软件开发工具趋于原始,没有出现高效率的开发工具,因而软件生产效率低下。还有软件开发人员忽视需求分析的重要性,轻视软件工程是指导计算机软件开发和维护的一门工程学科。软件工程采用工程的概念、原理、技术和方法来开发和维护软件。
人们曾从不同的角度给软件工程下过各种定义,下面给出两种比较典型的定义。
1968年,在和届NATO会议上曾经给出了软件工程的一种早期定义:“软件
定义不仅指出了软件工程的目标是经济地开发出高质量的软件,而且强调了软件工程是一门工程学科,它应该建立并使用完善的工程原理。
1993年,IEEE进一步给出了一个更全面更具体的定义:“软件工程是:① 把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件开发;② 研究① 中提到的途径。”
虽然软件工程的不同定义使用了不同的词句,强调的重点也有所差异,但是它的中心思想是把软件当作一种工业产品,要求“采用工程化的原理和方法对软件进行计划、开发和维护。”宗旨是为了提高软件生产率、降低生产成本,以较小的代价获得高质量的软件产品。
2.软件工程基本目标
软件工程是一门工程性学科,目的是成功地建造一个大型软件系统。所谓成功是指要达到以下几个目标:
(1)降低软件开发成本;
(2)满足用户要求的全部软件功能;
(3)符合用户要求,令用户满意的软件性能;
(4)具有较好的易用性、可重用性和可先后提出l00余条关于软件工程的准则。**的软件工程学家B.W.Boehm综合有关专家和学者的意见,总结了多年来开发软件的经验,于1983年在一篇论
集合。它们之间相互独立,其中任意6条原理的组合都不能代替另一条原理,因此,它们是缺一不可的西门子小集合。下面简单介绍软件工程的7条基本原理。
(1)用分阶段的生存周期计划严格管理
阶段划分为计划、分析、设计、编程、测试和运行维护。B.W.Boehm认为在软件的整个生存周期中应该制定并严格执行6类计划:项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划和运行维护计划。
(2)坚持进行阶段评审
上一阶段评审没有通过,就不能进入下一阶段工作。在软件生存周期的每个阶段都要进行严格的评审,以便尽早发现在软件开发中犯下的错误并及时改正,对于保证软件质量、提高开发效率是非常重要的。
(3)实行严格的产品控制
尽管面向对象软件开发支持用户需求变化,但是在开发过程中,改变一项要求是要付出较高代价的。在实际开发过程中,由于外部环境等的变化,相应地改变用户需求是一种客观需要,是难免的,显然不能硬性禁止用户提出改变需求的要求,而只是依据科学的产品控制技术来适应这种要求。
(4)采用现代程序设计技术