软件工程与CASE工程综述.doc_第1页
软件工程与CASE工程综述.doc_第2页
软件工程与CASE工程综述.doc_第3页
软件工程与CASE工程综述.doc_第4页
软件工程与CASE工程综述.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件工程综述论文软件工程概论论文:软件工程与CASE工程综述摘要:首先介绍了自60年代末期以来软件工程中采用的结构化方法、面向对象方法学、实体关系方法、面向事件方法、形式化方法以及近年来多种方法的结合研究,然后介绍了自80年代中期以来软件工程中采用的CASE技术的发展情况,最后指出今后的软件工程应该是“方法学+CASE技术”的结合,并且很有可能在今后的软件工程中,CASE技术将占据主导地位。 关键词:软件工程 计算机辅助 软件工程结构化方法 面向对象方法学 实体关系方法 面向事件方法 形式化方法1软件危机的出现和软件工程的提出 40年代中期到60年代中期是计算机系统发展的第一个时期。在这一时期中,通用的计算机硬件已经相当普遍,软件则是为每个具体的应用问题而专门编写的。这一时期的软件通常是规模比较小的程序,编写者和使用者往往是同一个人或同一组人,软件开发具有明显的个体化特征。 60年代中期到70年代中期为计算机系统发展的第二个时期。这一时期的一个重要特征是出现了“软件作坊”,广泛使用产品软件。但是,“软件作坊”基本上还是沿用早期形成的个体化的软件开发方法。随着计算机应用的不断扩展,软件数量不断膨胀,并出现了许多始料不及的问题:要花费大量的时间和精力去修改程序中的错误,要忙于修改程序以满足用户提出的新的需求,为了跟上硬件平台的改变或操作系统的更新而不得不修改程序以适应新的环境。凡此种种维护工作在整个计算机系统中所占的比重越来越大。更为严重的是:许多软件的个体化特征使得它们最终成为不可维护的。这样,就开始出现了软件危机(Software Crisis)o 为了摆脱软件危机的困境,北大西洋公约组织(NA-TO)的科学委员会于1968年召开了有关的研讨会,首次提出了“软件工程”(Software Engineering)的概念,其主要思路是:要把人类长期以来从事各种工程项目所积累起来的行之有效的原理、概念、技术和方法,特别是人类从事计算机硬件研究和开发的经验教训,应用到软件的开发和维护中来。下面介绍软件工程方法学的发展过程。2软件工程方法学的历史发展 自从1968年首次提出并使用“软件工程”这个术语以来,研究软件工程的专家和学者们相继提出了100多条有关软件工程的准则或信条。著名的软件工程专家B.W.Boehm综合这些专家和学者们的意见并总结了TRW公司多年来开发软件的经验,于1983年在他的1篇论文中提出了软件工程的7条基本原理。这7条基本原理是确保软件产品质量和开发效率的原理的最小集合,而且可以证明在此之前已经提出的100多条软件工程原理都可以由这7条原理的任意组合蕴含或派生。以下是Boehm提出的软件工程的7条基本原理: 1.用分阶段的生命周期计划严格管理。 2.坚持进行阶段评审。 3.实施严格的产品控制。 4.采用现代程序设计技术。 5.结果应能清楚地审查。 6.开发小组的成员应该少而精。 7.承认不断改进软件工程实践的必要性。 Boehm指出:遵循前6条基本原理,就能够按照当代软件工程基本原理实现软件的工程化生产,但是,仅有前6条原理并不能保证软件开发与维护的过程能赶上时代前进的步伐和跟上技术的进步。因此,他提出应把承认不断改进软件工程实践的必要性作为软件工程的第7条基本原理。按照第7条原理,我们不仅要积极主动地采纳新的软件技术,而且要注意不断总结经验。 经过近30年的软件工程实践,人们已经成功地采用了多种软件工程方法。软件工程方法学是一组思路、规范、过程、方法、工具和环境的集成。一个好的方法学应该能为软件开发过程从头到尾提供一整套提高效率的途径。采用好的方法学可以为随后的整个软件工程带来好的结构、好的可靠性和可维护性。从方法论的基本理论思路来看,目前已有如下几种方法: 1.结构化方法(Structured M ethods)。 2.面向对象方法学(Object-Oriented Methodology)。 3.实体关系方法(Entity-Relationship Approach)。 4.面向事件方法(Event-Oriented Approach)。 5.形式化方法(Formal Methods)。 下面首先对这几种方法进行简单介绍,然后对结构化方法、面向对象方法和形式化方法的结合研究进行简单讨论。2.1结构化方法 结构化方法是基于软件工程生命周期的概念基础之上的。目前根据软件工程生命周期中的不同阶段已形成了一整套的结构化方法系列,即结构化分析方法(StructuredAnalysis)、结构化设计方法(Structured D esigning)和结构化程序设计方法(Structured Programming),简写为SA-SD-SP方法。结构化方法是一种传统的开发方法。它的本质是功能分解,这种方法是围绕实现处理功能的“过程”来构造软件系统的。传统的结构化方法假定开发人员一开始就能确定系统的需求,而且这些需求不会发生变化(或只允许有很少的变化)。也就是说,传统的结构化方法是从软件开发人员的观点出发,它忽略了最终用户的观点。由于软件逐渐变得容易使用,现在人们已能使用更好的方法将用户的领域知识和分析人员的技术知识结合起来以实现有效的软件系统,如采用下面要介绍的面向对象方法。2.2面向对象方法 近年来,人们对面向对象方法进行了广泛的研究,面向对象方法学也日益受到人们的重视。使用这种方法学能够开发出稳定性好、可重用性好和可维护性好的软件(采用传统的SA-SD-SP方法开发出的软件的稳定性、可重用性和可维护性都比较差)。面向对象方法学的出发点和基本原则是,尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界的方法与过程,也就是说,要使得描述问题的问题空间与在计算机上解决问题的问题空间在结构上尽可能一致。概括地说,面向对象方法有下列几个要点: 1.客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合起来。因此,面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。 2.把所有的对象都划分为各种类(Class),每个类都定义了一组数据和一组方法。数据用于表示对象的静态属性,描述对象的状态信息;方法是对象所能执行的操作,也就是类中所能提供的服务。 3.按照子类(也称为派生类)和父类(也称为基类)的关系,把若干个类组成一个层次结构的系统(也称为类等级)。在这种类层次结构中,通常下层的派生类具有和上层的基类相同的特性(包括数据和方法),我们把这一特性称为继承(Inheritance) 。 4.对象与对象之间只能通过传递消息互相联系。 以上4个要点概括了面向对象方法学的精华。面向对象方法学可用一个公式概括为: ObjectOriented=Objects+Classes+Inheritances +Communication With Messages 面向对象方法学现已形成了一整套的开发方法,它由面向对象分析(Object-Oriented Analysis)、面向对象设计(Object-Oriented Designing)、面向对象程序设计(Ob-ject-Oriented Programming)等组成。面向对象方法学中的概念和表示符号可以适用于整个软件开发过程(在传统的结构化方法中,在开发过程的不同阶段要转换概念和表示符号)。实际上,在面向对象方法学中,软件开发阶段的划分是比较模糊的,通常要在分析、设计与实现等阶段间多次迭代。面向对象方法学既适用于线性的“瀑布模型”,也适用于“螺旋模型”和“渐增模型”(结构化方法一般采用“瀑布模型”)。2.3实体关系方法 实体关系方法最初是 1976年由P.S.Chen提出的一种数据库逻辑设计方法。实体关系方法使用实体关系(ER)模型对来自现实世界问题中的信息进行分析。ER方法涉及如下一些基本的抽象概念: 1.实体(Entity):是现实世界中可以相互区别的事物。它可以是实际存在的事物(如人、物等);也可以是抽象的和概念性的事物(如一笔存、取款交易等);还可以是实体与实体之间的联系(即下面要介绍的“关系”)。实体可以用属性,也可以用关系来定义。 2.属性(Attribute):指实体具有的某种或多种特性。 3.关系(Relationship):指实体与实体之间的某种联系。 ER方法虽然最初是为进行数据库系统设计提出来的,但其主要思路是如何建立现实世界的信息模型,因此,它对于信息系统的抽象和开发具有广泛的指导意义。2.4面向事件方法 面向事件方法的核心概念是“刺激一反应”这一概念。事件(Event)是对系统的“刺激”,而系统由受刺激而产生的动作及其输出则是“反应”。我们可以说“反应”是系统状态的迁移,引起系统状态改变的条件或动作(即“刺激”)就是事件。一个状态迁移还可以引起另一个状态迁移,即刺激产生反应,反应又可以成为新的刺激。按照这种思想建立的系统也称为事件驱动的系统(Event-Driven Sys-tem)。面向事件方法是实时系统常用的开发方法。2.5形式化方法 计算机被越来越多地用于解决那些故障可能会导致严重后果(包括危及生命)的一些任务当中。计算机在控制宇宙飞船、航天器、火车、汽车、核反应堆和医疗设备等等的应用中起着重要的作用。在这些系统中,要求计算机系统是完全可靠的是非常重要的。提高计算机软件可靠性的一种重要技术是使用形式化方法(Formal Methods)。近年来,国外对形式化方法在软件开发中的研究与应用进行了大量的实践工作,形式化方法已不再只是一种研究所里的学术研究工作,而是已经开始被工业界接受并用于开发实际的系统(real systems)。国外已有包括形式化方法、形式化语言和形式化工具在内的比较成熟的形式化系统,如VDM系统、Z系统、RAISE系统等。下面对RAISE系统进行简单介绍。 RAISE(Rigorous Approach to Industrial SoftwareEngineering)翻译成中文就是“面向工业软件工程的严格方法”。RSL(RAISE Specification Language)是一种适于工业界使用的功能强大、应用面很广的规范说明语言。RSL与其相关的开发方法(即RAISE)和支持工具(Tool)一起,最初是作为丹麦和英国的一些公司的一项合作项目(1985-1990年间的RAISE ESPRIT项目)开发出来的。这一方法和技术后来在6个欧洲国家的一些公司的LaCos ESPRIT项目(1990-1995年)中得到进一步完善和发展。当前这一方法和技术已被工业界采用,在欧洲和北美的其它一些公司和研究机构也开始使用和讲授RSL语言。下面介绍使用RAISE形式化方法开发软件的几个主要的阶段。 1.形式化分析(Formal Analysis)。形式化分析阶段根据用户需求(Requirements)得到最初的规范说明(initialspecification)。形式化分析一般采用自然语言如英语书写,得到RSL描述。 2.形式化设计(Formal Design)。形式化设计阶段从最初的规范说明逐步演进到最终的规范说明(final speci-fication)。从最初的规范说明到最终的规范说明之间可能要经过若干步骤。每前进一个步骤,规范说明由抽象变得更为具体,但总是与最初的规范说明保持一致。在形式化设计阶段,相关的一项很重要的工作就是要做若干“证明”6ustification)。在 RAISE中,一个“证明”是表示某一条件为真的判断。这样一个判断可以是完全形式化的,也就是说,它是一个基于RSL证明规则的一个数学证明。在RAISE中,一个“证明”也可以用非形式化的方式给出,这时要求它对于相关的工业应用来说满足实际的或是经济上的约束条件。这时,我们假定:这样的条件理所当然是正确的。当然,如果有人提出怀疑,我们应该也能给出完全的形式化证明。这也是RAISE这种方法为什么称为Rigorous(严格的)的原因。 3.翻译(Translation)。翻译阶段将最终规范说明转换为计算机上可执行的程序。一旦有了用RSL语言表示的最终规范说明,我们就可以采用某种程序设计语言产生实现代码。原则上讲,实现语言可以是任何一种语言,可以是逻辑程序设计语言如Prolog语言,可以是函数式语言如Lisp语言,可以是传统的过程式语言如Ada语言,也可以是现今流行的面向对象语言如C+语言等。在RAISE系统中,现已在将最终规范说明翻译为Ada语言和C+语言方面做了大量卓有成效的工作。2.6结构化方法、面向对象方法和形式化方法的结合研究 传统的结构化方法是软件工程中最为成熟的方法。对于能够预先指定需求的系统的开发,采用传统的结构化方法非常有效;但是,对于需求是模糊的或随时间变化的系统开发,实践证明这种方法不能适应。因此,结构化方法还不能完全克服软件危机。对于需求不能预先指定的系统的开发,人们又提出T原型化(Prototyping)的开发方法。原型化方法便于系统开发者与最终用户进行沟通,因而能够开发出最终真正满足用户需求的系统。从实用的角度出发,原型化方法一般与新型的面向对象方法结合,那样就能够结合面向对象方法所具有的稳定性好、可重用性好和可维护性好的特点。对于安全性要求很高的应用(近年来这类应用系统的开发不断增多,特别是实时系统和并发系统),则近年来提出了许多形式化方法(形式化规范说明和证明技术)。形式化方法具有定义完备的语义,可以使用数学方法对其进行分析,尤其是能够采用一致性和完备性技术识别潜在的说明问题。 软件工程的理论和实践发展到今天,已经有各种各样的软件开发方法可以采用。如何利用各种方法的长处,从而实现优势互补,则是摆在我们面前的一个新的课题。现在已经有人开始对各种方法的结合进行研究。文献S)提出了一门SOFL (Structured -Object -based -FormalLanguage)语言和一种集成了结构化方法、面向对象方法和形式化方法于一体的SOFL开发方法学。SOFL方法学在需求分析和规范说明阶段采用结构化方法,在设计和实现阶段采用面向对象方法,在软件开发过程中一些对软件质量有重要影响的部分采用形式化方法。文献5还给出了实际系统的开发实例,证明了SOFL方法是一种行之有效的方法。3 CASE的诞生及其发展 CASE(Computer Aided Software Engineering)即计算机辅助软件工程,旨在实现软件开发自动化,是进入90年代以来计算机行业中发展最快的行业之一。如果说起源于60年代后期的“软件工程”经过20多年的发展,完成了将软件开发从“手工作坊”的软件开发方式转变为“工程化”的作业方式,这是软件生产的第一次变革的话,那么,以CASE代替仍然处于手工作业方式的软件工程开发方法,可以说是软件生产的第二次变革。CASE技术的意义不仅在于使得软件工程过程自动化,它还关系到软件工程的进一步发展。软件工程方法学有可能有突破性发展的一些技术和方法学领域,如面向对象方法学、软件重用技术、原型化和模拟仿真技术、可视化开发技术、第四代语言等等,都需要CASE的支持。CASE这个术语是1986年才开始使用的。但是,由于软件工程从一开始就是软件工程方法学与相应工具的集成,所以,实际上,早 (上接第6页)在CASE这个术语使用之前,CASE就已经存在,只是80年代中期以来它的发展越来越快,作用也越来越大罢了。下面对CASE技术的发展历史作一简单介绍。 要追溯CASE技术的发展历史是离不开软件工程的发展过程的。70年代以前的软件工程成果主要是在程序开发方面确定了结构化方法及其标准。70年代以后,为了解决程序员不足的“人员恐慌”的问题,不仅进一步改进了软件工程开发方法学,而且开始出现了以简化程序编制工作为宗旨的第四代语言(4GL),大大提高了编程效率。下面是从进人80年代开始CASE技术发展的四个时期的简要描述。 1.第一个时期:80年代初期。这一时期从软件自动化工具的特点而言,可称其为“孤立型”,即各工具大多是孤立存在,彼此没有信息交换,且以分析、设计阶段的辅助工具为主,例如文档自动生成器、图表自动生成器等。 2.第二时期:80年代中期。这一时期最重大的成果是系统信息中心库(Repository)概念的引人,这使得彼此孤立的工具开始有了信息交换环境的支持,推动了从分析到设计的软件工程上游阶段开发工具的一体化,即CASE上游工具的集成。人们将这一特征的CASE称为“扩充型”的CASE。 3.第三个时期:80年代后期。这一时期有代表性的是把应用程序开发、维护自动化与项目管理工具结合起来的重视标准化的“接口型”的工具集成环境。 4.第四个时期:90年代初期开始到现在。这一时期明确了C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论