软件工程导论_课件之第7章_实现(第五版)(张海潘编著).ppt.Convertor

合集下载

软件工程导论(全)张海藩PPT课件

软件工程导论(全)张海藩PPT课件

与方法。

主要内容包括:软件工程概述、软件生存周期及软件
海 藩
需求分析、软件设计方法、软件测试技术等。 通过本课程的学习,使学生能真正的从中了解软件开
发的整个过程。为了让学生真正得以实践,结合实际软件
开发项目,让学生从问题定义开始,经过可行性研究、需
求分析、概要设计、详细设计、编码直到最后要对自己开
软制品

(软体)


软件是计算机系统中与硬件相互依存的另一部分。 它包括程序、数据及其相关文档的完整集合。
2020/8/1

件 工
2、软件特点


. 软件是一种逻辑实体,而不是具体的物理实体
. 软件的生产与硬件不同
. 在软件的运行和使用期间,没有硬件那样的机械

磨损,老化问题



磨合
修改点 失
实际曲线
张 海 藩
具和软件库,软件开发人员训练有素,都强 烈渴望去编写很酷的软件,可以在几天的时 间里编写出一个相当复杂的软件。但为什么 有一些软件能够得到用户的喜欢,而另一些
则不能?为什么有些软件能够在市场上成功
,而有些则受到冷落?由此可见,开发软件
并不一定难,难就难在如何开发有用的软件。
微软凌小宁博士
2020/8/1
支持管理: 标准检验程序 库管理程序
2020/8/1

件 工
2、按软件的规模进行划分
程 导
按开发软件所需的 人力、时间以及完成的
源代码行数。
张 海
类别
参加人数
研制期限 产品规模(源代码行数)

微型
1
1-4周
约500行

软件工程导论第五版全套课件

软件工程导论第五版全套课件

第1章软件工程学概述1.1软件危机1.1.1软件危机的介绍1.1.2产生软件危机的原因图1.1引入同一变动付出的代价随时间变化的趋势1.1.3消除软件危机的途径1.2软件工程1.2.1软件工程的介绍1. 软件工程关注于大型程序的构造2. 软件工程的中心课题是控制复杂性3. 软件经常变化4. 开发软件的效率非常重要5. 和谐地合作是开发软件的关键6. 软件必须有效地支持它的用户7. 在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品2软件工程导论(第五版) 1.2.2软件工程的基本原理1. 用分阶段的生命周期计划严格管理2. 坚持进行阶段评审3. 实行严格的产品控制4. 采用现代程序设计技术5. 结果应能清楚地审查6. 开发小组的人员应该少而精7. 承认不断改进软件工程实践的必要性1.2.3软件工程方法学1. 传统方法学2. 面向对象方法学1.3软件生命周期1. 问题定义2. 可行性研究3. 需求分析4. 总体设计5. 详细设计6. 编码和单元测试7. 综合测试8. 软件维护软件工程导论(第五版) 3 1.4软件过程1.4.1瀑布模型图1.2传统的瀑布模型1. 阶段间具有顺序性和依赖性2. 推迟实现的观点3. 质量保证的观点4软件工程导论(第五版)图1.3实际的瀑布模型1.4.2快速原型模型图1.4快速原型模型软件工程导论(第五版) 5 1.4.3增量模型图1.5增量模型图1.6风险更大的增量模型6软件工程导论(第五版) 1.4.4螺旋模型图1.7简化的螺旋模型软件工程导论(第五版) 7图1.8完整的螺旋模型8软件工程导论(第五版) 1.4.5喷泉模型图1.9喷泉模型1.4.6 Rational统一过程1. 最佳实践2. RUP软件开发生命周期软件工程导论(第五版) 9图1.10 RUP软件开发生命周期1.4.7敏捷过程与极限编程1. 敏捷过程2. 极限编程图1.11 XP项目的整体开发过程10软件工程导论(第五版)图1.12 XP迭代开发过程1.4.8微软过程1. 微软过程准则2. 微软软件生命周期图1.13微软软件生命周期阶段划分和主要里程碑3. 微软过程模型图1.14微软过程的生命周期模型1.5小结习题11. 什么是软件危机?它有哪些典型表现?为什么会出现软件危机?2. 假设自己是一家软件公司的总工程师,当把图1.1给手下的软件工程师们观看,告诉他们及早发现并改正错误的重要性时,有人不同意这个观点,认为要求在错误进入软件之前就清除它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,一个人怎么能在设计阶段清除它呢?”应该怎么反驳他?3. 什么是软件工程?它有哪些本质特性?怎样用软件工程消除软件危机?4. 简述结构化范型和面向对象范型的要点,并分析它们的优缺点。

