首页 > 范文大全 > 正文

软件工程的三线索

开篇:润墨网以专业的文秘视角,为您筛选了一篇软件工程的三线索范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

软件工程包含了软件开发、软件项目管理、软件过程改进三个方面的内容(即软件工程的三线索),三者相互依存,共同促进,为软件企业提供一整套工程化的方法,来指导相关人员的工作。

软件产业从上个世纪中期从零起步,在短短50年的时间里迅速发展成为推动人类社会发展的龙头产业。在软件产业迅速发展的这50多年的历史中,人们对软件的认识经历了一个由浅到深的过程,软件工程(Software Engineering)的提出和完善就是这个认识不断提高的结果。因为软件开发是一项需要良好组织、严密管理且各方面人员配合协作的复杂工作,而软件工程正是指导这项工程的一门科学,软件工程的成果能为软件设计和开发人员提供思想方法和工具。

软件工程的起源

软件工程学科的出现直接原因是软件危机。所谓软件危机指的是在计算机软件的开发和维护

过程中所遇到的一系列严重问题。概括来说,软件危机包含两方面问题:

第一,如何开发软件以满足不断增长、日趋复杂的需求;

第二,如何维护数量不断膨胀的软件产品。

实际上,软件产生不久,落后的软件生产方式无法满足迅速增长的计算机软件需求这个矛盾就开始暴露出来,并导致软件开发与维护过程中出现一系列严重问题的现象。最为突出的例子是美国IBM公司于1963年~1966年开发的IBM360系列机的操作系统。该项目的负责人Fred Brooks(F•D•希罗克斯)在总结时无比沉痛地说: “……正像一只逃亡的野兽落到泥潭中做垂死挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难……程序设计工作正像这样一个泥潭……一批批程序员被迫在泥潭中拼命挣扎……谁也没有料到问题竟会陷入这样的困境……” IBM360操作系统的历史教训已成为软件开发项目中的典型事例被记入历史史册。

由于软件危机的产生,迫使人们不得不研究、改变软件开发的技术手段和管理方法,从此软件生产进入软件工程时代。

1968年北大西洋公约组织的计算机科学家在联邦德国召开的国际学术会议上第一次提出了“软件危机”(Software Crisis)这个词,同时讨论了如何摆脱“软件危机”。在那次会议上第一次提出了软件工程(Software Engineering)这个概念,从此一门新兴的工程学科――软件工程学应运而生。作为一门旨在开发满足用户需求、及时交付、不超过预算和无故障的软件的学科,软件工程的主要对象是大型软件。它的最终目的是摆脱手工生产软件的状况,逐步实现软件开发和维护的自动化。

自从软件工程概念提出以来,历经了几十年的研究与实践,虽然“软件危机”没得到彻底解决,但在软件开发方法和技术方面已经有了很大的进步。尤其应该指出的是,自上个世纪80年代中期,人们已经开始认识到,在软件开发中最关键的问题是软件开发组织不能很好地定义和管理其软件过程,从而使一些好的开发方法和技术起不到所期望的作用,也就是说,在没有很好定义和管理软件过程的软件开发中,开发组织不可能在好的软件方法和工具中获益。

软件工程的内容三段论

这里的三段论是指从内容这个角度看软件工程的三段理论。软件工程是为克服软件危机而提出的一个概念,并在实践中不断地探索它的原理、技术和方法。在此过程中,人们研究和借鉴了工程学的某些原理和方法,并形成了软件工程学。软件工程的目标是提高软件的质量与生产率,最终实现软件的工业化生产。既然软件工程是“工程”,那么我们从工程的角度看一下软件项目的实施过程(如图1所示)。

客户的需求启动了一个软件项目,为此我们需要先规划这个项目,即完成项目计划,然后根据这个项目计划实施项目。项目实施的依据是需求,这个需求类似工程项目的图纸,开发人员按照这个图纸生产软件,即设计和编码,在开发生产线上将开发过程的半成品通过配置管理存储和管理,然后进行必要的集成和测试,直到最后提交给客户。在整个开发过程中需要进行项目跟踪管理。软件工程活动是“生产一个最终满足需求且达到工程目标的软件产品所需要的步骤”。这些活动主要包括开发类活动、管理类活动和过程类活动,这里将它定义为“软件工程的三段论”或者“软件工程的三线索”,即软件项目管理、软件项目开发、软件过程改进。它们之间的关系可以用一个三角形表示(如图2)。它们类似于相互支撑的三角形的三个边,相互依赖,必不可少。

其中: 开发过程是软件人员生产软件的过程,例如需求分析、设计、编码、测试等,相当于生产线上的生产过程;

管理过程是项目管理者规划软件开发、控制软件开发的过程,相当于生产线上的管理过程,管理过程是伴随开发过程进行的过程;

