郑州知网软件为您详解软件与软件危机
郑州软件公司认为软件是人类思维的产品,并且越来越成为国民经济和人类生活中必需的组成部分。软件的发展经历了一个阶段。最初,软件仅仅是计算机硬件的附属品,软件规模较小,成本相对于硬件也微乎其微。随着计算机硬件的普及,软件的需求越来越大,软件也变得越来越复杂。软件不仅成为影响系统性能的关键要素,在系统总成本中的比重也越来越大。因此,如何快速开发经济的、高质量的软件成为待解决的关键问题。
软件工程就是借助于工程化的思想、技术来解决软件开发过程中面临的问题,其目标是提高软件的质量与生产率,最终实现软件的工业化生产。从1968年北大西洋公约组织的计算机科学家在国际会议上首次提出软件工程的概念至今,软件工程的发展一直指引人们朝着彻底解决软件危机的方向前行。40多年来,软件工程在与软件的互相推动中逐渐完善,形成了一整套理论知识体系。
软件工程方法学是在软件生命周期全过程中使用的一整套技术方法,包括:方法、工具和过程。软件工程方法学经历了4个阶段,代表了4种不同的解决软件危机的思想。
软 件
在20世纪50年代,软件伴随着第一台电子计算机的问世诞生了。接着,以写程序为职业的人也开始出现,这些人大多是经过训练的数学家和电子工程师。10年后,美国大学里开始出现计算机专业学位,专门教人们写软件。在随后的50年里,软件行业迅速发展成为推动人类社会发展的龙头产业,并造就了一批百万、千万富翁。随着信息产业的发展,软件对人类社会的发展越来越重要。
那么,如何给软件定义?软件是什么?
郑州软件开发认为软件对于人类而言是一个全新的东西,其发展历史不过四五十年。人们对软件的认识经历了一个由浅到深的过程。在计算机系统发展的初期,硬件通常用来执行一个单一的程序,而这个程序又是为一个特定的目的而编制的。当时,大多数软件的使用者就是软件的编写者。这使得早期软件的开发方法存在许多先天的问题:①软件的需求、设计是在某个人的头脑中完成的一个隐藏的过程,这个过程也没有什么系统的方法可以遵循。②软件往往带有强烈的个人色彩,而且除了源代码,往往没有软件说明书等文档。
从20世纪60年代中期到20世纪70年代中期,计算机硬件系统经历了一个大的发展。在这一时期,软件开始作为一种产品被广泛使用,出现了专门给别人开发软件的“小型作坊”。但这些作坊仍然沿用早期的个体化软件开发方式,随着软件数量的急剧膨胀、软件需求的日趋复杂,维护软件的难度越来越大,软件开发的成本也令人吃惊的高,而失败的软件项目却屡见不鲜。“软件危机”就这样开始了!
“软件危机”促使人们开始对软件及其特性进行更深一步的研究,人们改变了早期对软件的不正确看法,认识到优秀的程序除了功能正确、性能优良之外,还应该容易看懂、容易使用、容易修改和扩充。
现在,被普遍接受的软件的定义如下。
软件是计算机系统中与硬件相互依存的另一部分,它包括程序、数据及其相关文档。其中程序是按事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发、维护和使用有关的各种图文资料。
然而,软件远非一个形式化的定义所能刻画的。越来越多的软件包含有该软件应用领域的业务流程、规则等。因此,软件还是嵌入业务知识的系统。
软件是人工制品,但它是人类思维的产品,与传统的工业产品相比,软件有其独特的特点。
(1)软件是一种逻辑实体,而不是具体的物理实体,具有抽象性。这个特点使它在开发、生产、使用、维护等方面与硬件相比有明显的差异。人们可以把它记录在纸上、内存、磁盘、光盘上,但无法看到软件本身的形态,必须通过观察、分析、思考、判断,才能了解软件的功能、性能等特性。
(2)软件是开发,硬件是制造。一旦软件研制开发成功,就可以大量复制同一内容的副本。所以对软件的质量控制,重在软件的开发方面。
(3)硬件存在机械磨损问题,但软件在使用过程中,没有磨损、老化的问题。软件在生存周期后期不会因为磨损而老化,但会为了适应硬件、环境以及需求的变化而进行修改,而这些修改又不可避免地引入错误,导致软件失效率升高,从而出现软件退化。当修改的成本变得难以接受时,软件就会被抛弃。
(4)软件对硬件和环境有着不同程度的依赖性,包括不同的硬件平台和支持软件运行的其他软件系统。这导致了软件移植的问题。
(5)软件是定制的,而不是通过已有构件组装而成的。虽然人们提出了软件复用、构件技术,但是手工作坊式的软件开发方式仍然占主导地位,像硬件生产那样基于已有零部件进行组装,实现软件开发自动化一直是追求的梦想。
(6)软件是复杂的,而且会变得更加复杂。软件是人类思维和智能的产品,它的开发凝聚了大量的脑力劳动,是人类有史以来生产的复杂度最高的工业产品。在大型软件系统中,软件涉及大量的数据、状态和它们之间的逻辑关系,加上人类思维的复杂性和不确定性,导致系统的复杂性急剧增加,也使得软件的分析、设计、实现和测试变得相当困难。
此外,由于软件使用在社会的各行各业、方方面面,软件开发常常涉及其他领域的专门知识,这对软件工程师提出了很高的要求。
(7)软件的成本相当昂贵。软件开发是高智商者从事的工作,需要投入大量、高强度的脑力劳动,成本非常高,风险也大。现在软件的开销已远远超过了硬件的开销。
(8)软件工作牵涉到很多社会因素。许多软件的开发和运行涉及机构、体制和管理方式等问题,还会涉及人的观念和心理。这些人的因素,常常成为软件开发的困难所在,直接影响到项目的成败。
软 件 危 机
郑州软件定制认为软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。20世纪60年代末至20世纪70年代初,“软件危机”一词在计算机界广为流传。事实上,几乎从计算机诞生的那一天起,就出现了软件危机。如今,50多年过去了,虽然软件开发的技术和工具不断改进,但是软件危机依然没有彻底消除。
概括来说,软件危机包含两方面问题:①如何开发软件,以满足不断增长、日趋复杂的需求。②如何维护数量不断膨胀的已有软件产品。
具体地说,软件危机主要有以下表现。
1)软件成本日益增长,在计算机系统的整个成本中所占比例越来越大
20世纪50年代,软件成本在整个计算机系统成本中所占的比例为10%-20%。但随着软件产业的发展,软件成本日益增长。相反,计算机硬件随着技术的进步、生产规模的扩大,价格却不断下降。这样一来,软件成本在计算机系统中所占的比例越来越大。到20世纪60年代中期,软件成本在计算机系统中所占的比例已经增长到50%左右。而且,该数字还在不断地递增,图1.1所示显示了软件成本的上升趋势。
2)开发进度难以控制,延迟交付甚至取消项目的现象屡见不鲜
在软件开发过程中,用户需求变化等各种意想不到的情况层出不穷,令软件开发过程很难保证按预定的计划实现,给项目计划和论证工作带来了很大的困难。此外,由于软件是逻辑、智力产品,软件的开发需建立庞大的逻辑体系,在硬件生产中常用的加快进度的方法(如增加人力)不能用在软件开发上。IBM360机的操作系统项目负责人F.D.Brooks曾经提出:“在已拖延的软件项目上,增加人力只会使其更难按期完成。”事实上,软件系统的结构很复杂,各部分联系极大,盲目增加软件开发人员并不能成比例地提高软件开发能力。相反,随着人员数量的增加,人员的组织、协调、通信、培训和管理等方面的问题将更为严重。
3)软件存在着错误多、性能低、不安全、不可靠等质量问题
软件项目即使能按预定日期完成,结果却不尽如人意。1965—1970年,美国范登堡基地发射火箭多次失败,绝大部分故障是由应用程序错误造成的。程序的一些微小错误可以造成灾难性的后果。例如,有一次,在美国肯尼迪发射一枚阿脱拉斯火箭,火箭飞离地面几十英里高空开始翻转,地面控制中心被迫下令炸毁。后经检查,发现是飞行计划程序里漏掉了一个连字符。就是这样一个小小的疏漏,造成了这支价值1850万美元的火箭试验失败。随着软件越来越多地用在国民经济和人类社会的高安全性、高可靠性系统中,软件的质量保证成为人们关注的焦点。
4)软件维护困难
正式投入使用的软件,总是存在着一定数量的错误,在不同的运行条件下,软件就会出现故障,因此需要维护。软件即使能够正常使用,由于软硬件环境的变化或用户提出新需求,也需要进行修改。但是,由于在软件设计和开发过程中,没有严格遵循软件开发标准,各种随意性很大,没有完整的真实反映系统状况的记录文档,给软件维护造成了巨大的困难。特别是在软件使用过程中,原来的开发人员可能因各种原因已经离开原来的开发组织,使得软件几乎不可维护。有资料表明,为维护软件支付的费用占全部硬件和软件费用的40%-75%。
为了克服软件危机,首先需要分析导致软件危机的原因。从软件危机的种种表现和软件作为逻辑产品的特殊性可以发现,产生软件危机的原因包括以下几个方面。
1)用户需求不明确,致使软件开发周期延长、成本增加,甚至导致项目失败
用户需求是软件开发的基础,然而获取用户需求又是一件非常困难的任务。在软件开发过程中,用户需求不明确问题主要体现在:在软件开发出来之前,用户自己也不清楚软件的具体需求;用户对软件需求的描述不精确,可能有遗漏、有二义性,甚至有错误;在软件开发过程中,用户还提出修改软件功能、界面、支撑环境等方面的要求;由于知识背景的差异、交流方法或描述工具的原因,软件开发人员对用户需求的理解与用户本来的愿望有差异。
2)缺乏正确的理论指导,开发过程不规范,开发人员各自为战,缺少整体规划
缺乏有力的方法学和工具方面的支持、没有对软件进行整体规划、没有约束开发人员的文档资料、过分地依靠程序设计人员在软件开发过程中的技巧和创造性,加剧软件产品的个性化,也是发生软件危机的一个重要原因。
3)软件规模越来越大
郑州软件外包认为随着软件应用范围的不断扩大,软件规模也越来越大。大型软件项目需要组织一定的人力共同完成,多数管理人员缺乏管理方面的经验,而多数软件开发人员又缺乏开发大型软件系统的经验。各类人员的信息交流不及时、不准确,有时还会产生误解,致使软件开发活动无法有效进行,工期一拖再拖。
4)软件复杂度越来越高
软件不仅仅是在规模上快速地发展扩大,其复杂性也急剧地增加。软件产品的特殊性和人类智力的局限性,导致人们无力处理复杂问题。
与40年前相比,软件开发技术已经取得了长足的进步。然而,软件的规模和复杂性也呈现指数型增长,同时,对软件的质量也提出更高的要求。因此,软件危机依然是亟待解决的问题。
联系我们
软件开发: 15838307519(司经理)
网络营销: 13676968269(王经理)
网络建设: 13073737771(郭经理)
24小时服务电话: 0371-56683330