软件工程导论课件(全)张海藩

软件工程导论课件(全)张海藩

类别
参加人数
研制期限
产品规模(源代码行数)
微型 小型 中型 大型 甚大型 极大型
1 1 2-5 5-20 100-1000 2000-5000
1-4周 1-6周 1-2年 2-3年 4-5年 5-10年
约500行 约2000行 5000-50000行 5万-10万行 100万行 1000万行
2016/9/9
2016/9/9
原型模型(Prototype Model)
原型:是指模拟某种产品的原始模型
快速分析 和设计 加工 原型 原型 客户 评价原型 建造 原型
1、原型系统仅包括未来系统的 主要功能,以及系统的重要 接口。 2、为了尽快向用户提供原型, 开发原型系统时应尽量使用 能缩短开发周期的语言和工 具。
技术可行性分析方法--- 数学模型和优化技术、 概率和统计、排队论、控制论等方法。
2016/9/9
1、系统概述 2、可行性分析
可行性 论证报告
3、拟订具 (系流程图与系统结构图)
1、系统流程图: 是用来描述系统物理模型的一种传统工具。
C
ACD 的层次结构
2016/9/9
作 业
请画出学生成绩管理系统的 ACD 图
2016/9/9
第3 章 软件需求分析
软件需求分析是软件开发早期的一个重要阶段。它 在问题定义和可行性研究阶段之后进行。需求分析的基 本任务是软件人员和用户一起完全弄清用户对系统的确 切要求。这是关系到软件开发成败的关键步骤,也是整 个系统开发的基础。 软件需求分析阶段要求用 需求规格说明书(SRS) 来表达用户对系统的要求。规格说明书可用文字方式表 示,也可用图形表示。 本章将介绍需求分析的任务、步骤、需求分析方法 (面向数据流图分析方法、面向对象的分析方法)。

软件工程导论第五版第七章

软件工程导论第五版第七章

第7章实现7。

1编码7。

1。

1选择程序设计语言7.1。

2编码风格1。

程序内部的文档2。

数据说明3。

语句构造4。

输入输出5。

效率7。

2软件测试基础7。

2。

1软件测试的目标7。

2.2软件测试准则7。

2。

3测试方法7。

2.4测试步骤1。

模块测试2. 子系统测试3. 系统测试4。

验收测试5。

平行运行7。

2。

5测试阶段的信息流图7。

1测试阶段的信息流7.3单元测试7.3。

1测试重点1. 模块接口2. 局部数据结构3. 重要的执行通路4. 出错处理通路5。

边界条件7.3.2代码审查7.3.3计算机测试图7.2正文加工系统的层次图7。

4集成测试7.4。

1自顶向下集成图7.3自顶向下结合7.4.2自底向上集成图7。

4自底向上结合7.4.3不同集成测试策略的比较7.4。

4回归测试7.5确认测试7。

5.1确认测试的范围7。

5。

2软件配置复查7.5。

3Alpha和Beta测试7.6白盒测试技术7。

6.1逻辑覆盖1。

语句覆盖图7.5被测试模块的流程图2. 判定覆盖3。

条件覆盖4. 判定/条件覆盖5. 条件组合覆盖6。

点覆盖7. 边覆盖8。

路径覆盖7。

6.2控制结构测试1. 基本路径测试图7。

6求平均值过程的流图2. 条件测试3. 循环测试图7。

73种循环7。

7黑盒测试技术7。

7。

1等价划分7。

7。

2边界值分析7.7。

3错误推测7.8调试7。

8.1调试过程图7。

8调试过程7.8。

2调试途径1。

蛮干法2。

回溯法3. 原因排除法7.9软件可靠性7。

9.1基本概念1. 软件可靠性的定义2. 软件的可用性7.9。

2估算平均无故障时间的方法1。

符号2。

基本假定3。

估算平均无故障时间4。

估计错误总数的方法7.10小结习题71。

下面给出的伪码中有一个错误。

仔细阅读这段伪码,说明该伪码的语法特点,找出并改正伪码中的错误。

字频统计程序的伪码如下:2。

研究下面给出的伪码程序,要求:(1) 画出它的程序流程图.(2)它是结构化的还是非结构化的?说明理由。

《软件工程导论》张海潘_第五版_清华_课后答案PPT课件

