开发者测试基础

——网易云课堂《开发者测试》课程笔记

欢迎大家加入开发者测试课程,首先我以1887年,Mackinder在他的论著《社会心理学》中的一句话作为这门课的开场白。他说,知识本是一体的,把它分成不同的学科,只是屈从了人类的软弱而已。把这句话放在软件工程中同样适用。

devtest1

我们把软件工程分成不同的阶段,不同的角色,他只是屈从了人类的软弱而已。因为我们找不到很多很强的人,来支撑软件工程中所有的任务。

我一直强调,软件工程在研究上的主要一个目的,无论是提出方法实现各种工具和平台,很重要的一个方面都是为了降低软件工程师的一个门槛儿,使它可以让更多水平比较差的人也能加入到软件工程的行列当中。这是软件工程研究的一个重要目的。

然而今天,由于互联网尤其是移动互联网的出现,使得软件开发迭代的速度不断的加快。使得我们对传统软件工程角色的要求发生了一些变化。今天移动互联网的团队在两周甚至更短的时间发布一个版本,已经成为现实。而同样他们承担的是更多的责任。因为,开发团队的规模缩小使得单个人要承担原来传统软件工程中的不同角色,不同任务。

对于测试,我们通常分为黑盒测试白盒测试,但有些公司还会加个灰盒测试。而今天,在这种场景下,我们更多的是把它分为用户测试和开发者测试。

所谓用户测试,是以用户的角度,用户的角色来看这个软件产品。来测试它的功能、性能、易用性等等各个方面。而作为开发者,更多的是从设计、开发、代码或者其他的一些资料上,来分析这个产品的质量,这也就是我们这门课的重点。

软件测试分为不同的级别,通常会分为单元测试、集成测试、系统测试和验收测试。在新的软件工程的要求下面,我们更多的会把它分成用户测试和开发者测试。

这里面的开发者测试,会涉及到单元测试、集成测试和部分系统测试。新的改变使得软件工程师的角色也发生了一些变化。我们以Google为例,它通常会分为软件开发工程师、软件测试开发工程师和测试工程师,而这三类都要涉及一个很重要的就是开发者测试。

我们首先来看,第一类角色,软件开发工程师。那它最主要的任务,当然是实现各种功能代码。从早期的设计选择架构,数据结构,去实现代码,代码审查等等,都是软件开发工程师的主要任务。除了编写代码,他有很重要的一块任务是编写测试代码。包括测试驱动的设计,单元测试,构建各种规模的测试,并且对测试进行分析。我们想强调是。软件开发工程师除了开发测试,还有一个很重要的工作就是在发现Bug以后,承担对代码的一个分析,去修改代码,提高软件质量的一个责任。

devtest2

第二类,软件测试开发工程师。他的工作重心是在代码的可测性,提供一个通用测试基础框架使得软件开发人员能在这个上面进行有效的测试。软件测试开发工程师同样需要参与软件代码的一些设计和代码的编写并且提供代码的审查和分析等等。为了增加代码的可测性他可能要对代码进行重构。他同时要编写一些好用的单元测试框架,支持高效的自动化的一个测试。

测试开发工程师在跟软件开发人员进行代码上的一些合作,以提高代码的质量,这里面很重要的是关于各种覆盖,无论是功能性还是代码级别的一个覆盖。所以测试开发工程师,有很大的时间依然是代码的编写,他们目的是辅助软件开发人员提高软件代码的质量。

devtest3

第三类,测试工程师。他就有两种角色。一方面,他跟测试开发工程师配合帮助软件开发人员提高代码质量。另外一方面,他要以用户的角度,用户的角色来思考软件产品来进行测试。测试工程师会花大量的时间思考用户的场景,模拟用户的场景,用自动化或者其他一些手段来实现一些测试。而软件开发工程师会对测试工程师和测试开发工程师的测试进行一些分类分析,以提高代码质量。一般来说测试工程师在企业内部,是作为最后一道屏障,作为产品质量的一个把关,风险的分析等等。

devtest4

我们想强调是,今天,纯粹的人工测试的这样的一个角色已经在很多企业被削减。而对测试工程师编写代码能力的一个要求已经越来越高。这也就是我们这门课的一个重点。

我们再回到测试的级别,单元测试、集成测试、系统测试是开发者测试的一个重要内容。在很多企业,已经用小型测试、中型测试,大型测试一些概念来淡化他们之间的一些区别。

devtest5

我们以Google为例,他的小型测试,也就是我们传统单元测试的一个扩展。它通常来验证一个单独的函数或一个独立模块是否如预期所工作。所以他除了功能性的验证,对代码了一个分析是非常重要的。小型测试的运行周期一般都非常短,尽量一点瞬间就要出结果。小型测试一般来说是由软件开发人员来实现的,虽然有时候会有软件测试开发人员帮助,也是为了帮助软件开发人员来提高测试效率。而这一部分,测试工程师几乎是不参与。小型测试,是需要是断绝跟外部的一些交互,也就是一个相对独立的,当然有一些模拟的手段来实现这样一个测试环境。

devtest6

第二个中型测试,也就是传统的集成测试的一个扩展。他重点来测试若干个功能相近的这种模块,他的交互是否如预期。这时候,软件测试工程师参与程度就会比较高,但会跟软件开发人员一起来配合代码的编写、集成和调试的一些工作。

软件开发人员对中型测试的这个测试之外的分析承担着重要的责任,也就是后期要通过这个来分析代码,甚至追溯到原来设计上的一些缺陷。测试人员也会有时候参与用手动或者自动它的方式来帮助提高代码质量。

devtest7

最后大型测试,也就是传统意义上系统测试的一个扩展。通常它有以下特点,一般来说是把所有的模块都集成,都是在一个真实的使用环境,比如我要调数据库,那真的是需要有数据库的数据,要访问网络,要访问系统的一些功能等等这都要有真实的环境来进行这个场景的测试。这一点跟小型测试很不一样啊。这时候,大型测试一般是三个角色的工程师都要参与,他们通过自动化或者人工的一些探索性测试一起来提高整个产品的质量。

devtest8

我们最后总结一下这三类测试。我们可以看到,小型测试对外部调用基本上是断节,通过模拟的手段来完成这个程序的运行。而这门课主要会以小型测试为例,扩展一部分中型测试,而中型测试我们少量的有外调,而重点是靠集成,而集成以后如何进行测试。

devtest9

这门课涉及大型测试的比较少,我们想强调的是,今天软件开发也好,软件测试也好,都会提倡一个,你进行开发,那你进行测试,你进行修复。所以在最后一周我们会强调关于代码的调试和修复的一个讲解和测验。

“开发者测试基础”的一个回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注