软件工程与软件测试.ppt
《软件工程与软件测试.ppt》由会员分享,可在线阅读,更多相关《软件工程与软件测试.ppt(150页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、it软件工程与软件测试软件工程与软件测试林琳 软件技术教研室学习情境学习情境4-主要内容主要内容v软件工程发展历程v常见过程模型v面向对象技术vUML概述vRationalRose的安装与使用vRose与UMLv图书管理系统的UML建模软件工程发展历程软件工程发展历程软件工程的发展历史软件工程的发展历史v从20世纪60年代中期到70年代中期,软件业进入了一个发展时期。此时出现了所谓的软件公司。v1968年,出现“软件工程(SoftwareEngineering)”这一术语。v30余年来,尽管软件的一些毛病仍然无法根治,但软件的发展速度却超过了任何传统工业,并未出现真正的软件危机,这的确是前人的
2、先见之明。如今软件工程成了一门学科。软件的发展历程软件的发展历程软件工程软件工程“软件作坊软件作坊”个体化的软件环境个体化的软件环境上世纪上世纪60年代中期年代中期上世纪上世纪70年代年代上世纪上世纪80年代年代面向对象软件开发面向对象软件开发软件规模小,编写者和软件规模小,编写者和使用者往往是同一个人,使用者往往是同一个人,除程序清单外,无其它除程序清单外,无其它文档资料。文档资料。面向对象技术的应用改面向对象技术的应用改变了软件界的开发方式。变了软件界的开发方式。计算机应用领域越来越广,系统规模越计算机应用领域越来越广,系统规模越来越大,逻辑越来越复杂,而且功能上来越大,逻辑越来越复杂,而
3、且功能上需要不断更改和扩充。软件开发需要多需要不断更改和扩充。软件开发需要多个开发者一起开发,开发人员按各自的个开发者一起开发,开发人员按各自的爱好和习惯进行工作,没有统一的标准爱好和习惯进行工作,没有统一的标准可以遵循,以手工艺的方式形成可以遵循,以手工艺的方式形成“软件软件作坊作坊”来进行。来进行。1968年,北大西洋公约组织的计算机科学家,年,北大西洋公约组织的计算机科学家,在联邦德国召开国际会议,讨论软件危机问在联邦德国召开国际会议,讨论软件危机问题。正式提出题。正式提出“软件工程软件工程”这个名词这个名词新兴新兴工程学诞生了。工程学诞生了。用用“工程化工程化”的思想作指导,可以大大减
4、少的思想作指导,可以大大减少软件开发成本并提高软件开发质量,软件开发成本并提高软件开发质量,“工程工程化化”为人们开辟了新的道路,为人们开辟了新的道路,“软件工程学软件工程学”蓬勃发展起来。蓬勃发展起来。软件危机软件危机软件工程软件工程“软件作坊软件作坊”个体化的软件环境个体化的软件环境上世纪上世纪60年代中期年代中期上世纪上世纪70年代年代上世纪上世纪80年代年代面向对象软件开发面向对象软件开发随着硬件成本的降低,电脑开始变得普及,人们对软件的需求越来越高,而这时候的软件行业还处于“手工作坊”阶段,软件的产量和质量远远不能满足人们的需要,于是出现了一系列严重问题,被称为“软件危机”拉布雷阿的
5、焦油坑焦油坑(Mural of La Brea Tar Pits)过去几十年的大型系统开发就犹如这样一个焦油坑,很多大型和强壮的动物在其中剧烈地挣扎。软件工程的产生软件工程的产生v为了解决“软件危机”,于是出现了“软件工程”学科,有众多专家学者致力于软件工程方法学的研究,并将研究结果应用于实践中进行检验,解决了软件开发中存在的各种问题,使得软件制造的质量大大提高。软件工程的生命周期软件工程的生命周期v经典的软件工程思想将软件开发分成以下5个阶段:需求捕获(RequirementsCapture)阶段系统分析与设计(SystemAnalysisandDesign)阶段。系统实现(Implemen
6、tation)阶段。测试(Testing)阶段维护(Maintenance)阶段从项目的角度还加入了问题定义阶段可行性分析阶段 软件工程:技术层次软件工程:技术层次质量目标质量目标质量目标质量目标 a“quality”focusa“quality”focus过程模型过程模型过程模型过程模型 process modelprocess model方法方法方法方法 methodsmethods工具工具工具工具 toolstools常见过程模型常见过程模型常见过程模型常见过程模型v瀑布模型v快速原型模型v增量模型v螺旋模型v喷泉模型过程模型的选择过程模型的选择v首先,了解每一种过程模型的特点和适用性。
7、v其次,根据软件项目的特点选择合适的过程模型。v值得注意的是,由于现实中项目的复杂性,通常会在一个项目中选择几种过程模型嵌套使用。瀑布模型瀑布模型 优点:1)可强迫开发人员采用规范的开发方法;2)严格规定每个阶段必须提交的文档;3)要求每个阶段的提交工作产品都必须通过QA的验证。缺点:缺乏灵活性,变动成本高。适用于需求非常明确的情况。快速原型的本质是“快速”。开发人员应该尽可能快地建造出原型系统,以加速软件开发过程,节约软件开发成本。原型的用途是获知用户的真正需求。原型又可分为抛弃型原型和演进型原型。适用:适用:主要适用于项目需求不太明确,或需主要适用于项目需求不太明确,或需要减少项目的不确定
8、性的情况。要减少项目的不确定性的情况。快速原型模型快速原型模型增量模型特点:每次提交的都是一个满足用户需求子集的可运行的产品优点:用户每次都可以得到一个可完成部分功能的可用的产品,并有足够的时间去学习和适应新产品;困难之处:对软件体系结构的设计要求较高,体系结构必须是开放的。螺旋模型螺旋模型图2.6 简化的螺旋模型基本思想:使用原型及其它方法来尽量降低风险。可看作是在每个阶段之前都增加了风险分析过程的快速原型模型。喷泉模型喷泉模型 迭代迭代是软件开发过程中普遍存在的一种内在属性。经验表明,软件过程各个阶段之间的迭代或一个阶段内各个工作步骤之间的迭代,在面向对象范型中比在结构化范型中更常见。“喷
9、泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。图2.8 喷泉模型案例分析案例分析1v辅导员张老师为了方便管理学生,他委托学生小明帮助他开发一个学生管理系统,用来管理他所带的班级的学生信息,该系统仅供张老师一个人使用,系统功能不是很复杂。张老师对自己需要的系统功能有了明确的认识,并且他本身也对软件开发有一定程度的了解,与小明的沟通过程非常的顺利。在这种情况下,如果你是小明,你会选用哪种过程模型?案例分析案例分析2v张扬是某大学软件技术专业的学生,在寒假中,他为他的邻居开发了一个小型的超市管理系统。他的邻居从来不懂软件开发,也不知道超市管理系统应该是什么样的。那么你建议张扬采用哪种过程模型
10、呢?面向对象技术面向对象技术面向对象技术(面向对象方法面向对象技术(面向对象方法OOSD)v软件工程方法学传统方法学SA+SD+SP面向对象方法学OOA+OOD+OOP开发软件的开发软件的方法不同方法不同类的作用:类的作用:1.分类:用于区分不同事物。2.是创建对象的模板:产生对象。关联关联单向关联在现实世界中,对象之间通常会发生在现实世界中,对象之间通常会发生某种联系,程序世界中用某种联系,程序世界中用“关联关联”来来表示对象之间的联系。表示对象之间的联系。关联关联对象之间还可以以多种方式发生关联对象之间还可以以多种方式发生关联关联关联类也可以发生关联:一个类可以和多个类关联类也可以发生关联
11、:一个类可以和多个类关联关联的多重性关联的多重性v在关联中一个类的对象可以对应另一个类的多少个对象。v一个教师多个学生v一门课程多个教师v一辆轿车4个车轮vv书P23图2-2表示出了关联的表示方法关联的多重性关联的多重性国家首都1个工作站窗口0个或1个公司雇员0个或多个1个或多个用户目录1+汽车车门12,41到2个或4个聚集聚集计算机系统计算机系统计算机由许多不同计算机由许多不同类型的构件组成,类型的构件组成,它是一个聚集体。它是一个聚集体。聚集是对象之间的另外一种关联。聚集是对象之间的另外一种关联。面向对象其他概念面向对象其他概念组成(强聚集)组成(强聚集)聚集对象和它的组成对象聚集对象和它
12、的组成对象之间有强关联时,我们把之间有强关联时,我们把这种聚集叫做组成。这种聚集叫做组成。比如说,树没有树叶的话,就不能成为一棵树,因此树比如说,树没有树叶的话,就不能成为一棵树,因此树叶和树之间就是组成关系。叶和树之间就是组成关系。面向对象其他概念面向对象其他概念v抽象v封装v消息传递v继承v多态性怎么得到类和对象?怎么得到类和对象?抽象抽象v把事物共同点抽取出来,以统一的方式进行概要描述的过程;v从许多事物中舍弃个别的、非本质的特征,抽取共同的、本质性的特征;v过滤掉对象的一部分特征和操作直到只剩下你所需要的属性和操作。抽象的例子抽象的例子洗衣机类洗衣机类vWashingMachine类,
13、它是创建新的洗衣机实例的模板。属性 brandNamemodelNameserialNamecapacity操作acceptClothes()acceptDetergent()turnOn()turnOff()抽象的例子抽象的例子洗衣机类洗衣机类v模型中的属性和操作越多,模型就越接近实际。属性 brandNamemodelNameserialNamecapacitytrapmotormotorSpeed操作acceptClothes()acceptDetergent()turnOn()turnOff()acceptBleach()controlWaterLevel()是不是现实世界中类的所有属
14、性和方是不是现实世界中类的所有属性和方法都需要在系统中进行抽象呢?法都需要在系统中进行抽象呢?v当然不是啦!作为一个分析人员,要根据用户实际的业务情况进行选择。v例如在课堂考勤系统中,教师类只需要有姓名、职称、性别这些属性,因为这些是用户需要的。v而在教职工人事管理系统中,教师类就需要姓名、出生年月、入职时间、所属单位、职称、性别、婚姻状况等属性。1.从许多事物中舍弃个别的、非本质的特征,抽取共同的、本质性的特征;2.过滤掉对象的一部分特征和操作直到只剩下你所需要的属性和操作。让对象细节受到保护让对象细节受到保护封装封装v引入问题:现在让我们来编写一个java小程序,实现在命令行模式下输出以下
15、形式的著名诗词春晓,你会怎么做?*春晓*春眠不觉晓,*处处闻啼鸟。*夜来风雨声,*花落知多少。你可能会这么写你可能会这么写1.publicclassChunXiao12.publicstaticvoidmain(Stringargs)3.(*春晓);4.(*春眠不觉晓,);5.(*处处闻啼鸟。);6.(*夜来风雨声,);7.(*花落知多少。);8.9.很简单,但是有时候并不是越简单越好!现在,如果想把*改变为*,该怎么办?改5次吗?【代码】Chunxiao1.java你可能还会这么写你可能还会这么写vpublicclassChunXiao2vpublicStringbuildStar()vre
16、turn*;vvpublicstaticvoidmain(Stringargs)vChunXiao2c=newChunXiao2();vSystem.out.println(c.buildStar()+春晓);vSystem.out.println(c.buildStar()+春眠不觉晓,);vSystem.out.println(c.buildStar()+处处闻啼鸟。);vSystem.out.println(c.buildStar()+夜来风雨声,);vSystem.out.println(c.buildStar()+花落知多少。);vv利用方法buildStar()来产生,这样每次只用
17、修改一个地方了我们把产生的功能封装封装了起来,对外界使用者来讲,不需要知道方法内部的细节,只需要知道调用这个方法可以产生就行了。【代码】Chunxiao2.java让对象细节受到保护让对象细节受到保护封装封装v当一个对象执行自己的操作时。它对外界隐藏了操作的细节。封封装装可可以以提提高高重重用用性性,并并且且让让程程序序易易于于维维护护封装的程度问题封装的程度问题v还是春晓。刚才我们将产生*的方法写在了类ChunXiao2中,根据前面所讲,类中的方法代表的是类的操作,而产生*和春晓没有直接关系,这样的封装看起来好像不合理,怎么改进一下呢?StarFactoryStarFactoryString
18、 build()String build()ChunXiao3【代码】StarFactory.java Chunxiaojava封装的不同,重用也不同了封装的不同,重用也不同了v现在我们不仅可以在春晓里面用*了,还可以在静夜思里面用*了StarFactoryStarFactoryString build()String build()ChunXiao3JingYeSi【代码】JingYeSi.java面向对象重要概念面向对象重要概念消息传递消息传递给对象发消息,让它做的更多给对象发消息,让它做的更多消息传消息传递递v还是春晓。有些同学不喜欢刚才的排版,全部是*,没有创意。既然StarFacto
19、ry类是制造*的工厂,那么它应该有更多的产品啊,不能一直是*吧。怎么办?改良版StarFactory2StarFactory2StarFactory2String build(int i)String build(int i)ChunXiao4【代码】StarFactory2.java Chunxiao4.java面向对象重要概念面向对象重要概念继承继承在客观世界中,类是有在客观世界中,类是有着层次关系的,那么程着层次关系的,那么程序世界中,也要能够表序世界中,也要能够表现这种层次。于是,有现这种层次。于是,有了继承。了继承。用继承改变刚才的春晓用继承改变刚才的春晓v自从有了StarFacto
20、ry,春晓的世界变得丰富起来。既然*可以创造,那么也应该可以吧。还有、呢?全部都可以。那么让我们创建GraphicFactory类吧。它表示创造上述图形的总厂,而它的子类用来创造每一种图形。StarFactoryStarFactoryString build()String build()GraphicFactoryGraphicFactoryString build()String build()PentacleFactoryPentacleFactoryString build()String build()SquareFactorySquareFactoryString build()S
21、tring build()DiamondFactoryDiamondFactoryString build()String build()所有的子类都有build()方法,代表创造不同图形的操作创造*创造创造创造【代码】GraphicFactory.java StarFactory.java DiamondFactory.java PentacleFactory.java Chunxiao5.java面向对象重要概念面向对象重要概念多态性多态性v不同的类具有相同名称的操作。门窗盒子打开打开多态性的表现多态性的表现StarFactoryStarFactoryString build()Strin
22、g build()GraphicFactoryGraphicFactoryString build()String build()PentacleFactoryPentacleFactoryString build()String build()SquareFactorySquareFactoryString build()String build()DiamondFactoryDiamondFactoryString build()String build()回顾一下:回顾一下:v类和对象v关联、聚合、组成v抽象v封装v消息传递v继承v多态用到的代码目录:按出场顺序,可以到用到的代码目录:按
23、出场顺序,可以到1.ChunXiao1.java2.ChunXiao2.java3.ChunXiaojava4.StarFactory.java5.JingYeSi.java6.ChunXiao4.java7.StarFactory2.java8.GraphicFactory.java9.StarFactory.java10.DiamondFactory.java11.PentacleFactory.java12.Chunxiao5.java了解这些概念的意义了解这些概念的意义v运用面向对象的概念可以帮助我们:理解客户的领域知识用客户能够理解的术语来说明你对问题的理解准确的建立模型顺利的进行O
24、OA,OOD,OOP任务任务1v利用今天所学习的内容,构造自己的Factory类,利用封装抽象继承的知识实现一个命令行程序(内容和表现形式不限)UML概述概述什么是什么是UML?v统一建模语言(UnifiedModelingLanguage)v一种定义良好、易于表达、功能强大且普遍适用的可可视视化化建模建模语语言言。做做软软件件为为什么要建模?什么要建模?v我们回顾刚才讲的盖房子的过程,就是施工队把王大爷的需求变成了房子。而软件开发也很类似,做软件其实就是把客户的需求变成实际软件产品的过程。出租车公司的需求出租车计费系统变成从客从客户户需求到需求到产产品的品的过过程往往会出程往往会出现这样现这
25、样的的问题问题:v为了保证做出来的软件是满足客户要求的,我们至少要保证以下两点:v1.客户的需求被正确的获取。v2.客户的需求被正确的传递。出出现现新新问题问题:如何保:如何保证证以上两点?以上两点?1.怎怎样样保保证证客客户户的需求被正确的的需求被正确的获获取?取?v解决办法:v使用科学的方法进行需求分析。2.怎么怎么样样保保证证客客户户的需求会正确的被的需求会正确的被传递传递下去呢?下去呢?游戏规则:两个小组A和B(每个组5人),分别得到客户需求,A组以文档形式传递,B组以口头形式传递。新新问题问题:如何:如何记录记录?v我们在整个软件开发的过程中,使用文档化,保证客户需求的正确传递。v换
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 软件 测试
限制150内