不可不看——软件工程导论_第1页
不可不看——软件工程导论_第2页
不可不看——软件工程导论_第3页
不可不看——软件工程导论_第4页
不可不看——软件工程导论_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、白城师范学院计算机系2005年3月软件危机的表现 开发成本难以控制,进度不可预计; 软件系统的质量和可靠性很差,难以满意; 软件文档相当缺乏,软件系统不可维护; 软件开发生产率很低,软件产品供不应求。 软件产品成本十分昂贵。软件危机产生的原因软件本身的特点软件本身的特点: - 软件是一种逻辑实体,而不是具体的物理实体,具有高度的抽象性; - 软件是一个逻辑上复杂而规模上庞大的系统,涉及技术、管理等多方面的问题; - 软件的生产方式与硬件明显不同:产品的质量控制在设计和制造阶段的不同;产 品的生产方式不同;设计和制造阶段的资金和人力投入、 技术复杂度不同; - 软件的运行和维护阶段,没有传统意义

2、上的机械磨损、老化问题。 - 软件与硬件有关,对软件有可移植性的要求。 - 软件工作涉及许多社会因素。对软件开发与维护存在许多错误认识和做法:对软件开发与维护存在许多错误认识和做法:忽视软件需求分析的重要性;对软件与程序的概念不清;轻视软件维护。 软件开发与维护的方法不正确软件开发与维护的方法不正确:对系统需求没有清楚和准确的认识就进入开发阶段, 忽视对软件开发过程的管理;1.1 软件危机磨合调整磨损用坏t失效率硬、软件产品失效率曲线软件的定义(Boehm):软件是程序以及开发、使用和维护程序需要的所有文档。早中晚引入同一变动付出的代价随时间变化的趋势改正一个问题的估计费用(美元)改正一个问题

3、的估计工作量(人天)20200100020000.050.52.55.0RASDDDCDITSTRTBell 实验室统计结果(US) 软件产品需要分阶段的定义、设计软件产品需要分阶段的定义、设计和开发,严格的产品质量控制,完整和开发,严格的产品质量控制,完整的文档记录的文档记录。5060708090硬件软件解决软件危机的途径 将软件开发看成是一种组织严密、管理严格、各类人员协同配合共同完成的 工程项目。 研究和推广成功的软件开发技术和方法。 开发和使用好的软件工具。 基本概念: 软件生命周期:软件所经历的定义、开发、使用和维护直到废弃所经历的 时期。 程序设计环境:源程序编辑,编译或解释,链接

4、,调试和运行工具的集合。 软件工程环境:软件定义,设计和实现,测试和维护等各个阶段所使用的 软件工具的集合。1.软件工程的基本原理用分阶段的生命周期计划严格管理 6类计划 项目概要计划,里程碑计划,项目控制计划,产品控制计划, 验证计划,运行维护计划。坚持进行阶段评审 1)经验数据说明,大部分错误是在编码之前造成的,在整个软件设计错误中, 设计错误占63%,而编码错误占37%。 2)错误发现和改正得越晚,所需付出的代价就越高。实行严格的产品控制 主要实行基准配置管理。 软件配置成分: 软件开发各个阶段产生的文档和代码。 基准配置: 经过评审后的软件配置成分。采用现代程序设计技术 提高开发和维护

5、的效率,如结构化分析SA和结构化设计SD技术。结果应能清楚地审查 开发小组的人员应少而精 1)软件开发的进度并非与参与开发人员的数量成正比,有时恰恰相反。 2)软件产品的质量绝对与开发人员的素质相关。承认不断改进软件工程实践的必要性 2. 软件工程的传统途径生命周期方法学 生命周期方法学的基本内容 从时间角度对软件开发和维护的复杂问题进行分解,把软件生命的漫长周 期依次划分为若干个阶段,每个阶段有相对独立的任务,然后逐步完成每个阶 段的任务。 生命周期方法学的应用方法 从对任务的抽象逻辑分析开始,一个阶段一个阶段地进行开发;前一个阶段任 务的完成是后一个阶段工作的前提和基础,而后一个阶段任务通

6、常是使前一阶 段提出的解法更进一步的具体化,加进了更多的实现细节。 阶段过渡方法 每一个阶段的开始和结束都有严格标准,前一阶段结束的标准是后一阶段工作 开始的标准。 技术审查和管理复审。基本概念 文档及其作用。3.生命周期各阶段的基本任务4. 问题定义可行性研究 需求分析 总体设计(概要设计) 详细设计 5. 编码和单元测试 综合测试 软件维护。6. 4. 瀑布模型 问题定义特点:1) 阶段间具有顺序性和依赖性 2) 推迟实现的观点 3) 质量保证的观点。可行性研究需求分析总体设计详细设计编码与单元测试综合测试软件维护软件定义时期软件开发时期软件维护时期问题定义可行性研究需求分析总体设计详细设

