程序员,软件测试知多少?

送给初级程序员的测试认知文

作为开发同学,一些基本的测试岗位相关知识还是很有必要了解一下,免的某些同学在工作中和测试同学斗嘴、打架、群殴等以及被测试鄙视....。

我们常常听说的一些测试专业术语,比如白盒、黑盒、单元测试,相信搞作为程序员的你脱口而出的就是这三个词汇吧,笔者在前几年对测试也仅仅停留在这个两个词汇上,更多的就不得而知了。后来在一家做跨境电商的公司学到了一些新术语,也见到了测试岗位的一些日常,比如冒烟测试、测试用例(TC)、回归测试、接口测试以及偶尔和我吵架等等。

白盒黑盒测试是按测试设计方法分类的,是指软件测试设计的方法,而不是软件测试的方法,注意这个区别。

黑盒测试是行为测试,即从软件的行为而不是内部结构触发来设计测试,也就是在软件上到处点点等。白盒指的是在设计测试的过程中,设计者可以“看到”软件系统的内部结构,并使用软件的内部结构和知识来选择测试数据及具体的测试方法。

功能测试和非功能测试

按测试的目,分为功能测试和非功能测试,单元测试是功能测试里的一种,每种测试的名称和内容如下:

一个软件除了基本功能之外,还有很多功能之外的特性,这些叫非功能需求,或者服务质量需求。然而,若没有软件的基本功能,这些特性都将无从表现出来,因此,我们要在软件开发的适当阶段——基本功能完成后再来做这些非功能测试,非功能测试有如下这些

其他分类下的测试

在开发软件的过程中,不少测试起着“烽火台”的作用,它们告诉我们软件开发的流程是否顺畅,比如冒烟测试是指测试不通过不能进行下一步工作,是一种基本验证测试,据说是从硬件设计行业流传过来的说法。当年设计电路板的时候,很多情况下,新的电路板一插上电源就冒起白烟,烧坏了。如果插上电源后没有冒烟,那就是通过了“冒烟测试”,可以进一步测试电路板的功能了。还有验证构建是否通过基本测试以及全面考核某方面的功能的验收测试。

另一些测试名称则是说明不同的测试方法

单元测试

对于开发来讲,最最常用和熟悉的还是单元测试,怎样才算一个好的单元测试?单元测试应该准确、快速地保证程序基本模块的正确性。下面是验证单元测试好坏的一系列标准:

  • 单元测试应该在最基本的功能/参数上验证程序的正确性。
  • 单元测试必须由最熟悉代码的人(程序的作者)来写。
  • 单元测试过后,机器状态保持不变。如果单元测试创建了临时的文件或目录,应该在Teardown(拆卸)阶段删掉。如果单元测试在数据库中创建或修改了记录,那么也许要删除或恢复这些记录,或者每一个单元测试使用一个新的数据库,这样可以保证单元测试不受以前单元测试实例的干扰。
  • 单元测试要快(一个测试的运行时间是几秒钟,而不是几分钟)。
  • 单元测试应该产生可重复、一致的结果。
  • 独立性—单元测试的运行/通过/失败不依赖于别的测试,可以人为构造数据,以保持单元测试的独立性。
  • 单元测试应该覆盖所有代码路径。
  • 单元测试应该集成到自动化测试的框架中。
  • 单元测试必须和产品代码一起保存和维护。

然并卵!都说国内很多程序员是不写单元测试的,甚至从来都不写,笔者当年做Java的时候也没写过几次(捂脸)。

回归测试

在单元测试的基础上,我们就能够建立关于这一模块的回归测试(Regression Test)。Regress:return to a worse or less developed state,是倒退、退化、退步的意思。在软件项目中,如果一个模块或功能以前是正常工作的,但是在一个新的构建中出了问题,那么这个模块就出现了一个“退步”(Regression),从正常工作的状态退化到不正常工作的状态。在一个模块的功能逐步完成的同时,与此功能有关的测试用例也同样在完善中。一旦有关的测试用例通过,我们就得到了此模块的功能基准线(Baseline),一个模块的所有单元测试就是这个模块最初的Baseline。

