软件工程课件 第七章(实现)
合集下载
软件工程-07
16
120
130 140
面向对象的程序设计方法
在面向对象的程序设计中,数据和操作数据的算 法不再分离,它们被封装在一起,构成对象,其 他的对象可以使用这个对象所提供的服务。
面向对象程序设计方法的特点是封装、泛化、多 态、协同和复用。 1. 封装 按照抽象数据类型的要求,对象把数据和相应 操作封装在其内部,通过定义在接口上的操作 访问。
对框架中的局部再做细化,得到整个程序。 main ( ) { /*建立2到100的数组A[ ],其中A[i]=i*/ for ( i = 2;i <= 100;i++ ) A[i] = i; /* 建立2到10的素数表B[ ],其中存放2到10以内的素数*/ B[1]= 2;B[2]= 3;B[3]= 5;B[4]= 7; /*若A[i]=i是B[ ]中任一数的倍数,则剔除A[i]*/ for ( j = 1;j <= 4;j++ )
软件工程59xp迭代的生存周期版本发布计划新用户故事项目速度用户故事上一次迭代项目速度制定迭代计划未完成的任务迭代计划新功能学习交流未通过测试的部分错误开发每日工作最新版本软件工程60xp的产品化阶段的核心是确认软件产品已经通过了大规模高强度的测试准备好进入产在这个阶段中会降低软件的演化速度但软件的演化过程并没有停止只是对于某个功能是否应被加入到下一个发布中需要慎重考虑
19
4. 协同 协同是指一组对象通过它们之间的协作来完成 一个任务。这组对象间的协作包含了一个消息 序列,亦称线程。 在使用消息传递时需要仔细考虑消息序列中每 个操作执行的前臵条件和后臵条件。 例如,使用队列时,在进队列前要先保证队列 非满,在出队列前要保证队列非空。但这样做, 必须了解消息接收者对象的细节,有悖于实现 与使用相分离的信息隐蔽原则。
120
130 140
面向对象的程序设计方法
在面向对象的程序设计中,数据和操作数据的算 法不再分离,它们被封装在一起,构成对象,其 他的对象可以使用这个对象所提供的服务。
面向对象程序设计方法的特点是封装、泛化、多 态、协同和复用。 1. 封装 按照抽象数据类型的要求,对象把数据和相应 操作封装在其内部,通过定义在接口上的操作 访问。
对框架中的局部再做细化,得到整个程序。 main ( ) { /*建立2到100的数组A[ ],其中A[i]=i*/ for ( i = 2;i <= 100;i++ ) A[i] = i; /* 建立2到10的素数表B[ ],其中存放2到10以内的素数*/ B[1]= 2;B[2]= 3;B[3]= 5;B[4]= 7; /*若A[i]=i是B[ ]中任一数的倍数,则剔除A[i]*/ for ( j = 1;j <= 4;j++ )
软件工程59xp迭代的生存周期版本发布计划新用户故事项目速度用户故事上一次迭代项目速度制定迭代计划未完成的任务迭代计划新功能学习交流未通过测试的部分错误开发每日工作最新版本软件工程60xp的产品化阶段的核心是确认软件产品已经通过了大规模高强度的测试准备好进入产在这个阶段中会降低软件的演化速度但软件的演化过程并没有停止只是对于某个功能是否应被加入到下一个发布中需要慎重考虑
19
4. 协同 协同是指一组对象通过它们之间的协作来完成 一个任务。这组对象间的协作包含了一个消息 序列,亦称线程。 在使用消息传递时需要仔细考虑消息序列中每 个操作执行的前臵条件和后臵条件。 例如,使用队列时,在进队列前要先保证队列 非满,在出队列前要保证队列非空。但这样做, 必须了解消息接收者对象的细节,有悖于实现 与使用相分离的信息隐蔽原则。
07章 实现
11
NO.10 R语言
排名理由 作者头发浓密度:
100%
12
NO.9 Python
颁奖词
Python是一种广泛使用的高级编程语言,属于通用型编 程语言。作为一种解释型语言,Python的设计哲学强调 代码的可读性和简洁的语法。相比于C++或Java, Python让开发者能够用更少的代码表达想法。不管是小 型还是大型程序,该语言都试图让程序的结构清晰明了 。
软件工程导论(第6版)
第7章 实现
主讲:XXX
1
第7章 实现
实现
编码就是把软件设计结果翻译成
编码 用某种程序设计语言书写的程序,
是对设计的进一步具体化。
测试
程序的质量主要取决于软件设计 的质量。软件测试是保证软件质 量的关键步骤,是对软件规格说 明、设计和编码的最后复审。
第7章 实现
引言
2
主要内容
提名词
Python语言作者,Guido van Rossum:生于荷兰哈勒 姆,计算机程序员,为Python程序设计语言的最初设计 者及主要架构师。
NO.9 Pythpon
13
排名理由
作者头发浓密度:
95%
NO.8 C语言
14
颁奖词
C是一种通用的编程语言,广泛用于系统软件与应用软件 的开发。C语言具有高效、灵活、功能丰富、表达力强和 较高的可移植性等特点。C语言编译器普遍存在于各种不 同的操作系统中,例如Microsoft Windows、macOS、 Linux、Unix等。C语言的设计影响了众多后来的编程语 言,例如C++、Objective-C、Java、C#等。
提名词
C语言作者,Dennis MacAlistair Ritchie:美国计算机 科学家。黑客圈子通常称他为“dmr”。他是C语言的创 造者、Unix操作系统的关键开发者,对计算机领域产生 了深远影响,并与肯·汤普逊同为1983年图灵奖得主。
软件工程课件 第七章
不可能进行穷尽测试,选择最有代表性、最 可能发生错误的通道进行测试十分关键。要选 择适当的测试用例对模块重要的执行路径(如 条件、循环)进行测试,用以发现不正确的计 算、错误的比较或不适当的控制流向。
目的:使模块中所有可能被执行的语句都被 执行,所有可能假设的条件都出现,以保证其 逻辑的正确性。
前一页
单元测试—边界条件
边界测试是单元测试中最后的也可能是最 重要的任务。软件常常在它的边界上失效, 例如,处理n元数组的第n个元素时,或做到i 次循环中的第i次重复时,往往会发生错误。 使用刚好小于、刚好等于和刚好大于最大值 或最小值的数据结构、控制量和数据值的测 试方案,非常可能发现软件中的错误。
前一页
软件工程
(Software Engineering)
第七章 实现
实现概述
实现就是选用某种程序设计语言在 特定的环境实现软件系统的全部功能, 并满足相应的非功能要求。 实现包括编码与测试,跨越软件生 成周期的两个阶段。
前一页
编码
编程就为是用编程(程序)语言把 软件表达翻译为计算机可以理解的形 式—用某种程序设计语言书写的程序。 目前仍然主要采用人工的方法和传 统的编程语言。Fra bibliotek前一页
集成测试
由模块组装成程序时有两种方法。 一种是先分别测试每个模块,再把所有模块按 设计要求放在一起结合成所要的程序。这种方法称 为非渐增式测试方法。 另一种方法是把下一个要测试的模块同已经测 试好的那些模块结合起来进行测试,测试完以后再 把下一个应该测试的模块结合进来测试。这种每次 增加一个模块的方法称为渐增式测试。 渐增式测试有自顶向下和自底向上两种策略。
编码风格
标准:
简单明晰
易读易懂
编码风格—程序内部文档
目的:使模块中所有可能被执行的语句都被 执行,所有可能假设的条件都出现,以保证其 逻辑的正确性。
前一页
单元测试—边界条件
边界测试是单元测试中最后的也可能是最 重要的任务。软件常常在它的边界上失效, 例如,处理n元数组的第n个元素时,或做到i 次循环中的第i次重复时,往往会发生错误。 使用刚好小于、刚好等于和刚好大于最大值 或最小值的数据结构、控制量和数据值的测 试方案,非常可能发现软件中的错误。
前一页
软件工程
(Software Engineering)
第七章 实现
实现概述
实现就是选用某种程序设计语言在 特定的环境实现软件系统的全部功能, 并满足相应的非功能要求。 实现包括编码与测试,跨越软件生 成周期的两个阶段。
前一页
编码
编程就为是用编程(程序)语言把 软件表达翻译为计算机可以理解的形 式—用某种程序设计语言书写的程序。 目前仍然主要采用人工的方法和传 统的编程语言。Fra bibliotek前一页
集成测试
由模块组装成程序时有两种方法。 一种是先分别测试每个模块,再把所有模块按 设计要求放在一起结合成所要的程序。这种方法称 为非渐增式测试方法。 另一种方法是把下一个要测试的模块同已经测 试好的那些模块结合起来进行测试,测试完以后再 把下一个应该测试的模块结合进来测试。这种每次 增加一个模块的方法称为渐增式测试。 渐增式测试有自顶向下和自底向上两种策略。
编码风格
标准:
简单明晰
易读易懂
编码风格—程序内部文档
软件工程ppt第七章 实现
§7.1 编码
语言选择的实用标准: • 系统用户的要求。 -- 用户熟悉的语言 • 可以使用的编译环境 • 可以得到的软件工具 • 工程规模 --过大,可以自己设计一个专用语言 • 程序员的知识 • 软件可移植性要求 • 软件的应用领域
SOFTWARE ENGINEERING
适用各类应用领域的语言
SOFTWARE ENGINEERING
• E.W.Dijkstra 指出: • “程序测试能证明错误的存在,但 不能证明错误不存在.” • 测试的目的是发现程序中 的错误,是为了证明程序有错, 而不是证明程序无错.
把证明程序无错当作测试目的不仅是不 正确的, 完全做不到的,而且对做好测试没 有任何益处,甚至是十分有害的.
SOFTWARE ENGINEERING
单元测试实施步骤
• 实施步骤 –1、编译 –2、静态分析器检查 –3、代码评审 –4、计算机测试 •测试驱动软件 •测试存根软件(桩模块)
• 在确定测试用例的同时,应给出对应的 期望结果。 • 应为测试模块开发一个驱动模块 (driver)和(或)若干个存根软件(stub)。
§7.2 软件测试基础
目的 在软件投入生产性运行之前,尽可能多的发现软 件中的错误,并及时改正它们。 测试过程
SOFTWARE ENGINEERING
• 7.2.1 软件测试的目标 测试的目标或定义:
• 为了发现程序中的错误而执行程序的过程。 • 好的测试方案是极可能发现迄今为止尚未发现的 错误的方案 • 成功的测试是发现了至今为止尚未发现的错误的 测试
软件测试信息流
需求规格说明书 软件设计说明书 被测源程序
测试计划 测试用例 (测试数据) 测试驱动程序
软件 配置
软件工程全部课件-07 章实现A
程序设计风格
源程序文档化
源程序文档化包括标识符的命名、安排注释
以及程序的视觉组织等。
17
标识符包括模块名、变量名、常量名、标号名、子程序名以 及数据区名、缓冲区名等。这些名字应能反映它所代表的实 际东西,使其能够见名知意,有助于对程序功能的理解。选
取含义鲜明的名字,使它能正确地提示程序对象所代 表的实体
(3)注释要正确。
23
程序设计风格
视觉组织—空格、空行和移行
空格:恰当地利用空格,可以突出运算的优
先性,避免发生运算的错误。例如,将表达 式
(a<-17)&&!(b<=49)||c
写成
(a<-17) && !(b<=49) || c
就更清楚。
空行:自然的程序段之间可用空行隔开。
24
程序设计风格
12
高级语言优点:
生产率高, 程序容易阅读,容易测试,容易调试, 容易维护
选择高级语言的理想标准: 为了使程序容易测试和维护以减少软件的总成本,所选用的高 级语言应该有理想的模块化机制,以及可读性好的控制结构和 数据 结构; 为了便于调试和提高软件可靠性,语言特点应该使编译程序能 够尽可能多地发现程序中的错误; 为了降低软件开发和维护的成本,选用的高级语言应该有良好 的独立编译机制。
根据设计去完成编码时,困难最少; 可以减少需要的程序测试量; 可以得到更容易阅读和更容易维护的程序。 7.1.1 选择程序设计语言
第7章
实现
4
7.1.1 程序设计语言
程序设计语言的性能
从软件心理学及软件工程角度对程序设计语
言的性能进行讨论。
5
程序设计语言
软件心理学的观点
第七章实现ppt课件
❖ 软件实现
软件测试在软件生命周期中横跨两个阶段
• 编码和单元测试属于软件生命周期的同一个阶段 • 对软件系统还应该进行各种综合测试,这是软件生命周期中的
另一个独立的阶段
软件测试的工作量往往占软件开发总工作量的40%以 上
精品课件
总体设计内容提纲
精品课件
编码
❖ 程序设计语言
是人和计算机通信的基本工具 程序设计语言的特点
第七章 实现
精品课件
软件生命周期
概要设计 详细设计 实现
软件开发
精品课件
软件实现的任务 ❖ 软件实现
把编码和测试统称为实现 编码就是把软件设计的结果翻译成用某种程序设计语
言书写的程序
• 所选用的程序设计语言的特点及编码风格将对程序的可靠性、 可读性、可测试性和可维护性产生深远的影响
精品课件
软件实现的任务
编码
❖ 编码风格 5 效率
• 存储器效率 –提高存储器效率主要是指如何使程序占用存储单元少, 存取时间短 –提高执行效率的技术也能提高存储器效率 –对于大型计算机要考虑操作系统页式调度的特点 –对于微处理机应选用有紧缩存储器特性的编译程序, 必要时可使用汇编语言
精品课件
编码
❖ 编码风格 5 效率
• 影响人的思维和解题方法 • 影响人和计算机通信的方式和质量 • 影响人阅读和理解程序的难易程度
由于软件大部分成本在测试和维护,所以程序容易测试和容易 维护极端重要
程序员在相同时间内可以写出的高级语言语句数和汇编语言指 令数大体相同
因此用高级语言写程序比用汇编语言写程序生产率可以提高好 几倍
精品课件
编码
❖ 编码风格 5 效率
• 程序运行时间 –源程序的效率直接由详细设计阶段确定的算法的效率 决定 –写程序的风格也能对程序的执行速度和存储器要求产 生影响 –把详细设计翻译成程序时,应使用的原则: » 写程序之前先简化算术的和逻辑的表达式 » 研究嵌套的循环,以确定是否有语句可以从内往 外移 » 尽量避免精使品用课多件 维数组 » 尽量避免使用指针和复杂的表
软件测试在软件生命周期中横跨两个阶段
• 编码和单元测试属于软件生命周期的同一个阶段 • 对软件系统还应该进行各种综合测试,这是软件生命周期中的
另一个独立的阶段
软件测试的工作量往往占软件开发总工作量的40%以 上
精品课件
总体设计内容提纲
精品课件
编码
❖ 程序设计语言
是人和计算机通信的基本工具 程序设计语言的特点
第七章 实现
精品课件
软件生命周期
概要设计 详细设计 实现
软件开发
精品课件
软件实现的任务 ❖ 软件实现
把编码和测试统称为实现 编码就是把软件设计的结果翻译成用某种程序设计语
言书写的程序
• 所选用的程序设计语言的特点及编码风格将对程序的可靠性、 可读性、可测试性和可维护性产生深远的影响
精品课件
软件实现的任务
编码
❖ 编码风格 5 效率
• 存储器效率 –提高存储器效率主要是指如何使程序占用存储单元少, 存取时间短 –提高执行效率的技术也能提高存储器效率 –对于大型计算机要考虑操作系统页式调度的特点 –对于微处理机应选用有紧缩存储器特性的编译程序, 必要时可使用汇编语言
精品课件
编码
❖ 编码风格 5 效率
• 影响人的思维和解题方法 • 影响人和计算机通信的方式和质量 • 影响人阅读和理解程序的难易程度
由于软件大部分成本在测试和维护,所以程序容易测试和容易 维护极端重要
程序员在相同时间内可以写出的高级语言语句数和汇编语言指 令数大体相同
因此用高级语言写程序比用汇编语言写程序生产率可以提高好 几倍
精品课件
编码
❖ 编码风格 5 效率
• 程序运行时间 –源程序的效率直接由详细设计阶段确定的算法的效率 决定 –写程序的风格也能对程序的执行速度和存储器要求产 生影响 –把详细设计翻译成程序时,应使用的原则: » 写程序之前先简化算术的和逻辑的表达式 » 研究嵌套的循环,以确定是否有语句可以从内往 外移 » 尽量避免精使品用课多件 维数组 » 尽量避免使用指针和复杂的表
软件工程导论课件之第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) 程序运行时间 写程序之前先简化算术的和逻辑的表达式; 仔细研究嵌套的循环,以确定是否有语句可以从内层 往外移; 尽量避免使用多维数组; 尽量避免使用指针和复杂的表; 使用执行时间短的算术运算; 不要混合使用不同的数据类型; 尽量使用整数运算和布尔表达式。 在效率是决定性因素的应用领域,尽量使用有良好优 化特性的编译程序,以自动生成高效目标代码。
《软件工程》课件 第7章实现
2014年春 • 软件工程
一般语言的项目应用领域
2014年春 • 软件工程
7.1.2
编码风格
源程序代码的逻辑简明清晰、易读易懂是好程序 的一个重要标准 源程序文档化 数据说明 语句结构 输入/输出方法
注:参考Java语言编程规范
2014年春 • 软件工程
1. 源程序文档化
标识符的命名
2014年春 • 软件工程
黑盒测试例
2014年春 • 软件工程
白盒测试例
2014年春 • 软件工程
7.2.4
测试步骤
1.单元测试 又称模块测试。每个程序模块完成一个相对独立的子功 能,所以可以对该模块进行单独的测试。由于每个模块都有 清晰定义的功能,所以通常比较容易设计相应的测试方案, 以检验每个模块的正确性。 2.集成测试
例2:程序段功能是交换元素a[j]和a[j+1]。为少一个变量程序的易读性差。 a[j] :=a[j] + a[j+1]; a[j+1] := a[j] - a[j+1]; a[j] :=a[j] - a[j+1]; t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t;
应改为:
为了改善程序的易读性,应采用直截了当的描述方式。
测试只能证明程序中有错误,不能证明程序中没有错误。 (6)为了达到最佳的测试效果,应该由独立的
第三方从事测试工作。
2014年春 • 软件工程
7.2.3
测试方法
软件测试方法一般分为:静态测试和动态测试。
静态测试是指被测程序不在机器上运行,采用人 工检测和计算机辅助静态分析的手段对程序进行 检测。 动态测试是指通过运行程序发现错误,又分黑盒 测试和白盒测试两种。
软件工程第七章PPT资料(正式版)
此时,应当再设计与执行一些测试用例,以获得更多的数据。
调试(Debug)
❖软件调试是在进行了成功的测试之后才 开始的工作。它与软件测试不同,调试 的任务是进一步诊断和改正程序中潜在 的错误。
❖调试活动由两部分组成:
▪ 确定程序中可疑错误的确切性质 和位置。
▪ 对程序(设计,编码)进行修改,排 除这个错误。
▪ 现象实际上是由一些非错误原因 (例如,舍入不精确)引起的。
▪ 现象可能是由于一些不容易发现 的人为错误引起的。
▪ 错误是由于时序问题引起的,与 处理过程无关。
▪ 现象是由于难于精确再现的输入 状态(例如,实时应用中输入顺 序不确定)引起。
▪ 现象可能是周期出现的。在软、 硬件结合的嵌入式系统中常常遇 到。
或某些有关测试。 修改错误的过程将迫使人们暂时回到程序设计阶段。
利用某些程序语言的调试功能或专门的交互式调试工具,分析程序的动态过程,而不必修改程序。
❖从技术角度来看,查找错误的难度在于:
▪ 现象与原因所处的位置可能相距 甚远。
▪ 当其它错误得到纠正时,这一错 误所表现出的现象可能会暂时消 失,但并未实际排除。
几种主要的调试方法
调试的关键在于推断程序内部的错误位 置及原因。可以采用以下方法:
强行排错 这种调试方法目前使用较多,效率较低。
它不需要过多的思考,比较省脑筋。例 如:
▪ 通过内存全部打印来调试,在这 大量的数据中寻找出错的位置。
▪ 在程序特定部位设置打印语句, 把打印语句插在出错的源程序的 各个关键变量改变部位、重要分 支部位、子程序调用部位,跟踪 程序的执行,监视重要变量的变 化。
(-10,-10,10) ……
它不需要过多的思考,比较省脑筋。
第7章软件工程全解PPT课件
D.9
11
7.2面向对象技术基础
• 考点:面向对象分析与设计的基本概念,包括对象,类, 消息,继承,多态等
• 一、基本概念 1.对象 2.消息 3.类 4.继承 5.多态 6.动态绑定
12
• 二、面向对象分析与设计基本概念 1.面向对象分析(OOA):建立待开发软件系统的模型 2.面向对象设计(OOD):定义系统构造蓝图,并根据系
• A.这三个对象所存储的数据一定是不同的 • B.这三个对象所存储的数据一定是相同的 • C.这三个对象一定具有相同的操作 • D.这三个对象无法共享数据 • 2.下列关于超类,子类,基类的叙述中,正确的是 A • A.子类是超类的特化 B.基类是超类的特化 • C.基类是子类的特化 D.超类是基类的特化
描述了谁将使用系统以及用户期望以什么方式与系统交 互。 序列图:描述了在一个用例或操作的执行过程中以时间顺 序组织的对象之间的交互活动 通信图:强调收发消息的对象之间的结构组织。
14
• 状态图:展现了一个状态机,由状态、转换、事件和活 动组成,用于建模时间如何改变对象的状态以及引起对 象从一个状态向另一个状态转换的事件。
3
7.1 软件工程和项目管理基础
➢考点:软件工程和软件生存周期的概念,软件开 发 项目管理的基础知识
➢一、软件的生存周期 可行性分析和项目开发计划; 需求分析 软件设计 编码 测试和维护
4
二、软件开发项目管理基础知识
➢ 1.成本估算 (1)自顶向下估算方法 (2)自底向上估算方法 (3)差别估算方法
_7iX7n3C0yKIn5eejUpBn4dVAPMttK8UcWRNKHAQneYpivigBd aVWD_c5d0foeYRW_0RwIWSuZ4aBHMLkQq • 3.加工逻辑(小说明) • 1.结构化语言 • 2.判定表 • 3.判定树
软件工程-第7章
源程序代码的逻辑简明清晰、易读易懂是好程序的一个重 要标准,为了做到这一点,应该遵循下述规则。
1.程序内部的文档
所谓程序内部的文档包括恰当的标识符、适当的注解和程 序的视觉组织等。
标识符:含义鲜明的名字、缩写规则一致、为名字加注 解;
注解:正确性,简要描述模块的功能、主要算法、接口 特点、重要数据以及开发简史或解释包含这段代码的必 要性;
子系统测试和系统测试,都兼有检测和组装两重含义, 通常称为集成测试。
第7章 实现
7.2.4 测试步骤
28
7.2 软件测试基础
4.验收测试 验收测试把软件系统作为单一的实体进行测试,测试内
容与系统测试基本类似,但是它是在用户积极参与下进行的, 而且可能主要使用实际数据(系统将来要处理的信息)进行测 试。
7.1 编码
17
编码规范的意义:
➢促进团队合作 ➢减少bug处理 ➢降低维护成本 ➢有助于代码审查
7.1 编码
18
编码规范的原则:
➢方便交流和维护 ➢不影响编码的效率,符合大众习惯 ➢使代码更美观,阅读更方便 ➢使代码的逻辑更清晰,更易于理解
7.1 编码
代码开源网站 :
20
主要内容
7.1 编码 7.2 软件测试基础 7.3 单元测试 7.4 集成测试 7.5 确认测试 7.6 白盒测试技术 7.7 黑盒测试技术 7.8 调试 7.9 软件可靠性
视觉组织:适当的阶梯形式使程序的层次结构清晰明显。
第7章 实现
7.1.2 编码风格
7.1 编码
7.1.2.编码风格
要做到按照良好的编程风格进行编程,可以从以下几点入手。 1.版权和版本声明。 应该在每个代码文件的开头对代码的版权和版本 进行声明,主要内容有:
1.程序内部的文档
所谓程序内部的文档包括恰当的标识符、适当的注解和程 序的视觉组织等。
标识符:含义鲜明的名字、缩写规则一致、为名字加注 解;
注解:正确性,简要描述模块的功能、主要算法、接口 特点、重要数据以及开发简史或解释包含这段代码的必 要性;
子系统测试和系统测试,都兼有检测和组装两重含义, 通常称为集成测试。
第7章 实现
7.2.4 测试步骤
28
7.2 软件测试基础
4.验收测试 验收测试把软件系统作为单一的实体进行测试,测试内
容与系统测试基本类似,但是它是在用户积极参与下进行的, 而且可能主要使用实际数据(系统将来要处理的信息)进行测 试。
7.1 编码
17
编码规范的意义:
➢促进团队合作 ➢减少bug处理 ➢降低维护成本 ➢有助于代码审查
7.1 编码
18
编码规范的原则:
➢方便交流和维护 ➢不影响编码的效率,符合大众习惯 ➢使代码更美观,阅读更方便 ➢使代码的逻辑更清晰,更易于理解
7.1 编码
代码开源网站 :
20
主要内容
7.1 编码 7.2 软件测试基础 7.3 单元测试 7.4 集成测试 7.5 确认测试 7.6 白盒测试技术 7.7 黑盒测试技术 7.8 调试 7.9 软件可靠性
视觉组织:适当的阶梯形式使程序的层次结构清晰明显。
第7章 实现
7.1.2 编码风格
7.1 编码
7.1.2.编码风格
要做到按照良好的编程风格进行编程,可以从以下几点入手。 1.版权和版本声明。 应该在每个代码文件的开头对代码的版权和版本 进行声明,主要内容有:
软件工程:第07章实现
– 任何不易理解的,对改善输入/输出效果关系不大的措施都是不可取的; – 任何不易理解的所谓“超高效”的输入/输出是毫无价值的。
24
7.2 软件测试基础
– – – – – 1. 程序内部的文档 2. 数据说明 3. 语句构造 4. 输入输出 5. 效率
7.1.1 选择程序设计语言
• 为什么
– 程序设计语言是人和计算 机通信的最基本的工具, 它的特点必然会影响人的 思维和解题方式,会影响 人和计算机通信的方式和 质量,也会影响其他人阅 读和理解程序的难易程度 。因此,编码之前的一项 重要工作就是选择一种适 当的程序设计语言。
• 上面注视不清楚,如果注明把月销售额计入年度总额,便使读者理解了 下面语句的意图:
/* ADD MONTHLY-SALES TO ANNUAL-TOTAL */ TOTAL = AMOUNT+TOTAL
★ 视觉组织:使用空格、空行和移行
• 恰当地利用空格,可以突出运算的优 先性,避免发生运算的错误。例如 , 将表达式
b. 当多个变量名在一个语句中说明时,应该按字母顺序
排列这些变量,便于查找。
例如,把
integer size, length, width, cost, price
写成
integer cost, length, price , size, width
(3)语句构造
•构造语句时应该遵循的原则是,每个语句都应 该简单而直接,不能为了提高效率而使程序变得 过分复杂;也不要刻意追求技巧性,使程序编写 得过于紧凑。
程序运行时间效率
• 源程序的效率直接由详细设计阶段确定的算法的效率决定,但 是,写程序的风格也能对程序的执行速度和存储器要求产生影 响。 • 在把详细设计结果翻译成程序时,总可以应用下述规则:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2)渐增式测试方法 每次增加一个待测试模块,把它同已经测 试好的那些模块结合起来进行测试,反复进 行直到完成所有模块测试的方法。
使用渐增式测试方法把模块结合到软件系统中 去时,有自顶向下和自底向上两种集成方法。
7.4.1 自顶向下集成
自顶向下集成是一种递增的装配软件结构的 方法,这种方法应用非常广泛。它需要存根程序, 但是不需要驱动程序。
图7.2 正文加工系统(H图)
1)驱动程序
相当于一个“主程序”,用来把测试数据传送给被 测试的模块,并打印有关结果。
2)存根程序
用来代替被测试模块所调用的模块,相当于“虚拟
子程序”。
Ex: 测试B模块,设计了A模块和C模块。
由A负责传送测试数据,由C负责模拟被B调用的 模块。C模块可能没有,这取决于B有没有调用其 他程序。
不能保证一定能查出在判断的条件中存在的错误。
例如,在该例子中,若第二个分支X>1错写成X<1,利用上述两组测试用例进行测 试,无法查出这一错误。因此,需要更强的逻辑覆盖准则去检验判定的内部条 件。������
断的每种可能结果都至少执行一次
对于上例,选取如下测试用例:
s a
入口 1 T
I. A=3,B=0,X=1 (TF 覆盖sacbd)
II. A=2,B=1,X=1 (FT 覆盖sabed)
A>1 and B=0 d
A=2 or X>1 3 返回
T
6 7
X=X+1
e
F
图7.5 被测试模块的流程图
7.2.3 测试方法
黑盒测试:
如果已经知道软件应该具有的功能,可以通过
测试来检验是否每个功能都能正常使用,这种
测试称黑盒测试。也称功能测试。
白盒测试:
如果知道软件内部工作过程(程序流程图&流图),
可以通过测试来检验软件内部动作是否按照
规格说明书的规定正常进行,这种测试也称
结构测试。
7.2.4 软件测试的步骤
1.模块测试
模块测试又称单元测试,它把每个模块作为单独的实
体来测试。
2.子系统测试
子系统测试是把经过单元测试的模块放在一起形成一 个子系统来测试。
3.系统测试
系统测试是把经过测试的子系统装配成一个完整的系 统来测试。
4.确认测试
验收测试把软件系统作为单一的实体进行测试(利用 用户的实际数据测试)。
格式化 8.0
图7.2 正文加工系统(H图)
对“编辑”功能的测试:
TEST DRIVER
编辑 3.0 TEST STUB
7.4 集成测试
集成测试是组装软件的系统化技术,它将经过单元测试的 模块联系在一起进行测试。
1)非渐增式测试方法 先分别测试每个模块,再把所有模块按设计要求 放在一起结合成所要的程序。
确认测试一般使用黑盒测试法。
7.5.3 Alpha和Beta测试
Alpha测试:用户在开发者的场所进行测试,并且在开 发者的指导下进行,测试在受控环境中进行,开发 者记录发现的错误和问题; Beta测试:用户在一个或多个客户场所进行测试,不受 开发者控制,测试者记录发现的问题和错误,定期 将问题报告发送给开发者。
M4和主控模块M1,然后结合下
一个控制层次中的模块M5、M6 和M7,最后结合模块M8。
自顶向下集成方法 的基本过程如下: 1)对 主控模块 进行 测试,测试时用存根
M5 M8 图7.3 自顶向下结合实例 M2 M6 M1 M3 M7 M4
程序代替所有直接被
主控模块调用的模块;
2)根据选定的结
合策略(深度优先或
5.平行运行
平行运行是同时运行新开发出来的系统和将被它取代 的旧系统,以便比较新旧两个系统的处理结果。
7.3 单元测试
单元测试的一般方法是:
首先通过编译系统检查并改正程序中所有的语法错误; 然后用详细设计模块说明为指南,对重要的控制路径进行测试,
以便发现模块内部的错误(伪码、Jackson图)。
通常,单元测试使用白盒测试方法。
宽度优先),每次用
一个实际模块代替一 个存根程序(新结合 的模块往往又需要新 的存根程序); M8 M5 M2 M6
M1 M3 M7 M4
图7.3 自顶向下结合实例
3) 每 结 合 一 个 模 块 , 就 测试一个; 4) 为 保 证 不 引 入 新 的 错 误,需要进行回归测试, 即重复以前进行过的部分 M5 M8 图7.3 自顶向下结合实例 M6 M7 M2 M1 M3 M4
这种方法的思想是:从主控模块(主程序)开 始,沿软件的控制层次向下移动,逐渐把各个模 块结合起来。 在自顶向下结合方法中,如何将所有模块组装 到软件结构中,又有两种方法:
1)深度优先策略
先组装软件结构的一条主控制通 路上的所有模块,选择哪条主控 制通路,具有较大的任意性。 如图,如果选取左通路,就先把 模块M1、M2、M5、M8结合起
(A、C都是一次性程序,只在测试时临时使用,应尽量设计得简
单一些,以节省费用和时间)
A
B C
驱动模块
被测试模块 存根模块
例:
正文加工 系统
输入 1.0
输出 2.0 添加 3.1
编辑 3.0 删除 3.2
加标题 4.0 插入 3.3
存储 5.0 修改 3.4
检索 6.0 合并 3.5
编目录 7.0 列表 3.6
7.3.1 单元测试重点
1)模块接口
应该对穿过模块接口的数据流进行检测,以保证正确的输入 和输出。
2)局部数据结构
这是错误的主要来源,应该设计相应的测试用例,以便发现 数据结构方面的错误。
3)重要的执行路径 由于不可能进行穷尽测试,因此选择测试路径是 非常关键的。 4)出错处理通路 5)边界条件
7.3.3 计算机测试
由于软件模块不是一个独立的系统,不能独立运行, 要依靠其他模块调用,或需要调用其他模块。 因此,必须要为测试的单元开发驱动程序或存根程序。
正文加工 系统 输入 1.0 输出 2.0 添加 3.1 编辑 3.0 删除 3.2 加标题 4.0 插入 3.3 存储 5.0 修改 3.4 检索 6.0 合并 3.5 编目录 7.0 列表 3.6 格式化 8.0
或全部测试;
5)重复回到第二步,直 到构成整个软件结构。
7.4.2 自底向上集成
自底向上集成方法是从软件结构最底层模块
开始进行组装和测试,它与自顶向下结合方法
相反,需要驱动程序,不需要存根程序。
Mc
自底向上集成方法
的基本过程如下:
1)把底层模块组合成实 现一个特定软件子功能 的族,如图族1、2、3。 D1
PROCEDURE EXAMPLE (A , B : REAL ; VAR X : REAL) ;
BEGIN IF (A>1) AND (B=0) THEN X : = X / A; IF (A=2) OR (X>1) THEN X : = X + 1
END
s a
入口 1
A>1 and B=0
or
7.6 白盒测试技术
测试方案=目的+用例(数据+预期结果)
目标:确定一组最可能发现某个或某类错误的
测试数据。
7.6 白盒测试技术
7.6.1 逻辑覆盖:是对一系列测试过程的总称,测试过程通过
逐渐综合,以期望进行完整的通路测试
1. 语句覆盖
设计的测试用例能使程序中每条语句至少执行一次。
例:一个被测试模块的源程序为(PASCAL语言):
T 4
5 T6 7
X=X/A
c
F 2
b d
A=2 or X>1
and
X=X+1
e
F
3 返回
图7.5 被测试模块的流程图
选取测试用例:A = 2 , B = 0 , X = 4 ,程序执行路径为:sacbed。 它只关注判定表达式的值,而检查不出表达式中逻辑运算符出现的
错误
2.
判定覆盖
不仅每个语句至少执行一次,而且每个判
第七章:实现
朱梅霞
著名的软件测试失败案例
1、迪斯尼的狮子王
1994年迪斯尼公司发布了第一个面向儿童的多媒
体儿童游戏LionKing Animated Storybook(狮子王动画故事 书)。尽管已经有许多其他公司在儿童游戏市场上运作多 年,但是这次是迪斯尼公司首次进军这个市场。他们进行 了大力宣传促销。结果,销售额非常可观。该游戏成为孩 子们那个夏季的“必买游戏”。后来却飞来横祸。12月26 日,圣诞节后的一天,迪斯尼公司的客户支持部电话开始 响个不停。很快,电话支持部门就淹没在愤怒的家长和哭 诉玩不成游戏的孩子们的电话狂潮之中。报纸和电视中涌 现了各种故事。 原因:迪斯尼公司没有对市场上投入使用的各种PC机型进 行正确的测试。软件在少数系统中工作正常——例如迪斯 尼的程序员用于开发游戏的系统——但在大众使用的常见 系统中却不行。
M1 M2 M5 M8 图7.3 自顶向下结合实例 M6 M3 M7 M4
来测试,然后结合模块M6,再构
造中央和右侧的控制通路。
2)宽度优先策略
沿着软件结构水平地移动,把
处于同一个层次的所有模块组装
起来。 如图,首先结合M2、M3、
M1 M2 M5 M8 图7.3 自顶向下结合实例 M6 M3 M7 M4
Ma D2
Mb D3
族1
族2
族3
2)为每个模块设计一
个驱动程序,作为测 试的控制程序,以协 调测试用例的输入和 D1
Mc
Ma
D2
Mb
D3
输出。图中D1、D2、
D3分别是族1、2、3的 驱动程序; 族1 族2 族3