7、计编码与单元测试综合测试软件维护要解决的问题是什么?问题性质、工程目标和规模的报告分析员:实际用户+负责人是否有解决办法?分析员 高层逻辑模型,准确和具体的工程规模和目标,成本/效益分析等可行性报告为了解决的问题,目标系统必须做什么?准确确定系统的功能系统的逻辑模型(数据流图+数据字典+简要算法)如何解决这些问题模块划分软件结构如何具体地实现系统:每个模块的流程图(程序的详细规格说明)通过各种类型的测试,使软件达到预定的要求写出正确的容易理解和容易维护的程序模块 通过各种必要的维护活动使系统持久地满足用户的需要1.必要性管理复审和技术复审错误传播模型原始要求正确的规格说明 错误的规格说明正确的

8、设计 错误的设计 对错误说明的设计正确编码 错误编码 对错误设计的编码 对错误说明的编码正确功能 可改正的错误 不可改正的错误 潜伏的错误需求分析设计编码测试错误的扇形传播模型2.1 可行性研究的任务用最小的代价在尽可能短的时间内确定问题是否能够解决。问题定义 可行性研究问题定义 正 确 ?问题定义阶段审查系 统 的逻辑模型技术可行性经济可行性操作可行性实 际 的物理系统否是系统实现方案若干 可行性研究需要的时间长短取决于工程的规模,一般来说,其成本只能占预期的工程总成本的5%10%.可行性研究的结论可行性研究阶段任务(示意图)复查系统的规模和目标研究现正在 使用的系统新系统的高层逻辑模型重新

9、定义问题 导出和评价 供选择的解法推荐行动方针草拟开发计划书写文档提交审查用户分析员是否符合系统目标 逻辑模型表达了系统分析员对新系统必须作什么工作、完成什么任务的理解.1. 是否继续该工程的开发的建议2. 所选择解决方案的解法的说明3. 比较仔细的成本/效益分析 进厂载重汽车进厂后至称重计量点称出货物毛重。 计量人员读出称重仪表上的重量指示,数据 ,开具相应的流 转单 (货物、毛重、车号、收发 货单位名称等的凭据 )。 货主持此流转单将货物送到接收单位 ,验收合格后签章以示有效 ,卸空后空车返回称重计量 点称出皮重 ,计量人员。 计算出净重以后收回流转单 ,出具计量单作为正式结帐凭据 ,货主

10、即可开车离厂。结帐付款 一般在财务处定期核对进行。研究目前正在使用的系统 这个计量流程存在以下问题 : 1 该计量点日平均过车 (仅进厂 ) 1 50 0多辆 ,如果每车都要返回称重去皮 ,则称重工作量成倍增加 ,经常引起严重的交通堵塞问题。 2 由于是用汽车衡称量 ,人工看表读数 ,手工验车开票 ,所以工作效率十分低 ,有时竟引起长达 1公里的堵车现象 ,难以满足日车流量的要求。 3 为了克服车流量大而引起的工作量繁重的问题 ,对一部分送货单位的车型、车号相对固定的车实行定期称量空车 ,这样虽然减少了一定的称重工作量 ,但易引起车型车号不符、皮重不实的问题 ,在管理上也有漏洞存在。 4 在验

11、票、开票等过程中大量存在人工干预 ,往往会出现计量差错、人情重量、违法乱纪乃至犯罪的情况 ,给企业造成非常严重的经济损失。原系统的工作流程如图 2。系统要求 自动称量,提高工作效率; 自动除皮; 自动去杂和去水; 数据自动汇总; 任意点均可称量;财务处计量点 整个称重点采用两台汽车衡、分布在公路两侧 ,物理上将进厂和出厂的车流分开 ,实行一侧称重 ,而另一侧回皮。 实现称重过程微机全过程自动化处理(免除人工操作 ) ,保证称重数据的客观公正和有效准确性 ,称重重量 ,车号等数据自动存储 ,实现多个称重点按权限共享和引用。 能对称重 ,计量数据的物资品种 ,供货单位 ,接收单位 ,供货车号均可分

12、工作班次 ,日 ,旬 ,月进行分类查询和统计处理。一方面进一步减轻工作人员的负担 ,另一方面也使管理人员时时可掌握各种有关数据。 如果一侧称重点出现故障 ,另一侧称重点也可用微机称重和计量 ,进行以上工作。 可以随时将计量数据转发到计控处管理机 ,进入企业管理计算机网。技术问题 称量自动化的程度:车号识别,杂质处理 数据通信方式:有线,无线 开票处理:系统流程图:描绘物理系统的工具,其基本思想是用图形符号以黑盒子形式描绘 系统里面的每个部件(程序、文件、数据库、表格、人工过程等), 表达的是信息在系统各部件之间流动的情况。1.常用符号处理输入/输出连接换页连接数据流文档磁带联机存储磁盘显示人工

13、输入 人工操作2. 例子事务库存清单程序定货信息报告生成程序定货报告 某装配厂有一座存放零件的仓库,仓库中现有各种零件的数量和每种零件的库存临界值等数据存放在库存清单主文件中。当仓库中零件数量有变化时,应及时修改库存清单主文件,如果哪种零件的库存量少于它的库存量临界值,则应该报告给采购部门以便定货,规定每天向采购部门送一次定货报告。3. 分层(略)库存清单主文件(复杂系统)数据流程图:描绘系统的逻辑模型,图中没有具体的物理元素,只是描绘信息在 系统中流动和处理的情况。 设计数据流图只需考虑系统必须完成的基本逻辑功能,完全不需要考虑如何具体的实现这些功能。1. 符号(四种基本符号)数据的源点或终

