欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    刘学明《软件工程》.docx

    • 资源ID:1667019       资源大小:785.55KB        全文页数:73页
    • 资源格式: DOCX        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    刘学明《软件工程》.docx

    提供学员内部使用,请勿外传软件工程刘学明 编著 目 录§1 软件工程概述3§11 软件工程的由来3§12 软件工程原理6§2 软件开发模型14§21 传统开发模型15§211 瀑布模型(Waterfall Model)15§212 快速原型模型(rapid prototype model)16§213 增量模型(incremental model)17§214 螺旋模型(spiral model)18§22 现代开发模型(面向对象开发模型)21§221快速应用开发 (RAD)模型21§232 迭代式开发模型(iterative development model)23§223 喷泉模型(water fountain model)24§234 统一过程开发模型RUP(Rational Unified Process)25§235 极限编程模型XP(eXtreme Programming)28§23 软件工程工具30§231 常见的软件工程工具30§232 CASE工具之Rational rose介绍31§233 CASE工具之Visual Studio .NET介绍33§24 现实中的软件工程36§3 可行性研究40§31 可行性研究的任务40§32 新系统描述方法40§33 可行性研究报告结构40§4 需求分析44§41 综述44§42 结构化分析方法51§43 面向对象分析方法58面向对象的基本概念58典型的面向对象方法介绍66§1 软件工程概述§11 软件工程的由来软件工程的产生和发展与“软件危机”密切相关。世界上,第一个写软件的人是Ada(Augusta Ada Lovelace),在1860年代他尝试为Babbage(Charles Babbage)的机械式计算机写软件。尽管他们的努力失败了,但他们的名字永远载入了计算机发展的史册。在1950年代,软件伴随着第一台电子计算机的问世诞生了。以写软件为职业的人也开始出现,他们多是经过训练的数学家和电子工程师。1960年代美国大学里开始出现授予计算机专业的学位,教人们写软件。 本世纪中叶软件产业从零开始起步,在短短的50年的时间里迅速发展成为推动人类社会发展的龙头产业,并造就了一批百万、亿万富翁。随着信息产业的发展,软件对人类社会性越来越重要。知道今天,软件的发展历史不过五十余年,他对于人类而言还是一个全新的东西,人们对软件的认识经历了一个由浅到深的过程。在计算机系统发展的初期,硬件通常用来执行一个单一的程序,而这个程序又是为一个特定的目的而编制的。早期当通用硬件成为平常事情的时候,软件的通用性却是很有限的。大多数软件是由使用该软件的个人或机构研制的,软件往往带有强烈的个人色彩。早期的软件开发也没有什么系统的方法可以遵循,软件设计是在某个人的头脑中完成的一个隐藏的过程。而且,除了源代码往往没有软件说明书等文档。从60年代中期到70年代中期是计算机系统发展的第二个时期,在这一时期软件开始作为一种产品被广泛使用,出现了“软件作坊”专职应别人的需求写软件。这一软件开发的方法基本上仍然沿用早期的个体化软件开发方式,但软件的数量急剧膨胀,软件需求日趋复杂,维护的难度越来越大,开发成本令人吃惊地高,而失败的软件开发项目却屡见不鲜。尤其是,许多程序由于个体化特征使得根本不能维护和继续使用。就这样,“软件危机”开始了!就这样,一门新兴的工程科学就此诞生了!“软件危机”使得人们开始对软件及其特性进行更深一步的研究,人们改变了早期对软件的不正确看法。早期那些被认为是优秀的程序常常很难被别人看懂,通篇充满了程序技巧。现在人们普遍认为优秀的程序除了功能正确,性能优良之外,还应该容易看懂、容易使用、容易修改和扩充。概括来说,软件危机包含两方面问题:一、如何开发软件,以满足不断增长,日趋复杂的需求;二、如何维护数量不断膨胀的软件产品。软件危机主要有以下表现:(1)对软件开发成本和进度的估计常常不准确。开发成本超出预算,实际进度比预定计划一再拖延的现象并不罕见。 (2)用户对“已完成”系统不满意的现象经常发生。(3)软件产品的质量往往靠不住。Bug(故障)一大堆,Patch(补丁)一个接一个。 (4)软件的可维护程度非常之低。(5)软件通常没有适当的文档资料。(6)软件的成本不断提高。(7)软件开发生产率的提高赶不上硬件的发展和人们需求的增长。软件危机的原因,一方面是与软件本身的特点有关;另一方面是由软件开发和维护的方法不正确有关。 软件开发和维护的不正确方法主要表现为忽视软件开发前期的需求分析;开发过程没有统一的、规范的方法论的指导,文档资料不齐全,忽视人与人的交流;忽视测试阶段的工作,提交用户的软件质量差;轻视软件的维护。这些大多数都是软件开发过程管理上的原因。1968年,第一次提出了“软件危机”(software crisis)这个名词,也第一次提出了软件工程(software engineering)这个概念。 1968年秋季,NATO(北约)的科技委员会在德国Garmish召集了近50名一流的编程人员、计算机科学家和工业界巨头,讨论和制定摆脱“软件危机”的对策。在那次会议上Fritz Bauer首次提出了软件工程(software engineering)这个概念。至今,软件工程整整走过了38年的历程。在这38年的发展中,人们针对软件危机的表现和原因,经过不断的实践和总结,越来越认识到:按照工程化的原则和方法组织软件开发工作,是摆脱软件危机的一个主要出路。今天,尽管“软件危机”并未被彻底解决,但软件工程38年的发展仍可以说是硕果累累。统计数据表明,大多数软件开发项目的失败,并不是由于软件开发技术方面的原因。它们的失败是由于不适当的管理造成的。遗憾的是,尽管人们对软件项目管理重要性的认识有所提高,但在软件管理方面的进步远比在设计方法学和实现方法学上的进步小,至今还提不出一套管理软件开发的通用指导原则。软件工程是一门研究如何用系统化、规范化、数量化等工程原则和方法去进行软件的开发和维护的学科。软件工程包括两方面内容:软件开发技术和软件项目管理。软件开发技术包括软件开发方法学、软件工具和软件工程环境。软件项目管理包括软件度量、项目估算、进度控制、人员组织、配置管理、项目计划等。软件工程发展至今,其技术可划分为传统软件工程和现代软件工程两类。l 传统软件工程从单独文件到模块文件早期写程序,都是将代码打在穿孔纸带上,让计算机去读入。 后来有了汇编语言,可以写一些代码了。这时的代码是写在文本文件里,然后交给一个编译器去编译,再由一个链接器去链接,这样就出来了程序。 第一个写汇编的人,可能写的是有名的“Hello World”程序,那个程序写在一个文件里就行了。所以后来就成了习惯,大家都把代码写到一个文件里。早期的汇编语言里,GOTO语句是用得非常非常频繁的,将一个语句GOTO到另一个文本文件里去,既不现实也不方便。所以大家习以为常,便统统地把代码写到一个文件里。 再后来出了高级语言,什么C呀,Pascal呀之类的。既然大家已经形成习惯了,所以很自然地会把一个程序写到一个文件里。无论这个程序有多大,多少行代码,写到一个文件里多方便呀。 直到如今语言发展得更高级了。可是程序员的习惯还是难改,一旦得了机会,还是喜欢把代码写到一个文件里的。在早期,程序员把3000行代码写到一个文件里,是司空见惯的事了。所以,按照这样的习惯,一百万行代码也可能写在一个文件里。不单可以,而且编译器、编辑器等等也都必须要支持。这才是正统的软件开发。 对于要把“一百万行代码写到一个文件”,查找一个函数要在编辑器里按五千次PageDown/PageUp键的勤快人来说,是不能指望他们创造出“单元文件(Unit)”这样的开发方法来的。 然而单元文件毕竟还是出现了。有了单元文件,也就很快出现了一个新的概念:模块。把一个大模块分成小模块,再把小模块分成更细的小小模块,一个模块对应于一个单元。于是,计算机软件业界迎来了结构化编程的时代。从软件危机到开发模型为迎接软件危机的挑战,人们进行了不懈的努力。这些努力大致上是沿着两个方向同时进行的。软件工程发展的第一个方向,是从管理的角度,希望实现软件开发过程的工程化。这方面最为著名的成果就是提出了大家都很熟悉的“瀑布式”生命周期模型。它是在60年代末“软件危机”后出现的第一个生命周期模型。如下所示:分析 设计 编码 测试 维护   后来,又有人针对该模型的不足,提出了快速原型法、增量模型、螺旋模型等对“瀑布式”生命周期模型进行补充。并且,它们在软件开发的实践中被广泛采用。   这方面的努力,使人们认识到了文档的标准以及开发者之间、开发者与用户之间的交流方式的重要性。一些重要文档格式的标准被确定下来,包括变量、符号的命名规则以及原代码的规范式。   软件工程发展的第二个方向,侧重与对软件开发过程中分析、设计的方法的研究。这方面的重要成果就是在70年代风靡一时的结构化开发方法,即OP(面向过程的开发或结构化方法)以及结构化的分析、设计和相应的测试方法。   软件工程的目标是研制开发与生产出具有良好的软件质量和费用合算的产品。费用合算是指软件开发运行的整个开销能满足用户要求的程度,软件质量是指该软件能满足明确的和隐含的需求能力有关特征和特性的总和。软件质量可用六个特性来作评价,即功能性、可靠性、易使用性、效率、维护性、易移植性。l 现代软件工程阶段软件不是纯物化的东西,其中包含着人的因素,于是就有很多变动的东西,不可能像理想的物质生产过程,基于物理学等的原理来做。早期的软件开发仅考虑人的因素,传统的软件工程强调物性的规律,现代软件工程最根本的就是人跟物的关系,就是人和机器(工具、自动化)在不同层次的不断循环发展的关系。   面向对象的分析、设计方法(OOA和OOD)的出现使传统的开发方法发生了翻天覆地的变化。随之而来的是面向对象建模语言(以UML为代表)、软件复用、基于组件的软件开发等新的方法和领域。   与之相应的是从企业管理的角度提出的软件过程管理。即关注于软件生存周期中所实施的一系列活动并通过过程度量、过程评价和过程改进等涉及对所建立的软件过程及其实例进行不断优化的活动使得软件过程循环往复、螺旋上升式地发展。其中最著名的软件过程成熟度模型是美国卡内基梅隆大学软件工程研究所(SEI)建立的CMM(Capability Maturity Model),即能力成熟度模型。§12 软件工程原理 一、何为程序?程序=算法+数据结构程序是能够完成预定功能和性能的可执行的指令序列。编程作为一种行为,只需要知道其逻辑方法就可以了。所谓编程实际上是把一件事情交给计算机去做,你认为这件事该如何做,就用“程序语言”的形式描述给计算机。如果你原本就不明白如何去做,那么你也不要期望计算机去理解你想要做什么。 所以编程的第一要务是先把事情分析清楚,事件先后的逻辑关系和依赖关系搞清楚,然后再去代码实现。算法:是对一个程序的逻辑实现的描述,而结构是逻辑实现所依附的数据实体。只要开发人员将这个程序的算法设计出来了,把结构描述出来了,那么程序就已经定型了。剩下的就是简单的编程实现而已。结构:在计算机专业所学的课程中,同时讲述算法和结构的,是“数据结构”。现在再去读读数据结构,会发现,在所有的算法描述中,有且仅有三种执行逻辑:顺序、分支和循环。简单若顺序表,复杂如树、图,它们的算法都是用上面这三种执行逻辑来描述的。 编程语言:当你熟悉了一门语言之后,就会发现,编程语言只有喜欢与不喜欢的问题,没有会不会的问题。任何的一门语言,你都可以在两周内掌握并开始熟练编程。因为任何的一门语言,他们的底层函数库都是那么的相似,而他们API都是那样的依赖于操作系统。A语言里有的,B语言里也基本都有。 通常而言,编程语言的差别主要表现在适用范围上。一些语言适合做数值处理,小数点后可以精确到原子级,而小数点前则可以表达到宇宙之无穷;另一些语言则适合做图形处理,它的底层函数库比其它语言可以快上十倍或数十倍;还有一些语言则适合于做网页,要用它来做一个通讯薄软件都将是史无前人的挑战。 二、何为软件?现在,被普遍接受的软件的定义是: 软件(software)是计算机系统中与硬件(hardware)相互依存的另一部分,它包括程序(program)、相关数据(data)及其说明文档(document)。也就是:软件程序数据文档其中程序如前所述,是按照事先设计的功能和性能要求执行的指令序列;数据是是程序能正常操纵信息的数据结构;文档是与程序开发维护和使用有关的各种图文资料。软件同传统的工业产品相比,有其独特的特性:1)软件是一种逻辑实体,具有抽象性。这个特点使它与其它工程对象有着明显的差异。人们可以把它记录在纸上、内存、和磁盘、光盘上,但却无法看到软件本身的形态,必须通过观察、分析、思考、判断,才能了解它的功能、性能等特性。 2)软件没有明显的制造过程。一旦研制开发成功,就可以大量拷贝同一内容的副本。所以对软件的质量控制,必须着重在软件开发方面下工夫。 3)软件在使用过程中,没有磨损、老化的问题。软件在生存周期后期不会因为磨损而老化,但会为了适应硬件、环境以及需求的变化而进行修改,而这些修改有不可避免的引入错误,导致软件失效率升高,从而似的软件退化。当修改的成本变得难以接受时,软件就被抛弃。4)软件对硬件和环境有着不同程度的依赖性。这导致了软件移植的问题。5)软件的开发至今尚未完全摆脱手工作坊式的开发方式,生产效率低。6)软件是复杂的,而且以后会更加复杂。软件是人类有史以来生产的复杂度最高的工业产品。软件涉及人类社会的各行各业、方方面面,软件开发常常涉及其它领域的专门知识,这对软件工程师提出了很高的要求。7)软件的成本相当昂贵。软件开发需要投入大量、高强度的脑力劳动,成本非常高,风险也大。现在软件的开销已大大超过了硬件的开销。8)软件工作牵涉到很多社会因素。许多软件的开发和运行涉及机构、体制和管理方式等问题,还会设计到人们的观念和心理。这些人的因素,常常成为软件开发的困难所在,直接影响到项目的成败。软件的发展l 程序设计阶段(5060年代)l 程序系统阶段(6070年代)l 软件工程阶段(70年代以后)三、何为软件工程?在没有软件工程理论的时期,确定数据结构和算法然后CODING(编程)就是一个程序员的全部。他们掌握了一门语言,懂得了一些生活中最常见的逻辑,他们用程序的方式思考和学习了一些算法,并根据前人的经验,把这些算法跑在了一些数据结构之上,最后,我们就看到了他们写的程序。软件工程的定义:关于“软件工程”的定义很多,例如:l Fritz Bauer在NATO会议上给出的定义:“软件工程是为了经济地获得可靠的和能在实际机器上高效运行的软件而确立和使用的健全的工程原理(方法)。”l IEEE【IEE83】给出的软件工程定义:“软件工程是开发、运行、维护和修复软件的系统方法。”l IEEE【IEE93】给出了一个更加综合的定义:“将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。”l 本教材中的定义:“软件工程是指导计算机软件开发和维护的一门工程学科”l 本人的定义:“软件工程是指导人们有效开发和维护软件的科学体系”软件工程的目的:在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并满足用户需要的软件产品。软件工程主要研究内容:软件工程的方法、软件工程的工具及环境、软件工程过程构成了软件工程的三要素。1软件工程方法是完成软件开发各项任务的技术方法,主要回答“如何做”的问题。软件工程方法可分为传统方法-结构化方法和面向对象方法两类。2软件工程的工具是运用方法而提供的自动或半自动的软件工程支撑环境。包括软件需求工具、软件设计工具、软件构造工具、软件测试工具、软件维护工具、软件配置管理工具等。3软件工程的过程是为了获得高质量的软件所需要完成的一系列任务的框架,以规定完成各项任务的工作步骤。软件工程的过程定义了开发步骤、方法使用的顺序、应交付的文档以及为保证质量和协调变化需要的管理以及各个阶段需完成的里程碑,它将方法与工具综合运用软件工程的研究除计算机软件本身外,还涉及众多其他的领域,如管理科学、心理学、经济学、人机工程学等,因此,它是一门综合性学科。粗略来说,软件工程学科可划分为两大方面,一是基础性理论研究,主要目标是用形式化技术解决软件生产中所遇到的问题,如需求规格的描述,规格到系统的转换,系统测试、维护及理解等,主要为解决“做什么”的描述手段问题。另一是工程化技术研究,总结软件开发过程的规律,探讨软件开发过程的工程化因素、方法及工程支持,解决“怎么做”的问题。80年代以来,计算机辅助软件工程(CASE)的研究已成为软件工程领域中的热点,其中包括CASE工具和CASE环境的研究,旨在应用计算机支持软件开发过程,改进软件开发行为,为开发人员提高软件开发平台和环境,以提高软件生产率并改善软件产品的质量。软件生命周期软件生命周期(Software Life Cycle)从时间的角度将软件开发任务进行分解,它将开发过程划分为任务相对独立的各个阶段,各阶段采用不同的方法或模型去认识和描述问题:l 软件定义阶段。包括软件计划和可行性分析l 需求分析阶段l 软件设计阶段l 程序编码阶段l 软件测试阶段l 运行维护阶段软件生存期模型是跨越整个生存期的系统开发、 软件生存期模型是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。结构化方法结构化方法(Structured Method)是依据软件生命周期模型的阶段划分和各阶段的任务特点而运用的技术方法,是软件生命周期模型的具体体现。所以,为区别于面向对象方法,又将此方法称作“软件生命周期法”,也将此方法归为“传统方法学”。结构化方法强调开发方法的结构合理性以及所开发软件的结构合理性的软件开发方法。他从功能的观点出发构造系统,从高层视图开始,逐步精化和详细。结构是指系统内各个组成要素之间的相互联系、相互作用的框架。结构化方法提出了一组提高软件结构合理性的准则,如分解与抽象、模块独立性、信息隐蔽等。针对软件生存周期各个不同的阶段,它有结构化分析(SA)、结构化设计(SD)和结构化程序设计(SP)等方法。结构化分析方法(SA)是结构化程序设计理论在软件需求分析阶段的运用。按照DeMarco的定义,“结构化分析就是使用数据流图(DFD)、数据字典(DD)、结构化英语、判定表和判定树等工具,来建立一种新的、称为结构化规格说明的目标文档。”结构化分析方法的实质是着眼于数据流自顶向下,逐层分解,建立系统的处理流程,以数据流图和数据字典为主要工具建立系统的逻辑模型。结构化分析是一种建模活动,该方法使用简单易读符号,根据软件内部数据传递、变换的关系,自顶向下逐层分解,描绘出满足功能要求的软件模型。给出一组帮助系统分析人员产生功能规约的原理与技术SA方法利用图形等半形式化的描述方式表达需求,简明易懂,用它们形成需求说明书中的主要部分。描述工具是:1) 数据流图(DFD):描述系统由哪几部分组成,各部分之间有什么联系等等。2) 数据字典(DD):定义了数据流图中每一个图形元素。3) 描述加工逻辑的结构化语言、判定表、判定树:详细描述数据流图中不能被再分解的每一个加工。     结构化分析的步骤如下:1) 分析当前的情况,做出反映当前物理模型的DFD;2) 推导出等价的逻辑模型的DFD;3) 设计新的逻辑系统,生成数据字典和基元描述;4) 建立人机接口,提出可供选择的目标系统物理模型的DFD;5) 确定各种方案的成本和风险等级,据此对各种方案进行分析;6) 选择一种方案;7) 建立完整的需求规约。     结构化设计方法(SD)是一种面向数据流的设计方法,该方法由美国IBM公司的L.Constantine和E.Yourdon等人于1974年提出,与结构化分析(SA)衔接,构成了完整的结构化分析与设计技术,曾经是使用最广泛的软件设计方法之一。该方法以需求分析阶段产生的数据流图为基础,按一定的步骤映射成软件结构。该方法给出一组帮助设计人员在模块层次上区分设计质量的原理与技术。它以数据流图为基础得到软件的模块结构。SD方法尤其适用于变换型结构和事务型结构的目标系统。在设计过程中,它从整个程序的结构出发,利用模块结构图表述程序模块之间的关系。结构化设计的步骤如下:1) 评审和细化数据流图;2) 确定数据流图的类型;3) 把数据流图映射到软件模块结构,设计出模块结构的上层;4) 基于数据流图逐步分解高层模块,设计中下层模块;5) 对模块结构进行优化,得到更为合理的软件结构;6) 描述模块接口。结构化程序设计(SP)的概念是荷兰学者迪克斯特拉(E.W.dijkstra)在1969年首先提出来的,他强调从程序结构和风格来研究程序设计。有人把在结构化程序设计(SP)的概念提出以前的时期的编程称作“线性编程”。这时候,计算机程序设计还处于很幼稚的时期。第一台可编程的计算机是在距今才几十年前开发出来的,在过去的几十年中,程序设计的发展显示了一个清楚的趋势;计算机程序设计已极大地面向人类程序员。第一台计算机是用二进制编程的;机械开关用于加载程序。随着大容量存储设备和较大计算机内存的出现,第一代高级计算机程序设计语言投入了使用。不再考虑位和字节之类的术语,程序可以写一系列类似英语的指令,然后可以由编译程序将它翻译成计算机二进制语言。这些第一代程序设计语言被设计为用于开发执行相对简单任务的程序。这些早期程序主要是进行计算,对程序设计语言没有大多的要求。因此,大多数程序都很短小,通常少于100行代码。随着计算机性能的提高,开发更加复杂的程序的能力也提高了。早期的程序设计语言对于包含更多的编程任务就显得远远不够了。设备需要重复使用已有程序代码,而这在线性程序设计语言中是不可能的。事实上,总有一小段程序被在许多程序中反复使用。程序由于以较长的序列运行,而使它们的逻辑难以理解。程序控制是通过在程序中跳转(GOTO)来进行的,经常没有程序如何以及为什么跳转的明显标志。而且线性语言没有能力控制数据项的可见性。程序中的所有数据项都是全局的,也即它们可以被程序的任何部分修改。在较长的、锗综复杂的代码中跟踪对全局变量的错误修改使许多程序员整天忙得不可开支,而效率非常低。于是,在70年代初,发生了要不要GOTO语句的争论,这场争论的实质就在于是讲究好结构程序还是讲究效率。所谓好结构程序,指程序结构清晰、易于阅读、易于验证。好结构程序从效率上看不一定是最好的程序,但是它能提高程序的可读性、可理解性和可靠性,易于查错和维护。争论的结果,人们普遍认为,在计算机运行速度大大提高、存储容量不断扩大的情况下,程序的可靠性和可维护性已成为第一要求,除了系统的核心程序以及其他一些特殊要求的程序之外,在通常情况下,宁可降低一些效率,也要保证好的程序结构。从此,人们开始总结出一套程序设计的基本原理和方法,并摸索出了一套规律,使程序设计不再是一种纯粹技巧性的工作,逐渐上升为一门科学,又仍保持着艺术的特点。结构化程序设计(SP)是以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块,这样使完成每一个模块的工作变单纯而明确,为设计一些较大的软件打下了良好的基础。 由于模块相互独立,因此在设计其中一个模块时,不会受到其它模块的牵连,因而可将原来较为复杂的问题化简为一系列简单模块的设计。模块的独立性还为扩充已有的系统、建立新系统带来了不少的方便,因为我们可以充分利用现有的模块作积木式的扩展。 按照结构化程序设计的观点,任何算法功能都可以通过由程序模块组成的三种基本程序结构的组合: 顺序结构、选择结构和循环结构来实现。 结构化程序设计的基本思想是采用"自顶向下,逐步求精"的程序设计方法和"单入口单出口"的控制结构。自顶向下、逐步求精的程序设计方法从问题本身开始,经过逐步细化,将解决问题的步骤分解为由基本程序结构模块组成的结构化程序框图;"单入口单出口"的思想认为一个复杂的程序,如果它仅是由顺序、选择和循环三种基本程序结构通过组合、嵌套构成,那么这个新构造的程序一定是一个单入口单出口的程序。据此就很容易编写出结构良好、易于调试的程序来。软件生命周期法或结构化方法虽然被归为“传统方法学”,并不是说该方法已经不适用,没有人使用了。这种方法学历经数十年,可谓历史悠久,为广大软件工程师所熟悉,在开发某些类型的软件是也比较有效,在相当长的时期内还有其生命力。尤其是时下流行的面向对象方法也是基本基于软件生命周期法对于软件阶段的划分的思想,所以对于学员而言,了解并掌握软件生命周期法还是十分必要的。面向对象方法针对日趋复杂的软件需求的挑战,软件业界重点发展了面向对象(Object-Oriented 简称OO)的软件开发方法。面向对象方法的出发点和基本原则,是尽可能模拟人学习习惯的思维方式,是开发软件的方法与过程尽可能接近人类认识世界解决问题的方法和过程,也就是使描述问题的问题空间与现实解法的解空间在结构上尽可能一致。面向对象方法认为,客观世界的问题都是由客观世界中的实体及实体间相互的关系构成。我们把客观世界中的实体抽象为问题域中的对象(Object)。因为所要解决的问题具有特殊性,因此,对象是不固定的。一个雇员可以作为一个对象,一家公司也可以作为一个对象。到底应该把什么抽象为对象,由所需解决的问题决定。诸如“对象”和“对象的属性”这样的概念,可以一直追溯到上世纪50年代初。它们首先出现于关于人工智能的早期著作中。然而,OO的实际发展却是始于1966年 (当年文化大革命在中国爆发) 。当时Kisten Nygaard和Ole-Johan Dahl开发了具有更高级抽象机制的Simula语言。Simula提供了比子程序更高一级的抽象和封装;为仿真一个实际问题,引入了数据抽象和类的概念。大约在同一时期,Alan Kay正在尤他大学的一台个人计算机上努力工作,他希望能在其上实现图形化和模拟仿真。尽管由于软硬件的限制,Kay的尝试没有成功,但他的这些想法并没有丢失。70年代初期,他加入了Palo Alto研究中心(PARC),再次将这些想法付诸实施。 在PARC,他所在的研究小组坚信计算机技术是改善人与人、人与机器之间通讯渠道的关键。在这信念的支持下,并吸取了Simula的类的概念,他们开发出Smalltalk语言;1972年PARC发布了Smalltalk的第一个版本。大约在此时,“面向对象”这一术语正式确定。Smalltalk被认为是第一个真正面向对象的语言。Smalltalk 的目标是为了使软件设计能够以尽可能自动化的单元来进行。在Smalltalk中一切都是对象-即某个类的实例。最初的Smalltalk的世界中,对象与名词紧紧相连。Smalltalk还支持一个高度交互式的开发环境和原型方法。这一原创性的工作开始并未发表,只是视为带浓厚试验性质的学术兴趣而已。 Smalltalk-80是PARC的一系列Smalltalk版本的总结,发布于1981年。1981年8月的<<BYTE>>杂志公布了Smalltalk开发组的重要结果。在这期杂志的封面图上,一个热气球正从一个孤岛上冉冉升起来,标志着PARC的面向对象思想的启航。该是向软件开发界公开发表的时候了。起初,影响只是渐进式的,但很快就跃升到火爆的程度。热气球确实启航了,而且影响深远。早期Smalltalk关于开发环境的研究导致了后来的一系列进展:窗口(window),图标(icon),鼠标(mouse)和下拉式window环境。Smalltalk语言还影响了年代早期和中期的面向对象的语言,如:Object-C(1986), C+(1986), Self(1987),Eiffl(1987),Flavors(1986)。面向对象的应用领域也被进一步拓宽。对象不再仅仅与名词相联系,还包括事件和过程。1980 Grady Booch首先提出面向对象设计(OOD)的概念。然后其他人紧随其后,面向对象分析的技术开始公开发表。1985年,第一个商用面向对象数据库问世。1990年代以来,面向对象的分析、测试、度量和管理等研究都得到长足发展。目前对象技术的前沿课题包括设计模板(design patterns)、分布式对象系统和基于网络的对象应用等。目前人们的普遍认为OO技术是针对“软件危机”的最佳对策。最初被多数人看作只是一种不切实际的方法和满足一时好奇心的研究,现在得到了人们近乎狂热的欢迎。许多编程语言都推出了支持面向对象的新版本。大量的面向对象的开发方法被提出来。关于OO的会议、学术研讨班和课程极受欢迎。无数专业的学术期刊都为这一话题开辟了专门的版面。一些软件开发合同甚至也指明了必须使用OO的技术和语言。面向对象的软件开发对于90年代,就向是结构化的软件开发对于70年代那样让人着迷,而且OO的发展势头还在日益加速。 为什么面向对象运动发展到了现在这样火爆的程度?部分是源于人们长久以来的一个希望:人们希望它,象以前其他的软件开发技术一样,能够满足软件开发对于生产效率、可靠性、易维护性、易管理等方面的更高、更快、更强的迫切需求。 面向对象的开发强调从问题域的概念到软件程序和界面的直接映射;心理学的研究也表明,把客观世界看成是许多对象更接近人类的自然思维方式。对象比函数更为稳定;软件需求的变动往往是功能相关的变动,而其功能的执行者-对象-通常不会有大的变动。另外,面向对象的开发也支持、鼓励软件工程实践中的信息隐藏、数据抽象和封装。在一个对象内部的修改被局部隔离。面向对象开发的软件易于修改、扩充和维护。 面向对象也被扩充应用于软件生命周期的各个阶段-从分析到编码。而且,面向对象的方法自然而然地支持快速原型法和RAD(Rapid Application Development)。面向对象开发的使用鼓励重用,不仅软件的重用,还包括分析、设计的模型的重用。更进一步,OO技术还方便了软件的互换性,即,网络中一个节点上应用能够利用另一个节点上的资源。面向对象的开发还支持并发、层次和复杂等一些在目前的软件系统中常见的现象。今天我们常常会需要建造一些软件系统-不止是一黑盒应用。这些复杂系统通常包含由多个子系统组成的层次结构。面向对象的开发支持开放系统的建设;利用不同的应用来进行软件集成有了更大的柔性。最后,面向对象开发的使用可以减小开发复杂系统所面临的危险,主要是因为系统集成遍布软件生命周期的各个阶段。 在面向对象编程中,程序被看作是相互协作的对象集合,每个对象都是某个类的实例,所有的类构成一个通过继承关系相联系的层次结构。面向对象的语言常常具有以下特征:对象生成功能、消息传递机制、类和遗传机制。这些概念当然可以并且也已经在其他编程语言中单独出现,但只有在面向对象语言中,他们才共同出现,以一种独特的合作方式互相协作、互相补充。八十年代末以来,随着面向对象技术成为研究的热点出现了几十种支持软件开发的面向对象方法。其中,Booch, Coad/Yourdon, OMT, 和Jacobson的方法在面向对象软件开发界得到了广泛的认可。特别值得一提的是统一的建模语言UML (Unified Modeling Language),他是一种用于描述、构造软件系统以及商业建模的语言,该方法结合了在大型、复杂系统的建模领域得到认可的优秀的软件工程方法如Booch, OMT, 和Jacobson方法等的优点,统一了符号体系,并从其它的方法和工程实践中吸收了许多经过实际检验 的概念和技术。UML已经成为大多数公司采用的标准,也是ANSI和OMG等部门采用的标准。方法简单比较一系统观点l 传统方法:系统是过程的集合,过程与数据实体交互,过程接受输入并产生输出l 面向对象方法:系统是交互对象的集合,对象与人或其它对象交互,对象发送与响应消息二看待问题l 传统方法:面向功能 ,把系统看成一组功能l 面向对象方法:把问题当作一组相互作用的实体,并确定实体间关系三关于程序的定义l 传统方法:程序=数据结构+算法l 面向对象方法:程序 = 对象+消息四编程l 传统方法:面向过程的编码l 面向对象方法:面向对象的编码五.工程方法l 传统方法需求分析 总体设计 详细设计 面向过程的编码 测试l 面向对象方法软件分析与对象抽取 对象详细设计 面向对象的编码 测试§2 软件开发模型及工具本章主要讲述软件开发的过程和工具。软件过程是软件工程三要素中的一个方面,是软件工程的根基。软件工程与软件过程是包括与被包括的关系。软件过程是为了获得高质量软件所需要完成的一系列任务的框架,规定了完成各项软任务的工作步骤。为了解决软件开发中的实际问题,必须综合出一个开发策略,该策略能够覆盖过程、方法和工具三个层次和软件开发的一般阶段。这个策略常常被称为过程模型,也称作软件开发模型。软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段。软件开发模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为软件项目工作的基础。最早出现的软件开发模型是1970年W·Royce提出的瀑布模型。该模型给出了固定的顺序,将生存期活动从上一个阶段向下一个阶段逐级过渡,如同流水下泻,最终得到所开发的软件产品,投入使用。但计算拓广到统计分析、商业事务等领域时,大多数程序采用高级语言(如FORTRAN、COBOL等)编写。瀑布模式模型也存在着缺乏灵活性、无法通过并发活动澄清本来不够确切的需求等缺点。根据各种开发模型的不同特征,有人归纳为传统开发模型、演化开发模型和面向对象开发模型。现实中的开发模型有很多,我们只选取一些常用的典型开发模型进行介绍。所涉及到的典型的开发模型有:1) 瀑布模型(waterfall model);2) 快速原型模型(rapid prototype model);3) 增量模型 (inCRemental model);4) 螺旋模型(SPIral model);5) 喷泉模型(fountAIn model);6) 快速开发模型RAD(RapidApplicationDevelopment)7) 迭代式开发模型(iterative development model)8) 统一过程开发模型RUP(Rational Unified Process)9) 极限编程模型XP(eXtreme Programming)§21 传统开发模型

    注意事项

    本文(刘学明《软件工程》.docx)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开