1、 软件工程的产生计算机系统的发展、软件应用的日益广泛和软件危机的困扰促使了软件工程的产生和发展。 软件工程发展史自从20世纪40年代电子计算机问世以来,计算机软件随着计算机硬件的发展而逐 步发展起来,软件和硬件一起构成计算机系统。一开始只有程序的概念,后来才出现软件的概念。当软件需求量大大增加后,人们把软件视为产品,确定了软件生产的各个阶段必须完成的有关计算机程序的功能、设计和使用的文字或图形资料,这些资料称为“文档”。软件是指计算机程序及其有关的数据和文档。随着计算机系统的发展,软件的生产大体经历了程序设计、软件、软件工程、第四代技术等阶段。在此过程中,软件危机产生并越来越严重,因而逐步形成
2、了研究如何消除软件危机,如何合理地开发和维护软件的学科软件工程学。1程序设计阶段20世纪40年代中期到20世纪60年代中期,电子计算机价格昂贵、运算速度低、存储量小。计算机程序是描述计算任务的处理对象和处理规则。早期的程序规模小,程序往往是个人设计、自己使用。程序设计通常要注意如何节省存储单元、提高运算速度,除了程序清单之外,没有其他任何文档资料。2“软件=程序+文档”阶段20世纪60年代中期到20世纪70年代中期,集成电路计算机的运算速度和内存容量大大提高。随着程序的增加,人们把程序区分为系统程序和应用程序,并把它们称为软件。计算机软件的应用范围更加广泛,当软件需求量大大增加后,许多用户去“
3、软件作坊”购买软件。软件产品交付给用户使用之后,为了纠正错误或适应用户需求的改变对软件进行的修改,称为软件维护(software maintenance)。此时,由于在软件开发过程中很少考虑到它们的维护问题,软件维护的费用以惊人的速度增长,并且不能及时满足用户的需求,质量也得不到保证。所谓的“软件危机”由此开始。人们逐渐重视软件的“可维护性”问题,软件开发开始采用结构化程序设计技术,并规定软件开发时必须书写各种规格书、说明书、用户手册等文档。1968年北大西洋公约组织(NATO)的计算机科学家在联邦德国召开国际会议,讨论软件危机问题,正式提出了“软件工程”(software engineeri
4、ng)的术语。从此一门新的工程学科诞生了。3软件工程阶段20世纪70年代中期到20世纪90年代,大规模集成电路计算机的功能和质量不断提高,个人计算机已经成为大众化商品,计算机应用不断地扩大。软件开发生产率提高的速度远远跟不上计算机应用迅速普及深入的速度,软件产品供不应求,软件危机日益严重。为了维护软件需要耗费大量的成本。美国当时的统计数据表明,对计算机软件的投资占计算机软件、硬件总投资的70%,到1985年时软件成本大约占总成本的90%。为了对付不断增长的软件危机,软件工程学把软件作为一种产品进行批量生产,运用工程学的基本原理和方法来组织和管理软件生产,以保证软件产品的质量,提高软件产品的生产
5、率。软件生产使用数据库、软件开发工具、开发环境等,软件开发技术有了很大的进步,开始采用工程化开发方法、标准和规范,以及面向对象技术等。4第四代技术阶段计算机系统发展的第四阶段不再是单台的计算机和计算机程序,而是面向计算机和软件的综合影响。复杂的操作系统控制的强大的桌面系统,以及连接局域网和因特网、高带宽的数字通信与先进的应用软件相互配合,产生了综合的效果。计算机体系结构从主机环境转变为分布式的客户机/服务器环境。软件开发的第四代技术有了新的发展:计算机辅助软件工程(Computer Aided Software Engineering,CASE)将工具和代码生成器结合起来,为许多软件系统提供了
6、可靠的解决方案;面向对象技术已在许多领域迅速取代了传统的软件开发方法;专家系统和人工智能软件有了实际应用;人工神经网络软件展示了信息处理的美好前景;并行计算技术、网络计算机、虚拟现实技术、多媒体技术和现代通信技术使人们开始采用和原来完全不同的方法进行工作。此外,光计算机、化学计算机、生物计算机和量子计算机等新一代计算机的研制发展,必将给软件工程技术带来一场革命。 软件危机软件危机是指在计算机软件开发和维护时所遇到的一系列问题。软件危机主要包含两方面的问题:一是如何开发软件以满足社会对软件日益增长的需求,二是如何维护数量不断增长的已有软件。本节研究软件危机产生的原因、主要表现形式以及解决的途径。
7、1软件危机产生的原因软件危机产生的原因与软件的特点有关,也与软件开发的方式、方法、技术以及软件开发人员本身有关。(1)软件是计算机系统中的逻辑部件,软件产品往往规模庞大,给软件的开发和维护带来客观的困难。(2)软件一般要使用510年,在这段时间里,很可能出现开发时没有预料到的问题,如系统运行的硬件、软件环境发生变化,系统需求变化等,需要及时地维护软件,使软件可以继续使用。(3)软件开发技术落后,生产方式和开发工具落后。(4)软件开发人员忽视软件需求分析的重要性,轻视软件维护,也是造成软件危机的原因。2软件危机主要表现形式(1)软件发展速度跟不上硬件的发展和用户的需求。计算机硬件成本逐年下降,软
8、件应用日趋广泛,软件产品“供不应求”,与硬件成本相比,软件成本越来越高。(2)软件成本高,开发进度不能预先估计,用户不满意。由于软件应用范围越来越广,很多应用领域往往是软件开发者不熟悉的,加之开发人员与用户之间信息交流不够,导致软件产品不符合要求,不能如期完成。因而,软件开发成本和进度都与原先的估计相差太大,引起用户不满。(3)软件产品质量差,可靠性得不到保证。软件质量保证技术没有应用到软件开发的全过程,导致软件产品质量问题频频发生。(4)软件产品可维护性差。软件设计时不注意程序的可读性,不重视程序的可维护性,程序中存在的错误很难改正。因此软件需求发生变化时,维护相当困难。(5)软件没有合适的
9、文档资料。软件开发时文档资料不全或文档与软件不一致,会引起用户不满,同时也会给软件维护带来很大的困难。3解决软件危机的途径目前,计算机的体系结构在硬件上是冯诺依曼计算机。硬件的基本功能是做简单的运算与逻辑判断,主要还是适用于数值计算。随着计算机应用的日益广泛,许多企事业单位80%以上的计算机用于管理方面。管理方面大多为非数值计算问题,需要设计计算机软件来进行处理,因而可能会使软件变得复杂、庞大,从而导致软件危机的产生。要解决软件危机问题,需要采用以下措施:(1)使用好的软件开发技术和方法。(2)使用好的软件开发工具,提高软件生产率。(3)有良好的组织、严密的管理,各类人员相互配合共同完成任务。
10、为了解决软件危机,既要有技术措施(好的方法和工具),也要有组织管理措施。软件工程正是从技术和管理两方面来研究如何更好地开发和维护计算机软件的。 软件工程学 什么是软件软件是计算机程序及其有关的数据和文档的完整集合。其中,计算机程序是能够完成预定功能的可执行的指令序列;数据是程序能适当处理的信息,具有适当的数据结构;软件文档是开发、使用和维护程序所需要的图文资料。软件文档(software documentation)是以人们可读的形式出现的技术数据和信息。文档描述或规定软件的设计细节,说明软件具备的能力,或为使用该软件以便从软件系统得到所期望的结果提供操作指令。B. Boehm指出:“软件是程
11、序以及对其进行开发、使用和维护所需要的所有文档。”特别当软件成为商品时,文档是必不可少的;没有文档,仅有程序是不能称为软件产品的。 什么是软件工程软件工程是计算机科学中的一个重要分支。按照中华人民共和国国家标准GB/T 114571995软件工程术语的定义:软件工程是软件开发、运行、维护和引退的系统方法。因而,软件工程是指导计算机软件开发和维护的工程学科。软件工程采用工程的概念、原理、技术和方法来开发与维护软件。软件工程的目标是实现软件的优质高产,软件工程的目的是在规定的时间、规定的开发费用内,开发出满足用户需求的、高质量的软件产品。 软件工程学的内容软件工程学的主要内容是软件开发技术和软件工
12、程管理。软件开发技术包含软件工程方法学、软件工具和软件开发环境;软件工程管理学包含软件工程经济学和软件管理学。1软件工程方法学最初,程序设计是个人进行的,只注意如何节省存储单元、提高运算速度。以后,兴起了结构程序设计,人们采用结构化的方法来编写程序。结构程序设计只有顺序、条件分支和循环这三种基本结构。这样不仅改善了程序的清晰度,而且能提高软件的可靠性和软件生产率。后来,人们逐步认识到编写程序仅是软件开发过程中的一个环节,在典型的软件开发工作中,编写程序所需的工作量只占软件开发全部工作量的10%20%,软件开发工作应包括需求分析、软件设计、编写程序等几个阶段,于是形成了“结构化分析”、“结构化设
13、计”、面向数据结构的Jackson方法等传统软件开发方法。之后,20世纪80年代广泛应用了面向对象设计方法。软件工程方法学是编制软件的系统方法,它确定软件开发的各个阶段,规定每一阶段的活动、产品、验收的步骤和完成准则。软件工程方法学有三个要素,包括方法、工具和过程。 方法:完成软件开发任务的技术方法。 工具:为方法的运用提供自动或半自动的软件支撑环境。 过程:规定了完成任务的工作阶段、工作内容、产品、验收的步骤和完成准则。各种软件工程方法的适用范围不尽相同。目前使用得最广泛的软件工程方法学可以分为传统方法学和面向对象方法学两类。(1)传统方法学传统方法学采用结构化技术,包括结构化分析、结构化设
14、计和结构化实现,来完成软件开发任务。传统方法把软件开发工作划分成若干个阶段,每个阶段相对独立,也比较简单,顺序完成各阶段的任务;每个阶段的开始和结束都有严格的标准;每个阶段结束时要进行严格的技术审查和管理复审。用传统方法学开发软件,首先确定软件功能,再对功能进行分解,确定怎样开发软件,然后实现软件功能。传统方法提高了软件的可维护性,提高了软件开发的成功率,软件生产率也明显提高。传统方法学历史悠久,为广大软件开发人员所熟知,在开发某些软件时十分有效。传统方法可以再分为面向数据流设计方法和面向数据结构设计方法。(2)面向对象方法学面向对象方法学是在传统方法学的基础上发展起来的,把对象作为数据和对数
15、据的操作相结合的软件构件,用对象分解取代了传统方法的功能分解。该方法把所有对象都划分为类,把若干个相关的类组织成具有层次结构的系统,下层的子类继承上层的父类所具有的数据和操作,而对象与对象之间通过发送消息相互联系。面向对象方法学的要素是对象、类、继承以及消息通信。可以用下列方程来概括:面向对象?=?对象?+?类?继承?消息通信面向对象方法学是多次反复、迭代开发的过程。面向对象方法在分析和设计时使用相同的概念和相同的表示方法,两个阶段之间没有明显的界限。最终产品是由许多基本独立的对象组成的,这些对象具有简单、易于理解、易于开发、易于维护的特点,并且具有可重用性。本书既介绍传统方法学,使读者掌握软件开发的基本步骤、方法和文档书写规范,也介绍
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1