14、点数据处理数据存储数据流一些附加符号(略)仓 库管理员定货系统采购员D1: 库存清单仓 库管理员1处理事务2产生报表采购员D2: 定货信息2. 例子基本系统模型功能级数据流图事务定货报表事务定货报表定货信息定货信息库存清单仓 库管理员1.1接收事务1.2更新库存清单1.3处理定货2产生报表采购员D1: 库存清单D2: 定货信息事务事务库存信息定货信息定货信息定货报表3. 命名 为数据流(或数据存储)命名 为处理命名4. 用途 交流信息的工具 分析和设计的工具 进一步设计的依据库存清单 数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合1. 数据字典的内容 数据流 数据

15、流分量 数据存储 处理数据处理:用 IPO图或PDL描述比较方便直观。数据元素的别名:2. 定义数据的方法 由数据元素组成数据的方式的三种基本类型顺序 +: 以确定次序连接两个或多个分量 a+b+c 选择 |, : 从两个或多个可能的元素中选取一个 a | b | c 重复 : 把指定的分量重复零次或多次 a 可选:一个分量是可有可无的(重复零次或一次), (a)3. 例子 定货报表=零件编号+零件名称+定货数量+目前价格+主要供应者+次要供应者零件编号=8字符8定货数量=1数字5 问题描述:学校教材科根据业务的需要,建立一个学校教材购销管理系统,提高教材采购、销售和信息管理的效率。学生张秘书

16、购书申请王会计李出纳赵保管学生购书证明购书申请购书申请书学生审 查有效性购书单开发票开领书单发书学生有 效购书单发票领书单书学生审查并开发票购书单开领书单发书学生发票领书单书2)去掉具体模型中的非本质因素,抽象出当前系统的逻辑模型1)通过对现实环境的调查研究,获得当前系统的具体模型3)分析当前系统与目标系统的差别,建立目标系统的逻辑模型。学生审查并开发票购书单开领书单学生发票领书单无效书单4)对目标系统进行补充和完善,并写出完整的需求说明。学生1 审查并开发票购书单2 开领书单学生发票领书单无效书单各班学生用书表教材存量表5)对需求说明进行复审,直到确认文档齐全,并且符合用户的全部需求为止学生

17、学生教材购销教材购销管理系统管理系统书书 库库保管员保管员1. 教材购销管理系统的顶层DFD学生学生书书 库库保管员保管员2. 第二层DFD图教材购销系统购书单领书单缺书单进书通知购书单领书单1销 售2采购进书通知F2: 缺书登记表F1: 教材存量表缺书单进书通知1.1 审 查有效性1.2 开发票有效 购书单1.3 领书并 开领书单发票1.4 登记缺书1.5 补售教材F2: 缺书登记表学生学生无效书单领书单领书单F3: 各班学生用书表F4: 售书登记表 补售书单 暂缺书单采购3. 第三层DFD图销售子系统F1: 教材存量表2.3 修改教材库存和待购量2.1 按 书 号 汇总缺书F2: 缺书登记

18、表销售子系统书库保管员F1: 教材存量表进书通知3. 第三层DFD图采购子系统2.2 按出版社 统计缺书F5: 待购教材表F6: 教材一览表进书通知数据字典(Data Directory-DD)领书单 = 学院+专业+班级+学号+姓名+书号+书名+数量+日期有效购书单 = 领书单发票= 学号+姓名+书号+书名+单价+数量+总价+书费合计教材存量表 = 书号+单价+数量暂缺书单 = 学号+姓名+ 书号+数量补售书单 = 学号+姓名+ 书号+数量书 号书 名数 量书 号书 名数 量学院: 专业: 班级: 学号: 姓名:武汉科技大学教材科领书单 20 年 月 日书号书名单价数量金额备注 学号: 姓名

19、: 发 票1. 成本估计 代码行技术 。自动估计成本技术 任务分解技术40402020252510105 50 0101020203030404050506060707080809090100100可行性研究需求分析设计编码综合测试典型环境下各个开发阶段需要使用的人力的百分比1. 需求分析的任务 需求分析是软件定义的最后一个阶段,它的基本任务是准确地回答“系统必须做什么?”这个问题。对目标系统提出完整、准确、清晰、具体的要求。 确定对系统的综合要求(四个方面) 系统功能要求 系统性能要求响应时间,所需存储容量及后援存储,安全性和简便性。 运行要求-系统运行环境 将来可能提出的要求 分析系统的数

20、据要求 导出系统的逻辑模型(数据流图+数据字典+主要的处理算法) 修正系统开发计划 开发原型系统2. 分析过程结构化分析方法(SA方法)-面向数据流自顶向下逐步求精进行需求分析的方法。沿数据流图回朔用户复查细化数据流图修正开发计划书写文档审 查和复审 用户的数据要求-需要哪些数据,数据之间有哪些联系,数据本身有哪些性质,数据的结构 等)。 用户的处理要求-对数据进行哪些处理,每个处理的逻辑功能。 概念性模型(信息模型)-一种面向问题的数据模型,是按照用户的观点来对数据和信息建模。表示概念性数据模型的最常用方法是实体-联系方法,采用用 ER图的方式,这种表示又称为ER模型。 ER模型 实体: 客

