转自朱少民ID:KerryZhu http://blog.csdn.net/KerryZhu/archive/2009/02/28/3945871.aspx
这里先回答 软件开发者面试百问 中测试部分,以后有时间再回答软件工程、软件项目管理等各个部分。这些问题的答案一般没有正确与否,各个人回答不同,只不过希望这里的答案相对不错,对你有所帮助。
1. 什么是回归测试?怎样知道新引入的变化没有给现有的功能造成破坏?
【参考答案】由于软件修改或变更,对修改后的工作版本所有可能影响的范围进行的测试,就是回归测试。回归测试的目的是发现原来正常的功能特性出现新的问题——回归缺陷,从而确保原来正常的或符合要求的特性,不受其它区域修改的影响。回归测试,伴随着测试过程,单元测试、集成测试和系统测试中,一旦有变更或修正,都要进行相应的回归测试。
通过代码查看或代码评审,可以基本知道新引入的变化是否会给现有的功能造成影响,但不能确定,所以需要进行回归测试。
2. 如果业务层和数据层之间有依赖关系,你该怎么写单元测试?
【参考答案】
在JAVA中,如果业务层与数据层之间有依赖关系,也就是说业务处理不单纯,这时我们一般用Mock对象来模拟所需要的数据,来进行单元测试。简单地说mock就是模型,模拟测试时需要的对象及测试数据。这类测试工具有MockObjects、Xdoclet、EasyMock、MockCreator、MockEJB、ObjcUnit、jMock等
比如,用过Struts的都知道,Struts中的action类要运行必须依靠服务器的支持,只有服务器可以提供HttpServletRequest,HttpServletResponse对象,如果不启动服务器,那么就没有办法对action类进行单元测试,而借助mock,可以完成struts的Action的测试。
对业务层测试可以用Mock来模拟,而对数据层如何测试?有两种方法:
使用Mock对象来测试DAO。它屏蔽了具体的关系数据库,它的优点是测试代码的编写方便,可以快速运行。缺点:风险太大,对数据层测试的力度太小,屏蔽了很多与数据库相关的问题,比如:对象和数据库表之间映射,查询语句的语法是否正确。
直接在关系数据库中测试。优点:能对数据层进行完整的测试。缺点:单元测试运行速度太慢,要频繁的对数据库进行操作
还可以参考下列文章:
3. 你用哪些工具测试代码质量?
【参考答案】这就取决于使用工具的经验,而这方面的经验,开发人员更多。主要的工具有适合Java代码的Checkstyle、Findbugs、Jalopy、PMD、Parasoft Jtest、Coverity Prevent for Java;适合C++语言,有Parasoft C++Test、Coverity Prevent for C/C++
4. 在产品部署之后,你最常碰到的是什么类型的问题?
【参考答案】产品部署之后,容易碰到的问题是安装配置上不对,测试环境和实际运行环境总是存在差异。其次,出现的问题,可能是系统稳定性问题、性能问题,可能由于脏数据、传输中的异常数据和大数据量等引起。
5. 什么是代码覆盖率?有多少种代码覆盖率?
【参考答案】当我们想了解测试是否充分、是否有些地方没被测试过,就需要对所有测试过的地方有所了解,也就是了解测试的覆盖程度。测试越充分,测试的覆盖程度越高,产品的质量就越能得到保证。这种程度的量化就是测试覆盖率,即测试覆盖率是用来衡量测试完成程度、或评估测试活动覆盖产品代码的一种量化的结果,评估测试工作的质量,也是产品代码质量的间接度量方法。如果用公式描述的话,可以看作“测试过程中已验证的区域或集合”和“要求被测试的总的区域或集合”的比值。
基于代码的测试覆盖评测是对被测试的程序代码语句、代码块、类、函数(方法)、路径或条件的覆盖率分析。如果应用基于代码的覆盖率分析,一般需要借助工具(如IBM Rational PureCoverage、Bullseye Coverage、开源Clover、EMMA、Cobertura和NoUnit等)来执行。
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