《软件工程导论》张海潘_第五版_清华_课后答案PPT课件
答 经济上的可行性 ——这个系统的经济效益能超过它的开发成本吗? (投资与效益) 爱 操作可行性 ——系统的操作方式在这个用户组织内行得通吗?
护士 护士
社会、政策允许的可行性
2-2 为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员键入系统,如果是存款,系
统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户;如果是取款,系统计算利息
an.c 利息
2.3
打印利息

d清a单 ai
w. 某航空公司拟开发一个机票预定系统。旅行社把预订机票的旅客信息(姓名、性别…等)输入进该系统,系统 ww 为旅客安排航班,印出取票通知和账单,旅客在飞机起飞的前一天凭取票通知和账单交款取票,系统核对无误即印 网 出机票给旅客。

旅客
取票通知 账单/票款
网 检验信 源息
检验信 息过程
重试信息

SC 图
件 用户执行模块 课

答 读用户命令
命令处理


案系统设置
现用/非现用
密码处理
答 控制器
系统
控制器

读系统 数据
建立配 置文件
读 密码
用文件 比较密码
密码输出 控制器
机票预订系统(参见习题 2 第 3 题)

显示信息 与状态
产生 无效信息
6
更新日志
日志
日志
7 产生病情 要求
报告
课件 事样务
数据 数据

D1 患者日志

6.数据定义 1、顺序 + 2、选择〔 | 〕3、重复
题 – 定货系统 P39 习 – 习题 2 第 5 题 P44 案 2-1 应该从哪些方面研究目标系统的可行性?

软件工程导论(第7章)

软件工程导论(第7章)

测试的正确定义:“为了发现程序中的错 误而执行程序的过程。”
7.2.2 软件测试准则
1)所有测试都应该能追溯到用户需求;
2)应该远在测试前就制定出测试计划;
3)把Pareto原理应用到软件测试中;Pareto原理 说明测试发现的错误中的80%很可能是由程序 中20%的模块造成的。
4)应该从“小规模”测试开始,并逐步进行“大 规模”测试;
USER32.DLL; GDI32.DLL; KERNEL32.DLL。
Windows消息机制:
1)基于消息的事件驱动 消息可以是由硬件发来的(存于系统队列),
也可以由Windows系统和应用程序发来(存于 程序队列中);
每一个Windows程序在不停的捕捉各种消息, 并进行处理;
每个窗口都必须有一个窗口函数,来负责消息 的判断与处理。
3)重要的执行路径 由于不可能进行穷尽测试,因此选择测试
路径是非常关键的。 4)出错处理通路 5)边界条件
7.3.2 代码审查
审查小组: 1)组长; 2)程序的设计者; 3)程序的编写者; 4)程序的测试者。
7.3.3 计算机测试
由于软件模块不是一个独立的系统,不能独 立运行,要依靠其他模块调用,或需要调用其 他模块。
1.模块测试 模块测试又称单元测试,它把每个模块作为
单独的实体来测试。 2.子系统测试
子系统测试是把经过单元测试的模块放在一 起形成一个子系统来测试。
3.系统测试 系统测试是把经过测试的子系统装配成一个完
整的系统来测试。 4.验收测试
验收测试把软件系统作为单一的实体进行测试 (利用用户的实际数据测试)。 5.平行运行
如PL/1、PASCAL、C、ADA等 3)专用语言 如APL、BLISS、FORTH、LISP、PROLOG等

软件工程导论课件全张海藩

软件工程导论课件全张海藩
软件性能优化
利用大数据技术分析和监控软件系统的运行状态,发现性能瓶颈并 进行优化,提高软件系统的稳定性和效率。
软件故障预测与预防
通过分析历史故障数据和系统日志,预测可能出现的故障并提前采取 预防措施,降低软件维护成本。
云计算在软件工程中的应用
云计算平台开发
基于云计算平台开发软件应用,实现资源的动态分配、弹性扩展和按需付费,降低软件开发和运 维成本。
和输出。
在瀑布模型中,软件开发过程被划分为需求分析、设 计、编码、测试和维护等阶段,每个阶段都必须在前
一个阶段完成后才能开始。
瀑布模型的优点是易于理解和管理,适用于需求稳定、 变更较少的情况。但是,它缺乏灵活性,难以应对需 求变更和快速变化的市场环境。
螺旋模型
螺旋模型是一种迭代式的软件开发过程 模型,它将开发过程划分为多个循环, 每个循环包括需求分析、设计、编码和 测试等阶段。
在敏捷开发模型中,开发团队会按照短周期(通常是一到四周)进行迭代开发,每个周期都会交付可用 的软件产品。
敏捷开发模型的优点是能够快速响应变化、降低开发风险、提高软件质量。但是,它需要更多的沟通和 协作能力,同时也需要更加灵活的管理方式。
其他过程模型
除了上述三种常见的软件开发过程模 型外,还有其他一些过程模型,如原 型模型、增量模型等。
缺陷分析
对缺陷进行分析,找出根本原因,避免类似缺陷再次出现。
质量评估指标
缺陷密度
衡量软件质量的重要指标,表示每千行代码 中的缺陷数。
回归测试通过率
评估软件修复缺陷后,原有功能是否正常的 重要指标。
测试覆盖率
评估测试用例对软件产品功能的覆盖程度。
用户满意度
反映用户对软件产品质量和服务的满意程度。