21、观世界中存在的且可区分的事物。 联系: 客观事物之间的联系(三类-1:1,1:N,M:N) 属性: 实体或联系所具有的性质。教师姓名性别职称职务教师号教1课程N课程号课名学时学分学M学生N学号姓名性别系年级成绩 范式通常用范式定义消除数据的冗余度(略) 层次方框图: 用树形结构的一系列多层次的矩形框描绘数据的层次结构。 产 品 硬 件 软 件 服 务 处理机 存储器外部设备系统软件应用软件软件服务硬件维修培训操作系统编译程序软件工具层次方框图的一个例子 注意:层次方框图即可以表示数据的层次结构,也可以表示程序的层次结构 Warnier 图: 用树形结构描绘数据的层次结构。软件 产品系统软件操作

22、系统(P1)编译程序 (P2)软件工具编辑程序(P3)测试驱动程序(P4)设计辅助程序(P5)应用软件 IPO 图: 输入/处理/输出图的简称-IBM。旧的主文件事务文件1、校验主记录2、校验事务记录3、更新主记录1、校验主记录2、有效的事务记录3、更新后的主文件改进的IPO图的形式(P47) 从哪几个方面验证软件需求的正确性(四个方面)一致性: 任何一条需求不能和其他需求互相矛盾。完整性: 规格说明书应该包括用户需要的每一个功能和性能。现实性: 指定的需求是用现有的硬件、软件技术可以实现的。有效性: 需求是正确有效的,确实能解决用户面对的问题。 验证软件需求的方法一致性:人工审查-形式化描述

23、软件需求,软件工具自动验证。现实性: 参考以往的开发经验,分析,仿真或模拟完整性和一致性:原型系统0 总体设计的两项任务: 划分出组成系统的物理元素-程序、文件、数据库、人工过程和文档 设计软件的结构-确定每个程序的模块组成及模块之间的相互关系。1 总体设计的过程(两个主要阶段): 系统设计:确定系统的具体实现方案。 结构设计:确定软件结构。设想供选择的方案选 取 合理的方案推荐最佳方案功能分解设计软件结构数据库设 计制订测试计划书写文档数据流图 系统流程图 组成系统的物理元素清单 成本/效益分析 实现系统的进度计划 系统说明 用户手册 测试计划 详细的实现计划 数据库设计结果 审查和复 审模

24、块是数据说明、可执行语句等程序对象的说明。 模块化:把程序划分成若干个模块,每个模块完成一个子功能,把这些模块集 总起来组成一个整体,可以完成指定的功能,满足问题的功能。C(P1+P2) C(P1)+C(P2)E(P1+P2) E(P1)+E(P2)成本模块数目成本/模块接口成本最小成本区 抽象 信息隐蔽和局部化 模块独立-每个模块完成一个相对独立的子 功能,并且和其他模块之间的关 系很简单。耦合:一个软件结构内不同模块之间互连程度的度量。数据耦合:模块之间通过参数交换数据信息。控制耦合:模块之间传递的参数含有控制信息。公共环境耦合:两个或多个模块通过一个公共数据环境相互作用。内容耦合:。 设

25、计原则:尽量使用数据耦合,少用控制耦合,限制公共环境耦合,完全不用内容耦合。模块化和软件成本数据耦合 控制耦合 公共环境耦合 内容耦合低高1.非直接耦合2.数据耦合3.特征耦合4.控制耦合5.外部耦合6.公共耦合7.内容耦合弱耦合中耦合较强耦合强耦合模块1模块2模块3模块4数据耦合通过简单变量交换数据特征耦合通过数据结构交换数据非直接耦合模块之间没有信息传递模块A模块B模块C模块D模块L模块N全局性数据结构公共耦合Flag=1?S1S2模块1控制耦合模块之间传递的是控制信息TF全 局 性简单变量外部耦合模块A 模块B内容耦合 访问其它模块的内部数据 直接跳到其他模块内部执行内聚:一个模块内各个

26、元素彼此结合的紧密程度。偶然内聚:一个模块完成一组任务,任务之间的关系很松散。公共语句。逻辑内聚:若干个逻辑功能类似的任务组成一个模块。时间内聚:若干个任务必须在同一段时间内执行。如初始化工作。低内聚中内聚高内聚过程内聚:模块内的处理元素是相关的,且必须以特定次序执行。通信内聚:模块中所有元素都使用同一个输入数据,和/或产生同一个 输出数据。顺序内聚:模块中所有处理元素和同一个功能密切相关,且这些处理必 须顺序执行。功能内聚:所有处理元素属于一个整体,完成一个单一的功能。模块A模块B模块CS1;S2;模块A模块B模块C模块A模块B模块C模块D 改进软件结构提高模块独立性 模块规模应该适中 深度

