文章目录
1 软件过程概述
1.1软件危机
软件危机
在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件危机典型表现
•对软件开发成本和进度的估计常常不准 确。开发成本超出预算,实际进度比预定计划一再拖延的现象并不罕见。
• 用户对“已完成”系统不满意的现象经常发生。
• 软件产品的质量往往靠不住。Bug一大堆, Patch一个接一个。
• 软件的可维护程度非常之低。
• 软件通常没有适当的文档资料。
• 软件的成本不断提高。
• 软件开发生产率的提高赶不上硬件的发展和人们需求的增长。
软件危机的原因
● 一方面是与软件本身的特点有关 — 如何开发软件,以满足不断增长,日趋复杂的需求。
● 另一方面是由软件开发和维护的方法不正确有关 —如何维护数量不断膨胀的软件产品。
消除软件危机的途径
• 对计算机软件有一个正确的认识,软件=程序+数据+文档资料
• 必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人 员协同配合、共同完成的工程项目。
• 推广使用在实践中总结出来的开发软件的成功技术和方法。
• 开发和使用更好的软件工具。
• 解决途径 — 软件工程 1)管理措施2) 技术措施
1.2软件工程
软件工程概念
软件工程:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。
软件工程:(1)把系统的、规范的、 可度量的方法应用于软件开发、运行和维护过程,即:将工程化应用于软件;(2)研究(1)中提到的方法。
软件工程:是应用计算机科学、数学(用于构造模型和算法)及管理科学(用于计划、资源、质量和成本等的管理)等原理开发软件的工程。它借鉴传统工程(用于制定规范、设计范型、评估成本、权衡结果)的原则、方法,以提高软件开发质量,降低成本为目的。
软件工程方法学
概念
把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学
软件工程方法学包含3个要素
• 过程 — 为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
• 方法 — 完成软件开发的各项任务的技术方法,回答“怎样做”的问 题。
• 工具 — 为运用方法而提供的自动的或半自动的软件工程支撑环境。
软件工程方法学分类
• 面向过程的方法学 –- 传统
• 面向对象的方法学 –- 现代
• 面向方面的方法学 –- 逐步
1.3软件生命周期
1.4软件过程
软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
瀑布模型
• 瀑布模型有许多优点:可强迫开发人员采用规范的方法(例如,结构化技术); 严格地规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。瀑布模型的成功在很大程度 上是由于它基本上是一种文档驱动的模型。
• “瀑布模型是由文档驱动的”这个事实也是它的一个主要缺点。实际项目很少按照该模型给出的顺序进行;用户常常难以清楚地给出所有需求;用户必须有耐心,等到系统开发完成;开发者常常被不必要地耽搁。
快速原型模型
• 适用于用户驱动的系统(即需求模糊或随时间变化的系统)。
• 优点:
–从实践中学习(Learning by doing)
–改善通信
–改善用户参与
–使部分已知需求清晰化
–展示描述的一致性和完整性
–提高系统的实用性、可维护性
–节省开发的投入、缩短整个软件的开发周期
• 原型模型的缺点
–用户有时误解了原型的角色,例如他们可能误解原型应该和真实系统一样可靠。
–缺少项目标准,进化原型方法有点像编码修正。
–缺少控制,由于用户可能不断提出新要求,因而原型迭代的周期很难控制。
–额外的花费:研究结果表明构造一个原型可能需要10%额外花费。
–为了尽快实现原型,采用了不合适的技术,运行效率可能会受影响。
–原型法要求开发者与用户密切接触,有时这是不可能的。例如外包软件。
增量模型
先完成一个系统子集的开发,再按同样的开发步骤增加功能 (系统子集),如此递增下去直至满足全部系统需求。
特点
• 融合了线性顺序模型的基本成分和原型实现的迭代特征;
• 以功能递增的方式进行软件开发;
• 在每一步递增中,均发布一个新的增量,把用户/开发者的经验结合到不断求精的产品中;
• 每个增量的开发没有必要使用相同的过程;
• 可改善测试效果和降低软件开发总成本。
• 增量过程模型与原型实现模型,本质上都是迭代的。
• 两者区别在:增量模型强调每一个增量发布一个可操作的产品。早期的增量提供了为用户服务的功能和给用户评价的平台。
增量模型存在的问题
• 增量应该相对较小,每个增量应该包含一 定的系统功能。所以,很难把用户的需求映射到适当规模的增量上。
• 大多数系统需要一组在系统许多部分都会用到的基本服务。但由于增量实现前需求不能被详细定义,所以,明确所有增量都会用到的基本服务就比较困难。
增量模型的优点
- 在较短时间内向用户提交可完成部分工作的产 品,并分批、逐步地向用户提交产品。从第一个部件交付之日起,用户就能做一些有用的工 作。
- 整个软件产品被分解成许多个增量部件,开发 人员可以一个部件一个部件地逐步开发。
- 逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。
- 采用增量模型比采用瀑布模型和快速原型模型需要更精心的设计,但在设计阶段多付出的劳动将在维护阶段获得回报
使用增量模型的困难
- 在把每个新的增量部件集成到现有软件体系结构中时,必须不破坏原来已 经开发出的产品。此外,必须把软件 的体系结构设计得便于按这种方式进 行扩充,向现有产品中加入新构件的 过程必须简单、方便,也就是说,软 件体系结构必须是开放的。
- 开发人员既要把软件系统看作整体。 又要看成可独立的部件,相互矛盾。
- 多个部件并行开发,具有无法集成的 风险。
螺旋模型
可看作在每个快速原型阶段之前都增加了风险分析过程的快速原型模型。
• 对于大型软件系统的开发,螺旋模型是一 个很现实的方法,主要适用于内部开发的大规模软件项目。
• 优势:随着迭代的增加(成本的增加), 风险程度随之降低
• 缺陷:比较复杂,需要相当的风险评估技术,且成功依赖于这种技术。要有具有丰富风险评估专门知识的开发人员,否则风 险更大。
敏捷过程与极限编程
极限编程 (extreme Programming,简称XP)
特点
以极限编程为杰出代表的敏捷过程,具有对变化和不确定性的更快速、更敏捷的反应特征,而且在快速的同时仍然能够保持可持续的开发速度。
2可行性研究
2.1可行性研究的任务
可行性研究的内容
(1) 技术可行性
(2) 经济可行性
(3) 操作可行性:用户使用可能性、 时间进度可行性、组织和文化上的可行性
(4) 社会可行性(法律可行性)
2.2系统流程图
2.3数据流图
DFD-Date Flow Diagram
分层 DFD 图的优点
. 便于实现— 采用逐步细化的扩展方法,可避免一次引入过多的细节,有利于控制问题的复杂度;
. 便于使用— 用一组图代替一张总图,方便用户及软件开发人员阅读。
2.3数据字典
DD(Data Dictionary)
数据字典的任务是: 对于数据流图中出现的所 有被命名的图形元素在字典中作为一个词条加 以定义,使得每一个图形元素的名字都有一个 确切的解释。
数据流词条的描述
数据流名
说明:简要介绍作用,即它产生的原因和结果。
数据流来源:即该数据流来自何方。
数据流去向:去向何处。
数据流组成:数据结构。
每个数据量流通量:数据量、流通量。
例子
数据流名:发票
说明:用作学生已付书款的依据
数据流来源:来自加工“审查并开发票”
数据流去向:流向加工“开领书单”。
数据流组成:学号+姓名+书号+单价总价+书费合计
加工逻辑词条的描述
格式
加工名
加工编号:反映该加工的层次
简要描述:加工逻辑及功能简述
输入数据流:
取值范围: 相关的数据元素及数据结构
加工逻辑说明
2.5成本效益分析
成本估计技术
- 代码行技术
- 任务分解技术
- 自动估计成本技术