软件工程导论-张海藩-第五版课后习题答案

软件工程导论-张海藩-第五版课后习题答案

多态
多态是指同一个操作作用于不 同的对象,可以产生不同的结 果。
UML建模语言简介
UML是一种用于对软件密集系统进行可视化建模 的统一建模语言。
UML通过统一的符号和工具,为软件开发人员提 供了一种通用的建模语言。
UML可以描述软件系统的静态结构和动态行为, 包括类图、时序图、用例图等。
面向对象分析、设计和实现过程
列表。
与用户确认需求列表,确保对用户需求有准确的理解。
03
需求规格说明书编写
01
编写详细的需求规格说明书,包括功能需求、性能需求、接 口需求等。
02
使用清晰、准确的语言描述需求,避免歧义和模糊性。
03
提供必要的图表、示例和数据,以便更好地理解和实现需求 。
需求变更管理
建立需求变更管理流 程,确保所有变更都 经过评估和批准。
及时通知相关干系人, 协商并处理变更请求, 确保项目顺利进行。
对变更进行影响分析, 评估变更对项目进度、 成本和质量的影响。
03 系统设计
总体设计原则与方法
模块化
将系统划分为若干个相对独立的模块, 每个模块具有特定的功能,模块之间 通过接口进行通信。
高内聚、低耦合
模块内部的功能应该高度相关,而模 块之间的依赖关系应该尽量减少。
要点二
软件评估技术
软件评估技术包括代码审查、走查、桌面检查等。代码审 查是一种正式的评估技术,由一组开发人员对源代码进行 详细检查以发现错误;走查是一种轻量级的评估技术,由 开发人员自行检查代码并记录下潜在的问题;桌面检查则 是一种非正式的评估技术,由评估人员通过查看文档和演 示来评价软件产品的质量。
THANKS FOR WATCHING
感谢您的观看

软件工程导论_张海藩_第五版课后习题答案

软件工程导论_张海藩_第五版课后习题答案

F3日前、时间
定时的生理信号 F6日志
P5 更新日志
D1患者日志 F6日志 P6 产生病情报告
10
E1 护士
13:07:42
F1要求报告
重庆工学院计算机科学与工程学院 李梁(liliang@)
P2 分析信号 E2 病人 F2生理信号 F2生理信号 F5安全范围
危及病人信息 D2患者安全范围
17
E1 储户
F1存款单 F7密码
P1 记录存款信息 F5存款信息 D1存款信息
P2 打印存单 F5存款信息 F3存单 E1 储户 F4利息
F7密码 F2取款单
F5存款信息 P3 核算密码
F4利息 F4利息 F6取款信息 P6 设置利率 P4 计算利息 F8储蓄利率
P5 打印利息清单 F8储蓄利率
5
作业及解答(第1-2章)
122629 6000 735,776,790(美元) 1-6 什么是软件过程?它与软件工程方法学有何关系? 软件过程是为了开发出高质量的软件产品所需完成的一系 列任务的框架,它规定了完成各项任务的工作步骤。 软件过程定义了运用技术方法的顺序、应该交付的文档资 料、为保证软件质量和协调软件变化必须采取的管理措施 ,以及标志完成了相应开发活动的里程碑。 软件过程是软件工程方法学的3个重要组成部分之一。
13:07:42
P6 产生病情报告 重庆工学院计算机科学与工程学院 李梁(liliang@)
12
作业及解答(第3章)
2-5 北京某高校可用的电话号码有以下几类:校内电话号 码由4位数字组成,第1位数字不是0;校外电话又分为本 市电话和外地电话两类,拨校外电话需先拨0,若是本市 电话则再接着拨8位数字(第1位不是0),若是外地电话则 拨3位区码再拨8位电话号码(第1位不是0)。 请用定义数据字典的方法,定义上述的电话号码。

