About Software Testing

从事软件开发三年了,经手的商业化项目十几个。 带有测试的项目,相比较于无测试覆盖的项目,总体上质量更加可靠,而且易于维护。
程序员在工作中经常会听到关于测试的各种名词,诸如:单元测试,集成测试,回归测试,压力测试等等。 下来总结一下软件测试的基础知识。

测试的基本概念

测试:定义是使用人工或者自动手段来运行或测试某个系统的过程, 其目的在于检验它是否满足规定的需求,或弄清预期结果与实际结果之间的差别.
测试的目的是为了发现程序中的错误,以便及时改进。 从而,保证程序交付时的正确性、完全性和质量。

测试用例: 是为某个特殊目标而编写的一组测试输入、执行条件以及预期结果,以便测试某个程序路径,或核实是否满足某个特定需求。 目的是要使用合理范围内的条件,尽可能全面的测试所有模块乃至整个系统。

测试的分类

从软件开发的不同阶段划分,测试可以分为:

1. 单元测试
集中对用源代码实现的每一个程序单元进行测试,检查各个程序模块是否正确地实现了规定的功能。
单元测试又称模块测试,是针对软件设计的最小单位 ─ 程序模块,进行正确性检验的测试工作。 其目的在于发现各模块内部可能存在的各种差错。
单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。
单元测试的内容:
在单元测试时,测试者需要依据详细设计说明书和源程序清单, 了解该模块的I/O条件和模块的逻辑结构,主要采用白盒测试的测试用例, 辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输入,都能鉴别和响应。

2. 集成测试
把已测试过的模块组装起来,主要对与设计相关的软件体系结构的构造进行测试。
在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。 因此,集成测试主要测试各个子功能组合起来后,能否达到预期要求的功能。 集成测试用来发现并排除,在模块连接中可能出现的问题。
以上两类测试,一般可以由开发人员,在开发阶段独立完成。

3. 系统测试
把已经经过确认的软件纳入实际运行环境中,与其它系统成份组合在一起进行测试。 该阶段的测试,可安排独立测试小组,执行黑盒测试。
任务是检查已实现的软件是否满足了需求规格说明中确定了的各种需求, 同时验证软件的功能和性能。
从而保证系统功能的完整性,性能的可靠性,以及安全性。 Web 类产品,还将测试用户界面的浏览器兼容性。

4. 验收测试
在系统通过了以上测试之后,就可以进入到验收测试。 验证测试应以用户(系统的使用者)为主,软件的开发人员和 QA 人员也可以参与。
用户将在生产环境下,使用真实数据进行测试。 开发人员可以观察用户的真实的使用操作情况,以及检查操作所产生的数据的正确性。
系统发布到生产环境后,技术人员应周期性的检查系统的容量、性能、可靠性和可用性。 以确保系统正常稳定的运行。

Ruby 程序的测试

由于 Ruby 语言的一些特点:动态性,解释执行,元编程等。 使得 Ruby 的项目在进行新功能集成,或是对已有功能调整时,极易引入 Bug。
原因很多,可能是方法覆盖,可能是对运行时情况考虑不全面,或是代码遍布多处有漏改等。 相信基于其他语言编写的程序,也会出现这些情况,如 C++,Java等。 但是,这些在问题在 Ruby 项目中,只有发布到生产环境下,才可能暴露出问题。 这个时候无论修复 Bug 多么及时,都会对部分用户造成一定的影响。 因此,应当极力避免。
通过在 Ruby 项目中引入测试,主要依靠:单元测试、集成测试。 可以将程序中的 Bug 在开发环境下就暴露出来,并且及时解决。

2013-06-11

rocket-wing