1计算机软件指计算机系统中的程序及其文档软件的分类◦系统软件◦支持软件◦应用软件软件的特征◦逻辑复杂◦开发复杂◦风险大◦维护困难2软件工程◦研究应用工程化方法构建和维护有效的、实用的高质量的软件的学科。软件工程目标◦生产具有正确性、可用性以及价格合宜的产品。软件工程过程◦生产一个最终满足需求且达到工程目标的软件产品所需要的步骤,涉及软件生命周期的一系列相关过程。软件工程的原则◦选取适宜的开发模型◦采用合适的设计方法◦提供高质量的工程支持◦重视软件工程的管理3软件开发生命周期软件过程模型软件工程方法学传统软件开发方法面向对象的开发方法RUP统一软件开发过程敏捷软件开发方法4软件生存周期的概念和内容;4种软件开发模型;软件开发方法和开发工具;传统软件工程和面向对象软件工程;RUP和敏捷过程。本章重点:软件开发模型;软件开发方法和开发工具;本章难点:软件开发模型的使用。56软件生命周期表明从功能确定、设计到开发成功投入使用,并在使用中不断地修改、增补和完善,直到被新的需要所代替而停止使用该软件的全过程。7问题定义软件定义可行性研究需求分析总体设计详细设计软件生命周期软件开发编码单元测试综合测试运行维护持久满足用户需求8某电力公司A,希望软件公司B为他们制造一种”电费结算系统”,该系统用于结算每一户电表1个月期间应该缴纳的电费。B公司得到电力公司A的这个要求之后,开始进入制作“电费结算系统”软件的生命周期。9该阶段的关键任务是要明确:要解决的问题是什么?思考:以下几个选项中,哪个是B公司得出的结论:A.要解决某小区用电总度数问题B.要解决某小区总收电费问题C.要解决电力公司A管辖范围内的所有电表每月每户电费结算问题D.要解决全国区域内电表结算问题10该阶段的关键任务是要明确:做不做用最小的代价在尽可能短的时间内从经济、技术、社会因素等方面论证解决方案的可行性•思考:B公司在可行性分析阶段应该做些什么事情,会得出什么结论?11该阶段的关键任务是要明确:做什么1.通过与客户不断的讨论、协商,对目标系统提出完整、准确、清晰、具体的要求.2.用正式的文档准确地记录对目标系统的需求,形成软件需求规格说明书(SRS)注意点•B公司在这个阶段应该对用户的要求进行详细的调研与分析,需要去了解电费结算中需要涉及到信息、结算电费的标准与公式、这个电费结算系统的产出文档是什么……等内容,确定该系统需要实现的功能,例如:对使用电表的用户进行管理,对1个用户1个月的电费计算,能够生成结算单。最后以文档的形式描述出需求规格。这些是指导B公司进行下一步工作的依据。12该阶段的关键任务是要明确:怎么做1.提出实现目标系统的几种方案,制定最佳方案的详细计划2.系统的体系结构设计3.阶段性成果:概要设计说明书、数据库或者数据结构说明书、组装测试计划等•根据上一步得到的需求规格说明书,将需求功能进行模块化分,B公司的设计人员开始了对“电费结算系统”的设计。例如,系统管理模块,电费计算模块,生成结算单模块等。13该阶段的关键任务是要明确:具体做法设计出程序的详细规格说明,即详细地设计每个模块,确定实现模块功能所需要的算法和数据结构。阶段性成果:详细设计规格说明书和单元测试计划等•对每一个模块,设计它的实现算法和数据结构。例如,电费计算模块,需要根据计算公式进行电费的计算。B公司的设计人员开始了对“电费结算系统”的设计。14该阶段的关键任务是编码和单元测试1.编写出正确的、易理解的、易维护的程序模块;2.仔细测试编写出的每一个模块3.阶段成果:经过单元测试后的代码,单元测试报告等。•B公司程序员们开始对每个模块进行分工,各自负责1个或者多个模块,然后写代码阿写代码,代码写好了,还需要对自己所写模块的代码进行测试,保证自己的正确性。15该阶段的关键任务是通过各种类型的测试(及调试)使软件达到预定的要求1.组装测试:根据设计的软件结构,把经过单元测试检验的模块按某种策略装配起来,在装配过程中对程序进行必要的测试。2.验收测试:按照规格说明书的规定,由用户对目标系统进行验收,看其是否达到需求规格说明书中定义的全部功能和性能等方面的需求。3.验收测试结束后,经过评审的软件产品就可以交付投入使用了。•经过上面的几个步骤,B公司的人员终于拿出了“电费结算系统”,他们需要对该系统进行各种测试,包括集成测试,系统测试,用户环境测试,验收测试等等,确保该系统能够平稳的运行在A公司中。16该阶段的关键任务是通过各种必要的维护活动使系统持久地满足用户的要求。改正性维护:诊断和改正在使用过程中发现的软件错误适应性维护:修改软件易适应环境的变化完善性维护:根据用户的要求改进或扩充软件使它更完善预防性维护:修改软件为将来的维护活动预先做准备•在电力公司A的实际使用当中,“电力结算系统”出现了一些问题,B公司需要派人员进行维护。•此外,A公司对B公司所开发的系统比较满意,愿意继续让B公司对其进行其他方面功能的扩充,例如:分小区进行用电量和电费收益的统计分析等。1718首先,了解每一种过程模型的特点和适用性。其次,根据软件项目的特点选择合适的过程模型。值得注意的是,由于现实中项目的复杂性,通常会在一个项目中选择几种过程模型嵌套使用。19案例:某个老师(T)想要考察一个同学(S)的学习情况和技术水平,于是交给该学生一个任务。T:我有一个朋友想要一个图象浏览软件,能够查看多种格式的图象,包括BMP、TIFF、JPG、PNG,并且能够支持一般的放大、缩小、漫游。你能做这样一个软件吗?S:就是类似ACDSEE这样的软件吗?T:差不多,不过不需要那么强大的功能,我这个朋友计算机是外行,最好能做的比较方便,傻瓜型的,例如象ACDSEE自动翻页这种功能还是要的。S:我以前学过BMP和JPG的图象格式解析,我想没有问题T:好的,给你30天时间,下周你再来一趟,跟我讲一下你的工作进度。这位同学非常明白老师的意图,回去后想了一下,并列出了一个清单20一功能:1。读取、显示、另存四种格式图片(BMP、TIFF、JPG、PNG)2。放大、缩小、漫游3。列出当前目录下所有四种格式图片文件名4.PAGEUP(PAGEDOWN)自动调出当前目录上一张(下一张)图片二其它说明:1。界面尽量简介,容易操作2。不要图片预览和打印三开发工具:VC四开发环境:普通PC机;Windowxp五工作量:1.研究一下四种图片的格式2.设计一个解析器类,解析这四种格式3.设计一个文档类,实现读取、另存和目录浏览功能4.设计一个视图类,实现显示、缩放、漫游功能工作清单21软件制造的八个阶段:可行性分析需求分析概要设计详细设计编码测试交付维护对话过程工作清单一、二工作清单三、四、五写代码前的思考过程写代码提交给老师检查给老师朋友安装、讲解修正问题、改进软件……22PARTONETheProductandtheProcess实际情况1一切顺利,学生S按期交付了软件,经过一两周的试用、修改、完善后,三方都比较满意,该软件在老师的朋友那里成为一个得心应手的工具。瀑布模型23(1)瀑布模型(WaterfallModel)传统瀑布模型24实际的瀑布模型25时间上具有顺序性和依赖性推迟实现的观点质量保证的观点1)审核机制2)文档齐全26瀑布模型适合于用户需求明确、完整、无重大变化的软件项目开发。瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动的模型。“瀑布模型是由文档驱动的”这个事实也是它的一个主要缺点。实际项目很少按照该模型给出的顺序进行;用户常常难以清楚地给出所有需求;用户必须有耐心,等到系统开发完成。瀑布模型的优缺点27实际情况2一周后,学生去见老师,并提交了工作清单,他发现老师的这位朋友(C)和老师在一起。S:这是工作清单,我已经研究清楚了四种文件的格式,可以写代码了。T:很好,不过我这位朋友有一些新想法,你不妨听听。C:你好。我新买了一个扫描仪,你的程序可不可以直接扫描图片进来。S:你可以自己扫描呀,买扫描仪的时候一般都会送正版软件的。C:是的,可是我一直不太会用,你知道我计算机水平不高,学一些新东西很累,也没有时间,如果你能直接链接扫描仪,我只要学会你的软件就行了,我愿意多支付一些费用……,还有,我想建一个图片库,你知道,我工作时需要上百个图片,经常找不到,最好还带模糊查询。PARTONETheProductandtheProcess28PARTONETheProductandtheProcess实际情况2(续)S:………………..!!!!!C:还有一些,现在一时想不起来,我想起来的话会再跟你联系,时间上可以长一些。S:………………..!!!!!!!!!!!!!!!T:要不这样吧,你先做一个样子出来给C看看,一边做,一边改。C:这样最好,看见一个基本样子我就知道我想要什么了事情就这样定下来了,S愤怒的撕掉了自己的工作清单……..,回去后S花1天时间用VB做了个样子,只能读BMP和JPG文件,做了些菜单和工具栏,用ACCESS建了一个图片库。就这个“假”的程序,S和C讨论了一天,S又修改了几次,又讨论了几次,一周后,这个“假”的程序表面看起来和真的一模一样。29实际情况2(续)于是S打算用VC重写这个程序,但是他很快发现继续用VB写更方便,因为至少界面不用重做了,于是……,两个月后,这个事情终于结束了。S顺利的完成了他的毕业设计《JPG压缩优化算法设计》,C一直使用这个软件管理他的图片,并庆幸花了这么少的钱得到了这么有用的东西,而T,则正在考虑如何为他下一批学生分派任务。PARTONETheProductandtheProcess原型模型30(2)原型模型—快速原型模型(RapidPrototypeModel)在用户不能给出完整、准确的需求说明,或者开发者不能确定算法的有效性、操作系统的适应性或人机交互的形式等许多情况下,可以根据用户的一组基本需求,快速建造一个原型(可运行的软件),然后进行评估,进一步精化、调整原型,使其满足用户的要求,也使开发者对将要做的事情有更好的理解。建造/修改原型听取用户意见用户测试运行原型原型实现范型快速原型验证规格说明验证设计验证编码测试综合测试维护变化的需求验证维护过程开发过程32原型模型存在的问题⑴为了使原型尽快的工作,没有考虑软件的总体质量和长期的可维护性。⑵为了演示,可能采用不合适的操作系统、编程语言、效率低的算法,这些不理想的选择成了系统的组成部分。⑶开发过程不便于管理。有效的使用原型模式建造原型仅是为了定义需求,之后就被抛弃(或被部分抛弃),实际的软件在充分考虑了质量和可维护性之后才被开发。33(3)增量模型(IncrementalModel)是一种渐进地开发逐步完善的软件版本的模型。需求分析验证规格说明验证设计验证维护针对每个构件完成详细设计、编码和集成,经测试后交付给用户34分析分析分析分析设计设计设计设计编码编码编码编码测试测试测试测试增量1增量2增量3增量4交付交付交付交付●●●●●•反复的应用瀑布模型的基本成分和原型模型的迭代特征,每一个线型过程产生一个“增量”的发布或提交,该增量均是一个可运行的产品。•早期的版本实现用户的基本需求,并提供给用户评估的平台。增量模型351.在较短时间内向用户提交可完成部分工作的产品,并分批、逐步地向用户提交产品。从第一个构件交付之日起,用户就能做一些有用的工作。2.整个软件产品被分解成许多个增量构件,开发人员可以一个构件一个构件地逐步开发。3.逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。4.采用增量模型比采用瀑布模型和快速原型模型需要更精心的设计,但在设计阶段多付出的劳动将在维护阶段获得回报。增量模型的优点36增量模型的困难1.在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。此外,必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。