软件工程导论课件之第7章_实现

软件工程导论课件之第7章_实现




可以在准生产环境中运行新系统而又不冒风险;
用户能有一段熟悉新系统的时间;
可以验证用户指南和使用手册之类的文档;
能够以准生产模式对新系统进行全负荷测试,可 以用测试结果验证性能指标。
36
7.2.5 测试阶段的信息流

输入信息有两类:


软件配置,包括需求说明书、设计说明书和源程序 清单等; 测试配置,包括测试计划和测试方案。
26
7.2 软件测试基础 7.2.1 软件测试的目标



测试是为了发现程序中的错误而执行程序的过 程; 好的测试方案是极可能发现迄今为止尚未发现 的错误的测试方案; 成功的测试是发现了至今为止尚未发现的错误 的测试。
27
7.2.2 软件测试准则

所有测试都应该能追溯到用户需求; 应该远在测试开始之前就制定出测试计划; 把Pareto原理应用到软件测试中; 应该从“小规模”测试开始,并逐步进行“大 规模”测试; 穷举测试是不可能的; 为了达到最佳的测试效果,应该由独立的第三 方从事测试工作。
37
7.3 单元测试

单元测试集中检测模块;
单元测试和编码属于软件过程的同一个阶段; 可以应用人工测试和计算机测试这样两种不同 类型的测试方法; 单元测试主要使用白盒测试技术,对多个模块 的测试可以并行地进行。

38
7.3.1 测试重点


模块接口 局部数据结构 重要的执行通路 出错处理通路 边界条件
12
(1) 程序运行时间 写程序之前先简化算术的和逻辑的表达式; 仔细研究嵌套的循环,以确定是否有语句可以从内层 往外移; 尽量避免使用多维数组; 尽量避免使用指针和复杂的表; 使用执行时间短的算术运算; 不要混合使用不同的数据类型; 尽量使用整数运算和布尔表达式。 在效率是决定性因素的应用领域,尽量使用有良好优 化特性的编译程序,以自动生成高效目标代码。

软件工程导论PPT课件

软件工程导论PPT课件

软件(software)是计算机系统中与硬件 (hardware)相互依存的另一部分,
它包括程序(program)、 相关数据(data)及其 说明文档(document)。
软件特指大型复杂的程序
2021
5
软件的发展
早期 •面向批处理 •有限的分布 •自定义软件
第二阶段 •多用户 •实时 •数据库 •软件产品
是把软件当作一种工业产品,要求 “采用工程化的 原理与方法对软件进行计划、开发和维护 ”。
2021
21
围棋与软件工程的感想
围棋
围棋棋谱拿过来的时候, 大师问“后面应该走哪里?”
十个初级爱好者选择的落
点散布在棋盘各处…… 十个职业棋手说的落子点
都差不多,甚至包括后面的几 步……
这就是高手和低手的差
别……
2021
13
软件危机的原因
● 一方面是与软件本身的特点 有关
● 另一方面是由软件开发和维 护的方法不正确有关
2021
14
软件开发工作量分配比例
40% ~ 50%
10% ~ 20%
测试
程序
其它
2021
15
引入同一变化付出的代价随时间变化的趋势
2021
16
费用分配比例
55%~70%
软件维护 其它
2021
25
总之: 软件工程是应用计算机科学、 数学及管理科学等原理开发软 件的工程。它借鉴传统工程的 原则、方法,以提高质量,降 低成本为目的。
2021
26
软件工程是一门交叉学科
软件工程的主要研究内容
软件开发技术:软件开发方法学 软件开发过程 软件工具和软件工程环境
软件工程管理:软件管理学 软件经济学 软件心理学

软件工程导论(第五版)_(张海藩_著)_清华大学出版社_课后习题答案

软件工程导论(第五版)_(张海藩_著)_清华大学出版社_课后习题答案

《软件工程导论》课后习题答案第一章软件工程概论1.什么是软件危机?软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。

这些问题表现在以下几个方面:(1)用户对开发出的软件很难满意。

(2)软件产品的质量往往靠不住。

(3)一般软件很难维护。

(4)软件生产效率很低。

(5)软件开发成本越来越大。

(6)软件成本与开发进度难以估计。

(7)软件技术的发展远远满足不了计算机应用的普及与深入的需要。

