软件开发过程.ppt
软件开发过程,Overview,课程介绍需求分析分析设计实施部署,课程介绍,关于本次课程,课程目标预备知识目标听众日程表词汇表,课程目标,了解软件开发活动的流程了解软件开发活动的规范要求,目标听众,项目组成员,预备知识,了解软件工程知识,日程表,总课时:130分钟授课大纲:,CMM:能力成熟度模型(Capability Maturity Model)SQA:软件质量保证(Software Quality Assurance),词汇表,什么是软件开发过程,用以开发和维护软件及其相关产品(如,项目计划、设计文档、代码、测试用例、用户手册等等)的一组活动、方法、实践和变换,常用的软件开发过程,瀑布式开发迭代式开发增量式开发演化式开发原型式开发,瀑布式开发模型,生存周期表现为线形的一组开发活动。开发阶段有明确的输入和输出,一个阶段的输出是下一个阶段的输入。从一个阶段进入到下一个阶段,需要满足特定的条件。,迭代式开发模型,迭代开发模型将开发过程分成多个为期数周的迭代,而每个迭代包括了迭代计划、需求分析、系统设计、编程、测试及评估,而每个迭代完成时都会产生一个可运行的版本,选择生命周期模型,没有适合所有人的“帽子”,生命周期选择应考虑:需求架构系统演进风险管理费用中途变更用户对系统进展的可视情况管理者对系统进展的可视情况管理与开发经验,选择生命周期模型,软件开发角色划分,项目经理设计人员编码人员测试人员配置人员SQA.,需求分析,需求的重要性,开发软件系统最为困难的部分就是准确说明开发什么。最为困难的概念性工作就是编写出详细技术需求,这包括所有面向用户、面向机器和其它软件系统的接口。同时这也是一旦做错,将最终会给系统带来极大损害的部分,并且以后再对它进行修改也极为困难。,需求问题 软件开发中的问题,客户表面上同意需求,但完成的产品并不能满足需求需求总是变化,无法稳定需求太多,无法在给定的时间完成设计人员抱怨测试人员没有拿最新的需求版本来设计测试项目经理发觉开发人员独自增加了新的功能,新的功能用了很长的时间进行开发,但客户认为价值不大客户总是不想对项目进行验收,他们担心系统无法最终满足需要,需求活动的目的,定义系统的边界和功能、非功能需求,以便涉众(客户、最终用户)和项目组对所开发的内容达成一致。使项目组能够更好的理解需求,并达成一致。建立软件需求基线供软件工程和管理使用。软件计划、产品和活动同软件需求保持一致。为其它软件工程活动提供基础(如管理活动、测试活动)。,需求分析流程,制定需求管理计划提取业务需求需求开发需求批准基线化需求需求变更控制需求状态评审,制定需求管理计划,定义角色和职责 建立跟踪机制 选择需求属性 定义需求管理机制 编写需求管理计划,制定需求管理计划,编写用于需求管理活动的计划。,项目经理,提取业务需求,收集用户初始需求(业务需求)标识需求项,提取业务需求,到用户方进行需求调查,以获得项目的初始需求。,项目组成员,需求开发对客户的需要进行分析,并用清晰合理的方式进行描述,使客户方和开发方对开发的内容达成一致。,需求开发,需求开发,项目成员,确认需求正式作为项目管理和其它工程活动的基础,并作为客户之间承诺对系统进行验收的基准。,需求批准,需求批准,客户、高级管理者,需求批准是一种正式的管理过程,代表相关各方达成一致的承诺经过需求评审的需求工件作为批准的内容,此活动的目的是在经过客户和项目组的授权下,将批准的正式的软件需求工件放入配置管理系统。,基线化需求,基线化需求,配置经理,基线化正式的需求工件正式的软件需求工件、需求跟踪工件进入配置库,作为其它相关活动(管理、设计、测试等)的基础。,需求变更控制,需求变更控制,配置经理,需求一旦建立基线后,需要通过控制流程来改变需求的变更需要经过双方的批准变更后的需求需要经过客户、用户和相关组的评审进入配置管理库,作为工作基线,需求评审,需求状态评审,举行评审会议 举行需求规格说明书评审会议,,需求评审人员,高级管理者和项目经理通过需求状态评审监控需求管理的状态。项目组通过需求状态评审对需求状况达成一致,分析设计,分析设计,目的软件分析设计活动是建立系统的构架,将系统的软件需求分配给软件结构,使设计适应具体的实施环境。,分析设计活动流程,软件详细设计,软件构架设计,软件构架设计评审,软件详细设计评审,基线化构架,基线化详细设计,软件需求工件,软件开发计划,软件构架设计工件,软件详细设计工件,分析设计,角色构架设计师 设计员 配置管理员 构架评审人员 详细设计评审人员,分析设计,进入准则需求已经基线化 软件开发计划已指派了分析设计活动,分析设计,输入软件需求工件软件开发计划,分析设计活动介绍,构架设计 建立软件系统的构架,将系统的软件需求分配给软件结构,分析设计活动介绍,构架设计评审 检查软件系统构架设计是否合理,包括如下几点:发现和修复缺陷 一致性确认,分析设计活动介绍,基线化构架设计 将评审通过的软件构架设计工件置于配置管理,作为详细设计的基础,分析设计活动介绍,软件详细设计 根据需求工件、构架设计工件,进一步精确描述软件系统,并使之适于具体的实施环境,分析设计活动介绍,详细设计评审 检查软件系统详细设计是否合理,包括如下几点:发现和修复缺陷 一致性确认,分析设计活动介绍,基线化详细设计 将评审通过的软件详细设计工件置于配置管理,作为实施活动的基础,分析设计活动介绍,输出软件构架设计工件:概要设计说明书、数据库设计说明书 等软件详细设计工件:详细设计说明书评审记录,实 施,目的:单元编码、单元测试、缺陷修复以及系统集成等工作 主要任务:制定集成计划单元编码、测试/评审集成系统基线化,目的,编码的任务,编码阶段的任务就是将详细设计翻译成计算机最终可运行的软件单元、集成工作版本。,软件构架详细设计,工作版本,软件开发计划,编码,编码的任务,编码工作对一个程序员来说是司空见惯的事,然而,如何编写出高质量的程序,还是有很多值得讨论的问题。如何选择程序设计语言?如何评价程序的质量?程序设计的风格等等。,词汇表,代码评审(Code Review)代码评审是检查源代码与编码标准的符合性以及程序逻辑的正确性的活动,目的是发现缺陷或者是提出改进措施。系统集成(System Integration)系统集成指的是将单独的软件单元合并成一个整体的软件开发活动。集成活动可以分级、分阶段进行。工作版本(Build)工作版本既可以是软件系统的可操作版本,也可以是具有最终产品部分功能的软件系统组成部分。程序单元(Unit)程序单元是项目定义的软件最小可测试单元。,软件实施活动流程图,角色,编码员 编码员负责编码、修复代码缺陷;集成员 负责制定集成计划、集成程序单元,创建工作版本基线;测试员 负责执行测试活动;集成计划评审人员 参与集成计划的评审,一般由设计员、测试、配置经理、编码员、构架设计师等组成;代码评审员 评审源代码,一般由编码员(非代码作者)组成;,进入准则,详细设计工件已经被基线化构架工件已经被基线化,输入,软件构架设计工件 构架设计文档主要描述 备选设计方案、软件子系统划分、子系统间接口和错误处理机制等;软件详细设计工件 详细设计文档主要描述将构架设计转化为最小实施单元,产生可以编码实现的设计;,活动,制定系统集成计划 评审集成计划 单元编码及缺陷修复代码评审执行单元测试集成程序单元执行集成测试执行系统测试创建最终工作版本基线,制定系统集成计划,角色 集成员 活动描述 确定系统要实施的部分,以及实施它们的先后顺序。确定集成的工作版本:根据开发计划的工作内容,将它们划分成不同的工作版本。确定集成的策略:定义系统集成的方式。可以根据系统自身的特点,选择合适的集成策略,以及确定实施测试所需的驱动和桩模块。,评审集成计划,角色 集成计划评审人员 活动描述 发现缺陷,跟踪并修复缺陷。发现和修复缺陷:根据评审规范,评审集成计划工件。,单元编码及缺陷修复,角色 编码员 活动描述 生产出同设计一致的源代码。编写代码:按照分配的任务项,编写新单元的代码,保证源代码只是设计的代码实现,并且源代码可以成功编译。缺陷修复:按照分配的任务项,修复已有代码中经过测试或代码评审发现的缺陷,并保证源代码可以成功编译。,代码评审,角色 代码评审员 活动描述 通过阅读他人的代码,检查代码中的缺陷。检查编写缺陷:依照编码标准检查代码是否符合标准。检查逻辑缺陷:根据设计工件检查代码是否正确反映且仅反映设计的内容。,执行单元测试,角色 测试员 活动描述 测试员执行单元测试的目的是验证单元的内部结构以及单元实现的功能。执行单元测试:按照测试过程手工执行单元测试或运行测试脚本自动执行单元测试。记录单元测试结果:将单元测试结果作详细记录,并将测试结果提交给相关组。回归测试:对修改后的单元执行回归测试,集成程序单元,角色 集成员 活动描述 提供一个可以测试的集成工作版本。生成集成工作版本:按照集成计划集成并编译已经通过单元测试的程序单元。判断集成结束:根据集成计划判断集成是否结束。,创建最终工作版本基线,角色 集成员 活动描述 建立一个完整的基线化的软件工作版本。配置最终工作版本基线:创建最终工作版本基线。,输出,软件程序单元 包括了所有编码员完成的程序单元源代码;工作版本 按照集成计划创建的各个集成工作版本;集成计划软件工作版本的定义、工作版本的内容、集成的策略以及实施的先后顺序等;评审记录 记录评审内容、评审结果、评审意见、参与人员等;,退出准则,最终工作版本被基线化,编码标准,编制易于修改和维护的代码;编制易于测试的代码;必须将编程与编文档的工作统一起来;编程中采用统一的标准和约定,降低程序复杂性;限定每一层的副作用,减少耦合度;尽可能地重用。,编程风格概述,编程风格是在不影响性能的前提下,有效地编排和组织程序,以提高可读性和可维护性。从软件工程的角度来说,程序的质量主要取决于设计的质量,而编程风格在很大的程度上影响着程序的可读性、可测试性和可维护性;软件开发的很大部分的成本消耗在编码、测试和维护阶段,因此,努力追求软件的可读性、可测试性和可维护性极其重要。,编程风格(一),节俭化(Economy)提供尽可能简洁的代码。模块化(Modularity)把代码划分为内聚度高、富有意义的功能块。通常是把常且复杂的程序段或子程序分解为小且定义良好的程序段。简单化(Simplicity)去掉过分复杂和不必要的矫揉造作。,编程风格(二),结构化(Structure)把程序的各个构件组织成一个有效的系统。文档化(Documentation)程序能够自说明。格式化(Layout)尽量使程序布局合理、清晰、明了。,测 试,测试,软件测试是为了发现错误而执行程序的过程软件测试是根据程序开发阶段的规格说明及程序内部结构而精心设计的一批测试用例(输入数据及其预期结果的集合),并利用这些测试用例去运行程序,以发现错误的过程,测试流程,制订测试计划设计测试执行单元测试执行集成测试执行系统测试评估测试,角色和职责,测试设计员制定和维护测试计划。设计测试用例及测试过程。评估测试,生成测试分析报告。测试员执行集成测试和系统测试。记录测试结果。设计员设计测试需要的驱动程序和稳定桩。编码员编写测试驱动程序和稳定桩。执行单元测试。,测试产生工件,软件部署,软件部署,目的确保最终用户可以正常使用软件产品,软件部署,参与角色部署经理 文档开发人员 集成员 配置经理 软件质量保证,软件部署,进入准则软件生产部门已对软件进行打包 产品支持部门已经完成对软件的产品化包装工作 产品测试部门已经完成对软件的接受测试 配置管理部门已经建立相应的软件产品基线,软件部署流程,计划部署,产品发布材料,验收测试,创建部署单元,实地验收测试,产品打包,提供下载站点,发布测试版,客户安装,可下载产品,最终产品,通过,市售,软件部署活动介绍,计划部署确定发布的软件产品确定什么时候、如何向用户发布确定准备开发的用户支持材料,软件部署活动介绍,开发产品支持材料用户培训材料最终用户支持材料,软件部署活动介绍,开发场所验收测试部署经理审计待验收测试的软件产品和测试平台按照验收测试计划执行测试,软件部署活动介绍,创建部署单元工作版本最终用户支持材料和发布说明安装工件审批部署单元,软件部署活动介绍,实地验收测试部署经理审计待验收测试的软件产品和测试平台按照验收测试计划执行测试,软件部署活动介绍,产品打包部署单元、安装脚本、用户手册等,Q&A,请提问!,THANKYOU,