在IT行业,开发和测试之间的关系一直是一个大家津津乐道的话题。在整个软件产品的生命周期中,开发和测试人员所做的工作分别对应不同的阶段,如图1所示。

图1 开发和测试人员的分工

工作内容

从图1可以看出,开发和测试是一个上下游的关系。

具体而言,开发人员主要做这几件事情:

第一,对软件需求说明书进行详细评审,弄清楚要开发一个什么样的软件。

第二,编写软件详细设计、单元测试和集成测试规程文档。软件详细设计文档是最重要的文档,在里面,要写清楚自己程序的流程、函数设计、异常保护考虑等。在动手写程序之前,一定要将软件详细设计文档写好,等评审通过了再写代码。

第三,编写代码,用程序实现软件的功能。很多人认为的软件开发就是写代码,其实这是一种很狭隘的理解,写代码在整个开发流程中,只占了很小的部分。

第四,程序写好之后,开发人员要对它进行单元测试和集成测试也叫(自测),确保程序的正确性。这里就出现了“测试”二字,但与软件测试所做的“测试”是不同的,他们做的是“系统测试”。等自测通过之后,并且相关文档也写好之后,就可以提交程序版本,供测试人员进行测试了。

相对开发,测试人员主要做这几件事情:

第一,参与软件需求说明书的评审,对软件要实现的功能有一个大致的了解。

第二,搭建测试环境。这个是很重要的,也是比较难的事情。什么是“测试环境”呢?就是说,不管什么软件,都有个运行的条件,如操作系统类型、参数设置及配套软硬件设施等,这些统称为“环境”。为了保证程序功能的正确性,要在软件发布之前,尽量模拟软件实际的运行环境,这就是搭建测试环境时要做的事情。很多软件在正式商用之后出问题,就是测试的时候没有还原现场环境所致。

第三,对软件进行系统测试并输出测试报告。所谓系统测试,就是指将配套的所有软件都运行起来,看一下所有的功能是否正常。当出现问题的时候,要及时和开发人员联系,以修正软件缺陷。

第四,指导现场人员安装软件程序,并在必要的时候亲自出差到现场去安装软件。因此,测试人员也可能会经常出差的。

“三足鼎立”

开发人员的主要任务是用程序完成软件需求,而测试人员的主要任务则是保证程序功能的正确性,他们做事的依据都是需求开发工程师编写的需求说明书。

在实际的软件开发项目中,需求开发工程师、软件开发工程师和软件测试工程师之间的交流是很频繁的,如图2所示。

图2 三类角色的“三足鼎立”

就像“三国时期”的魏蜀吴“三足鼎立”一样,需求开发工程师、软件开发工程师和软件测试工程师所站的立场不同,对软件的认识也不同。大家需要相互讨论、协商,挑选出一套最佳的软件实现方案。

一些建议

在完成软件研发的过程中,开发和测试之间的关系非常的“微妙”,时而合作如亲人,时而争论如敌人。我认为,为了做出高质量的软件产品来,开发和测试需要做到:

第一,共同参与软件需求文档的评审,对程序要实现的功能有一个清晰的认识。如果对需求有疑问,一定要当面提出来。

第二,在对需求达成共识之后,软件开发人员严格按照软件需求文档上的描述来编写程序,如果在程序实现上有困难,要提出来和大家讨论。软件测试人员严格按照需求的描述来验证程序的功能,如果发现程序实现与需求不符,要及时与软件开发人员联系,大家共同将程序问题解决掉。

第三,如果开发时间紧张、人手不足,那么在开发人员编写程序的时候,测试人员可以帮忙把测试环境搭建好。等程序编写好之后,开发人员便可以立即进行单元测试和集成测试。

第四,不管是需求有问题,还是程序有缺陷,大家都可以指出来。但注意要就事论事,不可将软件问题上升为对特定个人的人身攻击。

第五,虽然是各司其职,也许还身处不同的部门,但大家的共同目标是一致的:做出让客户满意的、高质量的软件产品。开发和测试人员要为了这个目标,一起努力。

结束语

一个软件产品的成功需要从各个环节上去把握,因此用人的左手和右手的关系来比喻开发和测试之间的关系更为恰当。好的软件产品需要开发和测两手抓,两手都要硬。