2.为什么会产生软件危机?(1) 开发人员方面,对软件产品缺乏正确认识,没有真正理解软件产品是一个完整的配置组成。

造成开发中制定计划盲目、编程草率,不考虑维护工作的必要性。

(2) 软件本身方面,对于计算机系统来说,软件是逻辑部件,软件开发过程没有统一的、公认的方法论和规范指导,造成软件维护困难。

(3) 尤其是随着软件规模越来越大,复杂程度越来越高,原有软件开发方式效率不高、质量不能保证、成本过高、研制周期不易估计、维护困难等一系列问题更为突出,技术的发展已经远远不能适应社会需求。

3.怎样克服软件危机?(1) 充分吸收和借鉴人类长期以来从事各种工程项目中积累的行之有效的有效原理、概念、技术与方法,特别是吸取几十年来人类从事计算机硬件研究和开发的经验教训。

在开发软件的过程中努力作到良好的组织,严格的管理,相互友好的协作。

(2) 推广在实践中总结出来的开发软件的成功的技术和方法,并研究更好、更有效的技术和方法,尽快克服在计算机系统早期发展阶段形成的一些错误概念和作法。

(3) 根据不同的应用领域,开发更好的软件工具并使用这些工具。

将软件开发各个阶段使用的软件工具集合成一个整体,形成一个很好的软件开发支环环境。

总之为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。

4.构成软件项目的最终产品:应用程序、系统程序、面向用户的文档资料和面向开发者的文档资料。

5.什么是软件生存周期?软件生存周期是指从软件定义、开发、使用、维护到淘汰的全过程。

《软件工程导论》PPT课件

《软件工程导论》PPT课件
– 通常一个消息由三部分组成:
• 接收消息的对象 • 消息标识符(即消息名) • 零个或多个变元
例如:MyCircle.Show(Green)
MyCircle是接收消息的对象的名字,Show是消息名,Green 是消息的变元。
2021/8/17
16
第二节 面向对象的基本概念
– 如何要求对象完成一定的处理动作?对象间如何 进行联系?所有这一切都只能通过消息传递来实
• 从面向对象程序设计的角度看:对象是具有相 同状态的一组操作的集合。
• 从信息模拟的角度看:对象是对问题域中某个
东西的抽象,这种抽象反映了系统保存有关这
个东西的信息和与它交互的能力,即对象是对
2021/8/17 属性值和操作的封装。
8
第二节 面向对象的基本概念
– 从形式化角度看:
对象::=<ID,MS,DS,MI> 其中:ID是对象的标识或名字,MS是对象中的数据集合,
– 优点:重载进一步提高了面向对象系统的 灵活性和可读性。
2021/8/17
25
第二节 面向对象的基本概念
十、封装
– 封装是指将方法与数据同放于一对象中以 使对数据的存取只通过该对象本身的方法。 面向对象程序的其它部分(对象以外的部 分)都不能直接作用于一对象的数据,对 象间的通信只能通过明确的消息来进行。
2021/8/17
26
第二节 面向对象的基本概念
面向对象
传统技术
方法
过程、函数或子例程
实例变量
数据
消息
过程或参数调用

抽象数据类型
继承
无类似技术
调用处于系统控制之 调用处于程序员控制

之下
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第7章实现7.1 编码7.2 软件测试基础7.3 单元测试7.4 集成测试7.5 确认测试7.6 白盒测试技术7.7 黑盒测试技术7.8 调试7.9 软件可靠性通常把编码和测试统称为实现。

所谓编码就是把软件设计结果翻译成用某种程序设计语言书写的程序。

软件测试在软件生命周期中横跨两个阶段。

通常在编写出每个模块之后就对它做单元测试。

在这个阶段结束之后,对软件系统还应该进行各种综合测试,通常由专门的测试人员承担这项工作。

通过测试发现错误之后还必须诊断并改正错误,这就是调试的目的。

调试是测试阶段最困难的工作。

在对测试结果进行收集和评价的时候,使用故障率数据,估计软件将来出现故障的情况并预测软件的可靠性。

7.1 编码7.1.1 选择程序设计语言机器语言,几乎不使用。

汇编语言,特殊场合使用。

高级语言,明显优于汇编语言。

程序设计语言的划代:选择语言的理想标准:为了使程序容易测试和维护以减少软件的总成本,所选用的高级语言应该有理想的模块化机制,以及可读性好的控制结构和数据结构;为了便于调试和提高软件可靠性,语言特点应该使编译程序能够尽可能多地发现程序中的错误;为了降低软件开发和维护的成本,选用的高级语言应该有良好的独立编译机制。

