• 1. 邸书灵 信息科学与技术学院 2013-3-6软件工程概论 Introduction to Software Engineering
  • 2. 知识回顾1.1 软件 1.2 软件工程 1.3 软件工程知识体系 1.4 软件工程职业道德规范 软件的概念、发展和特性(复杂性、一致性、可变性、不可见性) 软件危机(表现、原因) 工程、软件工程、软件工程三要素 (过程、方法、工具) 软件质量特性(可维护性、可依赖性、有效性、可用性) 软件工程方法(结构化、面向对象)、当前面临的主要挑战 软件工程知识体系 软件工程职业道德规范IEEE:软件是计算机程序、规程以及运行计算机系统可能需要的相关文档和数据。2
  • 3. 如何开发高质量的软件?软件工程的目标 在规定的时间和预算内开发高质量的软件。 非常困难,但必须努力达到。 如何开发高质量的软件? 事实和经验表明:只有建立规范的软件开发过程,并持续不断地加以改进,才能管理和控制软件产品的质量。 软件过程包括哪些内容? 软件过程定义 软件过程模型3
  • 4. 第二章 软件过程2.1 软件过程的概念 2.2 软件过程模型 2.3 案例:微软公司的软件开发过程 4
  • 5. 第二章 软件过程2.1 软件过程的概念 2.1.1 任务思维与过程思维 2.1.2 软件过程的定义 2.1.3 软件过程的基本活动 2.1.4 软件过程的制品5
  • 6. 2.1.1 任务思维与过程思维什么是过程? 针对一个给定目的的一系列操作步骤。 例如 目的:从学校去火车站 操作步骤:去学校门口公共汽车站,乘23路汽车 每个过程都有明确的目的以及具体的操作步骤,操作步骤说明了有哪些操作以及按照什么样的方式来执行操作。6
  • 7. 任务思维模式特点:强调开发结果忽视开发过程。 问题:假设软件需求可以在开发初期完全确定下来,与用户的交互只是发生在确定需求之时和发布产品之后。 现实情况很少符合上述假设。2.1.1 任务思维与过程思维软件开发的早期模式7
  • 8. 过程思维模式2.1.1 任务思维与过程思维特点:整个开发过程被划分成若干可管理的开发阶段,且每个阶段都可与用户交互。 好处:通过提高可见性来降低开发风险,允许在项目进展过程中基于用户的反馈进行项目变更。软件开发的现在模式8
  • 9. 2.1.2 软件过程的定义什么是软件过程? 软件过程是软件工程人员为了获得软件产品而在软件工具的支持下实施的一系列软件工程活动。9
  • 10. 软件过程的基本组件与运行机制用户需求过程定义活动定义 活动关系 过程制品参与人员 活动工具过程资源过程执行用户反馈 过程改进 过程结果 软件产品10
  • 11. 软件过程的基本组件与运行机制软件过程的基本组件与运行机制 软件过程的基本元素由一系列软件工程活动和活动之间的关系组成,通过一系列顺序和步骤执行这些活动,可以尝试诸如代码、文档和数据等各种过程制品,最终取得预期的过程结果。 此外,软件过程需要参与活动的人员和活动工具等过程资源的支持,并通过反馈和度量过程的结果实现过程的可持续改进。11
  • 12. 2.1.3 软件过程的基本活动6个基本活动 1:问题提出(可行性分析) 对开发任务进行调研和分析,研究系统的可行性和可能的解决方案,确定开发总目标和范围。 所涉及的问题:软硬件技术?经费预算?收益?应用及推广?12
  • 13. 2.1.3 软件过程的基本活动6个基本活动 2:软件需求规格说明 完成可行性分析后,系统分析员整理用户需求,编写软件需求规格说明。 软件需求规格说明描述软件功能、列出约束条件、定义软件的输入和输出接口。 13
  • 14. 2.1.3 软件过程的基本活动6个基本活动 3:软件设计 软件设计是根据需求规格说明,确定软件体系结构,进一步设计每个系统部件的实现算法、数据结构及其接口等,编写软件设计说明书。14
  • 15. 2.1.3 软件过程的基本活动软件设计过程15
  • 16. 2.1.3 软件过程的基本活动6个基本活动 4:软件实现 软件实现是将所设计的各个子系统编写成计算机可接受的程序代码。 与实现相关的文档就是源程序及合适的注释。16
  • 17. 2.1.3 软件过程的基本活动6个基本活动 5:软件确认 检查和验证所开发的系统是否符合用户的期望。 涉及从用户需求定义到软件实现的每一个阶段的审查和评审,以及持续实现之后的软件测试。 在确认过程中,一旦发现缺陷,开发人员需要回到前面的开发阶段进行修改,如何再进行修改后的确认。这是个不断反复回馈的过程。17
  • 18. 2.1.3 软件过程的基本活动6个基本活动 6:软件演化 软件的内在本质是灵活的和可变的。随着业务需求的变化,软件必须进化和变更。尽管在开发过程和演化(维护)过程之间存在划分,但是现实中全新的系统越来越少。 涉及从用户需求定义到软件实现的每一个阶段的审查和评审,以及持续实现之后的软件测试。18
  • 19. 2.1.4 软件过程的制品软件过程的不同阶段,有可能产生各种不同的软件制品。如需求规格说明、设计说明、源程序与构件、测试用例、用户手册以及各种开发管理文档。 P26。19
  • 20. 第二章 软件过程2.2 软件过程模型 2.2.1 瀑布模型 2.2.2 快速原型模型 2.2.3 增量模型 2.2.4 螺旋模型 2.2.5 形式化方法模型 2.2.6 基于组件的开发模型20
  • 21. 2.2 软件过程模型软件过程模型描述软件过程的整体框架,是软件过程的一种抽象表示。21
  • 22. 2.2.1 瀑布模型将软件过程划分为需求定义与分析、软件设计、软件实现、软件测试、软件运行与维护等一系列基本活动。 以上活动自上而下、相互衔接的固定顺序,如瀑布流水,逐级下落。经典的软件开发模型 W. Royce,1970提出 直到20世纪80年代唯一被广泛应用22
  • 23. 2.2.1 瀑布模型 特点: 开发阶段严格按照线性方式进行 阶段间有因果关系 每个阶段需评审确认 允许反馈 强调文档适合场所 需求易于完善定义的软件23
  • 24. 2.2.1 瀑布模型缺点: 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量; 开发过程中很难响应客户的变更要求; 早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。 挑战: 实际的项目开发很少是线性的过程,客户很难明确地描述软件需求。24
  • 25. 2.2.2 快速原型模型快速原型模型的第一步是迅速构建一个可以运行的软件原型,实现用户与系统的交互,由用户对该原型进行评价,进一步细化待开发软件需求。结果逐步调整使其满足用户的要求之后,开发人员可以将用户的真正需求确定下来。 第二步则在第一步的基础上开发用户满意的软件。25
  • 26. 2.2.2 快速原型模型优点 加强用户和软件人员之间的沟通,明确系统的需求 尽早得到系统可用性的反馈信息,及时修改以获得完整、正确需求 缺陷 用户会由于看到的原型系统不完善,而对产品产生怀疑 可能为了快速开发原型系统,而采用未经充分论证的技术(如操作系统平台、主要的算法)导致质量低下26
  • 27. 快速原型需要迅速建造一个可以运行的软件原型 ,以便理解和澄清问题,使开发人员与用户达成共识。 2.2.2 快速原型模型特点 有效适应用户需求的变化 不知循环多少次,进度难以控制适合场所 需求动态变化、难以确定的软件系统27
  • 28. 2.2.3 增量模型增量模型在各个阶段并不一定交付一个可运行的完整产品,而是交付满足用户需求的一个子集。 第一个增量往往是实现基本需求的核心产品,交付用户使用后,经过评价形成下一个增量的开发计划,其中包括对核心产品的修改和一些新功能的发布。 这个过程在每个增量发布后不断重复,直到产生最终的完善产品。28
  • 29. 定义 框架需求 设计 体系结构 增量 1 (核心产品)分析设计编码测试交付增量 2分析设计编码测试交付增量 n分析设计编码测试交付 最终 软件系统 3.3.3 增量模型像盖楼一样一步一步建造软件 Mills,1980提出 适应用户逐步细化需求的过程,以减少返工29
  • 30. 2.2.3 增量模型优点 整个产品被分解成若干个构件逐步交付,用户可以不断地看到所开发软件的可运行中间版本 将早期增量作为原型有助于明确后期增量的需求 降低开发风险 重要功能被首先交付,从而使其得到最多的测试 缺点 需要软件具备开放式的体系结构,以便各个构件逐步进入 需求难以在增量实现之前详细定义,因此增量与需求的准确映射以及所有增量的有效集成可能会比较困难,容易退化为边做边改方式,使软件过程的控制失去整体性30
  • 31. 将瀑布模型和快速原型模型结合起来 B. Boehm,1988提出 强调了风险分析,特别适合大型复杂软件系统2.2.4 螺旋模型31
  • 32. 2.2.4 螺旋模型每一个回线表示开发过程的一个阶段每一个回线又被分成4个步骤32
  • 33. 2.2.4 螺旋模型螺旋回线:将软件过程划分为若干个开发回线。 每一个回线表示开发过程的一个阶段 例如最中心的第一个回线与系统可行性有关,接着第二个回线与需求定义有关,第三个回线与软件设计有关等,如此反复形成了螺旋上升的过程。 四个步骤:螺旋模型中,每一个回线又被分成4个步骤 计划:确定该阶段目标、完成这些目标的可选方案及其约束条件 风险评估:从风险角度分析方案的开发策略,努力排除各种潜在的风险,在需求不适当的情况下可能需要建造原型系统 软件开发和验证工作 评价该阶段的结果,并规划下一个开发阶段33
  • 34. 2.2.4 螺旋模型优点:风险驱动 关注软件的重用 关注早期错误的消除 将质量目标放在首位 将开发阶段与维护阶段结合在一起 缺点 需要风险评估的经验 适应内部大规模软件开发 34
  • 35. 首先将软件需求描述提炼成采用数学符号表达的形式化描述; 然后经过一系列的形式化转换将形式化描述转换成可执行程序; 最后将整个系统集成起来测试。 形式化描述形式化转换 1 形式化转换 2 ······ 形式化转换 n 集成和 系统测试2.2.5 形式化方法模型需求定义35
  • 36. 2.2.5 形式化方法模型适用 特别适合于那些对安全性、可靠性和保密性要求极高的软件系统,这些系统需要在投入运行前进行验证 优点 由于数学方法具有严密性和准确性,形式化方法开发过程所交付的软件系统具有较少的缺陷和较高的安全性 缺点 开发人员需要具备一定技能并经过特殊训练 形式化描述和转换是一项费时费力的工作,成本高,质量不一定高 现实应用的系统大多数是交互性强的软件,但是这些系统难以用形式化方法进行描述36
  • 37. 使用可重用的组件或商业组件建立复杂的软件系统。 依赖于可复用的软件组件及其相应的集成框架,提高了效率和质量。需求定义组件分析需求修改组件选取 组件库面向复用的 系统设计 开发和集成 组件更新系统验证2.2.6 基于组件的开发模型在确定需求描述的基础上,开发人员首先寻找满足要求的现成组件,必要时设计新的组件。组件选择完成后,设计或选用已有的体系结构框架。将所有组件集成起来,并完成后系统测试。37
  • 38. 2.2.6 基于组件的开发模型组件开发技术的两个重要因素 基于组件的软件体系结构 基于组件的开发过程 优点 充分体现软件复用的思想 实现快速交付软件 缺点 商业组件的修改受到限制,影响系统的演化 38
  • 39. 第二章 软件过程2.3 案例:微软公司的软件开发过程 2.3.1 微软公司的开发管理原则 2.3.2 微软公司的软件过程模型 2.3.3 递进式的软件开发策略39
  • 40. 2.3.1 微软公司的开发管理原则以目标驱动的开发过程 具有外部可见的里程碑 基于多版本的产品发布 并行协作的小型化团队 经常性的同步和稳定40
  • 41. 2.3.2 微软公司的软件过程模型41
  • 42. 2.3.2 微软公司的软件过程模型规划阶段 开展市场调查研究,结合公司战略形成产品的远景目标。 设计阶段 根据产品的远景目标,完成软件的功能规格说明和总体设计,并确定产品开发的主要进度。 开发阶段 整个开发任务划分成若干个递进的阶段,并设置成 M1、M2、……、Mn 等内部里程碑,在每个里程碑都提交阶段性的工作成果。 稳定阶段 实行全面的内部和外部测试,最终形成可发布的版本。 发布阶段 在确认产品质量符合发布标准后发布产品及其相关消息。42
  • 43. •• M1(1/3 功能) – 开发(设计、编码)– 可用性实验 – 内部发布测试 – 系统构建 – 程序调试 – 集成 – 代码稳定 – 缓冲时间• M2(1/3 功能) – 开发 – 可用性实验 – 内部发布测试 – 系统构建 – 程序调试 – 集成 – 代码稳定 – 缓冲时间M3(1/3 功能) – 开发 – 可用性实验 – 内部发布测试 – 系统构建 – 程序调试 – 集成 – 代码稳定 – 缓冲时间 – 零缺陷发布 – 最终产品发布2.3.2 微软公司的软件过程模型递进式的软件开发策略43
  • 44. 递进式的开发策略 解决问题的及时性 不确定和变更因素的可控性 缩短产品上市周期产品的功能并不是在一次开发过程中全部完成的,而是在不断推出的多个版本中逐渐形成和完善。2.3.3 递进式的软件开发策略44
  • 45. 小 结 2.1 软件过程的概念 2.2 软件过程模型 2.3 案例:微软公司的软件开发过程软件过程的定义 软件过程的基本活动:6 软件过程的制品瀑布模型、快速原型模型增量模型、螺旋模型、 形式化方法模型、 基于组件的开发模型递进式的的软件开发策略。 5阶段:规划阶段、设计阶段 开发阶段、稳定阶段、发布阶段45
  • 46. 作业思考题:2.3,2.6 作 业:2.1, 2.2, 2.4, 2.5