27、、宽度、扇入、扇出都应适当 模块的作用域应该在控制域之内 力争降低模块接口的复杂程度 设计单入口单出口的模块 模块的功能应该可以预测3 启发式规则 层次图和HIPO图层次图用来描述软件结构,层次图+IPO图= HIPO图正文加工系统输入输出编辑加标题存储检索编目录格式化添加删除插入修改合并列表 结构图方框之间的箭头表示模块的调用关系,带注释的箭头表示模块间来回传递的信息:空心圆数据,实心圆控制信息。结构图还可以表示模块的选择调用或循环调用参见:P64 概念1) 变换流2) 事务流3) 设计过程时间输入流输出流变换流事务外部表示内部表示信息T事务中心活动通路事务中心 T 完成下述任务:接受输入数

28、据(事务)分析每个事务以确定它的类型根据事务类型选取一条活动通路精化数据流图流类型区分事务中心和数据接收通路映射成事务结构区分输入和输出分支映射成变换结构用启发式设计规则精化软件结构导出接口描述和全程数据结构复查详细设计事务分析变换分析 变换分析: 汽车数字仪表板功能: 1) 通过A/D 转换实现传感器和微处理器接口, 2) 在发光二极管面板上显示数据, 3) 指示每小时英里数(mph),行驶的里程,每加伦油行驶的英里数(mpg)等等。 4) 指示加速或减速; 5) 超速警告:如果车速超过55英里/小时,则发出超速警告铃声。A/D转数计数器流量传感器微处理机里程表车速表油效表油管系统加速/减速

29、指示超速报警读旋转信号收集和求平均转换成转/分( rpm)计算里程确定加速 / 减速产生加速/减速显示产生里程显示计算mph和超速值计算燃料消耗发出铃声产生mph显示产生 mpg显示读和校核计算gph旋转信号信号/秒 SPSSPSSPSrpmrpm箭头指示上箭头水平线下箭头英里超速值显示铃声mphmphmpggph燃料流燃料流传感器信号Mpg 显示数字仪表板 控 制接受传感器 信 号数据转换控制驱动仪表 板输入控制变换控制输入控制设计步骤:复查基本系统模型复查并精化数据流图确定数据流图具有变换特性还是事务特性确定输入流和输出流的边界,划分变换或事务中心完成 “第一级分解”CmCaCtCe第一级

30、分解的方法ADBCCmCaCBDA接受传感器 信 号转换成rpm收集SPS读旋转信号计算gph读燃料流数字仪表板 控 制确 定加/减速计算mph计算gpg计算里程驱动仪表板加速/减速显示显示mpg显示mph显示里程发出铃声发光二极管显示数字仪表板 控 制接受传感器 信 号转换成rpm读旋转信号计算gph读燃料流数字仪表板 控 制确 定加/减速计算mph计算gpg计算里程驱动仪表板加速/减速显示显示mpg显示mph显示里程发出铃声发光二极管显示数字仪表板软件系统经过调整后的结构图注意:红色模块的位置有所调整 事务分析432总 控接收通路C通路B通路A通路调 度A_CTL1 4 2+1 3 2 1

31、 B_CTLC_CTL 设计优化先使系统工作起来,然后使它快起来。数据流图软件结构详细设计阶段的目标: 确定应该怎样具体地实现所要求的系统。精确地描述整个目标系统,从而在编码阶段可以把这个描述翻译成用某种程序设计语言书写的程序。1.结构程序设计2. E. W. Dijstra与Goto语句,1966,Bohm 和 Jacobini 证明了只要顺序、选择、循环这三种基本结构就能实现任何单入口单出口的程序。BexpAABexpAAexpTFTTFF顺序结构选择结构循环结构1)“当”型循环2)直到型循环 结构程序设计: 一种程序设计技术,它采用自顶向下逐步求精的设计方法和单入口单出口的控制结构。 经

32、典的结构程序设计:顺序,选择,当型循环 扩展的结构程序设计:顺序,选择+多分支,当型循环+直到型循环 修正的结构程序设计:顺序,选择+多分支,当型循环+直到型循环,break结构2详细设计的工具程序流程图开始或停止准备选择多分支选择注释预先定义的处理,子程序循环下界循环上界处理控制流S1S2S3条件FTElse部分Then部分Case 条件值1值2。值nCase 1部分Case 2部分Case n部分循环条件Do-While 部分循环条件Do-Until 部分A特点:1)功能域(既一个特定控制结构的作用域)明确 2)不可能任意转移控制 3)很容易确定局部和全程数据的作用域 4)很容易表现嵌套关

33、系,也可以表示模块的层次结构Nassi & ShneidermanP1P2P1P2条件CPnP2P1WHILE CPUNTIL CPdef顺序选择Case 型多分支选择当型循环直到型循环语句标号定义P1P2P3P4CP5P2defP6P3P8CUntil C3UNTIL C2P9P10PAD图的主要优点图的主要优点:使用PAD符号设计的程序必然是结构化的程序.PAD图所描绘的程序结构十分清晰.用PAD图表现程序逻辑,易读,易记,易懂.容易将PAD图 转换成高级语言源程序.可用软件工具实现自动转换.即可以表示程序逻辑,也可以描绘数据结构.支持自顶向下,逐步求精方法的使用.程序流程图、N-

