第六章 检查代码
一、静态白盒测试:检查设计和代码
静态白盒测试
- 定义:在不执行软件的条件下有条理的仔细审查软件设计、体系结构和代码从而找出软件缺陷的过程,又称结构化分析。
- 原因:是在开发过程早期发现软件缺陷,以找出动态黑盒测试难以发现或隔离的软件缺陷。
- 好处:
1)修复的时间和费用大幅减低。软件测试员可以得到软件如何运行的信息,存在哪些弱点和危险,而且可以与程序员建立良好的伙伴关系。项目状态可以传达给参与测试的所有小组成员。
2)为黑盒测试员在接到软件进行测试时设计和应用测试用例提供思路。
二、正式审查
- 正式审查就是进行静态白盒测试的过程。
- 范围:两个程序员之间的简单交谈到软件设计和代码的详细检查。
- 正式审查的关键要素:
按照过程进行是正式审查和两个程序员之间互查代码的区别。 - 四个基本要素:
1)确定问题。找出软件问题包括遗漏项目
2)遵守规则。
3)准备。每一个参与者都为审查做准备,并尽自己的力量。
4)编写报告。审查小组必须做出审查结果的书面总结报告,报告要便于开发小组成员使用。 - 间接效果
1)交流。正式报告中为包含的信息得以交流
2)质量。程序员的代码经过逐个功能、逐行代码仔细复查,会使程序员变仔细
3)小组同志化。审查正确进行,软件测试员和程序员会尊重双方,更好互动
4)解决方案。
1、同事审查
- 定义:又称伙伴审查,召集小组成员进行初次正式审查最简单的方法
- 常用场景:编写代码或设计体系结构的程序员和充当审查者的其他程序员和测试员之间。
2、走查
走查中编写代码的程序员向五人小组或其他程序员和测试员组成的小组做正式陈述,审查人员聆听陈述提出疑问。
3、检验
- 最正式的审查类型,具有高度组织化,要求每一个参与者都接受训练。
- 不同点:表述者或宣读者——不是程序员,要学习和了解要表述的材料。其他参与者称为检验员,从不同角度审查代码(用户、测试员)。有些检验员还被委任为会议协调员和会议记录员保证检验过程有效进行
- 除了更正式之外,检验与其他审查类型的重大区别:在检验时,在场的不是代码的原创者。这迫使另一个完全理解要检验的软件。这比让其他人只是审查软件寻找软件缺陷更加有效。
三、编码标准和规范
- 坚持标准和规范的三个重要原因:
1)可靠性
2)可读性/可维护性
3)移植性。代码符合设备标准可秦公司能够迁移到另一个平台
1、编程标准和规范示例
- 组成标准四部分:
1)标题
2)标准(规范)。描述标准内容解释哪些可以不可以
3)解释说明。为什么这样做是好的
4)示例。如何使用标准的简单程序示例
2、获取标准
- 美国国家标准学会(ANSI)
- 国际过程协会(IEC)
- 国际标准化组织(ISO)
- 信息技术 标准国家委员会(NCITS)
- 提供演示程序规范和最佳时间的文档
1)美国计算机协会(ACM)
2)电气和电子工程师协会(IEEE)
四、通用代码审查清单
1、数据引用错误
- 定义:指使用未经正确声明和初始化的变量、常量、数组、字符串或记录而导致的软件缺陷。
- 缓冲区溢出的主要原因
2、数据声明错误
- 产生原因:不正确的声明或使用常量和变量。
3、计算错误
实质上是糟糕的数学问题——计算无法得到预期结果
4、比较错误
小于、大于、等于、不等于、真、假——比较和判断错误很可能是由于边界条件问题。
5、控制流程错误
控制流程错误的原因是编程语言中循环等控制结构未按预期方式工作。通常由计算或比较错误直接或间接造成。
6、子程序参数
子程序参数错误的来源是软件子程序不正确地传递数据。
7、输入/输出错误
输入/输出错误包括文件读取、接受键盘或鼠标输入以及向打印机或屏幕等输出设备写入错误。
8、其他检查
这个压轴清单定义了一些不适合放在其他类别的条目。这不是为了完整,而是为了定制软件项目清单应该加入的内容。
小测验
1、说出进行静态白盒测试的几个好处。
静态白盒测试在开发过程早期发现软件缺陷,使修复的时间和费用大幅降低。软件测试员可以得到软件如何运作的信息,存在哪些弱点和危险,而且可以程序员建立良好的伙伴关系。项目状态可以传达给参与测试的所有小组成员。
2、判断是非:静态白盒测试可以找出遗漏之处和问题。
对。遗漏的问题比普通的问题更重要,通过静态白盒测试可以发现。当根据公布的标准和规范检查代码,在正式审查中仔细分析时,遗漏的问题就显而易见了。
3、正式审查有哪些关键要素组成?
过程。按照过程进行是正式审查和两个程序员之间互查代码的区别。
4、除了更正式之外,检验与其他审查类型有什么重大差别?
主要区别是,检验时在场的不是代码的原创者。这迫使另一个人完全理解要检查的软件。这比让其他人只是审查软件寻找软件缺陷更有效。
5、如果要求程序员在命名变量时只能使用8个字符并且首字母必须采用大写的形式,那么这是标准还是规范呢?
这应该算是标准,如果程序员被告知要用超过8个字符命名,那么,这就是规范了。
6、你会采用本章的代码审查清单作为小项目小组验证代码的标准吗?
不会。这只是用作一个通用的示例。其中虽然有一些好的测试用例,应该在测试代码是考虑,但是,应该研读其他公开的标准之后再采用自己的标准。
7、缓冲区溢出错误作为一个常见的安全问题属于哪一级错误?是由什么原因引起的?
数据引用。他们是由于使用了未正确声明或未进行初始化的变量、常量、数组、字符串或记录。