软件工程基本原理第一章第二章.ppt

上传人:本田雅阁 文档编号:2604071 上传时间:2019-04-16 格式:PPT 页数:66 大小:651.51KB
返回 下载 相关 举报
软件工程基本原理第一章第二章.ppt_第1页
第1页 / 共66页
软件工程基本原理第一章第二章.ppt_第2页
第2页 / 共66页
软件工程基本原理第一章第二章.ppt_第3页
第3页 / 共66页
亲,该文档总共66页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《软件工程基本原理第一章第二章.ppt》由会员分享,可在线阅读,更多相关《软件工程基本原理第一章第二章.ppt(66页珍藏版)》请在三一文库上搜索。

1、2019/4/16,教材:软件工程 参考教材: 软件工程实践者的研究方法 (美)Roger S. Pressman著 黄柏素 梅宏 译 教学方式:授课(24)实验(24),课 名:软件工程,2019/4/16,第一章 软件工程概述,本章要解决的问题:,软件为什么要工程化? 软件产品如何工程化?,2019/4/16,第一章 软件工程概述,软件危机 软件工程,2019/4/16,软件及其特点,什么是软件 软件的特点 软件的发展,2019/4/16,一、什么是软件,软件 是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。 程序 是按事先设计的功能和性能要求执行的指令序

2、列。 数据 是使程序能正常操纵信息的数据结构 文档 是与程序开发、维护和使用有关的图文材料。,概念,2019/4/16,二、软件的特点,软件具有抽象性。因为它是一种逻辑实体,而不是具体的物理实体。 软件是开发或工程化而形成的。而不是传统意义上的制造产生的。 软件不会磨损。,2019/4/16,故障率曲线,硬件的故障率曲线,理想曲线,实际曲线,2019/4/16,软件是自定义的。他不能通过已有的构件组装而来。 软件对计算机系统有一定的依赖性。其开发和运行常受到计算机系统的限制。 软件成本昂贵,特点,2019/4/16,软件本身是复杂的 实际问题的复杂性 程序逻辑结构的复杂性,例1 Windows

3、95程序超过1000万行 例2 军事和控制系统项目, 3500多人花费了几年时间,交付后相继发现了100个错误,最后以失败告终。,特点,2019/4/16,软件的投入费用越来越高,特点,2019/4/16,三、软件的发展过程,程序设计阶段 50至60年代 程序系统阶段 60至70年 软件工程阶段 70年代以后,2019/4/16,计算机50年的发展,早期 第二代 第三代 第四代 面向批处理 多用户 分布式系统 桌面系统 有限的分布 实时 嵌入“智能” 面向对象技术 自定义软件 数据库 低成本硬件 专家系统 软件产品 消费者的影响 人工神经网络 并行计算 网络计算机,小规模程序 软件作坊 微处理

4、器 网络 软件产品,2019/4/16,共 43 页 第13页,发展带来的新问题:,硬件的发展超过软件发展; 集成度18个月翻一翻,计算速度、存储容量成倍增长,成本每10年递减两位数。 制作软件的能力和速度与需求不适应; 计算机的应用依赖于可靠的软件,软件失败将造成巨大经济损失; 已有的软件难以维护。,2019/4/16,共 43 页 第14页,中国软件产业面临挑战与机遇,外国软件渗透 软件开发投资力度不足 软件侵权行为 软件人才结构不合理,缺乏高级系统程序员和项目负责人。 软件人员缺乏软件工程化的概念。,2019/4/16,共 43 页 第15页,软件已经从特定的问题解决和信息分析工具演化为

5、一门独立的产业!,需要解决的新问题: 软件危机,!,2019/4/16,1-1 软件危机,什么是软件危机 产生危机的原因,2019/4/16,一、什么是软件危机,例: IBM公司在1963年至1966年开发的IBM360机的操作系统。这一项目花了5000人一年的工作量,最多时有1000人投入开发工作,写出了近100万行源程序。据统计,这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。,2019/4/16,项目负责人F. D. Brooks事后总结了他在组织开发过程中的沉痛教训时说:“.正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的

