软件測试是一项批判性的工作,目的就是找出软件中的缺陷。
这里临时不去深究为什么要进行软件測试,以及软件測试带来的优点。
仅仅介绍软件測试中一些主要的測试方法。依据是否查看代码程序分为黑盒測试和白盒測试;依据是否执行软件又可分为静态測试和动态測试。
黑盒測试:又叫功能測试或行为測试,仅仅需考虑各个功能。不须要考虑整个软件的内部结构及代码。
白盒測试:訪问代码,通过检查代码的线索来协助測试。
静态測试:測试软件不执行的部分,仅仅是检查和审核。
动态測试:使用和执行软件进行測试。
1、静态黑盒測试:检查产品说明书,并在软件编写之前找出问题
· 对产品说明书或软件需求报告进行高级审查:
(1)站在一个设计者的角度进行审查。找出根本性问题或遗漏之处
(2)站在客户(使用者)的角度来审查。由于软件质量的定义是满足客户的需求
(3)研究现有的标准和规范。能够是公司习惯用语和约定、行业要求、GUI、安全标准。检查所用标准是否正确、遗漏。是否与标准和规范相抵触
(4)审查和測试类似软件,检查它的规模、复杂性、測试性、质量和可靠性、安全性
· 对产品说明书或软件需求报告进行低层次測试:
一份优秀的产品说明书或者需求报告:必须是完整、准确、精确(不含糊、清晰)、一致、贴切、合理、代码无关、可測试性
2、动态黑盒測试:在不了解软件怎样工作的前提下进行測试
两种基本方法:通过性測试和失效性測试
选择測试用例:等价类划分:把软件具有相似输入,相似输出。相似操作的分在一组。一个等价类或等价类划分是指測试同样目标或者暴露同样软件缺陷的一组測试用例。
等价类划分的目标:把可能的測试用例集缩减到可控制且仍然足以測试软件的小范围内。
(1)測试数据
通过性測试:
a) 边界条件:软件执行在计划操作界限的边界情况。測试边界包含測试临近边界的有效数据、測试最后一个可能有效的数据、測试刚超过边界的无效数据。
b)次边界条件:典型的次边界条件:2的幂、ASCII表
c)測试默认、空白、空值、零值和无这些数据
失效性測试:
d)測试非法、错误、不对和垃圾数据
(2)測试状态
软件状态:软件当前所处的条件或者模式。
状态測试:測试程序的状态及其转换。
步骤:1)建立状态转换图
2)降低要測试的状态及其转换的数量
a. 每一种状态至少訪问一次
b. 測试状态之间最不经常使用的分支
c. 測试全部错误状态及其返回值
d. 測试随机状态转换
e. 測试看起来是最常见和普遍的状态转换
通过性状态測试:审查软件,描绘状态,尝试各种合法可能性。确认状态及其转换正常。
失效性状态測试:竞争条件、反复(检查内存泄漏)、压迫(在不够理想条件下执行:内存小,磁盘空间少...尽量限制软件的必要条件)、重负(提供条件任其发挥)。
3、静态白盒測试:在不运行软件的条件下有条理地细致审查软件设计、体系结构和代码,从而找出软件缺陷的过程
(1) 编码标准和规范:可靠性、可读性/可维护性、可移植性
(2)通用代码审查清单:
a. 数据引用错误 -> 缓存区溢出
b. 数据声明错误 <- 不对地声明和使用变量和常量
c. 计算错误
d. 比較错误 <- 边界条件问题
e. 控制流程错误 <- 循环等控制结构未按预期方式工作,由计算或比較错误间接引起
f. 子程序參数错误 <- 子程序不对地传递数据
g. 输入/输出错误
h. 其它检查 -> 编码、可移植、兼容
4、动态白盒測试:结构化測试,检查代码并观察执行状况。利用查找代码功能和实现方式得到的信息来确定哪些须要測试,哪些不须要,怎样开展測试。包含例如以下内容:
(1) 直接測试底层函数过程,子程序和库(API)
(2) 以完整程序的方式从顶层測试软件。依据对软件执行的了解调整測试用例
(3)从软件获得读取变量和状态信息的訪问权,确定測试与预期结果是否相符,强制软件以正常測试难以实现的方式执行
(4) 估算运行測试时命中的代码量和详细代码,调整測试,去掉多余的測试用例,补充遗漏的用例
动态白盒測试与调试的差别:都包含处理软件缺陷和查看代码的过程,可是它们的目标不同:測试的目标是寻找软件缺陷;调试的目标是修复缺陷
測试方法:分段測试(单元測试和集成測试)、数据覆盖、代码覆盖
数据覆盖:
数据流覆盖,在软件中全然跟踪一批数据。
次边界:与动态黑盒測试类似。
公式和等式:类似除法运算中,考虑除数为0的情况。
错误强制:迫使软件中的全部错误提示信息显示出来。
代码覆盖:測试程序的状态以及程序的流程,设法进入和退出每个模块。运行每一行代码,进入软件每一条逻辑和决策分支
代码覆盖包括:程序语句和代码行覆盖、分支覆盖(比方推断语句中if分支和else分支)、条件覆盖(一个条件中可能包括几个子条件,要覆盖每个子条件及它们的组合)。
软件測试事实上就是在用户之前使用和执行软件。尽早找出软件中存在缺陷。我们不可能对软件进行全然測试,仅仅可能在測试有限的用例后使得软件仍然存在bug的概率尽可能小。以上所述仅仅仅仅是一点皮毛。软件測试覆盖的知识面非常广。须要学习的还有非常多!
!这里推荐一款自己主动化的APP測试平台-爱内測:http://www.ineice.com/