《软件工程》新编讲义.docx
《《软件工程》新编讲义.docx》由会员分享,可在线阅读,更多相关《《软件工程》新编讲义.docx(73页珍藏版)》请在三一办公上搜索。
1、提供学员内部使用,请勿外传软件工程刘学明 编著 目 录1 软件工程概述311 软件工程的由来312 软件工程原理62 软件开发模型1421 传统开发模型15211 瀑布模型(Waterfall Model)15212 快速原型模型(rapid prototype model)16213 增量模型(incremental model)17214 螺旋模型(spiral model)1822 现代开发模型(面向对象开发模型)21221快速应用开发 (RAD)模型21232 迭代式开发模型(iterative development model)23223 喷泉模型(water fountain m
2、odel)24234 统一过程开发模型RUP(Rational Unified Process)25235 极限编程模型XP(eXtreme Programming)2823 软件工程工具30231 常见的软件工程工具30232 CASE工具之Rational rose介绍31233 CASE工具之Visual Studio.NET介绍3324 现实中的软件工程363 可行性研究4031 可行性研究的任务4032 新系统描述方法4033 可行性研究报告结构404 需求分析4441 综述4442 结构化分析方法5143 面向对象分析方法58面向对象的基本概念58典型的面向对象方法介绍661 软件
3、工程概述11 软件工程的由来软件工程的产生和发展与“软件危机”密切相关。世界上,第一个写软件的人是Ada(Augusta Ada Lovelace),在1860年代他尝试为Babbage(Charles Babbage)的机械式计算机写软件。尽管他们的努力失败了,但他们的名字永远载入了计算机发展的史册。在1950年代,软件伴随着第一台电子计算机的问世诞生了。以写软件为职业的人也开始出现,他们多是经过训练的数学家和电子工程师。1960年代美国大学里开始出现授予计算机专业的学位,教人们写软件。 本世纪中叶软件产业从零开始起步,在短短的50年的时间里迅速发展成为推动人类社会发展的龙头产业,并造就了一
4、批百万、亿万富翁。随着信息产业的发展,软件对人类社会性越来越重要。知道今天,软件的发展历史不过五十余年,他对于人类而言还是一个全新的东西,人们对软件的认识经历了一个由浅到深的过程。在计算机系统发展的初期,硬件通常用来执行一个单一的程序,而这个程序又是为一个特定的目的而编制的。早期当通用硬件成为平常事情的时候,软件的通用性却是很有限的。大多数软件是由使用该软件的个人或机构研制的,软件往往带有强烈的个人色彩。早期的软件开发也没有什么系统的方法可以遵循,软件设计是在某个人的头脑中完成的一个隐藏的过程。而且,除了源代码往往没有软件说明书等文档。从60年代中期到70年代中期是计算机系统发展的第二个时期,
5、在这一时期软件开始作为一种产品被广泛使用,出现了“软件作坊”专职应别人的需求写软件。这一软件开发的方法基本上仍然沿用早期的个体化软件开发方式,但软件的数量急剧膨胀,软件需求日趋复杂,维护的难度越来越大,开发成本令人吃惊地高,而失败的软件开发项目却屡见不鲜。尤其是,许多程序由于个体化特征使得根本不能维护和继续使用。就这样,“软件危机”开始了!就这样,一门新兴的工程科学就此诞生了!“软件危机”使得人们开始对软件及其特性进行更深一步的研究,人们改变了早期对软件的不正确看法。早期那些被认为是优秀的程序常常很难被别人看懂,通篇充满了程序技巧。现在人们普遍认为优秀的程序除了功能正确,性能优良之外,还应该容
6、易看懂、容易使用、容易修改和扩充。概括来说,软件危机包含两方面问题:一、如何开发软件,以满足不断增长,日趋复杂的需求;二、如何维护数量不断膨胀的软件产品。软件危机主要有以下表现:(1)对软件开发成本和进度的估计常常不准确。开发成本超出预算,实际进度比预定计划一再拖延的现象并不罕见。 (2)用户对“已完成”系统不满意的现象经常发生。(3)软件产品的质量往往靠不住。Bug(故障)一大堆,Patch(补丁)一个接一个。 (4)软件的可维护程度非常之低。(5)软件通常没有适当的文档资料。(6)软件的成本不断提高。(7)软件开发生产率的提高赶不上硬件的发展和人们需求的增长。软件危机的原因,一方面是与软件
7、本身的特点有关;另一方面是由软件开发和维护的方法不正确有关。 软件开发和维护的不正确方法主要表现为忽视软件开发前期的需求分析;开发过程没有统一的、规范的方法论的指导,文档资料不齐全,忽视人与人的交流;忽视测试阶段的工作,提交用户的软件质量差;轻视软件的维护。这些大多数都是软件开发过程管理上的原因。1968年,第一次提出了“软件危机”(software crisis)这个名词,也第一次提出了软件工程(software engineering)这个概念。 1968年秋季,NATO(北约)的科技委员会在德国Garmish召集了近50名一流的编程人员、计算机科学家和工业界巨头,讨论和制定摆脱“软件危机
8、”的对策。在那次会议上Fritz Bauer首次提出了软件工程(software engineering)这个概念。至今,软件工程整整走过了38年的历程。在这38年的发展中,人们针对软件危机的表现和原因,经过不断的实践和总结,越来越认识到:按照工程化的原则和方法组织软件开发工作,是摆脱软件危机的一个主要出路。今天,尽管“软件危机”并未被彻底解决,但软件工程38年的发展仍可以说是硕果累累。统计数据表明,大多数软件开发项目的失败,并不是由于软件开发技术方面的原因。它们的失败是由于不适当的管理造成的。遗憾的是,尽管人们对软件项目管理重要性的认识有所提高,但在软件管理方面的进步远比在设计方法学和实现方
9、法学上的进步小,至今还提不出一套管理软件开发的通用指导原则。软件工程是一门研究如何用系统化、规范化、数量化等工程原则和方法去进行软件的开发和维护的学科。软件工程包括两方面内容:软件开发技术和软件项目管理。软件开发技术包括软件开发方法学、软件工具和软件工程环境。软件项目管理包括软件度量、项目估算、进度控制、人员组织、配置管理、项目计划等。软件工程发展至今,其技术可划分为传统软件工程和现代软件工程两类。l 传统软件工程从单独文件到模块文件早期写程序,都是将代码打在穿孔纸带上,让计算机去读入。 后来有了汇编语言,可以写一些代码了。这时的代码是写在文本文件里,然后交给一个编译器去编译,再由一个链接器去
10、链接,这样就出来了程序。 第一个写汇编的人,可能写的是有名的“Hello World”程序,那个程序写在一个文件里就行了。所以后来就成了习惯,大家都把代码写到一个文件里。早期的汇编语言里,GOTO语句是用得非常非常频繁的,将一个语句GOTO到另一个文本文件里去,既不现实也不方便。所以大家习以为常,便统统地把代码写到一个文件里。 再后来出了高级语言,什么C呀,Pascal呀之类的。既然大家已经形成习惯了,所以很自然地会把一个程序写到一个文件里。无论这个程序有多大,多少行代码,写到一个文件里多方便呀。 直到如今语言发展得更高级了。可是程序员的习惯还是难改,一旦得了机会,还是喜欢把代码写到一个文件里
11、的。在早期,程序员把3000行代码写到一个文件里,是司空见惯的事了。所以,按照这样的习惯,一百万行代码也可能写在一个文件里。不单可以,而且编译器、编辑器等等也都必须要支持。这才是正统的软件开发。 对于要把“一百万行代码写到一个文件”,查找一个函数要在编辑器里按五千次PageDown/PageUp键的勤快人来说,是不能指望他们创造出“单元文件(Unit)”这样的开发方法来的。 然而单元文件毕竟还是出现了。有了单元文件,也就很快出现了一个新的概念:模块。把一个大模块分成小模块,再把小模块分成更细的小小模块,一个模块对应于一个单元。于是,计算机软件业界迎来了结构化编程的时代。从软件危机到开发模型为迎
12、接软件危机的挑战,人们进行了不懈的努力。这些努力大致上是沿着两个方向同时进行的。软件工程发展的第一个方向,是从管理的角度,希望实现软件开发过程的工程化。这方面最为著名的成果就是提出了大家都很熟悉的“瀑布式”生命周期模型。它是在60年代末“软件危机”后出现的第一个生命周期模型。如下所示:分析 设计 编码 测试 维护 后来,又有人针对该模型的不足,提出了快速原型法、增量模型、螺旋模型等对“瀑布式”生命周期模型进行补充。并且,它们在软件开发的实践中被广泛采用。 这方面的努力,使人们认识到了文档的标准以及开发者之间、开发者与用户之间的交流方式的重要性。一些重要文档格式的标准被确定下来,包括变量、符号的
13、命名规则以及原代码的规范式。 软件工程发展的第二个方向,侧重与对软件开发过程中分析、设计的方法的研究。这方面的重要成果就是在70年代风靡一时的结构化开发方法,即OP(面向过程的开发或结构化方法)以及结构化的分析、设计和相应的测试方法。 软件工程的目标是研制开发与生产出具有良好的软件质量和费用合算的产品。费用合算是指软件开发运行的整个开销能满足用户要求的程度,软件质量是指该软件能满足明确的和隐含的需求能力有关特征和特性的总和。软件质量可用六个特性来作评价,即功能性、可靠性、易使用性、效率、维护性、易移植性。l 现代软件工程阶段软件不是纯物化的东西,其中包含着人的因素,于是就有很多变动的东西,不可
14、能像理想的物质生产过程,基于物理学等的原理来做。早期的软件开发仅考虑人的因素,传统的软件工程强调物性的规律,现代软件工程最根本的就是人跟物的关系,就是人和机器(工具、自动化)在不同层次的不断循环发展的关系。 面向对象的分析、设计方法(OOA和OOD)的出现使传统的开发方法发生了翻天覆地的变化。随之而来的是面向对象建模语言(以UML为代表)、软件复用、基于组件的软件开发等新的方法和领域。 与之相应的是从企业管理的角度提出的软件过程管理。即关注于软件生存周期中所实施的一系列活动并通过过程度量、过程评价和过程改进等涉及对所建立的软件过程及其实例进行不断优化的活动使得软件过程循环往复、螺旋上升式地发展
15、。其中最著名的软件过程成熟度模型是美国卡内基梅隆大学软件工程研究所(SEI)建立的CMM(Capability Maturity Model),即能力成熟度模型。12 软件工程原理 一、何为程序?程序=算法+数据结构程序是能够完成预定功能和性能的可执行的指令序列。编程作为一种行为,只需要知道其逻辑方法就可以了。所谓编程实际上是把一件事情交给计算机去做,你认为这件事该如何做,就用“程序语言”的形式描述给计算机。如果你原本就不明白如何去做,那么你也不要期望计算机去理解你想要做什么。 所以编程的第一要务是先把事情分析清楚,事件先后的逻辑关系和依赖关系搞清楚,然后再去代码实现。算法:是对一个程序的逻辑
16、实现的描述,而结构是逻辑实现所依附的数据实体。只要开发人员将这个程序的算法设计出来了,把结构描述出来了,那么程序就已经定型了。剩下的就是简单的编程实现而已。结构:在计算机专业所学的课程中,同时讲述算法和结构的,是“数据结构”。现在再去读读数据结构,会发现,在所有的算法描述中,有且仅有三种执行逻辑:顺序、分支和循环。简单若顺序表,复杂如树、图,它们的算法都是用上面这三种执行逻辑来描述的。 编程语言:当你熟悉了一门语言之后,就会发现,编程语言只有喜欢与不喜欢的问题,没有会不会的问题。任何的一门语言,你都可以在两周内掌握并开始熟练编程。因为任何的一门语言,他们的底层函数库都是那么的相似,而他们API
17、都是那样的依赖于操作系统。A语言里有的,B语言里也基本都有。 通常而言,编程语言的差别主要表现在适用范围上。一些语言适合做数值处理,小数点后可以精确到原子级,而小数点前则可以表达到宇宙之无穷;另一些语言则适合做图形处理,它的底层函数库比其它语言可以快上十倍或数十倍;还有一些语言则适合于做网页,要用它来做一个通讯薄软件都将是史无前人的挑战。 二、何为软件?现在,被普遍接受的软件的定义是: 软件(software)是计算机系统中与硬件(hardware)相互依存的另一部分,它包括程序(program)、相关数据(data)及其说明文档(document)。也就是:软件程序数据文档其中程序如前所述,
18、是按照事先设计的功能和性能要求执行的指令序列;数据是是程序能正常操纵信息的数据结构;文档是与程序开发维护和使用有关的各种图文资料。软件同传统的工业产品相比,有其独特的特性:1)软件是一种逻辑实体,具有抽象性。这个特点使它与其它工程对象有着明显的差异。人们可以把它记录在纸上、内存、和磁盘、光盘上,但却无法看到软件本身的形态,必须通过观察、分析、思考、判断,才能了解它的功能、性能等特性。 2)软件没有明显的制造过程。一旦研制开发成功,就可以大量拷贝同一内容的副本。所以对软件的质量控制,必须着重在软件开发方面下工夫。 3)软件在使用过程中,没有磨损、老化的问题。软件在生存周期后期不会因为磨损而老化,
19、但会为了适应硬件、环境以及需求的变化而进行修改,而这些修改有不可避免的引入错误,导致软件失效率升高,从而似的软件退化。当修改的成本变得难以接受时,软件就被抛弃。4)软件对硬件和环境有着不同程度的依赖性。这导致了软件移植的问题。5)软件的开发至今尚未完全摆脱手工作坊式的开发方式,生产效率低。6)软件是复杂的,而且以后会更加复杂。软件是人类有史以来生产的复杂度最高的工业产品。软件涉及人类社会的各行各业、方方面面,软件开发常常涉及其它领域的专门知识,这对软件工程师提出了很高的要求。7)软件的成本相当昂贵。软件开发需要投入大量、高强度的脑力劳动,成本非常高,风险也大。现在软件的开销已大大超过了硬件的开
20、销。8)软件工作牵涉到很多社会因素。许多软件的开发和运行涉及机构、体制和管理方式等问题,还会设计到人们的观念和心理。这些人的因素,常常成为软件开发的困难所在,直接影响到项目的成败。软件的发展l 程序设计阶段(5060年代)l 程序系统阶段(6070年代)l 软件工程阶段(70年代以后)三、何为软件工程?在没有软件工程理论的时期,确定数据结构和算法然后CODING(编程)就是一个程序员的全部。他们掌握了一门语言,懂得了一些生活中最常见的逻辑,他们用程序的方式思考和学习了一些算法,并根据前人的经验,把这些算法跑在了一些数据结构之上,最后,我们就看到了他们写的程序。软件工程的定义:关于“软件工程”的
21、定义很多,例如:l Fritz Bauer在NATO会议上给出的定义:“软件工程是为了经济地获得可靠的和能在实际机器上高效运行的软件而确立和使用的健全的工程原理(方法)。”l IEEE【IEE83】给出的软件工程定义:“软件工程是开发、运行、维护和修复软件的系统方法。”l IEEE【IEE93】给出了一个更加综合的定义:“将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。”l 本教材中的定义:“软件工程是指导计算机软件开发和维护的一门工程学科”l 本人的定义:“软件工程是指导人们有效开发和维护软件的科学体系”软件工程的目的:在给定成本、进度的前提下,开
22、发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并满足用户需要的软件产品。软件工程主要研究内容:软件工程的方法、软件工程的工具及环境、软件工程过程构成了软件工程的三要素。1软件工程方法是完成软件开发各项任务的技术方法,主要回答“如何做”的问题。软件工程方法可分为传统方法-结构化方法和面向对象方法两类。2软件工程的工具是运用方法而提供的自动或半自动的软件工程支撑环境。包括软件需求工具、软件设计工具、软件构造工具、软件测试工具、软件维护工具、软件配置管理工具等。3软件工程的过程是为了获得高质量的软件所需要完成的一系列任务的框架,以规定完成各项
23、任务的工作步骤。软件工程的过程定义了开发步骤、方法使用的顺序、应交付的文档以及为保证质量和协调变化需要的管理以及各个阶段需完成的里程碑,它将方法与工具综合运用软件工程的研究除计算机软件本身外,还涉及众多其他的领域,如管理科学、心理学、经济学、人机工程学等,因此,它是一门综合性学科。粗略来说,软件工程学科可划分为两大方面,一是基础性理论研究,主要目标是用形式化技术解决软件生产中所遇到的问题,如需求规格的描述,规格到系统的转换,系统测试、维护及理解等,主要为解决“做什么”的描述手段问题。另一是工程化技术研究,总结软件开发过程的规律,探讨软件开发过程的工程化因素、方法及工程支持,解决“怎么做”的问题
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 新编 讲义
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-1665561.html