针对一个Bug Fix,我们也要做Regression(海退) Test。目的是:

  1. 验证新的代码的却改正了缺陷。
  2. 同时要验证新的代码有没有破坏模块的现有功能,有没有Regression

对于“回归测试”中的“回归”,我们可以将其理解为“回归到以前不正常的状态”。回归测试最好要自动化,因为这样就可以对于每一个构建快速运行所有回归测试,以保证尽早发现问题。单元测试是回归测试的基础。在专注于模块基本功能的单元测试之外,还有功能测试——从用户的角度检查功能完成得怎么样。

探索性测试

探索性测试是为了某一个特定目的而进行的测试,且就这一次,以后一般也不会重复测试。在软件工程的实践中,“Ad hoc”大多是指随机进行的、探索性的测试。

探索式测试的测试流程是不可重复的,因为它的测试都是“特定”测试,没法重复。这一原因,使得探索式测试不能自动化,就这一点而言,还达不到CMMI二级——可重复级。

作为管理人员来说,如果太多的小强是在探索式测试中找出来的,那我们就要看看测试计划是否基于实际的场景,开发人员的代码逻辑是否完善,等等。

场景/集成/系统测试

在软件开发的一定阶段,我们要对一个软件进行全面和系统的测试,以保证软件的各个模块都能共同工作,各方面均能满足用户的要求。这类测试叫系统/集成测试。这一方法的核心思想是:当用户使用一个软件时,他/她并不会独立使用各个模块,而是把软件作为一个整体来使用。我们在做场景测试的时候,就需要考虑在现实环境中用户使用软件的流程是怎样的,然后模拟这个流程,看看软件能不能满足用户的需求。这样,才能使软件符合用户的实际需求。

应该什么时候做集成测试呢?是不是越早越好?原则上是当一个模块稳定的时候,就可以把它集成到系统中,和整个系统一起进行测试。在模块本身稳定之前就提早做集成测试,可能会报告出很多Bug,但是这些由于提早测试而发现的Bug,有点像汽车司机在等待绿灯时不耐烦而拼命地按喇叭——也就是说,有点像噪音。我们还是要等到适当的时机再开始进行集成测试。

了解完这些概念后,我们来看看究竟一个测试工程师的职责是怎么样的呢,下面列举一些:

  • 制定测试计划
  • 设计与编写测试用例
  • 实施测试
  • BUG跟踪
  • 测试报告与总结
  • 其他测试工程活动

很多测试工作并不是说,有了测试工程师,把测试相关的全部事情扔给他们就完事了,需要开发和测试配合,共同完成某些测试任务,软件测试也不仅仅是为了发现bug然后提给开发,测试=质量保障,提升质量相关的都是测试工程师需要关注和负责的,软件测试的目标是帮助项目打造用户喜欢的产品。



《构建之法》读书笔记之二

作者: Dunizb 
链接:http://www.imooc.com/article/18694
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作!

时间: 2024-08-26 13:39:35

程序员,软件测试知多少?的相关文章

程序员必知的10大基础实用算法

    算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2) 次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的 架构上很有效率地被实现出来. 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists). 算法步骤: 1 从数列中挑出一个元

(转) Java程序员应该知道的10个调试技巧

原地址:http://www.csdn.net/article/2012-09-03/2809495-java-debugging-tips-with-eclipse 调试可以帮助识别和解决应用程序缺陷,在本文中,作者将使用大家常用的的开发工具Eclipse来调试Java应用程序.但这里介绍的调试方法基本都是通用的,也适用于NetBeans IDE,我们会把重点放在运行时上面. 在开始之前,推荐大家去看看Eclipse shortcuts这篇文章,它将会给你带来很多方便.在本文中使用的是Ecli

