《软件开发过程总结.ppt》由会员分享,可在线阅读,更多相关《软件开发过程总结.ppt(102页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Summary of Software Development Process软件开发过程总结30 July 2019Jack ro,engineer如果我带着仅有的一本计算机书在沙漠荒岛,应该是哪本书?”目目录软件设计软件概论软件工程概论软件开发模型概论软件概论软件是什么软件的特征软件危机是客观世界中问题空间问题空间与解空间解空间的具体描述,是追求表达能力强、更符合人类思维模式,具有易构造性和易演化性的计算模型。软件程序是以计算机语言表达的软件系统;文档是以人类语言表达的软件系统。计算机软件=程序+数据+文档软件概论软件是什么软件的特征软件危机l 软件是复杂的!软件是迄今为止最复杂的人造产品
2、 Frederick P.Brooksl 软件是频变的!l 软件是商品!软件无关乎比特、字节和协议,仅关乎利润和损益 Louis GerstnerABC软件是频变的!软件概论软件是什么软件的特征软件危机1 缺乏缺乏“可见性可见性”2 规模规模庞大,逻辑结构结构复杂复杂 3 重设计,轻视轻视用户需求分析4 质量管理不规范不规范5 重开发,轻视轻视维护Software Crisis维护难度大,可靠性差软件生产率低,质量低成本高,风险高,失败率高文档资料通常不完整,不合格进度的估计常常不准确Software Crisis危危机机一半是危一半是危一半是机一半是机危中危中有机有机机中机中存危存危1968
3、年NATO-SE会议首次正式使用软件也许根本不同于历史上已经出现的任何产品。故而,软件实践不能、也不应完全参照传故而,软件实践不能、也不应完全参照传统实践进行统实践进行。Micheal Mahoney(19392008)美国普林斯顿(Princeton)大学科学史教授,对软件工程学科有独到研究。l “危机”-不恰当l 暗示一种短期的、急性的严重问题l 上述问题则是长期的、慢性的l 近年常用“软件困扰”或“软件苦恼”来替换软件危机真是一个无药可治的顽疾。声称能医治它的人都是庸医、骗子和吹牛皮的人。Edsger W.Dijkstral为了应对“软件危机”,专家们主张:以工程化方法开以工程化方法开发
4、软件件产品品,即 软件工程(SE)力求辟除以往实践的“非工程”特征lSE主题:控制软件及其开发过程的复杂性从而消减软件危机及其负面影响软件工程概论软件工程发展史知识体系基本思想与目标四大挑战原则与方法软件工程Software Engineering为应对软件危机而提出软件工程(SE)指科学知识和工程方法方法,在软件开发、维护和演化过程中的系统应用用,即软件的工程化。软件工程概论软件工程发展史知识体系基本思想与目标四大挑战原则与方法1950年代1960年代软件出现天才程序员小程序编程难软件危机软件工程 需求设计实现运行软件领域程序代码1970年代1980年代过程模型开发原则过程工程化 需求设计实
5、现运行软件领域程序代码1950年代1960年代软件出现天才程序员小程序编程难软件危机软件工程1970年代结构化方法面向对象 需求设计实现运行软件领域程序代码1990年代1980年代过程模型开发原则过程工程化1950年代1960年代软件出现天才程序员小程序编程难软件危机软件工程1970年代1990年代2000年代需求管理架构设计质量控制敏捷方法构件组装 结构化方法面向对象1980年代过程模型开发原则过程工程化1950年代1960年代软件出现天才程序员小程序编程难软件危机软件工程1970年代 1985-20051985-20051968-19902000-面向对象的软件开发,人机界面,多媒体,项目
6、管理、CMM、CMMI基于网络、构件、中间件的软件开发,计算安全,敏捷开发软件工程概念的形成与发展软件工程课程逐步成熟,成为CC1991的一个领域软件工程成为CC2004的一个学科 硬件支撑能力硬件支撑能力 小、中、大型小、中、大型计算机系统计算机系统PDP11PDP117070VAX11VAX11780780结构化的分析、设计、实现、测试,项目管理基于网络服务的超大系统、计算安全、系统管理、监控、评估个人计算机、窗个人计算机、窗口口、网络、分布计算Internet广泛应用软件工程概论软件工程发展史知识体系基本思想与目标四大挑战原则与方法“软件工程知识体系”指南(SWEBOK)第3版定义软件工
7、程知识框架,包括15个知识域软件需求软件设计软件构造软件测试软件维护变更管理工程管理工程过程软件工程模型与方法软件质量软件工程专业实践工程经济学计算基础数学基础工程基础参考SWEBOK官网:核心知识(即在学科知识体系中处于核心地位的知识)常识:专业实践所需的最基本知识如:软件复杂性和频变性常识理念:经长期实践和反思而形成的思想观念的抽象概括如:分而治之和拥抱变更理念法则:描述“怎么做”(即“How”)如:关注点分离法则定律:描述“某现象是什么或怎么发生”(即“What”)如:DeRemer定律、银弹定律、最佳实践:由法则衍生的应用或技术实例如:需求分簇实践软件工程概论软件工程发展史知识体系基本
8、思想与目标四大挑战原则与方法 p 著名的软件工程专家B.W.Boehm于1983年提出n1 用分阶段的生存周期计划严格管理n2 坚持进行阶段评审n3 实行严格的产品控制n4 采用现代程序设计技术n5 结果应能清楚地审查n6 开发小组的人员应少而精n7 承认不断改进软件工程实践的必要性巴利玻姆(Barry W.Boehm)软件工程估算模型COCOMO模型之父、软件过程螺旋式模型之父软件工程件工程-基本思想基本思想 付出较低的开发成本成本;达到要求的软件功能功能;取得较好的软件性能性能;开发的软件易于移植移植;需要较低的维护维护费用能按时完成开发工作,及时交付交付使用。低开发成本高性能高可靠性按时
9、交付易于维护易于维护互斥关系互斥关系互斥关系互斥关系互补关系互补关系互补关系互补关系软件工程件工程-项目目目目标需考虑的问题A可修改性可修改性B有效性有效性C正确性正确性D可靠性可靠性E可理解性可理解性需考虑的问题F可重用性可重用性G可适可适应性性H可移植性可移植性I可跟踪性可跟踪性G互操作性互操作性软件工程概论软件工程发展史知识体系基本思想与目标四大挑战原则与方法变更创造一切,但同时又毁掉一切 软件必然会持续变更,且还将更加频繁。变更的影响范围必须得到有效控制,以避免对软件整体造成不必要的负面影响。软件过程欠缺可重复性受影响的因子过多,无法控制工程师和团队也无法保持稳定的生产性能智力劳动本身
10、就缺乏稳定性学者们普遍认为,“可重复性”是本世纪软件工程研究和实践所要着重关注的议题。规模改变一切DeRemer规模定律知名的软件工程学者,负责SEI的软件产品线项目。Linda Northrop待开发软件的规模越大,项目失败率就越高。规模改变一切能有效用于小型软件产品和项目的工程技术和经验都不能不能同等有效地应用于大型软件产品和项目。DeRemer 规模定律软件的生产率与质量之间存在必然联系。nMills 生产率定律nBrooks“银弹”定律Harlan Millsl Mills 生产率定律 软件的生产率与质量存 在紧密关联关系;一般的,低质量软件的生产率肯定不高。出自Harlan Mill
11、s在1988年提出的论断生产率与质量l 原意:能够在十年内提高软件生产率生产率、可靠性和简化程度十倍以上的工程技术l 泛指:能够在短时间内迅速而显著改善软件生产率和质量生产率和质量的技术、过程、语言或工具“银弹”:出自Frederick Brooks在1986年发表的经典论文没有银弹 软件开发没有“银弹”,即不存在能够在短时间内显著改善软件生产率和质量的技术、过程、语言和工具。软件工程概论软件工程发展史知识体系基本思想与目标四大挑战原则与方法抽取各个事物中共同的最基本的特征和行为,暂时忽略它们之间的差异。1将模块内部信息(数据和过程)封装起来。2即在一个物理模块内集中逻辑上相互关联的计算资源。
12、3应保证在开发过程中相关内容的一致。4软件系统不丢失任何重要成分,完全实现所需的系统功能的程度。5开发大型软件系统需要对系统逐层分解、验证。6软件工程-原则抽象信息隐藏局部化一致性完全性可验证性把在软件生命周期全过程中使用的一整套技术集合称为方法(methodology),也称为范型(paradigm)。方法软件工程-方法包括开发方法、开发工具和开发过程三方面开开发方法方法完成软件开发的技术方法A开开发工具工具开发软件的支撑环境B开开发过程程完成开发软件各项任务的工作步骤 C也可称为软件生命周期方法或结构化方法结构化方法,把软件开发和维护分成软件定义、软件开发和软件维护三个时期时期,每个时期又
13、分成若干个阶段阶段。传统方法传统方法任任务务:确定软件开发必须完成的任务;论证软件可行性;确定用户需求的详细功能和性能。三个三个阶阶段段:问题定义、可行性研究、需求分析。任任务务:设计和实现软件的定义。四个阶段:总体设计、详细设计、编码及单元测试、综合测试。任任务务:对投入使用的软件的修改。二个阶段:对软件的一次重新定义和开发过程。软件定义软件开发软件维护一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO(Object-Oriented)方法。面向对象方法特征特征是建立在对象概念基础上的方法学,对象的概念贯穿于开发全过程。运用人类日常的思维方法和原则进行系统开发,体现出
14、继承性、封装性、多态性等基本特征。面向对象设计面向对象实现面向对象分析面向对象方法OOAOODOOI提高计算机软件可靠性的一种重要技术是使用形式化方法(Formal Methods)(VDM系统,Z系统,RAISE系统)。形式化方法其研究包含形式化方法、形式化语言和形式化工具。形式化分析形式化设计翻译形式化方法软件开发模型生命周期模型瀑布、原型、螺旋、增量.需求完全确定 以软件需求完全确定为基础的瀑布模型;渐进式模型开发初期仅给出基本需求的渐进式模型,如原型模型、螺旋模型、喷泉模型等;方法、技术以形式化开发方法为基础的变换模型、基于第四代语言技术的模型;组合模型其他几种模型组合。软件生命周期模
15、型严格按照软件生存周期各个阶段来进行开发,上一阶段的输出即是下一阶段的输入,强调每一阶段的严格性。瀑布模型瀑布模型 Waterfall Model瀑布模型的优、缺点提供了软件开发的基本框架,有利于大型软件开发过程中人员的组织、管理。在软件开发的初期阶段就要求做出正 确、全面、完整的需求分析对许多应用软件来说是极其困难的。有利于软件开发方法和工具的研究与使用。作为整体开发的瀑布模型,由于不支持产品的演化,缺乏灵活性,对开发过程中很难发现的错误,只有在最终产品运行时才能暴露出来,从而使软件产品难以维护。开发人员与用户一起进行需求分析,进行快速快速设计设计,建造原型,原型由用户评估,进一步修改原型,
16、再次进行设计。迭代这个过程,逐步满足用户需要。原型模型原型模型 Prototyping Model原型模型的优、缺点原型模型法可以得到良好的需求定义。开发者常常需要实现上的折衷,以使原型能尽快工作。能够有效处理用户的模糊需求,开发者和用户得到充分的协作。其实软件质量和可靠性难以保证;资源规划和管理较为困难,更新文档工作量繁重。综合了瀑布模型和原型模型的优点,即将两者结合,并加入了风险风险分析分析机制。螺旋模型螺旋模型 Spiral Model螺旋模型的优、缺点支持用户需求的动态变化。螺旋模型特别强调原型的可扩充性和可修改性。如果每次迭代的效率不高,致使迭代次数过多。为项目管理人员及时调整管理决
17、策提供了方便,可降低开发风险。需要有相当丰富的风险评估经验和专门知识,要求开发队伍水平较高。以面向对象软件开开发发方法方法为为基基础础,以用户需求需求为动为动力力,以对对象来象来驱动驱动的模型。喷泉模型泉模型瀑布模型的特点软件系统可维护维护性性较好;各阶段相互重叠,表明了面向对象开发方法各阶段间的交叉和无缝过渡;具有增量增量开发特性,能做到分析一点、设计一点、实现一点、测试一点,使相关功能随之加入到演化的系统中。整个模型是一个迭代迭代的过程,包括一个阶段内部的迭代和跨阶段的迭代;模型是对对象象驱动驱动的,对象是各阶段活动的主体,也是项目管理的基本内容。该很自然地支持软部件的重用重用它分批地逐步
18、逐步向用户提交提交产品,整个软件产品被分解分解成许多个增量构件,开发人员一个构件接一个构件地向用户提交产品。增量模型增量模型 Incremental Model 分析分析设计设计编码编码测试测试分析分析设计设计编码编码测试测试分析分析设计设计编码编码测试测试分析分析设计设计编码编码测试测试系统信息工程系统信息工程 增量增量1增量增量2增量增量3增量增量4第第第第1 1个增量的发布个增量的发布个增量的发布个增量的发布第第第第2 2个增量的发布个增量的发布个增量的发布个增量的发布第第第第3 3个增量的发布个增量的发布个增量的发布个增量的发布第第第第4 4个增量的发布个增量的发布个增量的发布个增量的
19、发布calendar timecalendar time Rational统一过程n1.最佳实践n2.RUP软件开发生命周期 敏捷过程与极限编程n1.敏捷过程n2.极限编程:XP项目的整体开发过程 微软过程n1.微软过程准则n2.微软软件生命周期:微软软件生命周期阶段划分和主要里程碑n3.微软过程的生命周期模型软件设计需求分析与建模概要设计详细设计设计语言软件测试需求需求验证验证需需求描述求描述分析建模分析建模需求需求获获取取需求分析与建模需求分析的任务任务是要准确地定义新系统的目标,准确回答“系统必须做什么”的问题,并用需求规格说明书规范的形式准确地表达用户的需求。系统分析员要研究可行性研究
20、报告和软件项目实施计划。从系统的角度来理解软件,确定对目标系统的综合要求,即软件的需求。提出这些需求实现的条件,以及需求应达到的标准。也就是解决待开发系统需要“做什么“,“做到什么程度”的问题。需求获取此阶段的工作是需求获取、问题识别,即收集并明确用户需求明确用户需求的过程。模型是为了理解事物而对事物做出的一种抽象抽象,通常由一组符号和组织这些符号的规则组成。有助于更好地理解问题。理解问题。系统分析员根据目标系统的模型,从信息流和信息结构出发,逐步细化细化所有的软件功能,找出系统各元素之间的联系、接口特性和对设计的限制,剔除需求中不合理的成分,增加需要的部分,最终把各项需求组织起来,提交目标系
21、统的详细逻辑模型详细逻辑模型。分析建模获取到需求后,要把来自用户的信息加以分析,通过“抽象抽象”建立待开发的系统逻辑模型将已经过分析的需求清晰、全面、系统、准确地描述成正式的文档软件需求规格说明书软件需求规格说明书。软件需求规格说明书以开发人员的角度,对开发系统的业务模型、功能模型、数据模型等内容进行描述,明确地表达了用户与系统分析员对软件系统的共同理解共同理解,将作为概要设计和详细设计的概要设计和详细设计的基线基线。对于复杂的软件系统,此阶段除产生软件需求规格说明书(称软件需求文档),系统定义文档(即用户需求报告)和系统需求文档(即系统需求规格说系统需求规格说明书明书)。需求描述需求描述就是
22、指编制需求分析阶段的文档需求验证就是对需求的正确性进行严格的验证,(1)确保需求确保需求的一致性一致性、完整性完整性、清晰性清晰性、现实性和有效性现实性和有效性,(2)确保设计确保设计与实现过程中的需求可回溯性,(3)并进行需求变更管理。通常,需求验证以用户、系统分析员、系统设计人员和管理人员共同参与的会议形式进行,最后由评审评审负责人签字。需求验证需求验证就是验证(复查)需求分析的成果,也称综合评审软件设计需求分析与建模概要设计详细设计设计语言软件测试软件设计的任务从工程管理的角度来看,可以将软件设计分为两个阶段:概要设计(又称总体设计)阶段详细设计(又称过程设计)阶段基本框架实现细节 概要
23、设计的基本任务(1)设计软件系统结构;)设计软件系统结构;(2)数据结构及数据库设计;)数据结构及数据库设计;(3)编写概要设计文档;)编写概要设计文档;(4)评审概要设计文档。)评审概要设计文档。概要设计的一般步骤选定体系结构选定体系结构选定体系结构选定体系结构确定设计方案确定设计方案确定设计方案确定设计方案设计软件结构设计软件结构设计软件结构设计软件结构数据结构及数据库设计数据结构及数据库设计数据结构及数据库设计数据结构及数据库设计制订测试计划制订测试计划制订测试计划制订测试计划编写概要设计文档编写概要设计文档编写概要设计文档编写概要设计文档概要设计文档评审概要设计文档评审概要设计文档评审
24、概要设计文档评审模块化是“分而治之”策略的具体表现。模块化就是将整体软件划分成独立命名且可独立访问的模块,不同的模块通常具有不同的功能或职责。每个模块可独立地开发、测试,最后组装成完整的软件。概要设计的原则1模块化抽象是指忽视一个主题中与当前目标无关的方面,以便更充分地注意与当前目标有关的方面。抽象可以分成若干级别,级别越高,细节越少。概要设计的原则2抽象与分解信息隐蔽:指模块所包含的信息,不允许其他不需要这些信息的模块访问,独立的模块间仅仅交换为完成系统功能而必须交换的信息。局部化:把关系密切的软件元素物理地放得彼此靠近。概要设计的原则3信息隐蔽和局部化复用是指同一事物不做修改或稍加修改就可
25、以多次重复使用。软件复用就是将已有的软件成分用于构造新的软件系统。软件复用并不局限于软件代码,其范围也可扩展到软件开发各个阶段,包括需求模型和规格说明、设计模型、文档、测试用例等。概要设计的原则4复用性设计模块独立性概括了把软件划分为模块时要遵守的准则,也是判断模块构造是否合理的标准。概要设计的原则5模块独立性耦合是模块之间相互连接的紧密程度的度量。耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。模块之间的连接越紧密,联系越多,耦合性就越高,而其模块独立性就越弱。耦合性1 非直接耦合2 数据耦合3 特征耦合4 控制耦合5 外部耦合6 公共耦合7 内容耦合一个模块内
26、各个元素彼此结合的紧密程度用内聚(或称聚合)来度量。一个理想的模块只完成一个功能,模块设计的目标之一是尽可能高内聚。内聚性1 偶然内聚2 逻辑内聚3 时间内聚4 过程内聚5 通信内聚6 顺序内聚(信息内聚)7 功能内聚1模块功能的完善化2消除重复功能,改善软件结构3模块规模应该适中4模块的深度、宽度、扇出和扇入都应适当5模块的作用范围应该在控制范围之内6力争降低模块接口的复杂程度7设计单入口、单出口的模块8模块功能应该可以预测软件结构优化准则软件设计需求分析与建模概要设计详细设计设计语言软件测试 详细设计的基本任务(1)算法设计)算法设计(2)数据结构设计)数据结构设计(3)模块接口细节)模块
27、接口细节(4)测试用例设计)测试用例设计(5)数据库物理设计)数据库物理设计(6)数据代码设计)数据代码设计(7)其他设计)其他设计(8)编写详细设计说明书并进行评审)编写详细设计说明书并进行评审采用自顶向下、逐步求精的程序设计方法在详细设计过程中,采用逐步求精的方法,降低待处理问题的复杂度复杂度。详细设计的原则1使用三种基本控制结构完成程序设计使用顺序、选择和循环三种基本控制结构构造程序,限制使用无条件跳转语句。详细设计的原则2设计人员组织结构采用“外科医生-助手”模式在这种组织结构中,外科医生和助手都应了解相关设计内容,外科医生在设计中起主导作用,是设计的技术负责人,助手只起技术支持作用。
28、详细设计的原则3Theo Mandel“黄金原则”(1)置用户于控制之下(2)较少用户的记忆负担(3)保持界面一致界面设计的原则软件设计需求分析与建模概要设计详细设计设计语言软件测试 第一代语言(机器语言)第一代语言(机器语言)第二代语言(汇编语言第二代语言(汇编语言第三代语言(高级语言)第三代语言(高级语言)第四代语言(简称第四代语言(简称4GL)软件设计需求分析与建模概要设计详细设计设计语言软件测试1.所有测试都应追溯到需求。2.坚持“尽早地和不断地进行软件测试”。3.测试用例应由输入数据和预期的输出结果两部分组成。4.程序员应避免测试自己的程序。5.在设计测试用例时,应当包括合理的输入条
29、件和不合理的输入条件。6.充分注意测试中的群集现象。7.严格执行测试计划,排除测试的随意性。8.应当对每个测试结果做全面检查。9.在测试程序时,不仅要检验程序是否做了该做的事,还要检验程序是否做了不该做的事。10.应长期保留所有测试用例。软件测试原则测试的步骤与软件的开发过程类似,测试必须分步骤进行。单元测试集成测试确认测试系统测试彩蛋 后记如果我带着仅有的一本计算机书在沙漠荒岛,应该是哪本书?”后记这是一个荒谬的问题,但人们坚持要一个答案。假如你真的被放逐到这样的小岛上(或者你决定躲到这样的地方去避免未来软件崩溃的恐惧),人月神话应该紧随着你。”1 李大牛.软件工程核心知识:万卷出版社.2014 2 杨芙清.中国软件工程历程与发展 3 陈松乔等.现代软件工程:清华大学出版社.20044 Frederick,P.Brooks,Jr著,汪颖,UMLChina翻组 译.人月神话:清华大学出版社.20155 吕云翔等.软件工程实用教程:机械工业出版社.2013后记参考文献 1 李祖德博士,中南大学2 百度()3 软件工程从业者及广大网友后记鸣谢30 July 2019Jack ro,engineer