软件工程——原理、方法与应用(第3版)史济民顾春华郑红编著高等教育出版社普通高等教育“十二五”国家级规划教材★陈明锐教授主讲★第二章软件生存周期与软件过程传统开发模型瀑布模型快速原型模型演化开发模型增量模型螺旋模型面向对象开发模型喷泉模型构件集成模型形式化开发模型转换模型净室模型2.1软件生存周期引言——生存周期:工业产品、软件、人的生命计划时期•问题定义——系统解决什么问题、目标、范围•可行性分析——了解用户要求及观察环境、收集资料、数据流程、技术、经济、操作可行性、组织、人力、物力、效益开发时期•需求分析——弄清用户的全部需求,用“需求规格说明书”准确地表达出来;建立系统目标逻辑模型——即“做什么”•软件设计——分为总体设计与详细设计,产生软件结构、数据结构、用户界面和算法;建立系统物理模型——即“怎么做”•编码——实现用户界面,将详细设计“翻译”成员程序代码•测试——单元、组装(综合)、确认、系统;白盒、黑盒运行时期•软件维护——正确性、适应性、完善性典型的软件生存周期问题定义可行性研究需求分析软件设计编码测试运行与维护计划时期开发时期运行时期技术复审和管理复审复审每阶段结束前技术复审从技术角度确保质量降低软件成本(尽早发现问题)管理复审成本、进度、经费等技术复审和管理复审审查小组审查过程准备简要介绍情况阅读被审文档开审查会返工复查2.2传统的软件过程1.瀑布模型瀑布模型是将软件生存周期各活动规定为依线性顺序联接的若干阶段的模型。它包括可行性分析、项目开发计划、需求分析、概要设计、详细设计、编码、测试和维护。它规定了由前至后、相互衔接的固定次序,如同瀑布流水,逐级下落。瀑布模型问题定义编码需求分析设计可行性研究运行与维护测试开发时期运行时期计划时期(目标与范围说明书)(可行性论证论告)(测试报告)(程序)(设计文档)(需求说明书)图2.2.0瀑布模型的生存周期(运行日志,维护报告)瀑布模型特点阶段的顺序性和依赖性推迟实现的观点质量保证存在问题不适合需求模糊的系统瀑布模型的开发过程在实际开发过程中,为了保证软件产品的质量,每个阶段完成之后,要对其阶段的工作和成果做出客观评价,如发现问题,就应停止前进,沿着所经历的阶段返回,就构成了图中所示的阶段间的向上流线。瀑布模型各个阶段的任务与文档在各个阶段之间的工作转换是通过各阶段的不同文档资料来完成的,而各个阶段的任务则由一系列工程化的方法和工具来实现。其中系统分析和系统设计是系统生命周期中最重要的两个阶段,它们是系统开发的核心内容,开发的难度较大,需要使用有效的方法和工具,在系统分析阶段的常用技术有结构化系统分析方法(SA)、结构化系统设计方法(SD),在系统分析阶段的相应软件工具有信息关联图(IRD),管理业务流程图(TFD),数据流程图(DFD),数据词典(DD),实体——关系图(E-R)等等。在系统设计阶段的软件工具有系统模块结构图,Jackson设计方法。在程序设计阶段用结构化程序设计方法(SP)。瀑布模型各个阶段的任务与文档瀑布模型法明确规定了每个阶段的任务。上一阶段完成确定的任务后就产生一定格式的文档交给下一阶段。不同阶段的任务一般由不同级别的软件人员来承担。瀑布模型法适合于在软件需求比较明确、开发技术比较成熟、工程管理比较严格的场合下使用。例如工资管理、会计系统软件的需求比较明确,就适合于使用瀑布模型法进行开发。瀑布模型各个阶段的任务与文档软件的简要定义:软件=程序+数据+文档按照软件工程学的要求,在软件生命期的每一阶段,都有明确的任务,并产生相应的文档,作为下阶段工作的基础和依据。采用瀑布模型进行软件开发时,各阶段的主要任务及文档如下:1.可行性研究与计划⑴就是调查了解用户的要求及观察环境,包括企业的管理现状和人、财、物的使用状况,企业内部分工及内部业务往来等。⑵掌握现有系统的数据处理流程和方法,包括各部门人员的分工,当前存在的问题及薄弱环节,业务处理流程收集系统有关的账、证、表、卡、文件、资料等信息。瀑布模型各个阶段的任务与文档1.可行性研究与计划⑶从技术上,经济上,操作可行性上和其它方面(如组织上、人员上)去研究确定并论证新系统的可行性,包括企业的管理工作的规范性、科学性、各种信息的可靠性、管理水平、有关人员对新开发系统的设想和要求,现有人员对计算机知识的掌握程度是否足以支持新系统的运行,经济效益与管理效益的初步分析等。瀑布模型各个阶段的任务与文档1.可行性研究与计划⑷编写系统调查报告和可行性报告,报有关部门审批。可行性报告,其内容主要包括:①单位的基本情况(规模、人员、机构);②系统的初步方案;③开发新系统的必要性;④技术可行性;⑤操作可行性;⑥经济可行性;⑦结论或建议。瀑布模型各个阶段的任务与文档值得注意的是,首先必须有由单位领导签发的系统开发任务书,任务书的内容应简洁明了、全面完整而具体,以作为系统需求分析和开发工作的依据。可行性研究报告批准之后,便可着手进行软件计划工作。对软件作用范围、工作环境和基本功能、特性加以研究,确定要做什么,不要做什么,做到什么程序。同时,估算出所需的资金、工作量、费用和进度。编制系统开发初步进度计划表。瀑布模型各个阶段的任务与文档2.系统(需求)分析研究现有系统的数据处理流程,去粗取精,去伪存真,把握现有系统数据处理流程中的本质要素,改善其中不合理部分,增加用户需要的新功能,并以计算机为基础,确定出新系统的功能界面,建立新系统的逻辑模型(即数据流图、数据词典、加工说明、控制说明等),编制出能反映新系统功能、特点,运行环境和测试确认准则的软件需求说明书(或称系统分析说明书),报有关部门审批。瀑布模型各个阶段的任务与文档3.系统(软件)设计——(1)系统设计包括概要设计和详细设计两部分。⑴概要设计又叫总体设计,它在系统分析说明书的基础上,建立起包括模块结构和数据结构在内的软件系统结构,并完成各模块的功能和相应之间的接口关系。它以交付包括总体结构设计和数据库设计的概要设计说明书为完成标志。瀑布模型各个阶段的任务与文档3.系统(软件)设计——(2)⑵详细设计是对概要设计所划分模块的进一步细化,它详细描述每一模块的功能和实现该功能的程序,完成所用到的程序实现方法和内部数据结构等。并确定模块间的详细接口。设计完成后,应提交详细设计说明书。瀑布模型各个阶段的任务与文档模块——表示能够用计算机程序代码实现的,相对独立的单一数据处理功能,所以模块有时也叫功能模块。瀑布模型各个阶段的任务与文档系统调查、系统分析与系统设计的主要区别在于:系统调查得出的是旧系统的逻辑模型;系统分析将旧系统的逻辑模型转换成新系统的目标逻辑模型;系统设计得到的则是新系统的物理模型(即解决如何用计算机实现逻辑模型的全部功能)。瀑布模型各个阶段的任务与文档旧系统的逻辑模型是手工方式的真实写照。新系统的目标逻辑模型主要用来规定未来的新系统应具备哪些功能,新系统的信息流程等,反映了新系统需要做什么,但不反映如何做。物理模型则着重于描述在技术上如何实现这些功能,采用哪些技术方法,解决如何做的问题。例如,在调查阶段,我们遇到报表收集和输入问题,这只需要了解报表的种类、作用、各种报表所包含的数据项,没有必要考虑、报表的输入格式、输入方式、输入内容、输入的正确性控制等问题。这些问题将在系统分析、系统设计阶段来完成。瀑布模型各个阶段的任务与文档4.程序设计(编码)程序设计是按照详细设计说明书的要求,用程序设计语言或数据库语言为每个模块编制计算机可运行的源程序,并且对单个模块进行测试,验证模块的功能、模块接口与设计说明书的一致性。最后提交源程序清单及程序设计说明书。瀑布模型各个阶段的任务与文档5.系统测试通过测试,发现隐藏在程序内部的各种错误。测试包括单元测试,组装(综合)测试、确认测试和系统测试。单元测试是验证单个模块的正确性,组装测试是将经过模块测试的各个模块进行装配并测试,从而形成一个完整的系统。确认测试是验证所开发的系统是否符合系统分析中确定的全部功能和性能要求。系统测试完毕,提交的文档应包括测试报告,用户操作手册等,经有关部门评审确认后,便结束了软件开发工作,软件可作为一个产品投入运行。瀑布模型各个阶段的任务与文档6.运行和维护——(1)当软件产品制成并交付使用后,便开始了软件生命周期的最后阶段——运行和维护阶段。软件产品投入运行之后。仍有必要对软件进行维护,维护工作又分为以下两个部分。⑴程序维护◆正确性维护:改正在开发阶段产生,在测试阶段又没有发现的错误。◆适应性维护:为适应软件的外界环境的变化引起的软件修改。◆完善性维护:为扩充软件系统功能或改善性能而进行的修改。瀑布模型各个阶段的任务与文档6.运行和维护——(2)⑵使用维护◆环境维护:为保证软件产品正常运行而进行的维护(如主机、打印机等)。◆意外事故维护:解决因发生意外事故而使数据混乱或丢失的问题而进行的维护。◆计算机病毒治理和维护:预防、检测,清除计算机病毒。运行和维护也应像其他开发阶段一样,提供运行日志、软件问题报告、软件修改报告等维护文档。快速原型模型的基本思想在获得用户基本需求说明的基础上,投入少量人力和物力,快速建立一个原始模型,使用户及时运行和看到模型的概貌和使用效果,并对需求说明进行补充和精化,提出改进意见,开发人员进一步修改完善,如此循环迭代,直到得到一个用户满意的模型为止。从原型法的基本思想中可以看到,用户能及早看到系统模型,在循环迭代修改和完善过程中,使用户的需求日益明确,从而消除了用户需求的不确定性,同时从原型到模型的生成,周期短、见效快,对环境变化的适应能力较强。快速原型模型包含的内容⑴功能选择要恰当选择原型实现的功能。根据用户基本需求,对系统给出初步定义。用户的基本需求包括各种功能的要求、数据结构、菜单和屏幕、报表内容和格式等要求。这些要求虽是概略的,但是最基本的,易于描述和定义。原型和最终的软件系统不同,两者在功能范围上的区别主要有以下两个方面:快速原型模型包含的内容第一最终系统是软件需求全部功能的实现,而原型只实现所选择的部分功能。第二最终系统对每个软件需求都要求详细实现,而原型仅仅是为了试验和演示用的,部分功能需求可以忽略,或者模拟实现。快速原型模型包含的内容⑵构造原型根据用户初步需求,开发出一个可以应用的系统,它应满足上述的由用户提出的基本要求。在构造一个原型时,应当强调着眼于预期的评估,而不是为了正规的长期使用。快速原型模型包含的内容⑶运行和评价原型在试用中能亲自参加和面对一个实在的模型,能较为直观和明确地进一步提出需求,提出修改意见。通过运行原型对软件需求规格说明进行评价和确认。评价要有用户参与,注意来自用户的反馈信息。快速原型模型包含的内容⑷修改和完善原型根据修改意见进行修改,以得到新的系统原型,然后再进行试用和评价,这样经过有限次的循环反复,逐步提高和完善,直到得到一个用户满意的系统模型为止。根据原型实现的特点和环境,可以把原型作为试验的工具,用完就丢弃之;也可以使原型全部或部分地成为最终系统的组成部分。原型法的开发过程如图2-3所示。其中,原型开发与原型运行评价两者需反复进行多次,才能最后得到经过确认的需求规格说明,并以此作为进一步的软件设计和实现的基础。快速原型模型需求分析原型开发最终系统设计原型评价最终系统实现用户反馈图2.3快速原型模型原型模型(快速原型模型)原型范型用户测试运行原型建造/修改原型听取用户意见采用原型模型的软件生存周期分析定义系统需求生成原型系统设计程序设计编码测试运行和维护原型化含原型化的软件生存期快速原型模型原型法具有明显的优点,它的开发周期短,见效快,可以边开发边使用,较适合于开发环境和管理体制多变、系统结构不稳定的情况。但是开发系统采用原型法,需要有交互式开发环境和第四代语言及自动编程系统的支持,其初始原型设计较为困难,开发过程尚缺乏有效的管理方法和控制手段。特点快速开发工具循环低成本种类渐进型抛弃型非常好的原型开发工具:Pencil软件构造原型界面构造原型界面2.3软件演化模型1.阶段式开发:增量模型系统设计时分片交付,可使用户