第1章 软件工程学概述
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
瀑布模型
问题定义 定 义 可行性研究
需求分析
总体设计 开 发
详细设计
编码和单元测试
综合测试
维护 维护
问题定义
要解决的问题是什么?
确定要开发软件系统的总目标
给出功能、性能、可靠性以及接口等方面的要求
可行性研究
必须回答的关键问题是:“对于上一个阶段所确
定的问题有行得通的解决办法吗?”
软件本身的特点
缺乏可见性,完成前不易衡量其好坏
复杂性随规模增加呈指数上升,无法保证质量
用户的原因
需求不明或易变,认为软件可以随意改动
开发和管理人员的原因
不重视文档,只重视编码
开发随意性大,维护困难
图1.1 引入同一变动付出的代价随时间变化的趋势
1.1.3 消除软件危机的途径
(3)按照父类与子类的关系,把若干个相关类组成 一个层次结构的系统。在该层次中,派生类自动拥 有上层基类中定义的数据和操作,这种现象称为继 承。
(4)对象彼此间仅能通过发送消息互相联系。
面向对象方法学的优点
对象比功能稳定
需求变化可以限制在对象内
对象独立性好,增减对象对外部影响小 根据需求可不断进化
软件工程的基本原理
1. 用分阶段的生命周期计划严格管理(领导干预)
2. 坚持进行阶段评审(LED屏项目,GPS项目)
3. 实行严格的产品控制(修改要批准,华为,灯)
4. 采用现代程序设计技术
5. 结果应能清楚的审查
6. 开发小组的人员应该少而精(通讯开销)
7. 承认不断改进软件工程实践的必要性
1.2.3 软件工程方法学
软件工程的本质特征: 1. 软件工程关注大型程序的构造 2. 软件工程的中心课题是控制复杂性 3. 软件经常变化 4. 开发软件的效率非常重要 5. 和谐的合作是开发软件的关键 6. 软件必须有效地支持它的用户 7. 在软件工程领域中是由具有一种文化背景的人 替具有另一种文化背景的人创造产品
1.2.2
过程定义了运用方法的顺序、应交付的文档资料、
为保证软件质量和协调变化所需要采取的管理措施 ,以及标志软件开发各个阶段任务完成的里程碑。 为了获得高质量软件产品,软件过程必须科学、有 效。
每一种软件的开发过程不尽相同。通常使用生命周
期模型简洁的描述软件过程。生命周期模型规定了 把软件生存期划分成哪些阶段以及各个阶段的顺序 ,因此,也称为过程模型。
通常把在软件生命周期全过程中使用的一整套 技术方法的集合称为方法学(methodology),也 称为范型(paradigm)。 软件工程方法学包含3个要素:方法、工具和 过程。其中,方法是完成软件开发的各项任务的技 术方法,回答“怎样做”的问题;工具是为运用方 法而提供的自动的或半自动的软件工程支撑环境; 过程是为了获得高质量的软件所需要完成的一系列 任务的框架。 目前使用的最广泛的软件工程方法学,分别是 传统方法学和面向对象方法学。
软件工程学概述
课程的要求、目标及特点
课程的主要内容
考核办法 软件工程产生的原因
传统软件开发方法学
面向对象的软件开发方法学 软件过程模型
课程的要求、目标及特点
要求
有一定的编程基础
自学能力
目标
了解软件工程学基本原理、规范、方法,提高对软件
项目的分析设计能力 开阔视野,建立项目概念,思考职业规划,增强未来 竞争力
软件工程典型的定义
“软件工程就是为了经济地获得可靠的且能在实 际机器上有效地运行的软件 ,而建立和使用完善的工 程原理。”该定义不仅指出了软件工程的目标是经济 目标是经济地开发出高质量的软件,而且强调了软件工 程是一门工程学科,它应该建立并使用完善的工程原理。 1993年IEEE(The Institute for Electrical and Electronic engineers)进一步给出了一个更全面 更具体的定义:“软件工程是:(1) 把系统的、规范 的、可度量的途径应用于软件开发、运行和维护过程, 也就是把工程应用于软件;(2)研究(1) 中提到的途径。
要有技术措施,也要有管理措施
1.2 软件工程
1.2.1 软件工程的介绍
为了克服软件危机,科学家们从其他产业(如机械制 造、建筑等)的工程化生产得到启示,提出了“软件 工程”的概念。 概括地说,软件工程是指导计算机软件开发和维护的 工程学科。采用工程的概念、原理、技术和方法来开 发与维护软件,把经过时间考验而证明正确的管理技 术和当前能够得到的最好的技术方法结合起来,以经 济地开发出高质量的软件并有效地维护它,这就是软 件工程。
估计可利用的资源(计算机硬件,软件,人力等)
、成本、效益、开发进度 完成可行性研究报告 提交评审
需求分析和定义
准确的确定“为了解决这个问题,目标系统必须做
什么”,主要是确定目标系统必须具备那些功能。
对待开发的软件提出的需求进行分析并给出详细的
定义
编写软件需求规格说明书,初步的用户手册,测试
结构化程序设计
第四个时期,上世纪80年代中期以后
面向对象程序设计
软件危机
软件危机是指在计算机软件的开发和维护过程中所
遇到的一系列严重问题,包括:
费用过高 严重超期
失败率高
可靠性差 难以维护
1.1 软件危机
大型软件,>50,000行高级语言代码
阿波罗登月计划的软件有1000万行代码
1.4.1 瀑布模型
特点
理论性强,抽象,适合高年级学习 以概要性介绍为主 需要在实践中提高能力
课程的主要内容
软件工程过程的主要活动,如需求分析,设计,测
试 软件开发方法学
传统方法学
面向对象方法学
项目管理知识 实践环节,基于实际的应用,完成设计、分析
多看书,多编程,多交流,积累经验
结构化方法
结构化方法是70年代末由DeMarco、Yourdon、
Constantine等人提出的系统的开发方法,包括结构 化分析 (SA )、结构化设计(SD)和结构化程序 设计(SP) IDEF、ER方法等。
无论系统多么复杂,总可以自顶向下被分解成若干
个子系统,更小的子系统,分别进行分析设计。
IBM 360 大型机操作系统开发人员最多时达到1000
人,从1963年到1966年花费4年时间完成,总计耗费 约5000人年。经反复修改,仍有上千条错误 1965年-1970年,美国范登堡空间试验基地多次发射 火箭失败,绝大部分因为程序错误
软件的复杂性超出了个人能力控制的范围
1.1.1 软件危机的表现
软件工程 Ian Sommerville 机械工业出版社
参考书
软件工程过程 Pierre N. Robillard 清华大学出版社
其他资源
网上搜索,知名网站,信息的权威性
外文书每章后面的“进一步阅读”所列的内容
学校图书馆中外文网络数据库
软件发展的历史
早期,上世纪60年代中期之前
设计结果
编码和单元测试
把软件设计转换成计算机语言代码,即源程序
写出的程序应当是结构良好、清晰易读,且和设计
相一致 单元测试
查找各模块在功能和结构上的问题并加以纠正
综合测试
集成测试
将已测试过的模块按一定顺序组装起来,再进行测试
,以发现与接口有关的问题
验收测试
按照需求规格说明书的规定,由用户(参与)对目标
综合测试 维护
符合要求的软件 持久的满足用户需要的软件
综合测试方案和结果 完整一致的软件配置 完整准确的维护记录
1.4 软件过程
软件过程是为获得高质量软件所需要完成的一系列
任务的框架,它Fra Baidu bibliotek现了完成各项任务的工作步骤。
概括地说,软件过程描述为了开发出客户需要的软
件,什么人(who)、在什么时候(when)、做什么 事(what)以及怎样做(how)这些事以实现某一 特定的具体目标。
编写者和使用者往往是同一个人
第二个时期, 上世纪60年代中期-70年代中期
软件作坊,个体软件开发方法,生产软件产品 出现软件危机 1968年北大西洋公约组织(NATO) 在联邦德国召开国际会
议,讨论软件危机问题,正式提出“软件工程”这个词, 一门新兴的工程学科就此诞生。
第三个时期,上世纪70年代中期-80年代中期
考核方法
笔试 出勤 大作业
软件设计报告 学期中间布置,三周时间完成 1-3人一组 根据要求,进行需求分析、系统设计
制作PPT,组内代表在课堂上讲解5-10分钟
学期末上交PPT的打印稿和电子版
参考书
软件工程—实践者的研究方法 Roger S.Pressman 机械工业出版社
关键问题 问题是什么? 有可行的解吗?
需求分析
系统必须做什么?
总体设计
系统应该如何实现?
系统说明 用户手册 测试计划 详细实现计划 数据库设计结果
表1.1
阶段 详细设计 编码和单 元测试
结构分析设计过程小结
关键问题 结束标准 编码规格说明
怎样具体实现这个系统? 正确的程序模块
HIPO图或PDL
源程序清单 单元测试方案和结果
2. 面向对象方法学 面向对象方法学具有下述4个要点: (1)把对象(object )作为融合了数据及在数据上 的操作行为的统一的软件构件。面向对象程序是由 对象组成的,程序中任何元素都是对象,复杂对象 由比较简单的对象组合而成,也就是说,用对象分 解取代了传统方法的功能分解。 (2)把所有对象都划分成类(class)。每个类都 定义了一组数据和一组操作,类是对具有相同数据 和相同操作的一组相似对象的定义。数据用于表示 对象的静态属性,是对象的状态信息,而施加于数 据之上的操作用于实现对象的动态行为。
软件开发的成本和进度估计很不准确
用户对已完成的软件不满意
软件质量不可靠 软件维护困难或不可维护
缺少适当的文档
软件成本占计算机系统总成本的比例逐年上升
20世纪60年代初占10-20% 60年代中期占50% 70年代初占80%以上
软件生产率提高速度缓慢
1.1.2 软件危机产生的原因
方案 提交评审
软件设计
回答:“系统应该如何实现?”
总体设计
把各项需求转换成软件的体系结构,结构中每个模块
都和一个需求相对应 从各种可能的设计方案里选择最佳方案
详细设计
对每个模块要完成的工作进行具体的描述,为编写源
程序打下基础
完成文档,提交评审
系统说明,用户手册,测试计划,实现计划,数据库
传统方法学的问题
传统方法学要求对上一阶段结果进行固定,才能开
始下一阶段的工作
如果软件系统规模庞大,需求模糊且不断变化,传
统方法学必须反复从头再来,造成系统结构不稳定 ,无法保证进度和质量
而需求不断变化是现代软件的一个重要特征,因为
环境变化太快(人员、机构调整,平台、技术变化 )(短信服务平台、云计算)
系统进行测试
文档
测试计划、详细测试方案和测试报告
软件维护
改正性维护
运行中发现软件的错误,需要修改
适应性维护
为了适应变化的工作环境,对软件进行适当变更
完善性维护
为增强软件的功能需做维护
预防性维护
表1.1
阶段 问题定义 可行性研 究
结构分析设计过程小结
结束标准 关于规模和目标的报告书 系统的高层逻辑模型 数据流图 成本/效益分析报告 可行性研究报告 系统的逻辑模型 数据流图、数据字典、算法描述 需求规格说明书 初步用户手册
1、传统方法学
传统方法学也称为生命周期方法学或结构化范型。 它采用结构化技术(结构化分析、结构化设计和结构 化实现)来完成软件开发的各项任务,并使用适当的 软件工具或软件工程环境来支持结构化技术的运用。 该方法把软件生命周期的全过程依次划分为若干 个阶段,然后顺序地完成每个阶段的任务。前一阶段 任务的完成是下一阶段工作开始的前提和基础。每一 阶段的开始和结束都有严格的标准,在每一阶段的结 束之前都必须进行正式严格的技术审查和管理复审。
两种方法学比较
“银行帐户”对象 ?? 存款 存款
取款
帐户余额 取款
帐户余额 利息 结算
利息结算
过程式编程范型 数据和操作分离
面向对象编程范型 数据和操作成为整体
软件开发方法学现状
软件开发取得了巨大的进展
软件超期、超预算甚至失败的情况仍普遍存在
软件工程学仍是最活跃的研究领域之一
生命周期各阶段的任务
问题定义 定 义 可行性研究
需求分析
总体设计 开 发
详细设计
编码和单元测试
综合测试
维护 维护
问题定义
要解决的问题是什么?
确定要开发软件系统的总目标
给出功能、性能、可靠性以及接口等方面的要求
可行性研究
必须回答的关键问题是:“对于上一个阶段所确
定的问题有行得通的解决办法吗?”
软件本身的特点
缺乏可见性,完成前不易衡量其好坏
复杂性随规模增加呈指数上升,无法保证质量
用户的原因
需求不明或易变,认为软件可以随意改动
开发和管理人员的原因
不重视文档,只重视编码
开发随意性大,维护困难
图1.1 引入同一变动付出的代价随时间变化的趋势
1.1.3 消除软件危机的途径
(3)按照父类与子类的关系,把若干个相关类组成 一个层次结构的系统。在该层次中,派生类自动拥 有上层基类中定义的数据和操作,这种现象称为继 承。
(4)对象彼此间仅能通过发送消息互相联系。
面向对象方法学的优点
对象比功能稳定
需求变化可以限制在对象内
对象独立性好,增减对象对外部影响小 根据需求可不断进化
软件工程的基本原理
1. 用分阶段的生命周期计划严格管理(领导干预)
2. 坚持进行阶段评审(LED屏项目,GPS项目)
3. 实行严格的产品控制(修改要批准,华为,灯)
4. 采用现代程序设计技术
5. 结果应能清楚的审查
6. 开发小组的人员应该少而精(通讯开销)
7. 承认不断改进软件工程实践的必要性
1.2.3 软件工程方法学
软件工程的本质特征: 1. 软件工程关注大型程序的构造 2. 软件工程的中心课题是控制复杂性 3. 软件经常变化 4. 开发软件的效率非常重要 5. 和谐的合作是开发软件的关键 6. 软件必须有效地支持它的用户 7. 在软件工程领域中是由具有一种文化背景的人 替具有另一种文化背景的人创造产品
1.2.2
过程定义了运用方法的顺序、应交付的文档资料、
为保证软件质量和协调变化所需要采取的管理措施 ,以及标志软件开发各个阶段任务完成的里程碑。 为了获得高质量软件产品,软件过程必须科学、有 效。
每一种软件的开发过程不尽相同。通常使用生命周
期模型简洁的描述软件过程。生命周期模型规定了 把软件生存期划分成哪些阶段以及各个阶段的顺序 ,因此,也称为过程模型。
通常把在软件生命周期全过程中使用的一整套 技术方法的集合称为方法学(methodology),也 称为范型(paradigm)。 软件工程方法学包含3个要素:方法、工具和 过程。其中,方法是完成软件开发的各项任务的技 术方法,回答“怎样做”的问题;工具是为运用方 法而提供的自动的或半自动的软件工程支撑环境; 过程是为了获得高质量的软件所需要完成的一系列 任务的框架。 目前使用的最广泛的软件工程方法学,分别是 传统方法学和面向对象方法学。
软件工程学概述
课程的要求、目标及特点
课程的主要内容
考核办法 软件工程产生的原因
传统软件开发方法学
面向对象的软件开发方法学 软件过程模型
课程的要求、目标及特点
要求
有一定的编程基础
自学能力
目标
了解软件工程学基本原理、规范、方法,提高对软件
项目的分析设计能力 开阔视野,建立项目概念,思考职业规划,增强未来 竞争力
软件工程典型的定义
“软件工程就是为了经济地获得可靠的且能在实 际机器上有效地运行的软件 ,而建立和使用完善的工 程原理。”该定义不仅指出了软件工程的目标是经济 目标是经济地开发出高质量的软件,而且强调了软件工 程是一门工程学科,它应该建立并使用完善的工程原理。 1993年IEEE(The Institute for Electrical and Electronic engineers)进一步给出了一个更全面 更具体的定义:“软件工程是:(1) 把系统的、规范 的、可度量的途径应用于软件开发、运行和维护过程, 也就是把工程应用于软件;(2)研究(1) 中提到的途径。
要有技术措施,也要有管理措施
1.2 软件工程
1.2.1 软件工程的介绍
为了克服软件危机,科学家们从其他产业(如机械制 造、建筑等)的工程化生产得到启示,提出了“软件 工程”的概念。 概括地说,软件工程是指导计算机软件开发和维护的 工程学科。采用工程的概念、原理、技术和方法来开 发与维护软件,把经过时间考验而证明正确的管理技 术和当前能够得到的最好的技术方法结合起来,以经 济地开发出高质量的软件并有效地维护它,这就是软 件工程。
估计可利用的资源(计算机硬件,软件,人力等)
、成本、效益、开发进度 完成可行性研究报告 提交评审
需求分析和定义
准确的确定“为了解决这个问题,目标系统必须做
什么”,主要是确定目标系统必须具备那些功能。
对待开发的软件提出的需求进行分析并给出详细的
定义
编写软件需求规格说明书,初步的用户手册,测试
结构化程序设计
第四个时期,上世纪80年代中期以后
面向对象程序设计
软件危机
软件危机是指在计算机软件的开发和维护过程中所
遇到的一系列严重问题,包括:
费用过高 严重超期
失败率高
可靠性差 难以维护
1.1 软件危机
大型软件,>50,000行高级语言代码
阿波罗登月计划的软件有1000万行代码
1.4.1 瀑布模型
特点
理论性强,抽象,适合高年级学习 以概要性介绍为主 需要在实践中提高能力
课程的主要内容
软件工程过程的主要活动,如需求分析,设计,测
试 软件开发方法学
传统方法学
面向对象方法学
项目管理知识 实践环节,基于实际的应用,完成设计、分析
多看书,多编程,多交流,积累经验
结构化方法
结构化方法是70年代末由DeMarco、Yourdon、
Constantine等人提出的系统的开发方法,包括结构 化分析 (SA )、结构化设计(SD)和结构化程序 设计(SP) IDEF、ER方法等。
无论系统多么复杂,总可以自顶向下被分解成若干
个子系统,更小的子系统,分别进行分析设计。
IBM 360 大型机操作系统开发人员最多时达到1000
人,从1963年到1966年花费4年时间完成,总计耗费 约5000人年。经反复修改,仍有上千条错误 1965年-1970年,美国范登堡空间试验基地多次发射 火箭失败,绝大部分因为程序错误
软件的复杂性超出了个人能力控制的范围
1.1.1 软件危机的表现
软件工程 Ian Sommerville 机械工业出版社
参考书
软件工程过程 Pierre N. Robillard 清华大学出版社
其他资源
网上搜索,知名网站,信息的权威性
外文书每章后面的“进一步阅读”所列的内容
学校图书馆中外文网络数据库
软件发展的历史
早期,上世纪60年代中期之前
设计结果
编码和单元测试
把软件设计转换成计算机语言代码,即源程序
写出的程序应当是结构良好、清晰易读,且和设计
相一致 单元测试
查找各模块在功能和结构上的问题并加以纠正
综合测试
集成测试
将已测试过的模块按一定顺序组装起来,再进行测试
,以发现与接口有关的问题
验收测试
按照需求规格说明书的规定,由用户(参与)对目标
综合测试 维护
符合要求的软件 持久的满足用户需要的软件
综合测试方案和结果 完整一致的软件配置 完整准确的维护记录
1.4 软件过程
软件过程是为获得高质量软件所需要完成的一系列
任务的框架,它Fra Baidu bibliotek现了完成各项任务的工作步骤。
概括地说,软件过程描述为了开发出客户需要的软
件,什么人(who)、在什么时候(when)、做什么 事(what)以及怎样做(how)这些事以实现某一 特定的具体目标。
编写者和使用者往往是同一个人
第二个时期, 上世纪60年代中期-70年代中期
软件作坊,个体软件开发方法,生产软件产品 出现软件危机 1968年北大西洋公约组织(NATO) 在联邦德国召开国际会
议,讨论软件危机问题,正式提出“软件工程”这个词, 一门新兴的工程学科就此诞生。
第三个时期,上世纪70年代中期-80年代中期
考核方法
笔试 出勤 大作业
软件设计报告 学期中间布置,三周时间完成 1-3人一组 根据要求,进行需求分析、系统设计
制作PPT,组内代表在课堂上讲解5-10分钟
学期末上交PPT的打印稿和电子版
参考书
软件工程—实践者的研究方法 Roger S.Pressman 机械工业出版社
关键问题 问题是什么? 有可行的解吗?
需求分析
系统必须做什么?
总体设计
系统应该如何实现?
系统说明 用户手册 测试计划 详细实现计划 数据库设计结果
表1.1
阶段 详细设计 编码和单 元测试
结构分析设计过程小结
关键问题 结束标准 编码规格说明
怎样具体实现这个系统? 正确的程序模块
HIPO图或PDL
源程序清单 单元测试方案和结果
2. 面向对象方法学 面向对象方法学具有下述4个要点: (1)把对象(object )作为融合了数据及在数据上 的操作行为的统一的软件构件。面向对象程序是由 对象组成的,程序中任何元素都是对象,复杂对象 由比较简单的对象组合而成,也就是说,用对象分 解取代了传统方法的功能分解。 (2)把所有对象都划分成类(class)。每个类都 定义了一组数据和一组操作,类是对具有相同数据 和相同操作的一组相似对象的定义。数据用于表示 对象的静态属性,是对象的状态信息,而施加于数 据之上的操作用于实现对象的动态行为。
软件开发的成本和进度估计很不准确
用户对已完成的软件不满意
软件质量不可靠 软件维护困难或不可维护
缺少适当的文档
软件成本占计算机系统总成本的比例逐年上升
20世纪60年代初占10-20% 60年代中期占50% 70年代初占80%以上
软件生产率提高速度缓慢
1.1.2 软件危机产生的原因
方案 提交评审
软件设计
回答:“系统应该如何实现?”
总体设计
把各项需求转换成软件的体系结构,结构中每个模块
都和一个需求相对应 从各种可能的设计方案里选择最佳方案
详细设计
对每个模块要完成的工作进行具体的描述,为编写源
程序打下基础
完成文档,提交评审
系统说明,用户手册,测试计划,实现计划,数据库
传统方法学的问题
传统方法学要求对上一阶段结果进行固定,才能开
始下一阶段的工作
如果软件系统规模庞大,需求模糊且不断变化,传
统方法学必须反复从头再来,造成系统结构不稳定 ,无法保证进度和质量
而需求不断变化是现代软件的一个重要特征,因为
环境变化太快(人员、机构调整,平台、技术变化 )(短信服务平台、云计算)
系统进行测试
文档
测试计划、详细测试方案和测试报告
软件维护
改正性维护
运行中发现软件的错误,需要修改
适应性维护
为了适应变化的工作环境,对软件进行适当变更
完善性维护
为增强软件的功能需做维护
预防性维护
表1.1
阶段 问题定义 可行性研 究
结构分析设计过程小结
结束标准 关于规模和目标的报告书 系统的高层逻辑模型 数据流图 成本/效益分析报告 可行性研究报告 系统的逻辑模型 数据流图、数据字典、算法描述 需求规格说明书 初步用户手册
1、传统方法学
传统方法学也称为生命周期方法学或结构化范型。 它采用结构化技术(结构化分析、结构化设计和结构 化实现)来完成软件开发的各项任务,并使用适当的 软件工具或软件工程环境来支持结构化技术的运用。 该方法把软件生命周期的全过程依次划分为若干 个阶段,然后顺序地完成每个阶段的任务。前一阶段 任务的完成是下一阶段工作开始的前提和基础。每一 阶段的开始和结束都有严格的标准,在每一阶段的结 束之前都必须进行正式严格的技术审查和管理复审。
两种方法学比较
“银行帐户”对象 ?? 存款 存款
取款
帐户余额 取款
帐户余额 利息 结算
利息结算
过程式编程范型 数据和操作分离
面向对象编程范型 数据和操作成为整体
软件开发方法学现状
软件开发取得了巨大的进展
软件超期、超预算甚至失败的情况仍普遍存在
软件工程学仍是最活跃的研究领域之一
生命周期各阶段的任务