1. 什么是回归测试?怎样知道新引入的变化没有给现有的功能造成破坏?

  【参考答案】由于软件修改或变更,对修改后的工作版本所有可能影响的范围进行的测试,是回归测试。回归测试的目的是发现原来正常的功能特性出现新的问题——回归缺陷,从而确保原来正常的或符合要求的特性,不受其它区域修改的影响。回归测试,伴随着测试过程,单元测试、集成测试和系统测试中,一旦有变更或修正,都要进行相应的回归测试。

  通过代码查看或代码评审,可以基本知道新引入的变化是否会给现有的功能造成影响,但不能确定,所以需要进行回归测试。

  2. 如果业务层和数据层之间有依赖关系,你该怎么写单元测试?

  【参考答案】

  在JAVA中,如果业务层与数据层之间有依赖关系,也是说业务处理不单纯,这时我们一般用Mock对象来模拟所需要的数据,来进行单元测试。简单地说mock是模型,模拟测试时需要的对象及测试数据。这类测试工具有MockObjects、Xdoclet、EasyMock、MockCreator、MockEJB、ObjcUnit、jMock等

  比如,用过Struts的都知道,Struts中的action类要运行必须依靠服务器的支持,只有服务器可以提供HttpServletRequest,HttpServletResponse对象,如果不启动服务器,那么没有办法对action类进行单元测试,而借助mock,可以完成struts的Action的测试。

  对业务层测试可以用Mock来模拟,而对数据层如何测试?有两种方法:

  使用Mock对象来测试DAO。它屏蔽了具体的关系数据库,它的优点是测试代码的编写方便,可以快速运行。缺点:风险太大,对数据层测试的力度太小,屏蔽了很多与数据库相关的问题,比如:对象和数据库表之间映射,查询语句的语法是否正确。
