前言
软件测试是为了发现错误而执行程序的过程。或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计的一批测试用例(即输入一些数据而得到其预期的结果),并利用这些测试用例去运行程序,以发现程序错误的过程。根据Boehm(加州州立大学教授,软件工程界东邪级人物)的统计,软件测试的成本往往占软件开发总成本的30%-50%,在极端情况,测试那种关系人的生命安全的软件所花费的成本,可能相当于软件工程其他开发步骤总成本的三倍到五倍。Boehm老没来过中国,不太清楚咱们这发生的事,白衣渐浸尘(混不进大学,软件工程界候通海级人物)认为,我们实际的测试成本不会低于这个值,只是在分配上与洋人稍有不同,在项目前期占5%-10%,后期占60%-80%而已。
代码完成后,实际上大约还有同样多的测试工作量需要完成。仅就测试而言,它的目标是发现软件中的错误,但是,发现错误并不是我们的最终目的。软件工程的根本目标是开发出高质量的完全符合用户需要的软件。测试的目的是提高软件的可靠性、集成性、一致性和对用户需求的适用性以及大数据量下的响应能力。好的软件是做出来的,不是改出来的。软件必须依靠具有一定水平的开发人员集中精力开发,不可能依靠反复的修改来完成。软件修改次数越多,出错的可能性就越大。
测试的主要任务是控制开发人员随意提交低质量的程序,测试的目的不是测试人员帮助程序人员发现问题,而是站在一个更高的管理层面上对项目质量进行控制。为了保证软件的质量和可靠性,应力求在分析、设计等各个开发阶段结束前,对软件进行严格技术评审。遗憾的是,审查不能发现所有的错误。而且在编码阶段还会引进大量的错误。这些错误和缺陷如果遗留到软件交付投入运行之时,终将会暴露出来。但到那时,不仅改正这些错误的代价更高,而且往往造成用户的严重怀疑。软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复审,是软件质量保证的关键步骤。
软件测试的阶段划分
|
测试阶段 |
主要依据 |
测试人员、测试方式 |
主要测试内容 |
|
单元测试 |
系统设计文档 |
由开发小组执行白盒测试 |
接口测试、路径测试 |
|
集成测试 |
系统设计文档 需求文档 |
由开发小组执行白盒测试和黑盒测试 |
接口测试、路径测试 功能测试、性能测试 |
|
系统测试 |
需求文档 |
由独立测试小组执行黑盒测试 |
功能测试、健壮性测试、性能测试、用户界面测试、安全性测试、压力测试、可靠性测试、安装/反安装测试 |
|
验收测试 |
需求文档 |
由用户执行黑盒测试 |
软件测试的内容划分
² 需求完整性测试:需求完整性测试主要存在于需求获取阶段,在需求尚未完全明确之前对已收集到的需求做出整理性的、检查遗漏性的测试,确认需求是否明确。个人认为,这恐怕是所有测试中最重要的内容了,一个程序员的某个错误毕竟影响有限,需求阶段的含糊不清、错误或者遗漏会直接影响后续的设计、开发,须知不管是集成测试还是验收测试,根本依据都是需求文档,如果需求本身有问题,那可真是回天乏力了。
² 性能测试:性能测试在软件的质量保证中起着重要的作用,性能测试概括为三个方面:应用在客户端性能的测试、应用在网络上性能的测试和应用在服务器端性能测试。通常情况下,三方面有效、合理的结合,可以达到对系统性能全面的分析和瓶颈的预测。这方面白衣渐浸尘深有感触,曾经在一个项目设计完成,开发之前做了500万条测试数据的性能测试,测试的结果就是推翻了原有的设计,至今感到庆幸。
² 健壮性测试(容错能力/恢复能力测试):侧重于程序容错能力的测试。本测试在单元测试阶段和系统测试阶段都要进行。如数据边界测试、非法数据测试、异常中断测试等等,主要是验证程序对各种异常情况是否进行正确处理。为了执行方便,建议健壮性的大部分测试用例尽量编写在功能测试用例中。这些年一直在提醒自己数据边界测试的重要性,因为有一年的秋天,因为把一个Long类型用成了Integer,造成用户停产4个小时,直接经济损失数十万元。
² 界面合理性测试:界面合理性测试也就是人机交互界面的合理性,界面合理性测试的内容很多,具体测试内容如下:
n 提示、菜单、帮助的格式是否一致;
n 提示、菜单、帮助中的术语是否一致;
n 各个控件之间的对齐方式是否一致;
n 输入界面和输出界面在外观、布局、交互方式上是否一致;
n 功能类似的相关界面在外观、布局、交互方式上是否一致;
n 同一层次的文字在同一种提示场合(一般情况、特殊字体、警告等)在文字大小、字体、颜色、对齐方式方面是否一致,字体大小 是否与界面的大小比例协调;
n 多个连续界面依次出现的情况下,界面的外观、操作方式是否一致;
n 系统是否拒绝客户的错误输入并做出提示;
n 系统是否在用户完成操作时给出操作成功的提示;
n 用户界面是否存在空白空间,没有空白空间的界面是杂乱无章的,易用性差;
n 各个控件的间隔是否一致,垂直和水平方向上是否对齐;
n 是否允许动作的可逆性,返回原有操做;
² 数据和数据库完整性测试:因为在开发阶段开发人员随时都有可能根据需要来修改数据库,所以对数据和数据库完整性测试在软件项目的任何阶段也是非常必要的。该项测试内容主要是以数据库表为单位,检查数据库表以及表中各字段命名是否符合命名规范,表中字段是否完整,数据库表中的字段描述是否正确包括字段的类型、长度、是否为空,数据库表中的关系、索引、主键、约束是否正确。
² 压力测试:对系统不断施加压力的测试,是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。例如测试一个 Web 站点在大量的负荷下,何时系统的响应会退化或失败。
² 安全性测试:安全性测试主要是测试系统在没有授权的内部或者外部用户对系统进行攻击或者恶意破坏时如何进行处理,是否仍能保证数据和页面的安全。