6、灾难。.程序设计工作正像这样一个泥潭,.一批批程序员被迫在泥潭中拼命挣扎,.谁也没有料到问题竟会陷入这样的困境.”。IBM360操作系统的历史教训成为软件开发项目的典型事例为人们所记取。,危机,2019/4/16,危机,问题出在哪里?,项目没有被很好地理解;计划不周,最终导致进度拖延; 文档资料不充分,使人与人的交流变得比写程序困难得多; 缺少度量软件可靠性(reliability) 的标准,质量无法保证; 软件难以维护(maintainability) , 不易升级(evolvability);,2019/4/16,必须意识到:,软件 编程,2019/4/16,软件系统的开发与建造高楼大厦、

7、制造飞机导弹同理,需要工程化方法和工具。,2019/4/16,危机,二、软件危机的主要特征,对软件开发的成本和进度估计常常不准确; 用户对“已完成的” 软件系统不满意; 软件质量不可靠; 软件系统常常不可维护; 软件没有适当的文档资料; 软件成本在计算机系统总成本不断上升; 软件生产率的提高速度既比不上硬件的发展,也跟不上计算机应用迅速普及深入的趋势。,2019/4/16,三、产生危机的原因,软件需求巨增! 软件通用性不强 软件难于度量,原因,2019/4/16,产生危机的原因,用户与软件开发者之间难以沟通 软件难以维护:没有适当的文档资料; 软件的维护是修改原来的设计; 软件开发受硬件的限制

8、 软件是定做而不是组装; 没有工程化的管理和方法。,原因,2019/4/16,共 43 页 第25页,改正一个问题需付出的代价,改正一个问题的估计费用,改正一个问题的估计工作量,2019/4/16,解决问题的途径 软件开发工程化!,如何维护已有的软件?如何使软件的开发速度适应越来越大的软件需求?,2019/4/16,1-2 软件工程,什么是软件工程 软件工程的基本原理 软件工程方法学,2019/4/16,一、软件工程,什么是软件工程?,软件工程是指导计算机软件开发和维护的工程学科。 软件工程是以系统的、工程的概念、原理、技术和方法开发和维护软件,把先进的管理技术和开发技术相结合,经济地开发出高

9、质量的软件并有效地维护它。,概念,软件工程是1968年NATO在计算机科学家国际会议上首次提出来。,2019/4/16,Fritz Bauer的定义:软件工程是为了经济地获得可靠的并能高效运行的软件,而建立和使用的完善的工程化原则。,概念,什么是软件工程?,IEEE的定义:软件工程是开发、运行、维护和修复软件的系统方法。,将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程。,2019/4/16,Boehm提出了软件工程的7条基本原理: 用分阶段的生命周期计划严格管理; 坚持进行阶段评审; 实行严格的产品控制; 采用现代程序设计技术; 结果应能清楚地审查; 开发人员应该少而精;

10、承认不断改进软件工程实践的必要性,二、软件工程基本原理,2019/4/16,一个好的工业,应该有一套良好的标准来配套。,软件的工业化生产过程应具备的特点: 明确的工作步骤 详细具体的规范化文档 明确的质量评价标准,概念,三、软件工程方法学,方法 工具 过程,2019/4/16,软件工程层次图:,管理:支持软件工程的根基在于对质量的关注。 过程:过程将技术层结合在一起,使计算机软件合理并及时开发出来。 方法:涵盖一系列的任务:分析、设计、编程、测试和维护。 工具:对过程、方法提供自动或半自动的支持。例:CASE软件工程环境。,工具(CASE),方法(任务),过程(构建框架),质量管理(基础),计

