但软件开发技术没有重大突破,软件产品的质量不高,生产效率低下,从而导致了“软件危机”的产生.软件工程阶段
自1970年起,软件开发进入了软件工程阶段。
由于“软件危机”的产生,迫使人们不得不研究、改变软件开发的技术手段和管理方法。
从此软件产生进入了软件工程时代。
此阶段的特定是:硬件已向巨型化、微型化、网络化和智能化四个方向发展,数据库技术已成熟并广泛应用,第三代、第四代语言出现;第一代软件技术:结构化程序设计在数值计算领域取得优异成绩;第二代软件技术:软件测试技术、方法、原理用于软件生产过程;第三代软件技术:处理需求定义技术用于软件需求分析和描述.2.软件工程的各个阶段
面向对象的软件工程(OOSE)
自从1985年首次提出面向对象的概念以来,面向对象技术作为一种全新的软件开发方法开始在软件工程领域越来越被广泛使用。
80年代末90年代初,面向对象的软件工程方法呈现百花齐放、百家争鸣的局面。
其中,引人注意的是Booch、Rumbaugh和Jacobson为代表的三种面向对象技术.这三种主要的面向对象方法各有优缺点,而希望采用面向对象方法的用户并不深知这些方法的优缺点及相互之间的差异,因而很难根据应用特点选择合适的建模方法和建模语言。
于是,出现了UML。
面向对象技术在软件工程领域的全面应用即是面向对象的软件工程方法。
它包括面向对象的分析(OOA)、面向对象的设计(OOD)、面向对象的编程(OOP)、面向对象的测试(OOT)和面向对象的软件维护(OOSM)等主要内容.面向对象的分析和设计建模技术是面向对象软件工程方法的重要组成部分。
OOA的基本任务是针对问题域和系统责任,运用OO方法,建立一个反映问题域的OOA模型,不考虑与系统实现有关的因素(包括编程语言、图形用户界面、数据库等等),从而使OOA模型独立于具体实现.
OOD的基本任务是根据已确立的系统对象模型,运用面向对象技术,进行系统软件设计。
其中包括两方面的工作:一是把OOA模型直接搬到OOD,做为OOD的一个部分;二是针对具体实现中的人机界面、数据存储、任务管理等因素补充一些与实现有关的部分。
这些部分与OOA采用相同的表示法和模型结构。
从OOA到OOD不存在转换,只有很局部的修改或调整,并增加几个与实现有关的独立部分。
OOA与OOD的工作是连续的、无缝的,允许有一定的相交,也允许从OOD返回到OOA。
OOP的工作就是用同一种面向对象的编程语言把OOD模型中的每个成分书写出来.OOT即是对于用OO技术开发的软件,在测试过程中继续运用OO的概念和原则,进行以对象概念为中心的软件测试。
OOSM。
面向对象的软件工程方法为改进软件维护提供了有效的途径。
程序与问题域一致,各个阶段的表示一致,从而大大降低了理解的难度;系统中最容易变化的因素(功能)作为对象的服务封装在对象内部,对象的封装性使一个对象的修改对其他影响很小,从而避免了波动效应.
OOSE可较好的描述系统与其用户之间的信息交换机制,即用于向软件系统提出需求后,软件系统完成这项需求的过程。
OOSE方法遵循瀑布式的软件开发过程,首先是描述与系统交互有关的用户视图,然后建立分析模型,最后的构造过程则完成交互设计、实现和测试.
OOSE方法的最大特点是面向用例。
用例(use case)代表某些用户可见的功能,实现一个具体的用户目标.用例代表一类功能而不是使用该功能的某一具体实例.用例是精确描述需求的重要工具,贯穿于整个软件开发过程,包括对系统的测试和验证过程.基于组件的软件工程(CBSE)
如何更好地实现软件重用一直是软件工程的重要研究课题。
OO技术的出现是软件开发技术的巨大进步,但怎样实现大粒度的重用以提高软件的可维护性和可扩展性仍是一个难题,CBSE的发展从根本上解决这一问题:由于COM/DCOM、JavaBeans/EJB等组件标准的出现,CBSE趋向实用。
1990年开始在基于面向对象技术的基础上发展了组件技术,它丰富了重用手段和方法,逐渐成为研究的热点。
组件(Component)是可用来构成软件系统的即插即用(plug and play)的软件成分,是可以独立地制造、分发、销售、装配的二进制软件单元。
CBSE是指用装配可重用软件组件的方法来构造应用程序。
它包含了系统分析、构造、维护和扩展的各个方面,在这些方面中都是以组件方法为核心的.面向服务的软件工程(SOSE)
面对市场需求的快速变化,要求企业系统具有敏捷服务、快速重构、资源重用及自由扩充等特点。
这样就应运而生了面向服务的架构(Service Oriented Architecture,SOA).
它定义了构成系统的服务,通过描述服务之间的交互提供特定的功能特性,并且将服务映射为具体的某种实现技术。
SOA的核心概念是服务,即把软件的某些功能独立出来,使之能独立运行,并且在逻辑关系上和运行的应用系统成为一个层次。
它接受来自所有授权对象的请求,使得服务可以同时为多个应用程序提供相同的功能,大大增大软件复用程度,减少开发和维护成本.一个服务是服务提供者为实现服务请求而执行的一个工作单元(应用程序),是一些良定义的操作,也就是说,一个服务实现了一个应用的功能,它是一个粗粒度的、可发现的软件实体,通过一组松散耦合和基于消息的模型与其它的应用或服务交互.
三:软件工程未来发展趋势
1.需求工程,渐成热点:专业化的角色,日益复杂的业务创新,全球分布的团队以及互联网级的交付速度,这些都对需求获取的正确性和有效性提出了更高的要求;我预计需求工程的研究和实施会成为近期的热点,其中Use Case技术会被更广泛而正确的应用,而相关工具的研发也会成为热点(如IBM Rational RequiementsComposer、Ravenflow等).用例的优势在于它天生是黑盒的,它用自然语言抽象了用户和目标系统的交互,避免了混入分析、设计和实现细节,以保证用例可以被不懂具体技术的业务及测试人员所真正理解。
2.DSSA和MDD,老树新花(基于领域的构架[DSSA]与模型驱动的开发[MDD]):随着软件应用的日益普及,软件已经超出了将手动流程自动化的范畴,而开始成为业务创新的主要推动力.因此,引入捕获特定领域内最先进需求及其实现架构的DSSA成为行业客户的热点之一。