1、学 号: 现代软件工程学论文课程名称 现代软件工程学学 院 计算机科学与技术学院专 业班 级姓 名指导教师20152016 学年 第 1 学期课程论文选题内容:在对传统软件工程深入理解和融会贯通的基础之上,详细阐述现代软件工程的前沿方法与技术。在此基础上,分析传统软件工程与现代软件工程的不同之处以及现代软件工程方法的优势。并结合某实际系统,阐述并描述其中用到的一种现代软件工程方法。目录1.传统软件工程分析 .42.现代软件工程方法 .52.1 面向对象的软件开发方法 .52.2 软件构架方法 .72.3 软件复用与构件方法 .72.3.1 软件复用 .72.3.2 软件构件技术 .82.3.3
2、 软件复用和软件构件的关系 .82.4 统一建模语言方法 .82.4.1UML 的特点 .92.5 形式化方法 .103.传统软件工程与现代软件工程比较 .114.软件构架技术在网管系统的应用 .114.1 管系统分析及设计 .124.2 具体实现 .13现代软件工程在网管系统中应用分析摘要:本文首先对传统软件工程进行深入理解,详细阐述现代软件工程的前沿方法与技术。然后分析传统软件工程与现代软件工程的不同之处以及现代软件工程方法的优势。最后结合软件构架技术分析现代软件工程方法在网管系统实例中的作用。关键字:传统软件工程,现代软件工程,网管系统1.传统软件工程分析“软件工程“一词是由北大西洋公约
3、组织的计算机科学家在联邦德国召开的国际会议上首次提出来的。软件工程的发展经过了“程序设计时代” 、 “程序系统时代” 、 “软件工程时代”三个时代。 随着计算机应用领域的不断拓广,各种各样的问题也不断涌现,当问题严重到开发人员无法控制的时候便产生了软件危机。软件危机的出现,促使了软件工程学的形成和发展。随之整合整套技术的软件工程方法学广泛应用,主流之一就是传统方法学。传统方法学在软件开发过程中占据相当大的比重,因为其悠久的历史而为很多软件工程师青睐。如果说自然语言和编程语言之间有一道难以跨越的鸿沟,传统方法学就是跨越这道鸿沟的桥梁。 传统方法学又称生命周期方法学或结构化范型。一个软件从开始计划
4、起,到废弃不用止,称为软件的生命周期。在传统的软件工程方法中,软件的生存周期分为一般分为软件计划、软件开发和软件运行三个时期。软件计划时期一般分问题定义和可行性研究两个阶段;开发时期分需求分析、软件设计(包括概要设计、详细设计) 、编码和测试四个阶段;运行时期主要是维护阶段。 在传统软件工程方法的分析阶段。所有用的主要工具有数据字典(DD),尸体一关系图(ERD),数据流图(DFD)和状态一变换图(STD); 在传统软件工程方法的设计阶段,所使用的主要工具有针对总体设计的模块结构图(MSD)和针对详细设计的流程图,在目前实际的软件开发中,通常不使用流程图,而直接通过编程完成详细设计,所以较新的
5、部分文献中,设计阶段包括了总体设计,详细设计和编程阶段,三者之间的界限比较模糊。 传统方法学使用的是结构化分析技术来完成需求分析阶段的工作。软件工程学中的需求分析具有两方面的意义。在认识事物方面,它具有一整套分析、认识问题域的方法、原则和策略。这些方法、原则和策略使开发人员对问题域的理解比不遵循软件工程方法更为全面、深刻和有效。在描述事物方面,它具有一套表示体系和文档规范。但是,传统的软件工程方法学中的需求分析在上述两方面都存在不足它在全局范围内以功能、数据或数据流为中心来进行分析。这些方法的分析结果不能直接地映射问题域,而是经过了不同程度的转化和重新组合。因此,传统的分析方法容易隐蔽一些对问
6、题域的理解偏差,与后续开发阶段的衔接也比较困难。 在总体设计阶段,以需求分析的结果作为出发点构造出一个具体的系统设计方案,主要是决定系统的模块结构,以及模块的划分,模块间的数据传送及调用关系。详细设计是在总体设计的基础上考虑每个模块的内部结构及算法,最终将产生每个模块的程序流程图。但是传统的软件工程方法中设计文档很难与分析文档对应,原因是二者的表示体系不一致,所谓从分析到设计的转换,实际上并不存在可靠的转换规则,而是带有人为的随意性,从而很容易因理解上的错误而留下隐患。 编程阶段是利用一种编程语言产生一个能够被机器理解和执行的系统,测试是发现和排除程序中的错误,最终产生一个正确的系统。但是由于
7、分析方法的缺陷很容易产生对问题的错误理解,而分析与设计的差距很容易造成设计人员对分析结果的错误转换,以致在编程时程序员往往需要对分析员和设计人员已经认识过的事物重新进行认识,并产生不同的理解。因此为了使两个阶段之间能够更好的衔接,测试就变得尤为重要。 软件维护阶段的工作,一是对使用中发生的错误进行修改,二是因需求发生了变化而进行修改。前一种情况需要从程序逆向追溯到发生错误的开发阶段。由于程序不能映射问题以及各个阶段的文档不能对应,每一步追溯都存在许多理解障碍。第二种情况是一个从需求到程序的顺向过程,它也存在初次开发时的那些困难,并且又增加了理解每个阶段原有文档的困难。 传统软件工程方法面向的是
8、过程,它按照数据变换的过程寻找问题的结点,对问题进行分解。由于不同人对过程的理解不同,故面向过程的功能分割出的模块会因人而异。对于问题世界的抽象结论,结构化方法可以用数据流图,系统结构图,数据字典,状态转移图,实体关系图来进行系统逻辑模型的描述,生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。 传统软件工程方法学强调以模块为中心,采用模块化,自顶向下,逐步求精设计过程,系统是实现模块功能的函数和过程的集合,结构清晰,可读性好,是提高软件开发质量的一种有效手段。结构化设计从系统的功能入手,按照工程标准,严格规范地将系统分解为若干功能模块,因为系统是实现模块功能的函数和过程的集合。然而
9、,由于用户的需要和软硬件技术的不断发展变化,作为系统基本组成部分的功能模块很容易受到影响,局部修改甚至会引起系统的根本性变化。开发过程前期入手快而后期频繁改动的现象比较常见。 当然,传统的软件工程方法学也存在很多的缺点,主要表现在生产效率非常低,从而导致不能满足用户的需要,复用程度低,软件很难维护等。虽然如此,传统方法学仍然是人们在软件开发过程中使用的十分广泛的软件工程方法学,在开发某些类型的软件时也比较有效。因此传统软件工程方法学的价值并不会因现代软件工程的出现而减少。2.现代软件工程方法正是因为传统软件工程方法的弊端逐渐显现出来,为现代软件工程方法的出现创造了条件,其方法可以简单的分为:分
10、析、设计、编码、测试和维护五个阶段,其同传统软件工程方法有着极大的相同点。2.1 面向对象的软件开发方法面向对象方法(Object-Oriented Method)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称 OO (Object-Oriented)方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件
11、系统。相对于传统的软件工程思想而言,面向对象的思想更符合人类的思维逻辑,它淡化了计算机的观点,以现实世界中的模型作为构造软件系统的依据。面向对象的基本概念包括对象、类、封装、继承和多态,下面一一介绍。 1. 对象 对象可以是客观世界中存在的事物,也可以是概念化的实体,它由一组属性和操作组成。属性是用来描述对象静态特征的数据项,是对客观世界实体所具有性质的抽象。操作是用来描述对象动态特征。比如,把人当成一个对象,那么他的属性就有身高、体重、姓名和年龄等静态特征,他的操作就包括工作、学习、吃饭和运动等;把汽车当成一个对象,那么它的属性就有品牌、颜色、价格和寿命等,它的操作就包括加速、减速和刹车等。
12、理解对象的概念时,需要注意以下几点。对象的数据是封装起来的,对数据的处理需要通过特定的操作。 对象之间通过传递消息进行通信,不同的对象独立地处理自身的数据。对象具有主动性。要处理对象的内部数据时,外界需要通过接口向对象发送消息,请求它执行特定的操作。2. 类 类是对对象的抽象,是对具有相同属性和相同操作的一组相似对象的定义。通常情况下,很多对象都有相似的特征。比如,对于两个教师,他们虽然可能身高、体重、性别、年龄和籍贯等特征不同,但是职业却是相同的;对于两把椅子,它们可能颜色、形状、价格和位置等特征不同,但是作用却是相同的。在这种情况下,我们就可以忽略事物的非本质特征,只注意那些与当前目标相关
13、的本质特征,从中找出事物的共性,把本质特征相同的事物划分为一类,即将多个对象抽象为类。对于同类对象,它们具有相同的属性和操作,但是每个对象的属性值可能不同,执行操作的结果也可能不同。比如,在教务管理系统中,可以定义“学生”类,并定义编号、姓名和院系等属性,及登录该系统进行操作。每位学生都有自己特定的编号、姓名和院系等属性值,并且执行登录操作后,都会进入个性化的主页。 谈到类的概念,就必须知道什么是类的实例。实例是由某个特定的类描述的一个具体的对象。比如,对于“教师”类,某位教师“王一”就是类的一个实例;对于“学生”类,某位学生“李二”就是该类的一个实例。 3. 封装 封装是指把对象的属性和操作
14、结合在一起,组成一个独立的单元。封装强调两个概念,即独立和封闭。 独立是指对象是一个不可分割的整体,它集成了事物全部的属性和操作,并且它的存在不依赖于外部事物。 封闭是指与外部的事物通信时,对象要尽量地隐藏其内部的实现细节,它的内部信息对外界来说是隐蔽的,外界不能直接访问对象的内部信息,而只能通过有限的接口与对象发生联系。 可以说,类是数据封装的工具,而对象是封装的实现。类的成员又分为公有成员、私有成员和保护成员,它们分别有不同的访问控制机制。封装是软件模块化思想的重要体现。4. 继承 继承表示类之间的层次关系,它使得某类对象可以自动拥有另外一个或多个对象的全部属性和操作。比如,某系统已经定义
15、了一个学生类,现在还需要定义一个研究生类。由于研究生也属于学生的一种,它具有学生所有的一切属性和操作,这时就可以采用继承的方法,使研究生类直接获得学生类的一切属性和操作。在这个系统中,研究生类就叫做子类或派生类,学生类就叫做父类或基类。子类可以把父类定义的内容自动作为自己的部分内容,同时再加入新的内容。 继承可以分为单重继承和多重继承。 单重继承是指一个子类只有一个父类。 多重继承是指一个子类可以同时继承多个父类。单重继承构成的类之间的关系是树状结构,多重继承构成的类之间的关系是网状结构。继承简化了定义一个新类的过程,有利于人们对事物的认识和描述,达到了软件复用的目的。5. 多态 多态是一种使
16、父类中定义的属性或操作被子类继承后,可以有不同的实现的机制。换句话说,多态允许属于不同类的对象对同一消息做出不同的响应。当一个对象接收到进行某项操作的消息时,多态机制将根据对象所属的类,动态地选用该类中定义的操作。比如,先定义一个父类“几何图形” ,它具有“计算面积”的操作,然后再定义一些子类,如“三角形” 、 “长方形”和“圆形” ,它们可继承父类“几何图形”的各种属性和操作,并且在各自的定义中要重新描述“计算面积”的操作。这样,当有计算几何图形面积的消息发出时,对象会根据类的类型做出不同的响应,采用不同的面积计算公式。 多态这种机制极大地减少了软件设计中的冗余信息,提高了软件的可复用性和可
17、扩展性。2.2 软件构架方法软件构架(又称软件体系结构 )描述的是系统整体设计格局,它为 “基于构件的软件开发”(CBD ,Component Based Software Development)提供了构件组装的基础和上下文。基于软件构架技术的软件开发是把软件的开发看作一个组装过程,以软件构架为组装蓝图,在软件构架的指导下寻找可复用构件(及开发一些新构件)并进行系统组装。重用不仅要重用旧的代码,而且要重用相似的分析设计结果和体系结构,来减少构造新软件系统的代价并提高软件的可靠性。单独类的重用,尽管有用,但由于重用力度小,而不能产生质的飞跃,只有把特定领域的体系结构作为一个整体进行重用才能取得
18、引人注目的成就。将构架作为系统构造和演化的基础,可以实现大规模、系统化的软件复用。特定领域软件构架是一个领域中的所有应用系统所共有的体系结构,是针对领域模型中的领域需求给出的解决方案,也是识别、开发和组织特定领域可复用构件的基础(或称中间件) 。在一个专用领域内构造构架时,把握构架的共同点是关键因素。构架一旦被建立,其适应性和可扩展性就被提到了首要地位。构架的直接目的是被复用,以减少建立一个新应用系统的工作量。构造系统构架是一个逐渐积累的过程,就是说不断有新发现的共同点和新的构件被加入,同时那些老的、不必要的构件被删除,以此来保证整个应用系统的性能,这样新旧构件之间的接口直接影响构架的适应性和
19、可扩展性。任何构架都不能被直接复用,除非要建立的应用系统非常简单或者与构架极为相似,除此之外,都要对构架进行或多或少的修改和扩展才能被复用。2.3 软件复用与构件方法2.3.1 软件复用软件复用是指“为了重复使用而设计的软件”的过程,是将已有的软件及其有用成分用于构造新的软件或系统。它不仅是对软件程序的复用,还包括对软件生产过程中其它劳动成果的复用,如项目计划书、可行性报告、需求分析、概要设计、详细设计、源程序、测试用例、文档与使用说明等等。软件复用可以有效地提高软件的质量和生产率,它包括开发可复用软件构件和基于可复用构件的开发两个生命周期。在这两个生命周期中,采用一个适当的标准以识别和开发可
20、复用软件将大大促进软件复用的实践。2.3.2 软件构件技术软件构件是指应用系统中可以明确辨识的构成成分,包括源代码、需求、系统和软件的需求规约、系统和软件的构架、文档、测试计划、测试案例和数据以及其他开发活动有用的信息。基于构件的开发来自于利用构件生产应用软件的概念。开发者可在设计和详细描述阶段。使用内部开发的构件和公开市场的构件来为他们的应用软件提供尽可能多的功能。然后,开发者编写其它的构件来粘连代码,把构件一一连接。他们可以把新写的构件放进公司的知识库,以至于其它人就可以使用这些构件的功能。这种做法有效提高了软件重用的效率并降低了开发成本。2.3.3 软件复用和软件构件的关系软件复用就是利
21、用已有的软件成分来构造新的软件,它可以减少软件开发所需的费用和时间,且有利用提高软件的可维护性和可靠性。构件软件是目前发展最快的软件复用方式之一。推动构件技术发展的最大动力就是软件复用。构件软件解决两个重要问题:一是重用,即构件具有通用的特性,所提供的功能能为多种系统使用;二是互操作,即不同来源的构件能相互协调、通信,共同完成更复杂的功能。构件软件技术是一种社会化的软件开发方法,它使得开发者可将由不同语言、不同供应商开发的构件经过软件重用组合在一起来构造软件。现阶段构件沿袭了对象的封装特性,但同时并不局限在一个对象,其内部可以封装一个或多个类、类群、原型对象甚至过程、程序包,结构是灵活的。构件
22、突出了自包容和被包容的特性,这就是作为软件生产线上零件的必要特征。当今流行的构件平台如 J2EE 平台,CORBA 平台,NET 平台都是由“构件模型十构件运行虚拟机”组成。如 J2EE 平台的构件模型是 EJB 模型,构件运行虚拟机是JVM;CORBA 平台的构件模型是 CCM,构件运行虚拟机是 ORB;NET 平台的构件模型是 DCOM,构件运行虚拟机是 CLR。构件技术是随着计算机技术的发展而发展的前沿的软件设计思想,它对整个软件行业的发展有着重要的推动作用。构件技术按功能可分为三层:底层构件为基本数据类构件和系统支撑构件,包括数据库构件、代码表构件;中间层为各种通用的构件包括消息中间件
23、、数据交换中间件等;顶层为针对各种领域的专用构件或子系统构件,例如统计构件,查询构件等。从粒度上看通常底层的粒度为较小,而顶层的粒度为较大构件技术的中间件作为应用软件系统集成的关键技术,保证了构件化思想的实施,并为构件提供了真正的运行空间。现在中间件领域工业化标准的制定、统一、实现,使基于构件的应用开发成为可能。反之,构件对新一代中间件产品中也起到促进作用。2.4 统一建模语言方法统一建模语言 UML(Unified Modeling Language)是由 Rational 公司的知名专家 Gray Booch, Ivar Jacoboson 和 Jim Rum baugh 联合开发的第三代
24、面向对象(Object-oriented,简称 OO)的建模语言,它采纳和扩展了 Booch 标记法、OMT( Object-oriented Modeling and Design)标记法和 OOSE 标记法,还吸取了面向对象技术中其它流派的长处,其中也包括非 OO 方法的影响。在 UML 中汇入了 OO 领域中很多人的思想,这些思想并不是UML 的开发者发明的,而是依据其他最优秀的 OO 方法和丰富的计算机科学实践经验综合提炼而成的,同时 UML 在演变过程中也提出了一些新的诸如模板、职责、扩展机制、线程、过程、分布式、并发、模式、合作、活动图等新概念,并清晰地区分类型、类、实例、细化、接
25、口和部件等概念,具有很宽的应用领域。UML 适用于以 OO 技术来描述任何类型的系统,而且适用于系统开发的不同阶段,从需求规格描述直至系统完成后的测试和维护。UML 描述了一个系统的静态结构和动态行为。 UML 将系统描述为一些离散的相互作用的对象并最终为外部用户提供一定的功能的模型结构。静态结构定义了系统中的重要对象的属性和操作以及这些对象之间的相互关系。动态行为定义了对象的时间特性和对象为完成目标而相互进行通信的机制。从不同但相互联系的角度对系统建立的模型可用于不同的目的。UML 还包括可将模型分解成包的结构组件,以便于软件小组将大的系统分解成易于处理的块结构,并理解和控制各个包之间的依赖
26、关系,在复杂的开发环境中管理模型单元。它还包括用于显示系统实现和组织运行的组件。UML 不是一门程序设计语言。但可以使用代码生成器工具将 UML 模型转换为多种程序设计语言代码,或使用反向生成器工具将程序源代码转换为 UML。2.4.1UML 的特点2.4.1.1 形式化UML 定义采用了形式化技术 ,但并不是完全形式化的规约,对于语法结构给出了精确的规约,对其动态语义使用自然语言描述。UML 定义在元模型层上,使用抽象语法( 采用UML 的类图描述元素之间的关系 )、形式化规约(采用自然语言和对象约束语言)、语义(采用自然语言)描述元模型.这样, UML 元模型通过自然语言文本和用 UML 完成的类图进行组合描述。形式化方法提供了规约环境的基础,它使得生成的模型比传统的模型更完整,一致和无二义。虽然基于形式的、数学的规约技术还没有在产业界广泛应用,但它确实比欠形式化方法有实质的优点。2.4.1.2 简单性UML 是比较复杂的,在元模型层大约有 90 个元类、50 个版式,分为 3 个大包:基础、行为、管理。每个包有许多子包。整个 UML 规范有 674 页。UML 的基础原则也许几个小时就可搞植,然而要理解全部的概念、概念之间的关系、基础元模型则需要大量的时间和精力,比学一门程序设计语言难得多。如果建模语言简单、较小、易于记忆,用户将全部