2.21k likes | 2.32k Views
大学程序设计技能训练. 第 4 讲. 3. 3. 任务分配. 1. 3. 文件的基本操作. 归纳与提高. 2. 2. 结构体数组. 目 录. SWEBOK (软件工程知识体 》 10 个领域. 软件需求 软件设计 软件构造 软件测试 软件维护 软件配置管理 软件工程管理 软件工程过程 软件工程工具和方法 软件质量. 参考资料: [1 ] 白征. SWEBOK :软件工程知识体,计 算机科学, 2001 年 07 期 [ 2 万江平.软件工程知识体系指南综述, 计算机应用研究, 2006 年 10 期.
E N D
大学程序设计技能训练 第4讲
3 3 任务分配 1 3 文件的基本操作 归纳与提高 2 2 结构体数组 目 录
SWEBOK (软件工程知识体 》 10 个领域 • 软件需求 • 软件设计 • 软件构造 • 软件测试 • 软件维护 • 软件配置管理 • 软件工程管理 • 软件工程过程 • 软件工程工具和方法 • 软件质量 参考资料: [1 ]白征. SWEBOK :软件工程知识体,计 算机科学, 2001 年 07 期 [ 2 万江平.软件工程知识体系指南综述, 计算机应用研究, 2006 年 10 期
学习目标 • 通过学习,特别是通过项目设计,真正运用和深刻体会软件工程的思想方法,转变对软件开发的认识:从个人的单纯编程活动转移到进行系统分析与设计方面上来 • 转变思维定式: • 程序员 ― 系统工程师(系统分析员)
项目设计分组要求 • 3- 5 人一组,自由组合,选出组长。 • 以小组为单位共同完成“项目实践”和“项目设计”。
1、软件定义时期的三个阶段 • ① 问题定义阶段回答: • 回答:“要解决的问题是什么?” • ② 可行性研究阶段 • 回答:“对于上一个阶段所确定的问题有行得通的解决办法吗? • ③需求分析(Requirement Analysis) • 回答“为了解决这个问题,目标系统必须做什么 ? • 用正式文档准确地记录对目标系统的需求,这份文档通常称为规格说明书( specification )。
2 、软件开发时期 • 具体设计和实现前一个时期定义的软件,通常分为四个阶段: • ① 总体设计(概要设计) • 回答:“概括地说,应该怎样实现目标系统? ” • 根据需求分析,设计软件的体系结构;定义结构中的组成模块。 • ② 详细设计(模块设计) • 回答:“应该怎样具体地实现这个系统呢? ” • 对每个模块要完成的工作进行具体的描述,为源程序编写打下基础。编写设计说明书,提交评审。 • 二者统称系统设计
软件开发时期四个阶段 • ③ 程序编写( Coding, Programming ) :把软件设计转换成计算机可以接受的程序代码。 • ④ 软件测试(Testing ) : 按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用,包括单元测试和组装测试。 • 二者统称系统实现
3、运行维护(软件维护)时期( Running/Maintenance ) • 使软件持久的满足用户的需要。包括: • 改正性维护:运行中发现了软件中的错误需要修正。 • 适应性维护:为了适应变化了的软件工作环境,需做适当变更。 • 完善性维护:当用户有新的要求时,应该及时改进软件以满足用户的要求。 • 预防性维护: 即修改软件为将来的维护活动预先做准备。
瀑布模型(waterfall model) • 1970年,由W.Royce提出 • 一、瀑布模型的过程 • 1 、传统的瀑布模型 • 从上一阶段接受本阶段的工作对象,作为输 入; • 利用输入,完成本阶段活动的内容. • 本阶段的工作成果作为输出传入下一阶段。
瀑布模型 — 实际的瀑布模型 需求分析 变化的需求 验证 • 增加了一个评审活动,评审每个阶段完成的活动,若得到确认,则进行下一阶段的活动;否则返回前一阶段,甚至更前阶段返工; 验证 规格说明 验证 设计 验证 编码 测试 综合测试 维护
瀑布模型特点 • 阶段间具有顺序性和依赖性 • 推迟实现的观点 • 质量保证的观点
瀑布模型优缺点 • 优点: • 可强迫开发人员采用规范的方法; • 严格地规定了每个阶段必须提交的文档; • 要求每个阶段的所有产品都必须经过质量保证小组的仔细验证; • 缺点: • 无法解决软件需求不明确或不准确的问题;可能导致最终开发的产品不能真正满足用户需要。 • 瀑布模型比较适合开发需求明确的软件。
快速原型模型 • 1 、什么是“原型” ? • 原型是快速实现和运行的早期版本,反映最终系统部分重要特性。 • 常见的原型实例:人机界面;系统主要功能。 • 优点: • 1 、通常能反映用户真实需求; • 2 、软件产品的开发基本上是线性顺序进行的。
2 、快速原型的过程 • 如右图。 • 获得用户的基本需求说明,据此快速建立一个小型软件系统. • 用户试用,对其评价; • 开发人员按照用户的意见快速地修改原型系统,获得新的原型版本,再请用户试用,如此反复,直到满足用户的要求; • 用户确认原型系统之后,开发人员据此书写规格说明文档,进行下一步开发。
1.4.3 增量(渐增)模型 • 把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。 • 使用增量模型时,第一个阶段的增量构件往往实现软件的基本需求,提供最核心的功能;后面的增量构架逐渐添加系统的功能。
图:增量(渐增)模型 需求分析 验证 规格说明 验证 设计 验证 针对每个构件完成详细设计、编码和集成,经测试后交付给用户 维护
增量模型注意事项 • 增量构件规模适中; • 分解的约束条件是当把新构件集成到现有软件中时,所形成的产品必须是可测试的; • 软件体系必须是开放的,即在对现有系统添加新增量构件时,不能破坏系统原有功能。
增量模型优缺点 • 优点: • 能在较短的时间内,提供可完成部分工作的初步产品给用户; • 用户有较为充裕的时间学习和适应新产品。 • 缺点: • 对开发人员技术能力要求较高,要求能从系统整体出发正确划分增量构件,并进行分别开发,最后能很好地集成这些构件。
一种风险更大的增量模型 分析 设计 编码 测试 构件1 • 有可能提高开发速度,但需要密切地监控整个开发过程,否则将冒构件无法集成到一起的风险,。 分析 设计 编码 测试 构件2 分析 设计 编码 测试 构件3 分析 设计 编码 测试 构件4
螺旋模型(spiral model ) • 大型软件开发面临的重要问题:软件风险 • 如:产品交付给用户之后,用户不满意; • 开发进度落后,开发成本超出预算; • 产品完成前关键的开发人员跳槽; • 在产品投人市场前,竞争对手发布了一个功能相近,价格更低的软件……… • 构建原型能使某些类型的风险降到最低.
图1.7简化的螺旋模型 简单的螺旋模型 • 螺旋模型改进了原型模型,在每个阶段都加入风险分析。 图1.7简化的螺旋模型 图1.7简化的螺旋模型
螺旋模型的优缺点 • 优点: • 强调可选方案和约束条件,有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标; • 减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险; • 维护是一个周期,与开发并没有本质区别 • 缺点: • 需要开发人员具有相当丰富的风险评估经验和专门知识; • 进行风险分析的费用可能较大。 • 适合大型软件开发
可行性研究报告的编写 • 可行性研究报告功能: • 说明软件项目的实现在技术上、经济上和社会因素上的可行性,评述为合理地达到开发目标可供选择的各种可能的实现方案,说明并论证所选定实施方案的理由。 • GB 8567 一 88 《 计算机软件产品开发文件编制指南 》
§2. 3 系统流程图 • 可行性分析的描述手段:系统流程图、数据流图 • 1 、什么是系统流程图? • 概括地描绘物理系统的传统工具。 • 基本思想:用图形符号以黑盒子形式描绘组成系统的每个部件(程序,文档,数据库,人工过程等) , 表达数据在系统各部件之间流动的情况。
§2.3.1 例子 一个简单的例子 图2.3库存清单系统的系统流程图
§2.3.3 分层 • 描绘复杂系统时,一采取分层次地描绘的方法 • 第一步:建立高层次的系统流程图,描绘系统总体概貌,表明系统的关键功能。 • 第二步:分别对每个关键功能进行扩展,到合适的详细程度,画在单独的一页纸上。 • 第三步:可以多次扩展,直到描述完整。 • 优点:便于阅读者按从抽象到具体的过程逐步深入地了解一个复杂的系统。
§2 . 6 成本/效益分析 • 从经济角度分析开发一个特定的新系统是否划算,帮助客户负责人作出是否投资的决定。 • 主要包括成本估计和成本效益分祈。
§2.6.1 成本估计 • 包括开发成本和运行成本 • 一、开发成本估计技术( 1 ) • 1 、代码行技术 • 根据经验和历史数据,估算实现一个功能需要多少源程序行数,用每行代码的平均成本乘以行数。
(%) 5 一、开发成本估计技术( 2 ) • 2 、任务分解技术 • 将软件开发工程分解成若干个相对独立的任务,分别估算,然后累加得出总成本。 • 按阶段分解 • 按功能分解
例:按功能分解 • 计算机辅助设计( CAD )的软件项目估算 • 将 CAD 项目分为如下7个子项目: • 用户界面和控制; • 二维几何分析; • 三维几何分析; • 数据库管理; • 计算机图形显示; • 外设控制; • 设计分析
系统开发和每年运行费用估算举例 • A .系统开发费用(一次)。 • 2名系统分析员(450小时/名,45美元/小时) $40,500 • 5名系统开发人员(275小时/名,36美元/小时) $49,500 • 1名数据库管理员(30小时/名,42美元/小时) $1,260 • 2名技术写作者(120小时/名,25美元/小时) $6,000 • 1名秘书(160小时/名,15美元/小时) $2,400 • 1名数据通讯专家(60小时/名,42美元/小时) $2,400 • 2名数据输入人员(40小时/名,12美元/小时) $49,500
系统其他费用 • 培训:三天的开发人员内部培训课程 $7,000 • 30个用户,三天的内部培训课 $10,000 • 物资:复印 $500 磁盘、纸张等消耗品 $650 • 购买软、硬件: • 20台工作站windows软件 $1,000 • 20台工作站内存升级 $8,000 • 网络软件 $17,500 • 20台工作站办公软件产品 $20,000 • 系统开发总费用 $161 , 670
B .年运行费用(每年) • 人员: • 维护程序员/分析员(250小时/年,42美元/小时) $10,500 • 网络管理员(3000小时/年,50美元/小时) $15,000 • 购买硬件、软件升级: • 硬件 ― $ 5,000 软件 ―$6,000 • 物资和杂项: $ 3,500 • 每年总运行费用 $ 40,000
一、开发成本估计技术( 3 ) • 3 、自动估计成本技术 • 采用自动估计成本的软件工具,需要有长期搜集的大量历史数据为基础,并需要良好的数据库系统支持。 • 二、运行费用估计 • 取决于系统的操作费用(操作人员数、工作时间、消耗的物资等)和维护费用。
成本/效益分折方法 • 成本/效益分折的第一步是估计开发成本、运行费用和新系统将带来的经济效益。 • 系统的经济效益等于因使用新系统而增加的收入加上使用新系统可以节省的运行费用。 • 比较新系统的开发成本和经济效益,以便从经济角度判断这个系统是否值得投资。
成本/效益分折方法 • 几种度量效益的方法 • 1.货币的时间价值:以银行利率表示货币的时间价值。 • 假设年利率为i,如果现在存入P元,则n年后可以得到的钱数为:F=P(1+i)n • 如果n年后能收入F元钱,那么这些钱的现在价值是:P=F/(1+i)n • 提问:若某系统,投资为200万元,银行利率 3 % ,即100元可获 3 元现金,一年后此系统运行赚了 200万元,是否可以认为所有投资都收回了?
例:在工程设计中用CAD系统取代大部分人工设计工作,每年可节省9.6万元。若软件生存期为5年,则5年节省48万元。开发CAD系统共投资了20万元。例:在工程设计中用CAD系统取代大部分人工设计工作,每年可节省9.6万元。若软件生存期为5年,则5年节省48万元。开发CAD系统共投资了20万元。 • 设年利率是5%,引入CAD后,每年预计节省的钱的现在价值。 • 年份 将来值 (1+I)n 现在价值 累计现在价值 • 1 9.6 1.05 9.1429 9.1429 • 2 9.6 1.1025 8.7075 17.8513 • 3 9.6 1.1576 8.2928 26.1432 • 4 9.6 1.2155 7.8979 34.0411 • 5 9.6 1.2763 7.5219 41.5630
成本/效益分折方法 • 投资回收期:累计的经济效益等于最初的投资所需要的时间。 • CAD投资回收期是:2+2.15/8.29=2.259年 • 纯收入:整个软件生命期内,累计经济效益(折合成现在值)与投资之差。 • 如:引入CAD系统之后,5年内工程的纯收入预计是41.563-20=21.563 • 投资回收率:指系统的投资在生命周期内达到的累计效益的利率。
需求分析的任务 • 四项主要任务: • 1 、确定对系统的综合要求 • 2 、分析系统的数据要求 • 3 、导出系统的逻辑模型 • 4 、修正系统开发计划
提问并思考: • 如果你是一个用户,你会对将要开发的软件有哪些要求?
确定对系统的综合要求 • ① 功能需求。指定系统必须提供的服务。 • ② 性能需求。指定系统必须满足的定时约束或容量约束等。 • ③ 可靠性和可用性需求。应定量指定。 • ④ 出错处理需求。指环境错误,非系统本身的错误。 • ⑤ 接口需求。常见的接口需求:用户接口需求;硬件接口需求;软件接口需求;通信接口需求。