过程改进相当于对软件开发过程和软件管理过程的“工艺流程”进行管理和改进。如果没有好的工艺生产不出好的产品,它包括对开发过程和管理过程的定义和改进。

为了保证软件管理、软件开发过程的有效性,应该保证这些过程的高质量和过程的持续改进。而软件开发过程中脑力活动的“不可见性”大大增加了过程管理上的困难。因此软件工程管理中的一个指导思想就是千方百计地使这些过程变为“可见的”以及事后可以检查的记录。只有从一开始就在开发过程中严格贯彻质量管理,软件产品的质量才有保证。否则,开发工作一旦进行到后期,无论怎样通过测试和修补漏洞,都会无济于事。

韩万江

北京邮电大学软件学院副教授,主要研究方向为软件工程、软件项目管理及软件测试等。著有《软件工程案例教程》、《软件项目管理案例教程》。

软件工程的未来发展

软件工程的研究热点是随着软件技术的发展而不断变化的。即便在软件工程的领域内,研究热点也在不断转移。

以往软件工程一直不能像其他产品一样做到标准化,随着技术条件的不断成熟、相应标准的出台,软件人员已经开始重视这方面的工作: 实际上可以将许多软件工作分成许多部件去构造,很有可能今后的软件队伍会分为两个部分,一部分专门从事评估,另一部分专门从事集成,集成的对象就是软构件。

软构件的开发与运用已悄悄开始。在一些公共领域,例如软件的用户界面,通用软构件的使用已经屡见不鲜。然而,对于各种专业领域来说,领域构件的开发和使用还基本处于空白状态。这一工作的进行意味着各行各业对本专业领域内的知识形态加以归纳整理,然后以最新的软件形式表达出来。如果全面铺开,将是一件规模浩大的社会工程,需要各领域专家和软件专家通力合作才能完成。一旦软件生产的“构件-集成”格局成为现实,各种应用领域里的构件的设计与生产将开辟出一个十分广阔的新天地,产生出巨大的市场需求,而且软构件的使用可以渗透到符合软构件标准规范的所有系统中,

在软件开发过程中人们开始研制和使用软件工具,用以辅助进行软件项目管理与技术生产,人们还将软件生命周期各阶段使用的软件工具有机地集合成为一个整体,形成能够连续支持软件开发与维护全过程的集成化软件开发环境,以期从管理和技术两方面解决软件危机问题。

此外,人工智能与软件工程的结合从上个世纪80年代末期便成为活跃的研究领域。基于程序变换、自动生成和可重用软件等软件新技术研究也已取得一定的进展,把程序设计自动化的进程向前推进了一步。在软件工程理论的指导下,发达国家已经建立起较为完备的软件工业化生产体系,形成了强大的软件生产能力。软件标准化与可重用性也得到了工业界的高度重视,在避免重复劳动、缓解软件危机方面起到了重要作用。

今天,软件已经普遍应用于各个行业,这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活质量。随着现代信息技术的飞速发展,软件产品的规模也越来越庞大,导致开发队伍的逐渐增大,从而使得软件工程的作用也越来越明显。但是,我们不能盲目崇拜软件工程。实际上,不管有没有软件工程,不管是否存在一个万能的框架系统,我们的应用系统仍然要做,各种各样的软件还是要开发。说到底,软件系统是因为有需求才存在的。有了应用领域软件存在才有了意义。很多时候,我们可以看到国外有各种各样的软件和创新,而我们还面临很多的问题,但我们不能说,只要解决软件工程问题就能推进软件产业。

(作者原文中有大量实例,限于篇幅,本文进行了删减。读者可以登录.cn查看原文,或参考作者所撰写的《软件工程案例教程》、《软件项目管理案例教程》。)

链接一:软件开发的三个阶段

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

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

第三个阶段是从70年代至今,为软件工程时代,是工程化的生产方式。这个阶段的硬件向超高速、大容量、微型化以及网络化方向发展,第三、四代程序设计语言出现。数据库、开发工具、开发环境、网络、分布式、面向对象技术等工具方法都得到应用。软件开发技术有很大进步,但仍未能获得突破性进展,软件开发技术的进步一直未能满足发展的要求。软件的数量急剧膨胀,同时,软件开发人员发现软件开发的难度越来越大,在软件开发中遇到的问题找不到解决的办法,最终导致了软件危机。

链接二:软件工程的定义

IEEE在软件工程知识体系指南中把软件工程定义为: 软件开发、实施、维护的系统化、规范化、质量化的方法的应用,也就是软件的应用工程,以及对上述方法的研究。

同时,该指南界定了软件工程的10个知识领域,即软件需求、软件设计、软件构建、软件测试、软件维护、软件配置管理、软件工程管理、软件工程过程、软件工程工具和方法和软件质量。其中每个知识领域还包括很多子领域。