34、S图、PAD图或过程设计语言(PDL)都不易清楚的描述含有多重嵌套的条件选择。判定表可以清晰的表示复杂的条件组合与其对应的处理之间的关系。例子 假设某航空公司规定,乘客可以免费托运重量不超过30公斤的行李。当行李重量 超过30公斤时,对头等舱的国内乘客超重部分每公斤收费 4 元,对其它舱的国内 乘客超重部分每公斤收费 6 元,对外国乘客超重部分每公斤收费比国内乘客多一 倍,对残疾乘客超重部分每公斤收费比正常乘客少一半。用判定表来表示与上述 每种条件组合相对应的动作。所有条件条件组合矩阵与每种条件组合所对应的动作表所有可能的动作列表国内乘客头 等 舱残疾乘客行李30kg免费(W-30)*2(W-

35、30)*3(W-30)*4(W-30)*6(W-30)*8(W-30)*2TTTFTTTTTTTTTTFFFFFFFFFFFFFFFFFFF行李费算 法行李重量 W30国内乘客外国乘客头等舱其它舱残疾乘客 - (W-30)*2正常乘客 - (W-30)*4残疾乘客 - (W-30)*3正常乘客 - (W-30)*6头等舱其它舱残疾乘客 - (W-30)*4正常乘客 - (W-30)*8残疾乘客 - (W-30)*6正常乘客 - (W-30)*12行李重量 W30免费 利用软件设计的基本原理和概念可以定性的衡量软件模块的质量。但定量的度量程序复杂程度的方法很有价值: 估算程序中软件故障的数量;

36、估算软件开发的工作量; 比较两个不同的设计或两个不同算法的友劣; 作为模块规模的精确上限。程序定量度量方法是一个有待进一步研究的重要领域。1)McCabe 方法程序图 把程序流程图中每个处理符号都退化成一个点,原来连接不同处理符号 的箭头变成连接不同点的有向弧,这样得到的有向图就称为程序图。 程序图仅仅描述程序内部的控制流程,完全不表现对数据的具体操作以及分支或循环的具体条件。 入口点:程序图中开始点后面的那个节点。 出口点:程序图中停止点前面的那个节点。 用McCabe方法度量得出的结果称为程序的环形复杂度。 程序的环形复杂度 = 强连通图中线性无关的有向环的个数。2)环形复杂度的计算方法

37、在一个强连通的有向图中,线性无关环的个数由以下公式确定: V(G) = m n + p 其中: V(G) - 有向图 G 中的环数。 m - 有向图 G 中的弧数。 n - 有向图 G 中的节点数。 p -有向图 G 中的分离部分的数目。(对于正常的程序,p = 1) 一般来说,由于程序图不是强连通的,要直接应用以上结论到程序图中还不行,因此要对程序图进行扩展,从其出口点到入口点增画一条虚弧,则原程序图必然成为强连通图。这样就可以应用以上公式来计算环形复杂度。3) 环形复杂度的用途: 程序的环形复杂度与程序控制流的复杂程度,也就是与程序结构的复杂程度有关。程序内分支数或循环个数增加时,环形复杂

38、度就增加,因此它是对测试难度的一种度量,也能对软件最终的可靠性给出某种预测。 McCabe 发现:环形复杂度高的程序往往是最困难、最容易出问题的程序。 实践表明: 模块规模以 V( G) 10 为宜。也就是说, V( G)= 10 是模块规模的一个更科学更精确的上限。开始K=0 L=0TOTAL=0输入ADo while TOTAL 1000 and A 0A0TOTAL=TOTAL+AK=K+1输入AL=L+1输出K,L,TOTAL停止abcdefghijkabcdefghjikV(G)=13-11+1=313 条弧11 个节点1 个独立部分1.程序设计语言: 人与计算机通信的基本工具,指挥

39、计算机按人的意志工作。 19461954: 机器语言和汇编语言,与计算机硬件操作一一对应。 1954: 第一个高级语言 FORTRAN 语言。 高级语言的种类: 基础语言-Fortran, Basic, Cobol,Algol 结构化语言-Pl/1, Pascal, C, Ada 专用语言-特殊应用如 LISP, Prolog. 程序设计语言的特点: 名字说明:类型说明:初始化:程序对象(语句,存储,过程)的局部性:程序模块:循环控制结构:分支选择结构:异常处理:独立编译:选择程序设计语言的原则:系统用户的要求;可以使用的编译程序;可以使用的软件工具;工程规模;程序员的知识;软件可移植要求;软

