没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
软件工程复习笔记 楚红
软 件 工 程
5.1 软件危机和软件工程
5.1.1 软件危机
一、产生软件危机的历史背景
1.计算机系统发展的早期(60 年代中期以前)
个体化的软件环境:软件规模小,编写者和使用者往往是同一个人,除程序清单外,无其它文档资料。
2.计算机系统发展的第 2 代时期(60 年代中期到 70 年代)
"软件作坊":比较广泛使用产品软件,仍沿用个体化开发方法。软件维护工作很难进行,甚至不可维
护(不能修改运行时发现的错误,不能适应新的硬件环境)由于软件的"不可维护",而导致了"软件危机"。
3.软件工程学诞生(1968 年)
北大西洋公约组织的计算机科学家,在联邦德国召开国际会议,讨论软件危机问题。正式提出 "软件
工程"这个名词──新兴工程学诞生了。
二、软件危机的内涵:
1.软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
主要是两个方面的问题:
如何开发软件──怎样满足对软件日益增长的需求
如何维护软件──数量不断膨胀的已有软件
2.软件危机的内涵:
(1)软件开发成本和进度的估计常常很不准确
(2)用户对"已完成的"软件系统不满意的现象经常发生
(3)软件产品的质量往往靠不住
(4)软件常常是不可维护的
(5)软件通常没有适当的文档资料
(6)软件成本在计算机系统总成本中所占的比例逐年上升
(7)软件开发生产率提高的速度远远跟不上计算机应用迅速及深入普及的速度
三、产生软件危机的原因:
1. 软件本身的特点:
规模庞大,开发软件不仅涉及许多技术问题(诸如分析方法,设计方法,形式说明方法,版本控制
等);更重要的是必须有严格而科学的管理。
2. 软件人员的主观原因:
开发与维护的方法不正确。早期软件开发个体化。至今, 忽视软件需求分析的重要性,轻视维护。
(切记:要充分、完整、准确地认识用户的要求,不要匆忙着手编写程序。要做大量深入细致的调查研究
工作,反复多次地与用户交流信息,准确具体了解用户的要求。)
四、解决软件危机的途径:
1.推广使用在实践中总结出来的开发软件的成功的技术和方法
2.研究、探索更好更有效的技术和方法
3.开发和使用更好的软件工具
4.有必要的组织管理措施
5.1.2 软件工程的基本原理
一、基本概念:
1.软件:软件是程序、数据以及开发、使用和维护程序需要的所有文档。
2.软件工程:是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发
与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,这就是
1
软件工程复习笔记 楚红
软件工程。
二、软件工程基本原理:
1. 软件工程的 7 条基本原理:
(1)用分阶段的生命周期计划严格管理
应该把软件生命周期划分成若干个阶段,并相应地制定出切实可行的计划,然后严格按照计划对软件
的开发与维护工作进行管理。(Boehm 认为应该严格执行六类计划:项目概要计划;里程碑计划;项目
控制计划;产品控制计划;验证计划;运行维护计划。)
(2)坚持进行阶段评审
软件的质量保证工作不能等到编码阶段结束之后再进行。大部分错误是编码之前造成的:根据
Boehm 等的统计设计错误占软件错误的 63%,编码错误仅占 37%。错误发现与改正得越晚,所付出的
代价也越高。
(3)实行严格的产品控制
当需求改变时,必须实行严格的产品控制,其中主要是实行基准配置管理。一切有关修改软件的建议,
特别是涉及到基准配置的修改建议,都必须按照严格的规定进行评审,获得批准后才能实施修改。(基准
配置管理也称为变动控制)
(4)采用现代程序设计技术
采用先进的技术既可以提高软件开发的效率,又可提高软件维护的效率。60 年代末提出结构程序设
计技术------结构分析(SA)与结构设计(SD)。 80 年代末提出面向对象的技术。
(5)结果应能清楚地审查
软件开发人员工作进展情况可见性差,难以准确度量,难于评价和管理。应该根据软件开发项目的总
目标及完成期限,规定开发组织的责任和产品标准,从而使得结果能够清楚地审查。
(6)开发小组的人员应该少而精
开发小组人员的素质和数量是影响软件产品质量和开发效率的重要因素。小组人员增加,交流情况和
讨论问题而造成的通讯开销也急剧增加,人数为 N,可能的通讯路径有 N(N-1)。
(7)承认不断改进软件工程实践的必要性
不仅要积极主动的采纳新的软件技术,而且要不断总结经验。
2. 理解软件工程的基本原理
(1)强调使用生存周期方法学:
生存周期方法学,就是从时间角度对软件开发和维护的复杂问题进行分解,把软件生把软件生存的漫
长周期依次划分为若干阶段,每个阶段有相对独立的任务,然后逐步完成每个阶段的任务。
软件方法论:开发软件时从对任务的抽象逻辑分析开始,一个阶段,一个阶段地进行开发。前一个阶
段任务的完成是下一个阶段任务的前提和基础。
(2)强调使用结构分析与结构设计任务
在软件生存周期的每个阶段都采用科学的管理技术和良好的技术方法。
每个阶段结束之前都从技术和管理两个角度进行严格的审查。
3. 软件工程学的重要目标:
提高软件的可维护性。减少维护的代价。
三、软件工程的传统途径:(生存周期方法学要点)
1. 生存周期:一个软件从定义、开发、使用、和维护,直到最终被废弃要经历一个漫长的时期,这
个时期称为生存周期。
2. 划分生存周期的基本原则:
使各阶段的任务彼此间尽可能相对独立
同一各项任务的性质尽可能相同
有利于软件开发工程的组织管理
(从而降低每个阶段任务的复杂程度,简化不同阶段之间的联系。)
2
软件工程复习笔记 楚红
软件工程三个要素:方法、工具、过程
软件生存周期:是指从提出软件产品需求开始,直到该软件产品被淘汰的全过程。软件生存周期大体
分为三个阶段:软件定义、软件开发和软件支持(运行维护)。
软件工程内容:研究内容包括开发技术和开发管理两个方面。
软件工程的内容
内
容
软件开发技术
软件开发方法学
基于瀑布模型的结构化生命周期方法
基于动态需求的快速原型法
基于结构的面向对象的软件开发方法
软件工具 用来开发软件的软件
软件工程环境
支持软件开发的环境,软件工具及其相互
间关系的总和
软件工程管理
软件管理 人力管理、进度安排、质量保证、资源管
理
软件工程经济学
以经济学的观点研究开发过程中的经济效
益。成本估算、效益分析的方法和技术
软件开发模型:是跨越整个软件生存周期的各个阶段所需要的全部工作与任务的结构框架。
5.2 软件生存的周期模型
软件生存周期模型是指软件开发和维护的分阶段的组织模式。它从时间角度对软件开发和维护的复杂
问题进行分解,把软件生存的漫长周期划分成若干阶段。要求每个阶段有相对独立的任务;各阶段都采用
科学的管理技术和适当的技术方法;每个阶段结束有明确标准;要有完整的文档资料;各阶段结束之前必
须经过严格的技术审查和管理复审。
通常把软件生存期划分为分析、设计、编码、测试和维护 5 个阶段。前 4 个阶段又总称开发期,最后
一个阶段也称运行期。
表 1-2 软件生命周期
生存阶段 周期序号 周期名称 生存阶段 周期序号 周期名称
软件定义
1
问题定义
可行性分析
软件开发
6
测试
软件开发
2
需求分析
7
软件发布或
安装与验收
3
概要设计
软件运行
8
软件使用
4
详细设计
9
维护或退役
5
编码
1)软件定义:
问题定义
在进行可行性研究之前,系统分析人员首先必须了解所开发软件的问题定义:即确定软件开发项目必
须完成的目标。其关键问题是:“要解决什么问题?”,问题定义的主要内容应该包括:问题的背景、总体
要求与目标、类型范围、功能规模、实现目标的方案、开发的条件、环境要求等等。通过问题的定义形成
系统定义报告,以供后续的可行性研究阶段使用。
可行性研究
可行性研究一般要涉及 3 个方面的问题:经济、技术、社会因素(法律)。
(1) 技术可行性 分析利用现有的技术能否实现,能否解决系统中的技术难题,所开发的系统能否达到
所要求的功能和性能,系统对技术人员的要求,现有的技术人员能否胜任,开发所需要的软件与硬件能否
如期得到等。
3
软件工程复习笔记 楚红
(2) 经济可行性 分析开发该项目能否取得合理的经济效益,主要是分析成本——收益与短期效益——
长远利益这两个方面。要作出投资的估算和系统投入运行后可能获得的经济效益或可节约的费用估算。
(3)社会因素的考虑 社会因素主要考虑的是市场、政策与法律方面的问题。软件产品所面对的市场的
性质,是成熟的、未成熟的或即将消亡的。政策考虑的是国家宏观的经济政策对软件开发及销售的影响。
法律应该考虑软件的开发是否会侵犯他人、集体或国家的利益,是否会违反国家的法律并可能由此承担相
应的法律责任等。
2)需求分析阶段(简称分析阶段)
基本任务是理解用户的需求,通过分析系统的功能要求、数据要求、性能要求、运行要求和将来可能
提出的要求等用户需求,用书面形式表达出来。产生的文档需求规格说明书。
需求分析是软件生命周期中相当关键的一个阶段,是介于系统分析和软件设计阶段的重要桥梁。要想
开发出用户满意的软件产品,首先得清楚用户的需求。在可行性研究阶段开发人员已经粗略了解了用户的
需求,其基本目的是用较小的成本在较短的时间内确定是否存在可行的解法。由于软件开发人员和用户并
不熟悉对方的业务,因此对同一问题,他们在认识上可能存在差异,不可能全面地、精确地理解和表达用
户需求,致使隐藏着一些目前未能发现的问题。需求分析是发现、求精、建模、规格说明和复审的过程。
需求分析的结果是形成需求规格说明书,它是系统设计的基础,它关系到工程的成败和软件产品的质量。
需求的获取非常困难,其主要原因有三:一是用户需求的动态性(不稳定性),实践证明,软件史上还
没有一次就准确获取需求的;二是需求的模糊性(不准确性),也即用户不能清楚地表达出具体需求;三是
需求必须得到用户的确认,否则毫无意义,如同跑题的作文,写得再长也不能得分。因此,在软件企业进
行需求分析的人员通常是具有较高系统驾驭能力的系统分析员来担任的。
3)设计阶段
要在需求规格说明书的基础上建立软件系统的结构,一般又可分为两步:概要设计和详细设计,前者
主要考虑模块的分解,后者考虑模块内部的细节。
产生的文档包括系统设计说明书,详细设计说明书、数据库或文件结构说明等。
4)编码(实现)阶段
按模块说明书的要求为每个模块编写程序。
5)测试阶段
任务是发现、排除错误并组装成系统。可分单元(模块)测试、集成(组装)测试和确认测试等几步。
6)维护阶段
系统测试的软件仍可能隐含错误,此外,用户的需求和系统的操作环境也可能发生变化,所以在运行
阶段仍需对软件系统作继续排错和修改扩充,这类工作称为维护。
5.3 软件开发的几种方法
5.3.1 结构化方法
目前软件开发的主要方法之一,包括结构化分析 SA、结构化设计 SD 和结构化程序设计 SP。是一种
面向数据流的开发方法。结构化分析适用于系统分析阶段,结构化设计被用于系统总体设计阶段,结构化
程序设计则被运用于系统的详细设计和编程阶段。
“结构化”是指用一组标准的准则和工具从事某项工作。结构化程序设计基本思想是使用且只使用顺序、
选择、循环 3 种基本结构来编写程序,它们都是单入口单出口的;使用自顶向下逐步求精的程序设计方法,
即利用 3 种基本结构实现结构连续分解,产生较低层次的结构,直到设计详细到能使用低层伪代码或高级
语言中的 3 种基本控制语句表达为止。不能解决系统的结构问题,更不能解决系统总体模型的表达问题,
而是由此启发人产提出结构化设计的思想。
采用自顶向下模块设计方法,是一种有效的系统设计的方法。结构化分析是定义系统逻辑模型的一种
方法学。
4
软件工程复习笔记 楚红
瀑布模型特点:
阶段间具有顺序性和依赖性
每个阶段必须完成规定的文档;每个阶段结束前完成文档审查,及早改正错误,但:
开发过程一般不能逆转,否则代价太大。
实际的项目开发很难严格按该模型进行。
客户往往很难清楚地给出所有的需求,而该模型却要求如此。
应用范围:
软件的实际情况必须到项目开发的后期客户才能看到,这要求客户有足够的耐心。
用户的需求非常清楚全面,且在开发过程中没有或很少变化
开发人员对软件的应用领域很熟悉。
用户的使用环境非常稳定。
开发工作对用户参与的要求很低
结构化方法试图在系统建立之前对用户需求进行严格定义或预先加以明确说明,这常常是不切实际的。
即使是定义很完善的由文字和图形表达的规格说明,对项目参与者而言仍会存在理解上差异。一个具体的
系统原型有助于种各类人员理解规格说明,这就是原型化方法。
5.3.2 快速原型法
基本是首先建立一个能够反映用户主要需求的原型系统让用户在计算机上运行、试用这个原型系统,
通过 与原型交互及早发现需求的缺陷;设计人员也可检查设计的可行性。
原型法开发软件的基本过程如图 5.1 所示。
图 5.1 原型法开发软件的基本过程
快速设计
建造原型
用 户 评估
原 型 ,提
出新需求
对原型进
行加工
开发产品
初步需
求分析
结束
开始
5
剩余55页未读,继续阅读
资源评论
老帽爬新坡
- 粉丝: 81
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功