1、回顾p软件、软件的特点、软件的分类软件、软件的特点、软件的分类(系统软件、系统软件、支撑软件、应用软件)支撑软件、应用软件)p软件开发发展历程、软件危机、软件工程软件开发发展历程、软件危机、软件工程pSoftware Engineering=Computer Science+Engineeringp软件工程三要素软件工程三要素p软件工程原理软件工程原理p软件工程方法学软件工程方法学本章内容q一、软件的定义软件的定义q二、软件危机二、软件危机q三、软件工程三、软件工程q四、软件生存期四、软件生存期q五、软件过程五、软件过程p生存周期(LC-)?4生存周期生存周期生存周期软件的生存周期?6软件开发
2、生存周期SDLC生存周期生存周期软件开发软件开发软件开发生存周期(SDLCSDLC)指软件生命的不同阶段从构思到产品被淘汰软件生命周期软件生命周期p软件的整个生存周期划分为软件的整个生存周期划分为3 3个时期组成个时期组成p软件定义软件定义p软件开发软件开发p软件维护软件维护通常,软件生存周期包括:可行性研究、通常,软件生存周期包括:可行性研究、需求分析、总体设计、详细设计、编程、需求分析、总体设计、详细设计、编程、测试、部署、维护。测试、部署、维护。8解释 SDLC-1Smith 要建房子要建房子建筑公司Smith 先生先生Smith 先生说明他的需求先生说明他的需求考查“可行性”如果可行,
3、如果可行,“分析分析”需求需求包括时间和成本包括时间和成本告诉告诉 Smith 需要的时间和成本需要的时间和成本公司公司“设计设计”房子。房子。Smith 批准设计。批准设计。接着开始施工公司定期检测,以确保满足要求公司定期检测,以确保满足要求Smith 检验房屋,同意后,由公司帮忙搬入Smith 先生想要修改或有新的需先生想要修改或有新的需求时,必须再次走进建筑公司求时,必须再次走进建筑公司9解释 SDLC-2Smith 的地皮的地皮建筑公司2.需求分析需求分析1.可行性分析可行性分析3.系统设计系统设计4.编码编码5.测试测试6.部署部署7.维护维护软件开发软件开发的各个阶段的各个阶段生存
4、周期生存周期10解释 SDLC-31.可行性分析可行性分析3.系统设计系统设计4.编码编码5.测试测试6.部署部署7.维护维护SDLC的各个阶段的各个阶段生存周期生存周期软件开发软件开发2.需求和分析需求和分析11解释 SDLC-4SDLC1.可行性分析2.需求和分析3.系统设计4.生成代码5.测试6.部署7.维护各核心阶段可能包含一些子阶段对这些阶段或者子阶段可能在不同的时候有不同的名称或者称呼各阶段的逻辑顺序和思想相同是否可行是否可行否否取消项目取消项目2.需求和分析需求和分析SDLC 的第一个阶段是是3.系统设计系统设计4.编码编码5.测试测试6.部署部署7.维护维护1.可行性分析可行性
5、分析12解释 SDLC-5SDLC2.需求和分析3.系统设计4.生成代码5.测试6.部署7.维护对各种因素做可行性分析:经济上、技术上、对各种因素做可行性分析:经济上、技术上、法律上、时间上和操作上法律上、时间上和操作上在可行性分析结束时,应将成本、进度、预定在可行性分析结束时,应将成本、进度、预定日期和人员安排写入报告日期和人员安排写入报告只有客户和项目小组都同意了可行性报告,才只有客户和项目小组都同意了可行性报告,才开始项目开始项目1.可行性分析13解释 SDLC-6SDLC3.系统设计4.生成代码5.测试6.部署7.维护1.可行性分析分成两个子阶段:需求分成两个子阶段:需求和分析和分析2
6、.需求和分析客户客户项目小组项目小组系统分系统分析析需求 分析员用不同的方法收集客户的需求分析员用不同的方法收集客户的需求 重复进行收集工作,首先收集主要需求,最终收集到详细重复进行收集工作,首先收集主要需求,最终收集到详细需求需求14解释 SDLC-7SDLC3.系统设计4.生成代码5.测试6.部署7.维护1.可行性分析分为两个次阶段:需求和分析2.需求和分析客户客户项目小组项目小组系统分析系统分析员员分析员用不同的方法搜集客户的需求分析员用不同的方法搜集客户的需求搜集是个重复的行为,首先广泛搜集,最后进行详细阐述搜集是个重复的行为,首先广泛搜集,最后进行详细阐述项目小组项目小组分析分析系统
7、分系统分析员析员设计小设计小组组 设计小组研究分析员收集到的需求,审查其中的缺点设计小组研究分析员收集到的需求,审查其中的缺点 将需求进一步细化将需求进一步细化 设计小组对需求进行分类,并确保每项需求都清晰明确设计小组对需求进行分类,并确保每项需求都清晰明确15解释 SDLC-8SDLC3.系统设计4.生成代码5.测试6.部署7.维护1.可行性分析2.需求和分析讨论软件的整体结构分为两个子阶段:概要设计和详细设计客户客户项目小组项目小组设计小组设计小组3.系统设计前端前端中间层中间层后端后端16解释 SDLC-9SDLC3.系统设计4.生成代码5.测试6.部署7.维护1.可行性分析2.需求和分
8、析讨论软件整体结构讨论软件整体结构分为两个子阶段:概要设计和详细分为两个子阶段:概要设计和详细设计设计客户客户项目小组项目小组设计小组设计小组3.系统设计概要设计概要设计多个设计,选用其中的最佳设计软件整体设计详细设计详细设计将简易设计细化分析和设计在整个开发周期中非常关键,设计阶段分析和设计在整个开发周期中非常关键,设计阶段的任何差错都会影响到前期估算的时间和成本的任何差错都会影响到前期估算的时间和成本将软件的结构细分为单元17解释 SDLC-10SDLC3.系统设计4.生成代码5.测试6.部署7.维护1.可行性分析2.需求和分析客户客户项目小组项目小组设计小组设计小组程序员程序员4.编码编
9、码将设计转换为机器可读的形式将设计转换为机器可读的形式(应使设计做得尽(应使设计做得尽善尽美,避免以后返工)善尽美,避免以后返工)程序员使用工具程序员使用工具/语言编码语言编码18解释 SDLC-11SDLC3.系统设计4.生成代码5.测试6.部署7.维护1.可行性分析2.需求和分析客户客户项目小组项目小组测试员测试员程序员程序员将设计转换为机器可读的形式将设计转换为机器可读的形式(应将设计(应将设计做得尽善尽美,避免以后返工)做得尽善尽美,避免以后返工)程序员使用工具程序员使用工具/语言编码语言编码5.测试19解释 SDLC-12SDLC3.系统设计4.生成代码5.测试6.部署7.维护1.可
10、行性分析2.需求和分析在客户现场部署软件是一件耗时费在客户现场部署软件是一件耗时费力的过程力的过程 6.部署软件公司软件公司客户客户20解释 SDLC-13SDLC3.系统设计4.生成代码5.测试6.部署7.维护1.可行性分析2.需求和分析对已开发的软件提供支持(对软件提对已开发的软件提供支持(对软件提供更新,对发现的错误提供补丁等)供更新,对发现的错误提供补丁等)软件公司软件公司 客户客户7.维护软件的问题软件的问题解决方案解决方案本章内容q一、软件的定义软件的定义q二、软件危机二、软件危机q三、软件工程三、软件工程q四、软件生存期四、软件生存期q五、软件过程五、软件过程建造一个房屋的过程建
11、造一个房屋的过程不同的过程能达到同样的目标不同的过程能达到同样的目标任务思维模式任务思维模式过程思维模式25p明确了软件开发的过程和步骤,促进工程化软明确了软件开发的过程和步骤,促进工程化软件开发件开发p便于制定软件项目计划便于制定软件项目计划p为软件开发提供了可视性,便于对软件开发过为软件开发提供了可视性,便于对软件开发过程进行管理和控制程进行管理和控制p便于细化和安排任务,使得每个人员明确各自便于细化和安排任务,使得每个人员明确各自的工作的工作软件过程的运行机制软件过程的运行机制27p针对一个给定目的地一系列操作步骤针对一个给定目的地一系列操作步骤(IEEE-STD-610)p例如例如l目
12、的:去火车站目的:去火车站 l操作步骤:先乘车到德胜门,再乘地铁操作步骤:先乘车到德胜门,再乘地铁 乘公共汽车、打车乘公共汽车、打车 每个过程都有明确的目的以及具体的操作步骤每个过程都有明确的目的以及具体的操作步骤p按照项目的进度、成本和质量限制,开发和维按照项目的进度、成本和质量限制,开发和维护满足用户需求的软件所必需的一组护满足用户需求的软件所必需的一组有序的软件开发活动集合p软件开发活动的例子软件开发活动的例子l需求分析需求分析l设计设计p开发活动的序例子开发活动的序例子l先做需求分析,然后再做软件设计先做需求分析,然后再做软件设计 软件开发过程软件开发过程q软件开发过程是任务框架,它规
13、定了在生存期软件开发过程是任务框架,它规定了在生存期各阶段完成任务的工作步骤。描述了什么人、各阶段完成任务的工作步骤。描述了什么人、在什么时候、做什么事以及怎么做。在什么时候、做什么事以及怎么做。q举例举例软件工程过程的作用软件工程过程的作用q软件工程过程是黏结剂(软件工程过程是黏结剂(glueglue),把方),把方法、语言和工具黏结在一起,使得计算法、语言和工具黏结在一起,使得计算机软件开发理性化。机软件开发理性化。q定义了方法使用的顺序、可交付产品(文档、定义了方法使用的顺序、可交付产品(文档、报告以及格式等)的要求。报告以及格式等)的要求。q帮助确保质量和变更(修改)的控制。帮助确保质
14、量和变更(修改)的控制。q使软件管理人员能对项目的进展进行评价。使软件管理人员能对项目的进展进行评价。q举例举例讨论讨论q为什么要定义软件过程?为什么要定义软件过程?q一种软件开发过程是不是适用所有类型的软件一种软件开发过程是不是适用所有类型的软件开发?开发?q 本课程为什么讲解软件过程开发模型?本课程为什么讲解软件过程开发模型?q开发一个软件项目,首先要选择并确定一个适开发一个软件项目,首先要选择并确定一个适合于该项目的软件生命周期模型,然后按照该合于该项目的软件生命周期模型,然后按照该软件生命周期模型的开发软件生命周期模型的开发路线图路线图,进行有条不,进行有条不紊地开发,以达到成功的彼岸
15、。紊地开发,以达到成功的彼岸。软件过程模型q模型是一种抽象描述方式,有图形、数学模型是一种抽象描述方式,有图形、数学公式等。公式等。q软件开发的一种框架。为了简洁地描述软软件开发的一种框架。为了简洁地描述软件过程。件过程。q是指在整个软件生命周期中,软件开发过程应遵循的开发路线图。33SDLC 模型与其他工程学科相同,软件工程也有与其他工程学科相同,软件工程也有模型模型线性线性 模型模型迭代迭代模型模型类别螺旋模型螺旋模型模型瀑布模型瀑布模型本书详细讲解瀑布模型,因为它包本书详细讲解瀑布模型,因为它包含任何含任何 SDLC 中的所有一般阶段中的所有一般阶段常用的过程模型常用的过程模型q瀑布瀑布
16、WaterfallWaterfallqV V模型模型V-shapedV-shapedq快速原型快速原型 Rapid PrototypingRapid Prototypingq增量增量IncrementalIncrementalq演化模型演化模型q螺旋式螺旋式SpiralSpiralq喷泉喷泉qRational Rational 统一开发过程统一开发过程q敏捷过程敏捷过程q微软开发过程微软开发过程瀑布模型瀑布模型-1-1q 19701970年温斯顿年温斯顿罗伊斯(罗伊斯(Winston RoyceWinston Royce)提出了著名的)提出了著名的“瀑布模型瀑布模型”,直到,直到8080年代早
17、期,它一直是年代早期,它一直是唯一被广泛采唯一被广泛采用用的软件开发模型。直至今日,该模型仍然具有强大的生的软件开发模型。直至今日,该模型仍然具有强大的生命力。命力。q 定义:定义:瀑布模型瀑布模型(Waterfall Model)(Waterfall Model)又称流水式过程模型,又称流水式过程模型,它是模仿旅游景点的阶梯瀑布,由上向下一个阶梯一个阶它是模仿旅游景点的阶梯瀑布,由上向下一个阶梯一个阶梯地倾泻下来,最后进入一个风平浪尽的大湖,这个大湖梯地倾泻下来,最后进入一个风平浪尽的大湖,这个大湖就是软件企业的产品库。就是软件企业的产品库。q 本意:本意:根据软件生存周期是由可行性研究、需
18、求分析、概根据软件生存周期是由可行性研究、需求分析、概要设计、详细设计、编程、测试、部署、维护等阶段所组要设计、详细设计、编程、测试、部署、维护等阶段所组成的,就把每个阶段当作瀑布中的一个台阶,把软件过程成的,就把每个阶段当作瀑布中的一个台阶,把软件过程比喻成瀑布中的流水,软件过程在这些台阶中由上向下地比喻成瀑布中的流水,软件过程在这些台阶中由上向下地奔流。开发人员按照阶段开发,管理人员按照阶段管理。奔流。开发人员按照阶段开发,管理人员按照阶段管理。瀑布模型瀑布模型-2开发开发时期时期运行运行时期时期计划计划时期时期(目标与范围说明书目标与范围说明书)(可行性论证报告可行性论证报告)(维护报告
19、维护报告)(测试报告测试报告)(程序程序)(设计文档设计文档)(需求说明书需求说明书)p早期的面向过程的结构化分析、结构化设计、结早期的面向过程的结构化分析、结构化设计、结构化编程、结构化测试、结构化维护方法,很适构化编程、结构化测试、结构化维护方法,很适合于瀑布模型。或者说,瀑布模型适合于合于瀑布模型。或者说,瀑布模型适合于结构化结构化方法方法,即面向过程的软件开发方法。,即面向过程的软件开发方法。p模型的特点模型的特点 p(1 1)文档驱动。)文档驱动。p(2 2)过程逆转性很差或者说不可逆转,因为根)过程逆转性很差或者说不可逆转,因为根据上游的错误会在下游进行发散性传播的原理,据上游的错
20、误会在下游进行发散性传播的原理,所以逆转将会延误工期,增加成本,造成重大损所以逆转将会延误工期,增加成本,造成重大损失。失。瀑布模型瀑布模型-3p3 3选择模型的条件选择模型的条件p不是任何软件都可以采用瀑布模型的,软件项目或产品不是任何软件都可以采用瀑布模型的,软件项目或产品选择瀑布模型,必须满足下列条件:选择瀑布模型,必须满足下列条件:p(1 1)在开发时间内需求没有或很少变化。)在开发时间内需求没有或很少变化。p(2 2)分析设计人员对应用领域很熟悉。)分析设计人员对应用领域很熟悉。p(3 3)低风险项目(对目标、环境很熟悉)。)低风险项目(对目标、环境很熟悉)。p(4 4)用户使用环境
21、很稳定。)用户使用环境很稳定。p(5 5)用户除提出需求以外,很少参与开发工作。)用户除提出需求以外,很少参与开发工作。p尽管上述条件比较苛刻,但是,软件企业在开发新产品尽管上述条件比较苛刻,但是,软件企业在开发新产品或新项目时,往往还是采用瀑布模型。系统软件和工具或新项目时,往往还是采用瀑布模型。系统软件和工具软件的开发,也常常采用瀑布模型。软件的开发,也常常采用瀑布模型。瀑布模型瀑布模型-4瀑布模型的表现瀑布模型的表现图书馆馆长:我们程序做的怎样了?图书馆馆长:我们程序做的怎样了?程序员:差不多做好了,可以试用了。程序员:差不多做好了,可以试用了。瀑布模型的表现瀑布模型的表现图书馆馆长:我
22、们的程序有图书馆馆长:我们的程序有没有网上借书的功能?没有网上借书的功能?程序员:没有,上次你没有程序员:没有,上次你没有说要这个功能?说要这个功能?图书馆馆长图书馆馆长:那怎么办:那怎么办?我们要这?我们要这个功能,上个功能,上次我们忘记次我们忘记说了。说了。瀑布模型的表现瀑布模型的表现瀑布模型的表现瀑布模型的表现程序员:那程序员:那.我们要我们要重新设计数据库,很多重新设计数据库,很多东西要重新做过了,再东西要重新做过了,再给我三个月时间吧给我三个月时间吧.讨论q瀑布模型存在的问题?瀑布模型存在的问题?模型的优点模型的优点 p开发阶段清晰,便于评审、审计、跟踪、管理和控制。模型的缺点模型的
23、缺点p传统的项目组织方法是按顺序完成每个工作流程,即瀑布式生命周期。瀑布只能一个个台阶地往下流,不可能倒着往上流,这就是它致命的缺点。p瀑布式生命周期通常会导致在项目后期,出现“问题堆积”,更可怕的是,错误的传递会采取发散扩大的方式。瀑布模型瀑布模型-5实际的瀑布模型实际的瀑布模型图中实线箭头表图中实线箭头表示开发过程,虚示开发过程,虚线箭头表示维护线箭头表示维护过程。当在后面过程。当在后面阶段发现前面阶阶段发现前面阶段的错误时,需段的错误时,需要沿图中左侧的要沿图中左侧的反馈线返回前面反馈线返回前面的阶段,修正前的阶段,修正前面阶段的产品之面阶段的产品之后再回来继续完后再回来继续完成后面阶段
24、的任成后面阶段的任务。务。瀑布模型变种:瀑布模型变种:V V模型模型接收测试接收测试集成测试系统测试系统测试项目规化项目规化需求分析需求分析总体设计总体设计详细设计详细设计编码和调试编码和调试集成测试集成测试单元测试单元测试验证验证验证验证该方法是对瀑布模型的修正,强调了验证活动该方法是对瀑布模型的修正,强调了验证活动V模型模型适合的项目q项目的需求在项目开始前很明确项目的需求在项目开始前很明确q解决方案在项目开始前也很明确解决方案在项目开始前也很明确q对系统的性能安全很严格的项目对系统的性能安全很严格的项目q类似的项目如:类似的项目如:q航天飞机等航天飞机等q公司的财务系统公司的财务系统快速
25、原型的提出快速原型的提出p有时会发现通过面谈等方式得到的需求不够全有时会发现通过面谈等方式得到的需求不够全面,特别是对界面和使用的方便性等方面面,特别是对界面和使用的方便性等方面p有时用户提不出具体的需求有时用户提不出具体的需求怎么办?怎么办?快速原型模型q所谓快速原型是快速建立起来的可以在计算机所谓快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。品能完成的功能的一个子集。q快速原型模型的第一步是快速建立一个能反映快速原型模型的第一步是快速建立一个能反映用户主要需求的原型系统,让用户在计算机上试用
26、户主要需求的原型系统,让用户在计算机上试用它,通过实践来了解目标系统的概貌。用它,通过实践来了解目标系统的概貌。q用户试用原型系统之后会提出许多修改意见,用户试用原型系统之后会提出许多修改意见,开发人员按照用户的意见快速地修改原型系统,开发人员按照用户的意见快速地修改原型系统,然后再次请用户试用然后再次请用户试用q一旦用户认为这个原型系统确实能做他们所需一旦用户认为这个原型系统确实能做他们所需要的工作,开发人员便可据此书写要的工作,开发人员便可据此书写规格说明文档规格说明文档,根据这份文档开发出的软件可以满足用户的真实根据这份文档开发出的软件可以满足用户的真实需求。需求。50快速原型模型快速原
27、型模型 初初步步需需求求分分析析 快快速速设设计计 建建造造原原型型 用用户户评评估估原原型型(新新需需求求)开开发发产产品品 开开始始 结结束束 l特点有效适应用户需求的变化不知循环多少次,进度难以控制l适合场所适合场所需求动态变化、难以确定的软件系统快速原型模型快速原型模型快速原型模型适快速原型模型适合哪些场合呢?合哪些场合呢?有何缺点呢?有何缺点呢?p1996年8月,当时的某高级工程师,带领一个程熟练的程序员,来到营口港务局通信中心,开发该中心的电话业务信息管理系统。p他俩一个是数据库设计高手,一个是编程高手,所以俩人分工负责,一人设计数据库,一人编写程序,双方配合默契,只用一个多月时间
28、,就圆满地完成了开发任务,收回了全部开发费用,获得了客户的好评。一一个典型的“快速原型法”例子Rapid Prototype Model适合的项目适合的项目q项目的需求在项目开始前不明确项目的需求在项目开始前不明确q需要减少项目需求的不确定性需要减少项目需求的不确定性q类似的项目如:类似的项目如:小型或中等规模的交互式系统大型系统的某些部分,例如用户界面生命周期较短的系统原型开发存在的问题原型开发存在的问题q为了快而省,原型版本经常采用一些折衷的解为了快而省,原型版本经常采用一些折衷的解决方法,所以质量问题较多。决方法,所以质量问题较多。q开发人员需要掌握建立快速原型的开发技术和开发人员需要掌握建立快速原型的开发技术和工具。工具。q需要足够的人力资源需要足够的人力资源q用户和设计都成为关键用户和设计都成为关键p 经常不断地学习,你就什么都知道。你知道得越多,你就越有力量p Study Constantly,And You Will Know Everything.The More You Know,The More Powerful You Will Be写在最后Thank You在别人的演说中思考,在自己的故事里成长Thinking In Other PeopleS Speeches,Growing Up In Your Own Story讲师:XXXXXX XX年XX月XX日