【转】嵌入式程序员应该知道的16个问题

全面解析<嵌入式程序员应该知道的16个问题> ----Sailor_forever分析整理,[email protected] http://blog.csdn.net/sailor_8318/archive/2008/03/25/2215041.aspx 1.预处理器(Preprocessor) 2.如何定义宏 3.预处理器标识#error的目的是什么? 4.死循环(Infinite loops) 5.数据声明(Data declarations) 6.关键字static的作用是什么? 7.

Java程序员应该知道的10个调试技巧

转自:http://www.csdn.net/article/2012-09-03/2809495-Java-Debugging-Tips-with-Eclipse 木有收藏按钮,就直接转过来了.仔细阅读,很有帮助哈…… 摘要:调试不仅可以查找到应用程序缺陷所在,还可以解决缺陷.对于Java程序员来说,他们不仅要学会如何在Eclipse里面开发像样的程序,更需要学会如何调试程序.本文介绍了Java程序员必知的10个调试技巧,保证让你受益匪浅! [CSDN.NET 张红月/编译] 调试可以帮助识别

新入行程序员应知的十个秘密

新入行程序员应知的十个秘密 初出茅庐的你带着仍残留墨香的毕业证书踏上工作岗位,马上就被书上没写的规则和各种繁杂的日常事务来了个下马威.这样的故事实在是司空见惯,编程工作也不例外. 没有几个学生能 100% 为自己的第一份真正的工作做好准备.如果你不想成为其中之一,请学学以下这 10 项无需手把手指导就能学会的基本技能: 1.版本控制系统(VCS) VCS 也许是计算机课程最大的疏漏.这些课程光记得教如何写代码,但却往往忘记教学生如何去管理代码.每一个程序员都应该懂得利用 Git 或 Subver

程序员应知 -- 如何分析海量数据

程序员应知 -- 如何分析海量数据 http://www.cnblogs.com/MicroTeam/archive/2010/12/03/1895071.html 在这个云计算热炒的时代,如果你没有处理过海量数据的话,你将不再是个合格的Coder.现在赶紧补补吧~ 前一阵子分析了一个将近1TB的数据群(gz文件,压缩率10%).因为第一次分析如此巨大的数据,没有经验,所以浪费了许多时间.下面是我整理的一些经验,方便后者. 欢迎各种补充,我会不断更新这篇文章:觉得有用的话,速度分享链接:有不同意

嵌入式程序员应知道的0x10个C语言Tips

[1].[代码] [C/C++]代码 跳至 [1] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77

想涨薪?想跳槽?程序员必知互联网薪资数据分析

本人 程序员一枚,没有从生到死稳重型的待在一家公司,也不是三天两头的跳槽乱入阵营,年轻气盛的乱跳槽的事也不爱干,奉劝同行的新入行的菜鸟们,选工作需慎重,跳槽更需慎重,入职也要做个多线程的程序员.知乎上看到一个关于互联网薪资数据分析的报告,拿来分享,大家共睹. 图片资料来源于100offer程序员拍卖网站. 欢迎大家吐槽,想公布自己薪资,想炫富的程序员们可以列队开始了.

Java程序员应该知道的10个Eclipse调试技巧

Eclipse是众多Java程序员实用的开发工具,其中开发技巧也是繁多,但作为优秀的Java程序员,需要掌握最起码的调试技巧. 小编从前辈程序员和网络中,整理了10个Eclipse调试技巧,希望对Java程序员有用. 1 条件断点 如果你不知道如何添加断点,只需点击左边面板(行号前面)断点即被创建.在调试界面中,“断点”视图会把所有被创建的断点列出来.我们可以给它加一个布尔条件,也就是说,该断点会被激活并且如果布尔条件为真,就会执行该断点,否则将会跳过往下执行. 2 异常断点 在断点视图中,有一

嵌入式程序员应知道的0x10个基本问题

来源:网络 1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1) #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的.3) 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