软件测试是软件工程的重要过程之一,是保证软件质量的重要手段。不同的软件项目类型,软件测试占整个项目开发工作量的15%到90%不等。例如普通数据分析软件,测试投入的工作量比较小,但对于飞行控制、核电管理等软件测试所投入的精力远大于开发投入。软件测试的重要性可见一斑。
这里我们先介绍一下软件测试的基础知识。
什么是软件测试
广义的软件测试说白了就是主动地找软件的问题,包括需求问题、功能问题、可用性问题、可靠性、逻辑问题、健壮性、性能等等。
为什么进行软件测试
软件行业发展初期,软件测试的活基本是由开发工程师自己干的,测试方法及过程比较随意。但是随着软件项目规模越来越大,越来越复杂,软件故障越来越难以避免,给企业和个人带来沉痛损失的案例也屡见不鲜,下面仅举两例:
1962年美国水手1号飞船发射后262秒就不得不摧毁掉,后来分析是因为代码中漏敲了一个破折号。
2009年,丰田因雷克萨斯ES350突然刹车失灵,导致车上4名乘客全部罹难。事后丰田不得不在全球召回900万辆汽车,本次召回给丰田带来的经济损失达30亿美元。后来据查是防抱死延时软件故障所致。
因此,对软件产品主动进行认真测试,尽可能地查出可能的问题和漏洞,已经是现代软件开发必做的重要工作。通过软件测试将软件故障消灭在发布之前,这是所有软件从业人员的共同心愿。
静态测试和动态测
软件测试有动态测试和静态测试两种方法。
静态测试就是通过阅读软件的需求 、设计、编码等静态文档,通过分析静态文字或图表来发现需求、设计、编码存在的问题。
可见静态测试的主要方式就是同级评审,其好处是可以在软件需求阶段、设计阶段和编码期间就可以提前进行检查分析,及早发现存在的问题。一般而言,问题发现越早,修复成本越低。从这个角度看,静态测试比动态测试具有更高的性价比。
动态测试就是等软件开发完毕,测试工程师安装好软件,在不同的环境、不同的输入的情况下,运行并测试软件的功能、可用性、性能等。我们通常所说的软件测试就是指动态测试。