- 软件工程(software engineering) : 应用计算机科学理论和技术以及工程管理原则和方法,按预。算和进度实现满足用户要求的软件产品的工程,或以此为研究对象的学科。
- 发展简史 术语“软件工程”第一次出现在1968年的 NATO会议上。这次会议以及而后的一些会议集中讨论了大型软件开发项目中出现的诸如软件质量、开发成本以及按期交付等问题,以着手解决软件开发失控的所谓“软件危机”,并提出了一些克服“软件危机”的策略。 20世纪60年代末至80年代初,围绕软件项目,开展了有关软件开发风范、开发方法以及支持工具的研究。其主要成果是,提出了瀑布模型、演化模型、螺旋模型以及结构化程序设计方法等,开发了一些结构化程序设计语言(例如PASCAL语言,Ada语言)、结构化软件开发方法和支持工具。并且,围绕项目管理,出现了一些管理方法和相应的支持工具。 随着软件系统规模的增大、复杂性的提高以及在关键领域应用的开展,20世纪80年代以来,人们更加关注软件生产技术的研究和实践,并注重软件工程管理和软件质量的研究。其主要成果是,开发了具有广泛应用的面向对象方法和相关的语言,提出了软件过程概念以及能力成熟度模型(CMM),开展了计算机辅助软件工程(CASE)的研究与实践,特别是在软件复用方面取得了有效成果,如构件模型、复用机制等。 基本内容 软件工程的框架概括为:目标、活动和原则。 软件工程目标 生产具有正确性、可用性和开销合宜的产品。正确性是指软件产品达到预期功能的程度。可用性是指软件基本结构、实现以及文档为用户可用的程度。开销合宜是指软件开发、运行的整个开销满足用户要求的程度。 软件开发活动 生产一个最终满足需求且达到工程目标的软件产品所需要的活动。软件开发的基本活动包括:需求分析、设计、实现、验证与确认和维护。 (1)需求分析是在一个抽象层上建立系统模型的活动。这一活动产生了需求规约,用以作为软件开发人员和客户之间契约的基础,并作为以后开发阶段的输入。 (2)设计定义了实现需求规约所需的结构。包括软件体系结构(数据和程序结构),以及详细的处理算法,即所谓设计规约,给出了实现软件需求的软件解决方案。 (3)实现是由设计规约到代码的转换。为此,需要选择特定的语言和工具。 (4)验证与确认是一项评估活动,其中主要包括需求规约、设计规约以及实现代码的评估。目前开展较多的是实现代码的评估,一般包括程序的单兀测试、集成测试和系统测试等。软件测试技术主要包括基于代码结构的白盒测试和基于规约的黑盒测试。验证与确认这一项评估可以是动态的或是静态的。在动态评估中,以选定的输入来执行程序或程序段,并与预期结果进行比较。静态评估是不执行程序的分析,例如模型评审、代码“走查”以及程序的形式化验证等。 (5)维护是在软件发布之后所进行的开发或修改,包括对发现错误的修正以及对环境的变化所进行的必要调整等。 软件工程原则 围绕软件开发,提出了以下基本原则。 (1)选取适宜的开发风范 在系统设计中,经常需要权衡软件需求、硬件需求以及其他因素之间的相互制约和影响,适应需求的易变性,因此,要选用适宜的开发风范,以保证软件开发的可持续性,并使最终的软件产品满足客户的要求。 (2)采用合适的设计方法 在软件设计中,通常需要考虑软件的模块化、信息隐蔽、局部化、一致性以及适应性等问题,因此,采用合适的设计方法,支持这些问题的解决和实现,以达到软件工程的目标。 (3)提供高质量的工程支持 软件工程如其他工程一样,需要提供高质量的工程支持,例如配置管理、质量保证等,才能按期交付高质量的软件产品。 (4)有效的软件工程管理 软件工程的管理直接影响可用资源的有效利用,以提高软件组织的生产能力。因此,只有对软件过程实施有效管理时,才能实现有效的软件工程。 软件工程研究内容 主要包括:软件开发过程,软件开发方法,软件工程管理与支持,软件质量特征,软件过程度量以及计算机辅助软件工程 (CASE)工具、环境等。 软件开发过程 将用户需求转换为软件系统(产品)的一组有序的活动。其中,每一活动是由一组任务定义的,而任务是把输入转换为输出的一组操作。 在整个软件生存周期中,包含了三类软件过程,它们是基本过程,支持过程和组织过程。基本过程是软件开发人员所从事的一切活动。支持过程是软件需求方和软件开发方各类支持人员所从事的一切活动。组织过程是管理人员所从事的一切活动。 每项软件工程通过“剪裁过程”可定义应遵循的一组有序的规程和活动。尽管在实践中,每项软件工程都有自己特定的软件开发过程,但软件开发风范主要有五种,它们是:迭代风范,也称为演化风范,转换风范,螺旋风范,瀑布风范,以及第四代风范。 迭代风范是一种有弹性的过程模式,该模式由一些小的开发步组成,每一步历经需求分析、设计、实现和验证,产生软件产品的一个增量。通过这些迭代,完成最终软件产品的开发。其中,一次迭代所产生的增量产品,往往发布给软件客户,以获取他们的反馈,用于指导相继的步骤。 转换风范的过程模式基于待开发系统的形式化需求规约。在此基础上,通过一系列转换,将这一形式化的需求规约转化为它的实现。 第四代风范的过程模式是围绕特定语言和工具而设计的。这一风范的过程依据高层描述,自动生成代码。 关于螺旋过程模型和瀑布过程模型,可参见螺旋模型和瀑布模型。 以前,软件工程所关注的是按进度测量过程中每一活动的结果,得到一个产品;而现在则转向关注软件开发过程,并提出了一系列过程描述的技术,支持软件项目和开发者发现适宜的过程。 软件开发方法 为了实现系统的分析和设计,软件开发过程通常遵循特定的途径和方向。典型的途径有:结构化方法、面向数据结构方法、面向对象方法以及维也纳开发方法(VDM)等。过程的方向确定了用于创建模型和设计解的特定的抽象层次。软件开发方法给出了指导软件开发活动的基本原则、技术和步骤。 (1)结构化方法 一种系统化的软件系统建模方法。包括结构化分析和结构化设计。结构化分析方法以分层的数据流图和控制流图为工具,开发系统的功能模型和数据模型。著名的有E.Yourdon和 T.DeMarco的结构化分析(SSA)。结构化设计包括软件体系结构设计、过程(功能)设计和数据设计。体系结构设计以系统的功能模型为基础,逐层精化,最终形成系统的模块(子系统)以及它们之间的控制关系。其中,强调模块(子系统)的高内聚和低耦合。过程(功能)设计针对体系结构中的每一模块,给出它的过程属性描述,即算法设计。数据设计将系统的数据模型转换为数据结构。 (2)面向数据结构方法 结构化方法的变形,其中,着重数据结构而不是数据流。这类方法的共同特征是:①标识关键的信息对象和操作;②以顺序、选择、重复三种基本结构层次式地表达数据结构;③提供一组步骤,把层次式的数据结构映射人程序结构。这类方法的范例有数据结构化系统开发方法(DSSD)或Warnier/Orr方法、Jackson系统开发 (JSD)方法。 (3)面向对象方法 一种以对象、对象关系等来构作软件系统模型的系统化方法。包括面向对象分析和设计。其中,对象由封装的属性和操作组成;对象类是具有相似属性、操作和关系的一组对象的描述。类是系统建模、系统设计以及实现等活动可复用的基础。这类方法著名的有:G.Booch的 OOD,J.Rumbbaugh的OMT以及P.Coad和E.Your- don的OOA,OOD等。目前,对象管理组织(OMG)发布的统一建模语言(UML)以及统一软件开发过程(USDP)受到了业界和学术界广泛关注,特别是 UML以及相应的支持工具已在软件开发中得到了广泛的应用。 软件工程管理 一项软件工程主要涉及五大要素:人员、进度、质量、成本和实现的需求。因此,管理的责任主要是围绕这五大要素进行“规划和组织”、“领导和控制”以及评估等。 在软件开发中,为了及时提供项目状态反馈信息——这是项目成功的关键。经常使用:①软件度量学,测量软件产品(包括文档)和软件过程的不同属性;②成本估算度量学,依据系统的规模和功能的测量、预测和调度资源,包括整个产品(系统)开发中的人力资源;③系统化的测量技术,评估实现组织目标和项目目标的进展等。 在软件工程管理中,一种广泛使用的策略是“走查”,以后发展为“审查”,即建立一个由各方人员(但不包含代表管理的人员)组成的工作小组,通过复审事前的工作产品,发现其中的错误。 软件质量特征 软件质量是软件产品和服务能够表明满足客户要求的全部性质和特征。软件质量可以通过一组属性予以测量,这组属性是高质量软件的特征,例如正确性、功效性、方便性、易维护性、可测性、鲁棒性以及可用性等。关于软件质量属性的需求是一些非功能需求,是需求规约的组成部分。在软件工程实践中,质量的每一个属性,并不总是可以度量的,但必须进行与之相关的一些方面的度量。 可以说,没有一个项目可以实现全部的质量特征。其中重要的原因是:①受有限的时间和资金资源的限制;②一些质量特征与其他特征之间是相互冲突的,例如,对一个特定的环境,一个系统很难既十分方便又具有最大功效。 在一个大型的软件系统开发中,为了使最终的软件产品具有客户所期望的质量属性,关键的途径是与客户进行交流,其中最有效的技术是原型构作。 所有软件工程活动都应该有质量保证,作为该活动的一个目标。对于软件工程所选择的过程,要重视所预期的质量特征;实施软件工程活动要确保实现所预期的质量特征;并选择一种度量方法对确定的质量属性进行测量。 能力成熟度模型(CMM)与计算机辅助软件工程 (CASE) 自1968年软件工程概念提出以来,历经近40年的实践,人们发现,对于软件开发还需要更加灵活的、但又规范的途径,包括贯穿软件产品整个开发过程的反馈和适当的调整。为此,有关政府和软件产业界共同努力,研究并开发了实现高质量大型软件系统的方法和工具。其中具有影响的工作是 CMM的提出和CASE工具、环境的研制。 CMM为开发组织改善其开发过程提供了一个框架。该框架将成熟度分为五个等级,它们是初始级、可重复级、已定义级、已管理级和优化级。 CMM为评估一个软件开发组织的能力给出了一种方法。 CMM的提出引发了大量的过程改善活动。并举办了多次区域性和国际性会议,讨论采用CMM的经验和过程改善问题。在CMM概念的基础上还提出了个人软件过程(PSP)等。 可用的CASE工具和环境的出现是软件工程实践进步的最好体现。 CASE工具大体上可分为两类:一类是支持工程管理活动的工具,例如配置管理工具,成本估算工具,调度工具以及文档工具等;另一类是支持开发活动的工具,包括设计工具(如原型速成工具,建模工具等),程序设计辅助工具(如调试工具,代码生成器等),测试工具以及维护工具。 CASE环境是CASE工具的集成,并协调地工作于同一机器环境中,支持整个软件开发工作。通常,CASE环境包括配置管理工具,以跟踪软件开发过程中的中间产品。 展 望 伴随着软件工程领域的发展,出现了一系列新的问题,并成为新的研究热点。例如,①对依赖性进行了一定的扩展,不仅包括可靠性,还包括软件系统的安全操作等问题;②软件复用已成为一个重要的质量特征,很多项目希望购置一些可复用的构件来建造软件系统;③正在开发一些逆向工程技术,支持老系统的维护,其中这些系统或者没有文档,或者与当前演化的系统不相匹配。 虽然软件工程的研究迄今已经有了很大进展。但遗憾的是,软件工程的原理还未能充分影响许多软件工程的实践。并且,尽管有关各个方面(政府有关部门,软件企业,专家学者等)都做了很大努力,但在研究环境中提出的新技术到工业实践的转换仍然是很缓慢的。 在软件工程领域中,目前仍存在很多挑战o\例如,形式化的分析技术,过程和质量特征的测量技术以及分析和测量工具等。另外,软件系统与其他工程系统之间的集成,也是软件工程领域中的一项十分困难的问题。随着软件工程的不断发展,相信可以逐步解决以上问题并迎接新的挑战。
(杨芙清)