11、算机辅助软件工程。集成了软件、硬件和一个软件工程数据库(仓库),形成了软件工程环境。,2019/4/16,软件工程的一般视图:,软件工程完成对技术实体(计算机软件)的分析、设计、建造、验证和管理。 软件工程必须回答的问题: 要解决的问题是什么? 实体有哪些特点? 如何实现? 如何建造? 如何及时发现错误? 如何维护?,2019/4/16,软件工程方法学的分类,传统方法学 生命周期方法学(结构化范型) 采用结构化技术完成软件开发的各项任务 面向对象方法学 面向对象方法对象类继承用消息通信,2019/4/16,软件生命周期( life cycle ),什么是软件生命周期?,软件孕育、诞生、成长、成

12、熟、衰亡的生存过程。,问题,为什么要研究软件生命周期?,!生命周期的全过程决定了软件工程的任务。 生命周期的三个组成部分:软件定义、软件开发、软件运行与维护。 生命周期的六个步骤:制定计划、需求分析、设计、程序编码、测试及运行维护。,2019/4/16,为什么称为软件生命周期?,概念,2019/4/16,小结:,什么是软件危机?解决软件危机的途径? 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重的问题; 软件工程化 软件生命周期都有几部分组成? 软件定义、软件开发和软件维护 几个重要的概念: 软件工程、软件危机、软件生命周期,2019/4/16,作业:,、课后练习中的第一题和第三

13、题 、讨论作业: 假设你们是某软件公司的项目经理和系统架构师,现在得到了北京石油化工学院几个部门的软件招标信息:一、图书馆管理系统;二、学生选课系统;三、人事管理系统;四、校医院的收费系统。老板要求你在四个系统中任选一个写项目申请书。(可以几位同学一组,下一节课每一组派一位或多位代表讲申请书),2019/4/16,申请书包括的内容 、问题定义 项目的目的和意义。 、工程目标 系统应解决的问题。 、系统的主要功能及特色 、可行性分析(经济和技术) 经济可行性和技术可行性。,2019/4/16,第二章 软件过程,软件生命周期的基本任务 软件设计模型,2019/4/16,一、软件生命周期的基本任务,

14、问题定义 “要解决什么问题?” 可行性研究 “上一个阶段所确定的问题是否有行得通的解决办法” 目的:用最小的代价在尽可能短的时间内确定问题是否能够解决,2019/4/16,需求分析 “系统必须做什么” 对待开发软件提出的需求进行分析并给出详细的定义 编写软件需求规格说明书 提交管理机构评审,2019/4/16,概要设计 把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应 详细设计 对每个模块要完成的工作进行具体的描述,为源程序编写打下基础 编写设计说明书,提交评审。,2019/4/16,编码 把软件设计转换成计算机可以接受的程序代码,即写成以某一种

15、特定程序设计语言表示的“源程序清单” 写出的程序应当是结构良好、清晰易读的,且与设计相一致的,2019/4/16,软件测试 单元测试: 查找各模块在功能和结构上存在的问题并加以纠正 组装测试: 将已测试过的模块按一定顺序组装起来 按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用,2019/4/16,软件维护 改正性维护: 运行中发现了软件中的错误需要修正 适应性维护: 为了适应变化了的软件工作环境,需做适当变更 完善性维护: 为了增强软件的功能需做变更,2019/4/16,共 43 页 第47页,2.2瀑布模型,GB8566-88将软件生命周期划分为8个阶段,问

16、题定义 可行性研究,概要设计 详细设计,2019/4/16,实际瀑布模型,特点: 阶段间具有顺序性和依赖性 推迟实现的观点(逻辑设计与物理设计分开) 质量保证观点,线性顺序,2019/4/16,2.3快速原型模型,用于最终系统的早期用户评价。 特点: 开发工期短; 质量有保证; 风险最低,听取用 户意见,建造/修改 原型,用户测试 运行原型,2019/4/16,2.4增量模型,先完成一个系统子集的开发,再按同样的开发步骤增加功能 (系统子集),如此递增下去直至满足全部系统需求。 系统的总体设计在初始子集设计阶段就应作出设想,2019/4/16,2.5螺旋模型,基本思想:使用原型及其他方法尽量降

