1 / 72

软件工程

软件工程. 周志钊 zhouzhizhao08@163.com. 软件的定义.  在运行中能提供所希望的功能和性能的指令集(即 程序 ) 使程序能够正确运行的 数据 描述程序研制过程和方法使用的 文档. 可执行部分. 不可执行部分. 软 件. 文档 3. 程序. 文档 2. 文档 1. 个体化. 作坊. 工程. 产业化. 软件的发展. 50’ 中期 ~60’ 中期 60’ 中期 ~70’ 中期 70’ 中期 ~80’ 中期 80’ 中期 ~ 现在. 软件产业化产品举例. 操作系统 网络协议

guy-david
Download Presentation

软件工程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 软件工程 周志钊 zhouzhizhao08@163.com

  2. 软件的定义 在运行中能提供所希望的功能和性能的指令集(即程序) 使程序能够正确运行的数据 描述程序研制过程和方法使用的文档 可执行部分 不可执行部分 软 件 文档3 程序 文档2 文档1

  3. 个体化 作坊 工程 产业化 软件的发展 50’中期~60’中期 60’中期~70’中期 70’中期~80’中期 80’中期~现在

  4. 软件产业化产品举例 • 操作系统 • 网络协议 • Office、DBMS、Matlab • MIS、ERP • 嵌入式软件 • 人工智能软件

  5. 软件产业化产品举例

  6. 软件产业化产品举例

  7. 软件产业化产品举例

  8. 软件、硬件成本变化趋势 100% 80% 硬 件 软件开发 60% 40% 20% 软件维护 1955年 1970年 1985年

  9. 在计算机软件的开发和维护过程中所遇到的一系列严重问题。在计算机软件的开发和维护过程中所遇到的一系列严重问题。 定义 软件危机 软件危机的具体表现: ·开发成本和进度估计不准 ·用户对“已完成的”软件系统不满意 ·软件质量往往靠不住 ·软件常常是不可维护的 ·软件通常没有适当的文档资料 ·软件成本逐年上升 ·软件开发生产率滞后于硬件和计算机应用普及

  10. 软件工程构成三要素 用工程、科学和数学的原则与方法开发、维护计算机软件的有关技术及管理方法。 软件工程 软件工程的概念 软件工程 • 过程 管理部分 过程 工具 • 方法 “如何做” 技术手段 方法 • 工具 自动或半自动地支持软件的支撑环境(开发和管理) • 要素之间相互关联和支持

  11. 软件从定义开始,经过开发、使用和维护,直到最终退役的全过程。软件从定义开始,经过开发、使用和维护,直到最终退役的全过程。 软件生 存周期 软件生存周期

  12. 软件生存周期 可行性研究 软件定义 需求分析 概要设计 详细设计 软件开发 实 现 集成测试 确认测试 软件使用与维护 使用与维护 退役

  13. 1 . 软件定义 • 软件定义的基本任务是确定软件系统的工程需求,也就是要搞清“做什么”。 • 软件定义过程可通过软件系统的可行性研究和需求分析两个阶段来完成。

  14. 1)可行性研究 • 确定用户要求解决的项目的性质、目标和规模。 • 可行性研究 • 经济可行性、技术可行性、操作可行性、法律可行性、不同的方案。 • 确定软件元素的作用范围,并对软件进行成本估算,制定进度安排,最后提交软件开发计划。

  15. 2)软件需求分析 • 确定系统必须具有的功能和性能,系统要求的运行环境,接口需求,并且预测系统发展的前景。 • 需求分析可以划分成四个方面的工作: • 问题的认识 • 评价和综合 • 需求规格说明书(SRS) • 复审 • 面向数据流的分析方法是需求分析的主要方法,其中最典型的就是结构化方法(简称SA方法)。

  16. 2 . 软件开发 • 软件开发的基本过程是软件开发人员按照需求规格说明的要求,由抽象到具体,直到生成程序,并进行全面的测试,最后生产软件产品。 • 软件开发过程由概要设计、详细设计、实现(即编码与单元测试)、组装测试、验收测试共5个阶段组成。

  17. 1)总体设计 • 软件设计的任务 • 数据设计 • 体系结构设计 • 接口设计 • 过程设计 • 总体设计的基本任务是确定模块分解、各模块功能和模块间接口,设计全局数据结构 。 • 著名的软件设计方法 • 逐步精化-自顶向下设计方法 • 面向数据的设计方法,面向数据流的设计方法 • 面向对象的设计 • 阶段性成果: 概要设计说明书; 数据库或数据结构说明书; 组装测试计划等文档。

  18. 2)详细设计 • 详细设计各模块的实现细节和局部数据结构 • 详细设计工具 • 图形工具 • 流程图、N-S图、判定表、判定树、问题分析图 • 列表工具 • HIPO(Hierarchy plus Input,Process, Output) • 语言工具 • PDL(Program Design Language)

  19. 3)编码实现 • 把软件设计转换成计算机可以接受的程序代码。 • 选择易学、使用方便的编程语言,以利于减少出错的概率和提高软件的可靠性。 • 编程风格是在不影响软件性能的前提下,有效地组织和编写程序,提高软件的易读性、易测试性和易维护性。

  20. 开发软件不仅仅是编程

  21. 4)测试 • 软件测试的目标是尽可能多地发现错误,一次成功的测试是发现至今没有发现的错误。 • 测试不仅要对软件内部逻辑进行测试,还要对其外部功能进行测试。 • 测试在软件生命期中横跨两个阶段: • 程序员在编写出每个模块之后进行的必要的测试,即单元测试 • 专门的测试人员对系统进行的各种综合测试

  22. 3 . 软件的使用与维护 • 任务: 通过各种维护活动使软件系统持久地满足用户的需求。 • 每项维护活动实质上都是一次压缩和简化了的软件定义和软件开发过程。都要经历提出维护要求、分析维护要求、提出维护方案、审批维护方案、确定维护计划、修改软件设计、修改程序、测试程序、评审、验收等步骤。

  23. 维护是软件的开发工作完成以后在用户使用期间对软件所做的补充、修改和增加工作。维护是软件的开发工作完成以后在用户使用期间对软件所做的补充、修改和增加工作。 • 维护工作分成以下四类: • 纠错性维护 • 适应性维护 • 改善性维护 • 预防性维护 • 软件的易理解性、易测试性和易修改性是决定软件易维护性的基本因素。

  24. 习题1.1 • 指出下列文档是在软件生命周期的哪个阶段产生的: • 最终用户手册,体系结构设计 • 软件质量保证(SQA)计划,模块规格说明 • 源代码,工作陈述,计划测试 • 初级用户手册,详细设计,成本估计 • 项目计划,测试报告,文档

  25. 习题1.1

  26. 软件开发模型 软件开发模型是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。 软件开发模型也常称为: 软件过程模型 软件生存周期模型 软件工程范型

  27. 软件开发模型的几种类型: • 以软件需求完全确定为基础的瀑布模型; • 在开发初期仅给出基本需求的渐进式模型,如原型模型、螺旋模型、喷泉模型等; • 以形式化开发方法为基础的变换模型、基于四代技术的模型; • 基于知识的智能模型等等。 在实际开发时,应根据项目的特点和现有的条件选取合适的模型,也可以把几种模型组合起来使用以便充分利用各模型的优点。

  28. 1.瀑布模型(Waterfall Model) • 由Winston Royce 在1970年最早提出的软件开发模型。 • 规定了各项软件工程活动,以及它们自上而下,相互衔接的固定次序,如同瀑布流水,逐级下落。 • 是一种以文档为驱动的模型。

  29. 瀑布模型

  30. 可行性研究 需求分析 概要设计 详细设计 实现 组装测试 验收测试 使用与维护 退役 带反馈的瀑布模型

  31. 瀑布模型主要问题: • 线性过程太理想化 • 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量; • 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险; • 早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。

  32. 2. 快速原型模型(Rapid Prototype Model) • 在软件计划时期定义的用户需求往往是不完全和不准确的,或开发者不能确定算法的有效性、操作系统的适应性或人机交互的形式 • 分为抛弃模型和演化模型

  33. 2. 原型模型示意图

  34. 软件开发过程举例— 需求分析

  35. 软件开发过程举例— 可行性研究

  36. 软件开发过程举例— 可行性研究

  37. 软件开发过程举例— 概要设计

  38. 软件开发过程举例— 概要设计

  39. 软件开发过程举例— 详细设计

  40. 软件开发过程举例— 系统实现

  41. 3.增量模型(Incremental Model) • 软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成 • 第一个增量往往是实现基本需求的核心产品。核心产品交付用户使用后,经过评价形成下一个增量的开发计划,它包括对核心产品的修改和一些新功能的发布。这个过程在每个增量发布后不断重复,直到产生最终的完善产品。

  42. 成本 计划: 明确目标、约束条件 选择方案 风险分析 构造原型 顺时针为进展方向 风险分析 实现计划 风险分析 开发计划 可操作 的原型 风险分析 需求精化计划 原型3 风险分析 原型2 生命周期计划 需求计划 原型1 评审 决策 建模 模拟 操作概念 评价 需求评价 软件需求 详细 设计 软件产品 设计 验收测试计划 需求确认 组装测试计划 设计验证与确认 编码 单元 测试 组装 测试 验收 测试 用户评价;阶段评审 实现 工程实现 4.螺旋模型(Spiral Model)

  43. 四个象限上分别表达四个方面的活动 • 螺旋模型沿着螺线旋转,在笛卡尔坐标的四个象限上分别表达了四个方面的活动: • 制定计划。确定软件目标,选定实施方案,弄清项目开发的限制条件。 • 风险分析。分析所选方案,考虑如何识别和消除风险。 • 实施工程。实施软件开发。 • 客户评估。评价开发工作,提出修正建议。 

  44. 螺旋模型的优点 • 支持用户需求的动态变化。 • 原型可看作形式的可执行的需求规格说明,易于为用户和开发人员共同理解,还可作为继续开发的基础,并为用户参与所有关键决策提供了方便。 • 螺旋模型特别强调原型的可扩充性和可修改性,原型的进化贯穿整个软件生存周期,这将有助于目标软件的适应能力。 • 螺旋模型为项目管理人员及时调整管理决策提供了方便,进而可降低开发风险。

  45. 螺旋模型的缺点和适应场合 • 缺点: ①如果每次迭代的效率不高,致使迭代次数过多,将会增加成本并推迟提交时间; ②使用该模型需要有相当丰富的风险评估经验和专门知识,要求开发队伍水平较高。 • 适应场合:支持需求不明确、特别是大型软件系统的开发,并支持面向规格说明、面向过程、面向对象等多种软件开发方法,是一种具有广阔前景的模型。

  46. 5.喷泉模型(Fountain Model) • 由B.H.Sollers和J.M.Edwards于1990年提出。 • 喷泉模型对软件复用和生存期中多项开发活动的集成提供了支持,主要支持面向对象的开发方法。"喷泉"一词本身体现了迭代和无间隙特性。系统某个部分常常重复工作多次,相关功能在每次迭代中随之加入演进的系统。所谓无间隙是指在开发活动,即分析、设计和编码之间不存在明显的边界。

  47. 演 化 维 护 测 试 实 现 设 计 分 析 喷泉模型 1.软件系统可维护性较好; 2.各阶段相互重叠; 3.整个模型是一个迭代的过程; 4.具有增量开发特性,即能做到分析一点、设计一点、实现一点,测试一点,使相关功能随之加入到演化的系统中。 5.模型是对象驱动的; 6.支持软部件的重用。

  48. 习题1.2 • 指出瀑布开发模型中下列任务的顺序: • 接收测试、项目计划、单元测试、需求评审、成本估计、总体设计、市场分析、详细设计、系统测试、设计评审、实现、需求规格说明。

  49. 习题1.2 • 市场分析 • 项目计划、成本估计、需求规格说明 • 需求评审 • 总体设计 • 详细设计 • 设计评审 • 实现 • 单元测试、系统测试、接收测试

  50. 软件开发方法、工具和环境 • 软件开发方法: 1、结构化方法 结构化方法是面向过程的软件开发方法,把系统作为过程的集合,过程与数据进行交互,过程接受输入并产生输出,实现系统功能。 通常包括SA、SD和SP三个方面,SA和SD是生命周期方法学的基本方法。

More Related