主要的实用标准:系统用户的要求可以使用的编译程序可以得到的软件工具工程规模程序员的知识软件可移植性要求软件的应用领域7.1.2 编码风格1. 程序内部的文档恰当的标识符适当的注解程序的视觉组织2. 数据说明数据说明的次序应该标准化。

当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量。

如果设计时使用了一个复杂的数据结构,则应该用注解说明用程序设计语言实现这个数据结构的方法和特点。

3. 语句构造不要为了节省空间而把多个语句写在同一行;尽量避免复杂的条件测试;尽量减少对“非”条件的测试;避免大量使用循环嵌套和条件嵌套;利用括号使逻辑表达式或算术表达式的运算次序清晰直观。

4. 输入输出对所有输入数据都进行检验;检查输入项重要组合的合法性;保持输入格式简单;使用数据结束标记,不要要求用户指定数据的数目;明确提示交互式输入的请求,详细说明可用的选择或边界数值;当程序设计语言对格式有严格要求时,应保持输入格式一致;设计良好的输出报表;给所有输出数据加标志。

5. 效率效率主要指处理机时间和存储器容量两个方面。

效率是性能要求,因此应该在需求分析阶段确定效率方面的要求。

效率是靠好设计来提高的。

程序的效率和程序的简单程度是一致的,不要牺牲程序的清晰性和可读性来不必要地提高效率。

效率问题:程序运行时间存储器效率输入输出的效率(1) 程序运行时间写程序之前先简化算术的和逻辑的表达式;仔细研究嵌套的循环,以确定是否有语句可以从内层往外移;尽量避免使用多维数组;尽量避免使用指针和复杂的表;使用执行时间短的算术运算;不要混合使用不同的数据类型;尽量使用整数运算和布尔表达式。

在效率是决定性因素的应用领域,尽量使用有良好优化特性的编译程序,以自动生成高效目标代码。

(2) 存储器效率使用能保持功能域的结构化控制结构,是提高效率的好方法。

在微处理机中如果要求使用最少的存储单元,则应选用有紧缩存储器特性的编译程序,在非常必要时可以使用汇编语言。

提高执行效率的技术通常也能提高存储器效率。

提高存储器效率的关键同样是“简单”。

(3) 输入输出的效率如果用户为了给计算机提供输入信息或为了理解计算机输出的信息,所需花费的脑力劳动是经济的,那么人和计算机之间通信的效率就高。

因此,简单清晰同样是提高人机通信效率的关键。

例1:注释/* ADD AMOUNT TO TOTAL */TOTAL = AMOUNT+TOTAL/* ADD MONTHL Y-SALES TO ANNUAL-TOTAL */TOTAL = AMOUNT+TOTAL例2:视觉组织——空格(A<-17)ANDNOT(B<=49)ORC(A<-17) AND NOT (B<=49) OR C例3:视觉组织——移行IF (…) THENIF (…) THEN……ELSE……ENDIF……ELSE……ENDIF例4:数据说明标准化INTEGER size,length,width,cost,priceINTEGER cost,length,price,size,width例5:一行一条语句FOR I:=1 TO N-1 DO BEGIN T:=I;FOR J:=I+1 TO N DOIF A[J]<A[T] THEN T:=J; IF T<>ITHEN BEGIN WORK:=A[T];A[T]:=A[I]; A[I]:=WORK; END END;FOR I:=1 TO N-1 DOBEGINT:=I;FOR J:=I+1 TO N DOIF A[J]<A[T] THEN T:=J;IF T<>I THENBEGINWORK:=A[T];A[T]:=A[I];A[I]:=WORK;ENDEND;例6:强调清晰性A[I]=A[I]+A[T];A[T]=A[I]-A[T];A[I]=A[I]-A[T];WORK=A[T];A[T]=A[I];A[I]=WORK;例7:简单直接for (i=1; i<=n; i++)for (j=1; j<=n; j++)V[i][j]=(i/j)*(j/i)for (i=1; i<=n; i++)for (j=1; j<=n; j++)if (i==j)V[i][j]=1;elseV[i][j]=0;例8:避免不必要的转移IF (X<Y) GOTO 30IF (Y<Z) GOTO 50SMALL=ZGOTO 7030 IF (X<Z) GOTO 60AMALL=ZGOTO 7050 SMALL=YGOTO 7060 SMALL=X70 CONTINUESMALL=X;IF (Y<SMALL)SMALL=Y;IF (Z<SMALL)SMALL=Z;例9:避免使用空ELSE和IF…THEN IF…语句if (char>=‟a‟)if (char<=‟z‟)cout << “This is a letter.”;elsecout << “This is not a letter.”;if (char>=‟a‟ && char<=‟z‟)cout << “This is a letter.”;elsecout << “This is not a letter.”;例10:少用否定条件if ( !(char < ‟0‟ || char > ‟9‟) )if (char >= …0‟ && char <= …9‟)7.2 软件测试基础7.2.1 软件测试的目标测试是为了发现程序中的错误而执行程序的过程;好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;成功的测试是发现了至今为止尚未发现的错误的测试。