17、低风险(每个阶段前都增加了风险分析)。 适应:大规模软件,利于已有软件的重用 减少过多的测试带来的风险 维护和开发没有本质的区别,优点:,2019/4/16,将原型的迭代特征与线性顺序模型中控制的和系统化的方法结合起来。,2019/4/16,2.6喷泉模型,迭代 重复 演进 无间隙 各阶段间无明显界限,2019/4/16,2019/4/16,2.7 Rational统一过程(rational unified process,RUP),Rational公司推出的一个软件开发过程框架,指团队可以根据具体的项目组或软件开发企业的不同需求,能够定义、配置、定制和实施一致的软件开发过程。 核心元素: 1

18、、用于成功开发软件的一组基本观念和原则 2、一套关于可重用方法内容和过程 3、基础的方法和过程定义语言,2019/4/16,2.7.1 最佳实践,软件开发是一项团队活动,理想情况下通过团队的默契合作,完成贯穿软件生命周期的各阶段。 最佳实践 1、迭代式开发 2、管理需求(使用用例和脚本) 3、使用基于组件的架构(组件是功能清晰的模块或子系统) 4、可视化建模(通常建立问题模型的方法) 5、验证软件质量(贯穿于整个的开发过程) 6、控制软件变更(管理变更的能力),2019/4/16,2.7.2 RUP的十大要素,(1)前景:制定前景 关键术语、解决什么问题、谁是干系人和用户、产品特性、功能性和非

19、功能性需求、设计约束 (2)计划:按计划管理 software development plan,SDP综合了管理项目所需的各种信息。“计划并不重要,重要的是实施计划”。计划、风险、业务案例、架构以及控制变更是管理流程的要点 (3)风险:降低风险并跟踪相关问题(识别风险) (4)业务案例:检验业务案例 从业务立场提供了确定该项目是否值得投资的必要信息。 (5)架构:设计组件架构 指一个系统关键部件的组织或结构,组件之间通过接口交互,而组件是由一些更小的组件和接口组成的。,2019/4/16,2.7.2 RUP的十大要素,(6)原型:增量地构建和测试产品 (7)评估:定期评估结果 (8)变更请求

20、:管理并控制变更 (9)用户支持:部署可用的产品 (10)过程:采用适合项目的过程,2019/4/16,2.7.3 RUP生命周期,核心工作流(前6个核心过程工作流程,后3个核心支持工作流程),2019/4/16,2.7.3 RUP生命周期,工作阶段,RUP迭代式开发,2019/4/16,2.8 敏捷过程与极限编程,2.8.1 敏捷过程概述 “个体和交互”胜过“过程和工具” “可以使用的软件”胜过“面面俱到的文档” “客户合作”胜过“合同谈判” “相应变化”胜过“遵循计划”,2019/4/16,“极限”的含义是把好的开发实践运用到极致。广泛应用于需求模糊且经常改变的场合。,2.8.2 极限编程

21、(extreme programming,XP),2019/4/16,2.9 能力成熟度模型,能力成熟度模型(capability maturity model,CMM)并不是一个软件生命周期模型,而是改进软件过程的一种策略,与实际使用的过程模型无关。 基本思想:因为问题是由管理软件过程的方法不当引起的,所以新软件技术的运用并不会自动提高生产率和软件质量。能力成熟度模型有助于软件开发组织建立一个有规律的、成熟的软件过程。改进后的过程将开发出质量更好的软件,使更多的软件项目免受时间和费用超支之苦。,2019/4/16,CMM结构,2.9.1 能力成熟度模型结构,2019/4/16,2.9.2 能力成熟度等级,2019/4/16,作业:,结合思考题阅读教材第一、二章,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1