40、件的应用领域。在这个阶段的任务是: 把软件设计的结果翻译成计算机可以“理解”的形式 用计算机语言表示的程序。2.程序设计途径写程序的风格程序内部的文档-恰当的意义明确的标识符,注解,程序的视觉组织(语句布局).数据说明-次序标准化,归类化.语句构造-每个语句的构造应该简单、直接和易于理解。 一般不要为了节省纸张多个语句写在一行; 避免复杂的条件测试; 减少对“非”条件的测试; 避免大量使用循环嵌套和条件嵌套; 利用括号使逻辑表达式或算术表达式的运算次序清晰直观。输入/输出-效率-程序运行时间、存储器效率、输入和输出的效率 。程序设计方法论程序设计自动化-三种途径(用户需求形式化精确定义,组件技

41、术,范型)程序设计工具- 编译程序 代码管理系统1.基本概念软件测试的目标或定义(G.Myers): 1)测试是为了发现程序中的错误而执行程序的过程。 2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案。 3)成功的测试是发现了至今为止尚未发现的错误的测试。黑盒测试和白盒测试黑盒测试:已经知道了软件产品应该具有的功能,通过测试来检验是否每个 功能都能正常使用。这种测试方法又称功能测试。白盒测试:知道软件产品内部的工作过程,通过测试来检验产品内部动作是否 按照规格说明书的规定正常进行。这种测试方法又称结构测试。不论是每个功能或每个逻辑控制通路,如果对所有的情况都进行测试,这样的测试成为

42、穷尽测试。穷尽测试在一般情况下是实际不可行的。例一、Sum(int a, int b, int c) return (a+b+c); 假定 int 类型为16位整数。需要测试216* 216* 216次。每次1ms, 约要1万年循环20次各种组合,约520种例二:白盒测试软件测试的步骤:模块测试子系统测试系统测试平行运行 目的:保证每个模块作为一个单元能够正确运行,又称为单元测试 集成测试、组装测试、联合测试; 重点在于测试模块之间的接口; 将经过测试的子系统装配成一个完整的系统来测试; 发现设计和编码的错误,验证系统是否满足需求说明所定义的功能及其动态特性; 也称为集成测试。同时运行新旧两个

43、系统,并且对处理的结果进行比较,以确定新系统是否满足相关性能指标。验收测试 有用户参加的系统测试; 验证是否满足用户的需要。测试阶段的信息流:测试测试软件配置测试配置测试结果预期结果评价评价错误错误率数据调试调试可靠性可靠性模型模型正确可靠性预测包括需求说明书、设计说明书、源程序清单等包括测试计划和测试方案l单元测试又称模块测试,是针对软件设计的最小单位 程序模块,进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。l单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。l在单元测试时,测试者需要依据详细设计说明书和源在单元测试时,测试者需要依据详

44、细设计说明书和源程序清单,了解该模块的程序清单,了解该模块的I/O条件和模块的逻辑结构,条件和模块的逻辑结构,主要采用白盒测试的测试用例,辅之以黑盒测试的测主要采用白盒测试的测试用例,辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输入,都试用例,使之对任何合理的输入和不合理的输入,都能鉴别和响应能鉴别和响应(1) 模块接口测试l在单元测试的开始,应对在单元测试的开始,应对通过被测模块的数据流通过被测模块的数据流进行测试。测试进行测试。测试项目包括:项目包括: 调用本模块的输入参数是否正确;调用本模块的输入参数是否正确; 本模块调用子模块时输入给子模块的参数是否正确;本模块调用子模块时

45、输入给子模块的参数是否正确; 全局量的定义在各模块中是否一致;全局量的定义在各模块中是否一致; 模块接口模块接口 局部数据结构局部数据结构 重要的执行通路重要的执行通路 出错处理通路出错处理通路 影响上述各方面特性影响上述各方面特性 的边界条件的边界条件n 在做内外存交换时要考虑:u文件属性是否正确;u OPEN与CLOSE语句是否正确;u 缓冲区容量与记录长度是否匹配;u 在进行读写操作之前是否打开了文件;u 在结束文件处理时是否关闭了文件;u 正文书写输入错误,u IO错误是否检查并做了处理。(2) 局部数据结构测试局部数据结构测试不正确或不一致的数据类型说明使用尚未赋值或尚未初始化的变量

46、错误的初始值或错误的缺省值变量名拼写错或书写错不一致的数据类型全局数据对模块的影响 (3) 路径测试路径测试l选择适当的测试用例,对模块中选择适当的测试用例,对模块中进行测试。进行测试。l应当设计测试用例查找由于应当设计测试用例查找由于或或而导致的错误。而导致的错误。l对基本执行路径和循环进行测试可对基本执行路径和循环进行测试可以发现大量的路径错误以发现大量的路径错误.(4) 错误处理测试错误处理测试n 出错的描述是否难以理解n 出错的描述是否能够对错误定位n 显示的错误与实际的错误是否相符n 对错误条件的处理正确与否n 在对错误进行处理之前,错误条件 是否已经引起系统的干预等(5) 边界测试

47、边界测试n 注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认真加以测试。n 如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素l代码审查:组长代码审查:组长+程序设计、编写、测试者程序设计、编写、测试者l模块并不是一个独立的程序,在考虑测试模模块并不是一个独立的程序,在考虑测试模块时,同时要考虑它和外界的联系,用一些块时,同时要考虑它和外界的联系,用一些辅助模块去模拟与被测模块相联系的其它模辅助模块去模拟与被测模块相联系的其它模块。块。驱动模块驱动模块 (driver) :调用测试单元

