Bookcold

导航

【转】软件工程的三段论起源及发展趋势

软件工程(Software Engineering,简称为SE)是针对软件这一具有特殊性质的产品的工程化方法。软件工程涵盖了软件生存周期的所有阶段,并提供了一整套工程化的方法,来指导软件人员的工作。

一、软件工程定义

“工程”是科学和数学的某种应用,通过这一应用,使自然界的物质和能源的特性能够通过各种结构、机器、产品、系统和过程,成为对人类有用的东西。因而,“软件工程”就是科学和数学的某种应用,通过这一应用,使计算机设备的能力借助于计算机程序、过程和有关文档成为对人类有用的东西。

软件工程的成果是为软件设计和开发人员提供思想方法和工具,而软件开发是一项需要良好组织,严密管理且各方面人员配合协作的复杂工作。软件工程正是指导这项工程的一门科学。软件工程在过去一段时间内已经取得了长足的进展,可以说在软件的开发和应用中起到了其应有的作用。

高质量的软件工程可以保证软件工业中生产的软件是高质量的产品、用户满意的产品。但是,对软件工程的界定,总是存在一定的差异。软件工程应该包括哪些知识?这里我们引用 IEEE在软件工程知识体系指南(SEWBOK:Guide to the Software Engineering Body of Knowledge 2004Version)中的定义,它是这样定义软件工程的:1)软件开发、实施、维护的系统化、规范化、质量化的方法的应用,也就是软件的应用工程2)对上述方法的研究。

IEEE的软件工程知识体系指南(SWEBOK)中界定了软件工程的10个知识领域(KAs:Knowledge Areas)即软件需求(Software requirements)、软件设计(Software design)、软件构建(Software construction)、软件测试(Software testing)、软件维护(Software maintenance)、软件配置管理(Software configuration management)、软件工程管理(Software engineering management)、软件工程过程(Software engineering process)、软件工程工具和方法(Software engineering tools and methods)和软件质量(Software qualITy)。这10个知识领域的每个知识领域还包括很多子领域。

二、软件工程起源的三段论

这里的三段论是指从时间角度看软件工程起源的三个阶段。本世纪中期软件产业从零开始起步,在短短的50年的时间里迅速发展成为推动人类社会发展的龙头产业。随着信息产业的发展,软件对人类社会性越来越重要。软件发展的五十年历史中,人们对软件的认识经历了一个由浅到深的过程。

第一个写软件的人是Ada(Augusta Ada Lovelace),在1860年代他尝试为Babbage(Charles Babbage)的机械式计算机写软件。尽管失败了,但他将永远载入了计算机发展的史册。1950年代,软件伴随着第一台电子计算机的问世诞生了。以写软件为职业的人也开始出现,他们多是经过训练的数学家和电子工程师。1960年代美国大学里开始出现授予计算机专业的学位,教人们写软件。

软件发展的历史可以大致分为如下的三个阶段:

第一个阶段是1950年代到1960年代,是程序设计阶段,基本是个体手工劳动的生产方式。这个时期,一个程序是为一个特定的目的而编制的,软件的通用性很有限的。软件往往带有强烈的个人色彩。早期的软件开发没有什么系统的方法可以遵循,软件设计是在某个人的头脑中完成的一个隐藏的过程。而且,除了源代码往往没有软件说明书等文档,因此这个时期尚无软件的概念,基本上只有程序、程序设计概念,不重视程序设计方法,主要是用于科学计算,规模很小、采用简单的工具(基本上采用低级语言),硬件的存储容量小、运行可靠性差。

第二阶段是1960年代到1970年代,是软件设计阶段,小组合作生产方式。在这一时期软件开始作为一种产品被广泛使用,出现了“软件作坊”。这个阶段,基本采用高级语言开发工具,开始提出结构化方法。硬件的速度、容量、工作可靠性有明显提高,而且硬件的价格降低。人们开始使用产品软件(可购买),从而建立了软件的概念。程序员数量猛增,但是开发技术没有新的突破 ,软件开发的方法基本上仍然沿用早期的个体化软件开发方式,软件需求日趋复杂,维护的难度越来越大,开发成本令人吃惊地高,开发人员的开发技术不适应规模大、结构复杂的软件开发,失败的项目越来越多。

第三个阶段是从1970年代止今,为软件工程时代 ,是工程化的生产方式。这个阶段的硬件向超高速、大容量、微型化以及网络化方向发展,第三、四代语言出现。数据库、开发工具、开发环境、网络 、分布式、面向对象技术等工具方法都得到应用 。软件开发技术有很大进步,但未能获得突破性进展,软件开发技术的进步一直未能满足发展的要求。软件的数量急剧膨胀,一些复杂的、大型的软件开发项目提出来了,在那个时代,很多的软件最后都得到了一个悲惨的结局。很多的软件项目开发时间大大超出了规划的时间表,一些项目导致了财产的流失,甚至某些软件导致了人员伤亡。同时软件开发人员也发现软件开发的难度越来越大,在软件开发中遇到的问题找不到解决的办法,使问题积累起来,形成了尖锐的矛盾,失败的软件开发项目却屡见不鲜,因而导致了软件危机。

软件危机指的是在计算机软件的开发和维护过程中所遇到的一系列严重问题。概括来说,软件危机包含两方面问题:一、如何开发软件,以满足不断增长,日趋复杂的需求;二、如何维护数量不断膨胀的软件产品。落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。

最为突出的例子是美国IBM公司于1963年~1966年开发的IBM360系列机的操作系统。难怪该项目的负责人Fred Brooks(FD 希罗克斯)在总结该项目时无比沉痛地说:“……正像一只逃亡的野兽落到泥潭中作垂死挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难,……程序设计工作正像这样一个泥潭……一批批程序员被迫在泥潭中拼命挣扎,……,谁也没有料到问题竟会陷入这样的困境……。” IBM360操作系统的历史教训已成为软件开发项目中的典型事例被记入历史史册。由于软件危机的产生,迫使人们不得不研究、改变软件开发的技术手段和管理方法。从此软件生产进入软件工程时代。

[...]

posted on 2010-06-29 17:30  bookcold  阅读(875)  评论(0)    收藏  举报