所有测试都应该能追溯到用户需求;应该远在测试开始之前就制定出测试计划;把Pareto原理应用到软件测试中;应该从“小规模”测试开始,并逐步进行“大规模”测试;穷举测试是不可能的;为了达到最佳的测试效果,应该由独立的第三方从事测试工作。

7.2.2 软件测试准则7.2.3 测试方法黑盒测试(功能测试):把程序看作一个黑盒子;完全不考虑程序的内部结构和处理过程;是在程序接口进行的测试。

白盒测试(结构测试):把程序看成装在一个透明的盒子里;测试者完全知道程序的结构和处理算法;按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。

黑盒测试不可能实现穷尽测试:假设有程序P,输入量微A和B,输出量为C。

如果计算机的字长为32位,A和B的数据类型都是整数类型。

将A和B的可能取值进行排列组合,输入数据的可能性有:232×232=264种。

假设这个程序执行一次需要1毫秒,要完成所有的测试,计算机需要连续工作5亿年。

白盒测试也不能实现穷尽测试:图中所示的一个小程序的控制流程。

曲线代表执行次数不超过20的循环,循环体中共有5条通路。

可能执行的路径有520条,近似为1014条可能的路径。

如果完成一个路径的测试需要1毫秒,那么整个测试过程需要3170年。

黑盒测试与白盒测试优缺点比较:7.2.4 测试步骤1. 模块测试(单元测试)保证每个模块作为一个单元能正确运行;发现的往往是编码和详细设计的错误。

2. 子系统测试把经过单元测试的模块放在一起形成一个子系统来测试;着重测试模块的接口。

3. 系统测试把经过测试的子系统装配成一个完整的系统来测试;发现的往往是软件设计中的错误,也可能发现需求说明中的错误;不论是子系统测试还是系统测试,都兼有检测和组装两重含义,通常称为集成测试。

4. 验收测试(确认测试)把软件系统作为单一的实体进行测试;它是在用户积极参与下进行的,而且可能主要使用实际数据(系统将来要处理的信息)进行测试;发现的往往是系统需求说明书中的错误。

5. 平行运行同时运行新开发出来的系统和将被它取代的旧系统;比较新旧两个系统的处理结果;可以在准生产环境中运行新系统而又不冒风险;用户能有一段熟悉新系统的时间;可以验证用户指南和使用手册之类的文档;能够以准生产模式对新系统进行全负荷测试,可以用测试结果验证性能指标。

7.2.5 测试阶段的信息流输入信息有两类:软件配置,包括需求说明书、设计说明书和源程序清单等;测试配置,包括测试计划和测试方案。

7.3 单元测试单元测试集中检测模块;单元测试和编码属于软件过程的同一个阶段;可以应用人工测试和计算机测试这样两种不同类型的测试方法;单元测试主要使用白盒测试技术,对多个模块的测试可以并行地进行。

7.3.1 测试重点模块接口局部数据结构重要的执行通路出错处理通路边界条件7.3.2 代码审查由审查小组正式进行测试称为代码审查;可查出30%~70%的逻辑设计错误和编码错误;审查小组组成:组长程序的设计者程序的编写者程序的测试者一次审查会上可以发现许多错误,可以减少系统验证的总工作量。

7.3.3 计算机测试必须为每个单元测试开发驱动程序和(或)存根程序。

驱动程序是一个“主程序”,它接收测试数据,传送给被测试的模块,并且印出有关的结果。

存根程序代替被测试的模块所调用的模块。

它使用被它代替的模块的接口,可能做最少量的数据操作,印出对入口的检验或操作结果,并且把控制归还给调用它的模块。

驱动程序和存根程序代表开销,通常并不把它们作为软件产品的一部分交给用户。

相关文档
最新文档