48、的调用测试单元的“主程序主程序”,它接受测试数据,把这些,它接受测试数据,把这些数据传送给被测试的模块并打印有关结数据传送给被测试的模块并打印有关结果。果。 桩模块 (stub)存根模块:是被测试是被测试模块单元所调用模块的代替模块,在模模块单元所调用模块的代替模块,在模块调用接口、相关数据处理、控制返回块调用接口、相关数据处理、控制返回等方面对被代替模块进行等方面对被代替模块进行“模拟模拟”。驱动模块被测模块桩模块桩模块桩模块测试用例测试结果单元测试的测试环境 集成测试是组装软件的系统技术; 通常,在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。这时需 要考虑的问题是:u 在把各

49、个模块连接起来的时侯,穿越模块接口的数据是否会丢失;u 一个模块的功能是否会对另一个模块的功能产生不利的影响;u 各个子功能组合起来,能否达到预期要求的父功能;u 全局数据结构是否有问题;u 单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。发现并排除在模块连接中可能出现的问题,最终构成要求的软件系统。系 统结构图单元测试整体组装(1) 自顶向下的增殖方式(2) 自底向上的增殖方式非渐增式和渐增式测试方法的优缺点比较: 非渐增式方法要对每个模块编写驱动模块和桩模块,工作量较大;而渐增式 方法可以利用部分已测试过的模块作为测试软件; 非渐增式方法发现模块间的接口错误较晚,而渐增式方法则

50、要早一些; 非渐增式方法发现错误后较难定位;而渐增式方法则要容易一些; 非渐增式方法可以并行测试所有模块,可充分利用人力,加快工程进度; 渐增式方法接近全真运行环境,需要较多的测试运行时间,但对程序模块的 测试较为彻底。测试方案:包括预定要测试的功能,应该输入的测试数据和预期的结果。其中最困难的 设计测试用的输入数据(称为测试用例)。测试用例设计技术:黑盒测试的等价划分、边界值分析、错误推测法; 白盒测试的逻辑覆盖法;逻辑覆盖是以的设计测试用例的技术。它属白盒测试。(A1) and (B=0)(A=2) or (X1)X = X / AX=X+1PROCEDURE Example(A,B:re

51、al; X:real );Begin IF (A1) AND (B=0) THEN X:= X / A; IF ( A=2 ) OR (X1) THEN X:=X+1END;I. A=2, B= 0, X=4 - sacbed语句覆盖所有的语句至少执行一次!(A1) and (B=0)(A=2) or (X1)X = X / AX=X+1判定覆盖 每个判定的每种可能都至少执行一次!即每个判定的每个分支都至少执行一次!I: A=3, B=0,X=3: sacbdII: A=2, B=1,X=1: sabed 满足判定覆盖的测试用例满足判定覆盖的测试用例一定满足语句覆盖:判定覆盖一定满足语句覆盖:

52、判定覆盖比语句覆盖强。比语句覆盖强。(A1) and (B=0)(A=2) or (X1)X = X / AX=X+1条件覆盖 每个语句至少执行一次,而且判定表达式中的每个条件都要取得各种可能的结果。(A1)(A1)(B=0)(B0)(A=2)(A2)(X1)(X1)II: A=1, B=1,X=1: sabd 条件覆盖一般情况下比判定覆盖要强,但是也有满足条件覆盖但不能满足判定覆盖的情况。I: A=2, B=0,X=4: sacbedI: A=2, B=0,X=1: sacbedII: A=1, B=1,X=1: sabed(A1) and (B=0)(A=2) or (X1)X = X /

53、 AX=X+1 判定条件不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖;事实上同时满足这两种标准的判定/条件覆盖也不会比条件覆盖更强。(A1)(A1)(B=0)(B0)(A=2)(A2)(X1)(X1)II: A=1, B=1,X=1: sabdI: A=2, B=0,X=4: sacbed 测试用例I,II既满足判定覆盖也满足条件覆盖的要求。严格来讲,合适的条件覆盖测试用例设计应该作到满足判定/条件覆盖的标准:判定/条件覆盖并不比条件覆盖更强。(A1) and (B=0)(A=2) or (X1)X = X / AX=X+1 条件组合覆盖要求选取足够多的测试数据,使得每个判定表达式中条件的

54、各种可能组合都至少出现一次。(A1)(A1)(B=0)(B0)(A=2)(A2)(X1)(X1)I. A=2,B=0,X=4II. A=2,B=1,X=1III. A=1,B=0,X=2IV. A=1,B=1,X=1 满足条件组合覆盖标准的测试数据,也一定满足判定覆盖、条件覆盖和判定/条件覆盖标准。I: sacbedII: sabedIII: sabedIV: sabd覆盖路径 如果连通图 G 的子图G是连通的,而且包含G的所有节点,则称G是G 的点覆盖。 与语句覆盖标准相同。 如果连通图 G 的子图G是连通的,而且包含G的所有边,则称G是G 的边覆盖。 通常与判定覆盖标准相同。 选取足够多的测试数据,使程序的每条 可能路径都至

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论