经过几十年的实践与探索,软件工程正在逐步发展成为一门成熟的专业学科,在软件产业的发展中起到重要的技术保障和促进作用。本章论述软件工程的基础理论,包括软件开发模型、软件开发方法、软件开发工具与环境以及软件项目管理等几个主要方面。
1软件工程概论
1968年在德国召开的NATO会议上,首次提出了“软件工程”一词,希望用工程化的原则和方法来克服软件危机。在此以后,人们开展了软件开发模型、开发方法、工具与环境、软件项目管理的研究,提出了瀑布模型、演化模型、螺旋模型、喷泉模型等开发模型,出现了结构化方法、面向数据结构方法、原型化方法、面向对象方法等开发方法,一批CASE(ComputerAidedSoftwareEngineering,计算机辅助软件工程)工具和环境,以及一些成功的软件项目管理方法。
1.1软件工程概念
软件工程是用工程、科学和数学的原则与方法研制、维护计算机软件的有关技术及管理方法。它由方法、工具和过程三部分组成。近年来,人们又将用于开发软件的软、硬件工具和软件工程数据库集成在一起,建立集成化的计算机辅助软件工程(CASE)环境。软件工程中的过程贯穿于软件开发的各个环节。管理者在软件工程过程中,要对软件开发的质量、进度、成本进行评估、管理和控制,包括人员组织、计划跟踪与控制、成本估算、质量保证、配置管理等。软件工程的方法、工具、过程构成了软件工程的三要素。
软件工程的目标是:在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并满足用户需求的软件产品。
追求这些目标有助于提高软件产品的质量和开发效率,减少维护的困难,最终获得项目的成功。成功的软件开发应该达到以下几个主要目标:①付出较低的开发成本;②达到要求的软件功能;③取得较好的软件性能;④开发的软件易于移植;⑤需要较低的维护费用;⑥能按时完成开发工作,及时交付使用。
在实际的系统开发中,软件工程的几个目标都达到理想的程度往往是非常困难的,有些目标存在着互补关系,而有一些目标可能是互相冲突的。为了开发高质量的软件产品并便于维护,人们提出了围绕工程设计、工程支持以及工程管理的4条基本原则,以帮助开发人员利用这些技术和经验来生产和维护高质量的软件:
(1)选取适宜的开发模型。在系统设计中,软件需求、硬件需求以及其他因素是相互制约和相互影响的,经常需要权衡。因此,必须认识需求定义的易变性,并采取变性,并采取适当的措施予以控制,以保证软件产品能够满足用户的要求。
(2)采用合适的设计方法。在软件设计中,通常要遵循软件的模块化、抽象化、信息隐蔽、局部化、一致性以及适应性等原则。选择合适的设计方法有助于这些特性的实现,以达到软件工程的目标。
(3)提供高质量的工程支撑。在软件工程中,软件工具与环境对软件工程的支持非常重要。软件项目的质量与开销直接取决于对软件工程所提供的支撑质量和效用。
1.2软件工程的发展
自1968年NATO会议上提出软件工程这一概念以来,人们一直在寻求更先进的软件开发方法和技术。每当出现一种先进的方法和技术时,就会使软件危机得到一定程度的缓解,然而这种进步又促使人们把更多、更复杂的问题交给计算机去解决,于是又需要探索更先进的方法和技术。几十年来,软件工程研究的范围和内容也随着软件技术的发展不断变化和拓展。软件工程的发展可分为3个阶段。
第一阶段:20世纪70年代,为了解决软件项目失败率高、错误率高以及软件维护任务重等问题,人们提出软件生产工程化的思想,希望使软件生产走上正规化的道路,并努力克服软件危机。基本形成了软件工程的概念、框架、方法和手段,成为软件工程的第一代――传统软件工程时代。
第二阶段:20世纪80年代,面向对象的方法与技术受到广泛的重视,Smalltalk-80的出现标志着面向对象的程序设计进入实用和成熟阶段。软件生产开始进入以过程为中心的第二阶段。在这个时期人们认识到,应从软件生存周期的总费用及总价值来决定软件开发方案。在重视发展软件开发技术的同时,人们提出软件能力成熟度模型、个体软件过程和群组软件过程等概念。在软件定量研究方面提出了软件工作量估计COCOMO模型等。软件开发过程从目标管理转向过程管理,形成了软件工程的第二代――过程软件工程时代。
第三阶段:进入20世纪90年代以后,软件开发技术的主要处理对象为网络计算和支持多媒体信息的WWW。这一时期软件工程的目的在于不仅提高个人生产率,而且通过支持跨地区、跨部门、跨时空的群组共享信息,协同工作来提高群组、集团的整体生产效率。因整体性软件系统难以更改、难以适应变化,所以提倡基于部件(构件)的开发方法――即部件互连及集成。软件复用和软件构件技术正逐步成为主流软件技术,软件工程也由此进入了一个新的发展阶段——构件软件工程时代。
2软件开发模型
在整个软件开发过程中,为了从宏观上管理软件的开发和维护,就必须对软件的開发过程有总体的认识和描述,即要建立软件开发模型。软件开发模型是软件开发全部过程、活动和任务的结构框架。模型能够清晰、直观地表达软件开发的全过程,明确规定了要完成的主要活动和任务,是软件项目工作的基础。常见的软件开发模型有瀑布模型、演化模型、螺旋模型、喷泉模型等。
2.1软件生存周期
如同人的一生要经历婴儿期、少年期、青年期、老年期直至死亡这样一个全过程一样,任何一个软件产品或软件系统也都要经历软件定义、软件开发、软件维护直至被淘汰这样一个全过程,我们把软件的这一全过程称为软件生存周期。软件定义、软件开发、软件维护等阶段还可分别分成若干个阶段,每个阶段相对独立又彼此有联系。上一阶段的工作结果是下一阶段工作的依据,下一阶段是上一阶段的进化,它更接近于问题的解。项目定义阶段主要解决的问题是待开发的软件要“做什么”,也就是要确定软件的处理对象、软件与外界的接口、软件的功能和性能、软件界面以及有关的约束和限制。目前,软件生存周期各阶段的划分尚不统一,有的分得粗些,有的分得细些。在许多场合,软件开发阶段都是从需求分析阶段开始的。本文也将需求分析看作为软件开发的一个阶段。
2.2瀑布模型
瀑布模型将软件生存周期中的各个软件工程活动自上而下进行排列,各个活动之间相互衔接,次序固定,构成如同瀑布流水、逐级下落的结构框架,每个阶段任务完成后都要提交相应的文档资料,进行评审和复审,审查通过后再进入到下一个阶段的工作,逐步完成各阶段的开发任务。其中前两个阶段可称为软件的定义时期,中间的几个阶段称为软件的开发时期,最后的一个阶段称为维护时期。瀑布模型的优点主要是简单、便于分工协作、降低开发难度、开发成功率高、保证质量等。
2.3演化模型
演化模型是针对瀑布模型的缺点而提出的。大量的软件开发实践表明,许多开发项目在开始时对软件需求的认识是模糊的,因此很难一次开发成功。为了减少因对软件需求的了解不够确切而给开发工作带来的风险,可以在获取了一组基本的需求后,通过快速分析构造出该软件的一个初始可运行版本,这个初始的软件通常称之为原型,然后根据用户在试用原型的过程中提出的意见和建议对原型进行改进,获得原型的新版本。重复这一过程,最终可得到令用户满意的软件产品。采用演化模型的开发过程,实际上就是从初始的原型逐步演化成最终软件产品的过程。演化模型特别适用于对软件需求缺乏准确认识的情况。采用原型模型进行软件开发需要有快速建立原型模型的软件工具与环境。
来源:卷宗 2017年13期
作者:陈珺