今昔软件工程方法探究.docx
《今昔软件工程方法探究.docx》由会员分享,可在线阅读,更多相关《今昔软件工程方法探究.docx(14页珍藏版)》请在三一办公上搜索。
1、今昔软件工程方法探究由于用户的需求和软、硬件技术的不断发展,按照功能划分设计的系统模块 必然是易变的和不稳定的,这样开发出来的模块可重用性不高。因而,结构化系 统分析与设计已无法满足用户需求的变化。发展软件质量,缩短软件开发周期, 发展软件可靠性、可扩充性和可重用性迫使软件界人士不断研究新方法、新技术, 探索新途径。1. 什么是传统软件工程方法1.1传统软件工程的概念传统软件工程过程主要包括开发过程、运作过程、维护过程。它们覆盖了需 求、设计、实现、确认以及维护等活动。进入上世纪60年代,人们开始逐渐认识到了确实存在着“软件危机”这样 一个事实。例如:软件生产不能满足日益增长的需要;软件开发成
2、本和开发尽速估计往往不准确;软件开发人员和用户之间信息交流不充分,用户对完成的软件满意度很 低;软件价格昂贵,软件成本在整个计算机系统中所占的比例急剧上升,软 件已成为许多计算机系统中花钱最多的项目;软件质量难以保证;软件可维护性差,程序中的错误很难更正,适应性或完善性维护都及其 困难;图1.传统软件工程方法示意图我们所说的传统软件工程方法主要指结构化软件工程方法,目前较新的部分 文献将传统软件工程方法划分为以下阶段:系统工程、分析、设计、测试、软件 维护。传统软件工程方法的前期工作主要集中在分析和设计阶段,实际上分析和 设计是传统软件工程方法中最为重要的阶段。传统软件工程方法以功能、数据和
3、数据流进行分析,也就是基于数据的。在传统软件工程方法的分析阶段,所使用 的主要工具有数据字典(DD)、实体一关系图(EFU)、数据流图(DFD)和状态一变换 图(STD)。在传统软件工程方法的设计阶段,所使用的主要工具有针对总体设计的模块 结构图(MSD)和针对详细设计的流程图,在目前实际的软件开发中,通常不使用 流程图,而直接通过编程完成详细设计,所以较新的部分文献中,设计阶段包括 了总体设计、详细设计和编程阶段,三者之间的界线较模糊。传统软件工程方法的主要缺点是在分析阶段以功能、数据和数据流进行分析, 对问题域的认识和描述不是以问题域中的固有事物作为基本单位并保持它们的 原貌,这些方法的分
4、析结果不能直接地映射到问题域;在设计阶段分析的结果一 一数据流图和设计的结果一一模块结构图是两种不同的表示体系,从分析到设计 的转换实际上没有可靠的转换规则,带有人为的随意性,导致为软件开发带来隐 患和设计结果与问题域偏差大。1.2软件生命周期及其模型一个计算机软件,从出现一个构思之日起,经过开发成功投入使用,在使用 中不断增补修订,知道最后决定停止使用,并被另一项软件替之时至,被认为是 该软件的一个生命周期(或称生存周期、生存期,Life-cycle)o一个软件产品的生命周期可以划分成若十个互相区分二又有联系的阶段,每 个阶段中的工作均以上一阶段工作的结果为依据,并为下一阶段的工作提供了前
5、提。经验表明,失误造成的误差越是发生在生存周期的前提,在系统交付使用时 造成的影响和损失就越大,要纠正它所花费的代价也越高。因而在前一阶段工作 没有做好之前,绝不要草率地进入下一阶段。国家标准GB/T8566-2001信息技术软件生存周期过程将软件生存周期划 分为以下8个阶段:可行性研究与计划需求分析概要分析 详细设计实现(包括单元测试) 组装测试(即集成测试)确认测试使用和维护软件工程学中的需求分析具有两方面的意义。在认识事物方面,它具有一整 套分析,认识问题域的方法、原则和策略。这些方法、原则和策略使开发人员对 问题域的理解比不遵循软件工程方法更为全面,深刻和有效。在描述事物方面, 它具有
6、一套表示体系和文档规范,但是,传统的软件工程方法学中的需求分析在 上述两方面都存在不足。它在全局范围内以功能、数据或数据流为中心来进行分 析。这些方法的分析结果不能直接地映射问题域,而是经过了不同程度的转化和 重新组合。因此,传统的分析方法容易隐蔽一些对问题域的理解偏差,与后续开 发阶段的衔接也比较困难。总体设计阶段,以需求分析的结果作为出发点构造出一个具体的系统设计方 案,主要是决定系统的模块结构,包括决定模块的划分,模块间的数据传送及调 用关系。详细设计是在总体设计的基础上考虑每个模块的内部结构及算法。最终 将产生每个模块的程序流程图。经过总体设计和详细设计,开发人员对问题域的 认识和描述
7、越来越接近于系统的具体实现一编程。编程阶段,是利用一种编程语言产生一个能够被机器理解和执行的系统。测 试是发现和排除程序中的错误,最终产生一个正确的系统。但是由于分析方法的缺陷很容易产生对问题域的错误理解,而分析与设计的 鸿沟很容易造成设计人员对分析结果的错误转换,所以在编程时程序员往往需要 对分析员和设计人员已经认识过的事物重新进行认识,并产生与他们不同的理解。 在实际开发过程中常常看到,后期开发阶段的人员不断地发现前期阶段中的错误, 并按照他们的新的理解进行工作,所以每两个阶段之间都会出现不少变化,其文 档不能很好的衔接。维护阶段的工作,一是对使用中发现的错误进行修改,二是因需求发生了变
8、化而进行修改。前一种情况需要从程序逆向追溯到发生错误的开发阶段。由于程 序不能映射问题域以及各个阶段的文档不能对应,每一步追溯都存在许多理解障 碍。第二种情况是一个从需求到程序的顺向过程,它也存在初次开发时的那些困 难,并且又增加了理解每个阶段原有文档的困难。软件生命周期模型仅对软件的开发、运行、维护过程有意义,在ISO12207 和ISO9000-3中都提到软件生命周期模型,它包括:瀑布模型、渐增模型、演化 模型、螺旋模型、喷泉模型和智能模型等。这里仅对出现最早的瀑布软件开发模 型进行介绍。瀑布模型是1970年W.Royce提出的,其开发过程依照固定顺序进行。该模 型严格规定各阶段的任务,上
9、一阶段任务输出作为下一阶段工作输入。此模型适合于用户需求明确、开发技术比较成熟、工程管理严格的场所使用。 其缺点是:由于任务顺序固定,软件研制周期长,前一阶段工作中造成的差错越 到后期越大,而且纠正前期错误的代价高。在评价瀑布模型时,应考虑一下的相关风险:需求未被充分理解系统太大而一次不能做完所有的事事先打算采用的技术迅速发生变化需求迅速发生变化有限的资源无法利用某一中间产品图2.具有维护循环的软件生存周期2. 现代软件工程方法有哪些2.1面向对象软件工程方法面向对象软件工程方法(OOSE)是面向对象(00)方法在软件工程领域的全 面应用,面向对象软件工程方法目前有多种流派,但目前面向对象软件
10、工程方法 也可以划分为以下阶段:面向对象的分析(00A)、面向对象的设计(00D)、面 向对象的编程(OOP)、面向对象的测试、面向对象的软件维护(0 0SM)。图3.面向对象的软件工程方法示意图面向对象的分析OOA(Object-Oriented Analysis): 00A强调直接针对问题 域客观存在的各项事物设立00A模型中的对象。问题域有哪些值得考虑 的事物,00A模型中就有哪些对象。00A对问题域的观察、分析和认识 是很直接的,对问题域的描述也是很直接的。它所采用的概念及其术语与问题域中的事物保持了最大程度的一致,不存在语言上的鸿沟。 面向对象的设计OOD(Object-Orient
11、ed Design): OOD是针对系统的一个具 体的实现运用OO方法。它与OOA采用相同的表示法和模型结构。OOA 与OOD采用一致的表示法是面向对象的分析与设计优于传统的软件工 程方法的重要因素之一。这使得从OOA到OOD不存在转换,只有很局部 的修改或调整,并增加几个与实现有关的独立部分,因此OOA与OOD 之间不存在传统方法中分析与设计之间的鸿沟,二者能够紧密衔接,大 大降低了从OOA到OOD的难度、工作量和出错率。 面向对象的编程OOP(Object-Oriented Programing): OOP工作就是用同一 种面向对象的编程语言把OOD模型中的每个成分书写出来。即用具体的 数
12、据结构来定义对象的属性,用具体的语句来实现服务流程图所表示的 算法。OOP阶段产生的程序能够紧密地对应OOD模型;OOD模型中一 部分对象类对应OOA模型,其余部分的对象类对应与实现有关的因素; OOA模型中全部类及对象都对应问题域中的事物。这样的映射关系提高 了开发工作的效率和质量。 面向对象的测试OOT(Object-Oriented Test): OOT指对于用OO技术开发 的软件,在测试过程中继续运用OO技术,进行以对象概念为中心的软 件测试。在测试过程中发掘并利用与OO方法的概念、原则及技术机制 有关的语法与语义信息。可以更准确地发现程序错误并提高测试效率。 对于用OOA和OOD建模
13、并由OOPL编程的软件,OOT可以通过捕 OOA/OOD模型信息,检查程序与模型不匹配的错误。这一点传统的软件 工程方法很难达到。面向对象的软件维护:面向对象的软件工程方法为改进软件维护提供了 有效的途径。程序与问题域是一致的,各个阶段的表示是一致的,从而 大大减少了理解的难度。2.2面向构件(组装)、架构(复用)的软件工程方法这一方法在分布式系统中得到了广泛的应用,构件和基于构件的方法是 电子商务革命的驱动力,它们是Internet时代开发企业级解决方案的方法。 在任何行业中,复杂情况通常是通过很多关键概念来解决的。这些概念是通过 抽象、分解、选代、细化等方法来表达的。其中的关键是分解技术一
14、把一个 较大的问题分解成较小的、可管理的单元,这样每一个单元都是可以单独处 理的,这个技术是软件工程的许多方法的核心。这些方法可以称为结构化设 计,模块化编程,面向对象程序设计,基于构件的程序设计,它们产生的单 元称为模块、包、对象或构件。基于构件软件开发是历史发展的必然,基于 构件的软件开发(Component Based Software Development),简称 CBD。基于构 件的软件工程(Component Based Software Engineering),简称 CBSE。CBD 追求 的目标是软件的“即插即用”。回顾经典的工业化革命,不难得出一些有益 的启示:功能再复杂
15、的产品都是由大量标准的零件(领域构件)组成,零件 在生产线上装配成一个产品,所有零件在产品中共同发挥作用。分工越细致, 专业生产的程度越高,总体生产效率就越高。把这些启示运用于软件开发, 那就是:标准的零件就是软件生产的构件,构件在软件生产线上通过集成得 到新开发的软件。由此,中国诞生了像青鸟工程这样致力于生产构件的项目。 2.3形式化开发方法随着软件系统复杂度的不断增长,开发正确、可靠的软件,成为一 个急待解决的问题。解决此问题的一个有前途、有希望的技术是形式化 方法的应用。形式化方法建立在严格的数学基础上,其目标是希望能使 系统具有较高的可信度和正确性,并能使系统具有良好的结构,使其易 维
16、护,关键是能较好地满足用户需求。一般说来,形式化方法是指具有坚实数学基础的方法,它是数学上 的综合、分析技术的应用,用于开发计算机控制的系统,经常有推理工 具的支持,它可提供一个用于模型设计和分析的一个严格而有效的途径。 从形式系统和复杂问题的本质来看,还未有一个适于全面描述和分析一 个复杂系统的形式系统。所以,可以说,一个“形式化方法”并不是系 统设计者开发系统时可能选择使用的方法,而只是设计者在此过程中希 望利用的一种工具之一 Wood*1988。总体上,形式化方法大致可分为五类Barroca* 1992:(1)基于模型的方法一给出系统(程序)状态和状态变换操作的显 式但亦是抽象的定义,但
17、对于并发没有显式的表示,如:Z和VDMJones 1990。(2)代数方法一通过联系不同操作间的行为关系而给出操作的隐式 定义,而不定义状态,同样,它亦未给出并发的显式表示,如:OBJ、CLEAR。(3)过程代数方法一给出并发过程的一个显式模型,并通过过程间 允许的可观察的通讯上的限制(约束)来表示行为,如:CSP、CCS。(4)基于逻辑的方法一有很多方法采用逻辑来描述系统的特性,包 括程序行为的低级规范和系统时间行为的规范,如:时态逻辑Galton 1992。(5)基于网络的方法一根据网络中的数据流显式地给出系统的并发 模型,包括数据在网中从一个结点流向另一个结点的条件。如Petri网、 谓
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 今昔 软件工程 方法 探究

链接地址:https://www.31ppt.com/p-5006131.html