直接在关系数据库中测试。优点:能对数据层进行完整的测试。缺点:单元测试运行速度太慢,要频繁的对数据库进行操作

  还可以参考下列文章:

  如何对数据源层进行单元测试
  http://blog.csdn.net/moxie/archive/2005/03/29/333449.aspx
  http://www.infoq.com/cn/news/2008/01/wcf-di

  3. 你用哪些工具测试代码质量?

  【参考答案】这取决于使用工具的经验,而这方面的经验,开发人员更多。主要的工具有适合Java代码的Checkstyle、Findbugs、Jalopy、PMD、Parasoft Jtest、Coverity Prevent for Java;适合C++语言,有Parasoft C++Test、Coverity Prevent for C/C++

  FindBugs,第1 部分: 提高代码质量
  代码检测:Code Review与CheckStyle
  代码优化:Jalopy

  4. 在产品部署之后,你常碰到的是什么类型的问题?

  【参考答案】产品部署之后,容易碰到的问题是安装配置上不对,测试环境和实际运行环境总是存在差异。其次,出现的问题,可能是系统稳定性问题、性能问题,可能由于脏数据、传输中的异常数据和大数据量等引起。

  5. 什么是代码覆盖率?有多少种代码覆盖率?

  【参考答案】当我们想了解测试是否充分、是否有些地方没被测试过,需要对所有测试过的地方有所了解,也是了解测试的覆盖程度。测试越充分,测试的覆盖程度越高,产品的质量越能得到保证。这种程度的量化是测试覆盖率,即测试覆盖率是用来衡量测试完成程度、或评估测试活动覆盖产品代码的一种量化的结果,评估测试工作的质量,也是产品代码质量的间接度量方法。如果用公式描述的话,可以看作“测试过程中已验证的区域或集合”和“要求被测试的总的区域或集合”的比值。

  基于代码的测试覆盖评测是对被测试的程序代码语句、代码块、类、函数(方法)、路径或条件的覆盖率分析。如果应用基于代码的覆盖率分析,一般需要借助工具(如IBM Rational PureCoverage、Bullseye Coverage、开源Clover、EMMA、Cobertura和NoUnit等)来执行。

  代码覆盖率工具Bullseye Coverage
  使用 emma 测量测试覆盖率

  6. 功能测试和探索性测试的区别是什么?你怎么对网站进行测试?

  【参考答案】这个题目本身有问题,把“功能测试”和“探索性测试”比较不合理。功能测试中包含了“按已完成的测试用例或已计划的测试大纲等进行测试”和“探索性测试”,而探索性测试一般也是为了发现功能中的问题,虽然探索性测试还会涉及安全性测试、性能测试等。

  功能测试方法中包括等价类划分、边界值分析、因果图、决策表、正交试验法等,也包括错误猜测法,错误猜测法也可归为探索性测试。

  探索性测试,也可以称随机测试(ad-hoc test),充分发挥测试人员大的灵动性、创造性,进行各种猜测和试探,去发现一些相对隐藏比较深或偏僻的软件缺陷。随机(ad-hoc)测试,也可作为一种重要的测试辅助手段,以帮助测试人员尽早地熟悉产品,发现测试用例的不足,添加或改进测试用例。我的书《全程软件测试》对它们做了充分讨论。

  对网站进行测试时,不仅要做好功能测试,包括功能的逐项验证、针对功能的负面测试、探索性测试等,还要进行安全性测试、性能测试、UI适用性测试等。

  7. 测试套件、测试用例、测试计划,这三者之间的区别是什么?你怎么组织测试?

  【参考答案】测试用例(test case)是为了更有效地发现缺陷而设计的、可以独立地执行的小测试单元。测试套件(test suite)是为了完成某个测试目标或任务而组织的若干个测试用例的集合。测试计划(test plan)是对测试活动的事先策划,包括确定测试范围、估算测试工作量、识别测试风险、安排资源和进度等。测试计划指导测试用例的设计和测试套件的创建,测试套件是由测试用例构成。测试计划的实施需要借助测试用例、测试套件来实现。

  组织测试,简单地说是 计划测试 -> 设计测试用例 -> 创建测试套件 -> 执行测试套件 (转化为执行测试用例) -> 测试结果分析和评估 -> 调整测试计划 ->  …… 详细参见《全程软件测试》

  8. 要对电子商务网站做冒烟测试,你会做哪些类型的测试?

  【参考答案】冒烟测试(smoke test )这个名称的来历,大概是从电路板测试得来的。因为当电路板做好以后,首先会加电测试,如果板子没有冒烟在进行其它测试,否则退回去。软件中的冒烟测试是在每日构建(daily build)软件包后,对系统的基本功能进行快速的测试,以验证基本功能是否能正常运行。如果有问题,打回开发部门;如果正常运行,说明软件包构建成功,接下来可以进行常规测试或大规模测试。

  对电子商务网站做冒烟测试,包括基本功能测试和性能测试。基本功能测试可以完成一个交易的完整过程,即从系统登录 -> 商品查询 -> 选择商品 ->  提交订单 ->确认 ->  付款  -> 结算等。 

  9. 客户在验收测试中会发现不满意的东西,怎样减少这种情况的发生?

  【参考答案】 客户可能发现功能或界面设计和他预想的不一致、或者会发现有些功能的操作不是很方便、或者发现一些错别字等各种缺陷。针对不同的问题,有相应的一些办法,概括起来是和客户进行充分沟通,真正理解客户的需求,和客户的理解达成一致。其次,在开发期间,还可以邀请客户参与软件设计规格说明书、测试计划、测试用例等的评审,当软件能基本正常工作时再次邀请客户从头到尾再看一遍(product work-through)。后,是开发人员和测试人员做好自己的本质工作,构建高质量的软件,进行充分的测试。

  10. 你去年在测试和质量保证方面学到了哪些东西?

  【参考答案】 通过自己遇到具体的问题,来说明。例如,某个特定的缺陷分析,使你认识到某个方面的问题,然后找到真正原因,并加以克服。或者,通过某个质量事故,增强了“质量第一”的意识,或者由于某些冲突导致项目质量问题,认识到“沟通”、“流程”或“规范font-fa