现在软件测试的书籍非常多,有介绍测试理论的、有介绍测试过程的、有介绍自动化测试的等等。软件测试想入门可以先选择2到3本好点的书,从阅读开始。
这里大家先介绍一下软件测试的基础知识。
什么是软件测试广义的软件测试说白了就是主动地找软件的问题,包括需求问题、功能问题、可用性问题、可靠性、逻辑问题、健壮性、性能等等。
为什么进行软件测试软件行业发展初期,软件测试的活基本是由开发工程师自己干的,测试方法及过程比较随意。但是随着软件项目规模越来越大,越来越复杂,软件故障越来越难以避免,给企业和个人带来沉痛损失的案例也屡见不鲜,下面仅举两例:
1962年美国水手1号飞船发射后262秒就不得不摧毁掉,后来分析是因为代码中漏敲了一个破折号。
2009年,丰田因雷克萨斯ES350突然刹车失灵,导致车上4名乘客全部罹难。事后丰田不得不在全球召回900万辆汽车,本次召回给丰田带来的经济损失达30亿美元。后来据查是防抱死延时软件故障所致。
因此,对软件产品主动进行认真测试,尽可能地查出可能的问题和漏洞,已经是现代软件开发必做的重要工作。通过软件测试将软件故障消灭在发布之前,这是所有软件从业人员的共同心愿。
静态测试和动态测软件测试有动态测试和静态测试两种方法。
静态测试就是通过阅读软件的需求 、设计、编码等静态文档,通过分析静态文字或图表来发现需求、设计、编码存在的问题。
可见静态测试的主要方式就是同级评审,其好处是可以在软件需求阶段、设计阶段和编码期间就可以提前进行检查分析,及早发现存在的问题。一般而言,问题发现越早,修复成本越低。从这个角度看,静态测试比动态测试具有更高的性价比。
动态测试就是等软件开发完毕,测试工程师安装好软件,在不同的环境、不同的输入的情况下,运行并测试软件的功能、可用性、性能等。大家通常所说的软件测试就是指动态测试。
单元测试、集成测试、用户测试、阿尔法测试软件系统根据功能和系统内部结构可以划分为一系列的软件模块(或子系统),具体开发是一个模块一个模块地实现的(当然多个模块可以并行开发)。 每实现一个模块,开发人员都要认真地对所开发的模块进行测试,这种主要由开发工程师执行的模块测试,大家称之为单元测试。
单元测试期间一般要开发专门的测试主程序(有时还要开发测试桩程序)。
整个系统开发完毕后,由测试团队对软件进行整体的测试,大家称之为集成测试。
用户拿到大家开发的软件产品或系统后,他们一般也要进行独立的测试,这种类型的测试称之为用户测试。
如果认为软件基本合格了,企业可以将软件进行小范围发布(如企业内部、免费用户群等),让大家测试用并反馈发现的问题,这个过程叫阿尔法测试。
单元测试、集成测试都需要事先进行规划,有明确的流程要求。
集成测试流程集成测试与软件开发是软件开发过程的两条并行线程,其流程如下图所示:
如上图所示,集成测试可划分为测试分析、测试设计(包括测试准备)、测试执行三大步骤。
测试分析阶段对应系统的需求分析,它将软件系统进行功能拆分,分成不同级别的多个功能点,这些功能点是随后测试设计的基础。
测试设计在测试分析的基础上为每个功能点设计多个测试用例。有些用例重点测试基本功能,有些用例重点测试错误响应,有些用例测试边界条件,有些用例测试性能等等。测试数据的收集准备是测试设计的重要工作内容,也往往是测试过程的难点所在。
集成测试执行阶段使用测试设计生成的测试用例和测试数据,对软件逐个测试用例进行测试。发现软件故障应按公司模板或使用专门的故障跟踪工具进行规范化的故障跟踪记录。
一轮测试完毕后,开发工程师应该根据故障记录进行问题重现、分析、修复,并认真记录好修复信息。
通常软件提交给用户前需要进行三轮以上的集成测试。
实际工作中大家常常发现,按正规的集成测试流程走也有一定的问题,就是工作量大,投入时间长,测试效果往往不好。大道无形,大家不妨根据项目和企业自身人力资源特点,将集成测试和流程测试、Bug Hunting测试等多种测试方式结合起来使用,效果会更好一些,
测试工程师的职业规划大的软件公司通常有专门的测试团队,测试团队常年累月负责软件的测试分析、测试设计、集成测试工作。
好的测试工程师需要熟悉目标软件所在行业的专业背景知识,需要对项目需求细节有深入透彻的把握,需要有对软件内在逻辑的直觉领悟,也需要足够的耐性、细心和认真负责的工作态度。加班加点是软件测试人员的家常便饭,团队冲突也是测试团队要面对的常客,当一个好的测试工程师的确不容易。
小规模软件公司,往往没有专门的测试团队,测试工作往往由开发工程师、现场工程师轮流担当。
测试工程师们在测试工作得心应手之后,结合自身特点,学习掌握一些开发技能,对自己职业发展会有帮助。