跟小D每日学口语

从这几道流行的软件测试面试题想到的

从这几道流行的软件测试面试题想到的(一)
测试人员考试试卷(考试时间90分钟,满分100分)
一、判断题(每题1分,12 分,正确的√,错误的╳)
1.软件测试的目的是尽可能多的找出软件的缺陷。()
软件测试的目的就是为了发现软件中的缺陷,从这个意义上面说上面的这个论断是正确的。不少人会认为软件测试可以保证软件的质量,其实这个观点是错误,测试 只是软件质量控制中的一个角色,其活动并不能达成软件质量保证的效果。所以不要认为一个公司里面如果有了软件测试人员,产品的质量就会好起来。

Comments:

我觉得这个关于测试的目的答案要追溯到软件测试的定义,可是现在软件测试并没有“确切的”统一的定义主要是有以下几个:

第一种:测试就是发现缺陷,提高产品质量

这个定义大概(我不太确定)可以追溯到G.J.Myers的经典著作《软件测试之艺术》(The Art of Software Testing)中,给出了测试的定义:“程序测试是为了发现错误而执行程序的过程”

从这个定义上来说,软件测试的目的就是找出更多的软件的缺陷,这道题是对的。

第二种:代表性的有以下三个:

“测试是以评价一个程序或者系统属性为目标的任何一种活动。测试是对软件质量的度量。”

―――――――――――― 1979年,Glenford Myers《软件测试艺术》(The Art of Software Testing)

“使用人工或自动手段来运行或测定某个系统的过程,其目的在于检测它是否满足规定的需求或是弄清预期结果与实际结果之间的差别”

――――――――――――――IEEE-1983

“测试是为了度量和提高被测软件的质量,对测试件进行工程设计、实施和维护的整个生命周期过程。”

――――――――― 2002年,Rick和Stefan《系统的软件测试》(Systematic Software Testing)

我们可以看到当软件测试碰上软件质量或CMMI等一批人之后,这个定义就被拔高和广泛了,拔高的软件测试的定义一般会牵扯到“过程”,“软件质量”等术语。总之一句话,这就不是单单是软件的问题了,而是涉及到需求,设计等一系列的过程。

这样的话,我们可以判这道题为错误的,因为这种说法不完整,是狭义的,列出的理由可能是软件测试的目的“不仅仅”(注意这个词)是要发现软件的缺陷,因为持这种观点的人把软件测试的定义上升到了软件质量控制的高度啦。

矛盾在哪里呢?为什么做这道题时会如履薄冰呢?矛盾在于:

   1. 并不是所有的机构都持统一的定义标准。
   2. 广义的软件测试定义只是“完善”了狭义的测试定义的内容,并不能说明按狭义的定义就是错的,关键还在你不知道面试方承认不承认这一点。(通常做完题是没有机会和面试官讨论这一点的)
   3. 这份网上流程的题并没有给出权威的正确的答案,而很多企业又拿过来考来考去。

其实我们在看到很多面试的试卷出这道题的时候,权威的CMM本身确没有充分定义软件测试,(这段为引用,没看过CMM的资料,见如下阐述:)

“但是令人遗憾的是,CMM 没有充分的定义软件测试,没有提及测试成熟度的概念,没有对测试过程改进进行充分说明,在 KPA 中没有定义测试问题,与质量相关的测试问题如可测性,充分测试标准,测试计划等方面也没有满意的阐述。”

如果真是这样的话,倒是打了出题的人一巴掌。不过TMM倒是给了段测试目的的定义;

TMM 测试成熟度分解为 5 级别,关注于 5 个成熟度级别递增:
Phase 0 :测试和调试没有区别,初了支持调试外,测试没有其他目的
Phase 1 :测试的目的是为了表明软件能够工作
Phase 2 :测试的目的是为了表明软件不能够能够正常工作
Phase 3 :测试的目的不是要证明什么,而是为了把软件不能正常工作的预知风险降低到能够接受的程度
Phase 4 : 测试不是行为,而是一种自觉的约束 (mental discipline) ,不用太多的测试投入产生低风险的软件上的 。

但可以肯定的是这个定义也只能用来理解理解,完全不能用来做是非题。

完了,以上其实都是教条主义,说说我的看法,朴素一点的说,其实我觉得软件测试的目的要服务项目的目标,有篇流传很广的文章是这么说的:

“软件测试的目的决定了如何去组织测试。如果测试的目的是为了尽可能多地找出错误,那么测试就应该直接针对软件比较复杂的部分或是以前出错比较多的位置。如 果测试目的是为了给最终用户提供具有一定可信度的质量评价,那么测试就应该直接针对在实际应用中会经常用到的商业假设。” Over,我觉得这个说法好。

从这几道流行的软件测试面试题想到的(二)

软件测试可以划分为几种类型?(或软件测试分哪几种?)+测试方法分为哪几种?

Comments:
这道题常见的程度不亚于第一道题,上当的话一开始就上来给一阵狂列,然后你自己就晕了,不过传说中的22种测试类型都能背得住的差不多也是半个神人了。

1. 关于软件测试可以划分为几种类型的问题?个人认为我觉得这个一味的罗列并不是最好的答案。我更觉得其实这道题只要说出你的划分依据不用列那么多种也是份不错的答案(当然如果是面试的话。咱们可以以“啊哈,这个问题嘛,关键要看你以什么来划分了”来开头),以下是参考:
       按测试要素分:
              ――UI测试,单元测试系统测试功能测试,兼容性测试,本地化测试,压力负载测试,web测试
       按测试阶段分:
             A.详细测试(Comprehensive Testing,FC阶段,可能包含单元测试和集成测试)
             B.回归测试(Regression Testing)
             C.验收测试 (Qualification Testing,RC&RTM阶段)
       按测试方法(手段)分:
                 A.脚本测试(Scripted testing,ST)
                 B. 随机测试(Ad_hoc testing)
                 C.探索性测试(Exploratory testing,ET)

从是否执行程序的角度
        A.静态测试
        B.动态测试。
(个人觉得这种划分没多大必要)

从是否关心软件内部结构和具体实现的角度划分
        A.白盒测试
        B.黑盒测试
        C.灰盒测试



足以,再多说也是浪费口舌。

2. 区分一下测试类型和测试方法的异同,
OK,回来再问一遍,测试方法分为哪几种?

哈哈,其实是本人有感于时不时听到诸如黑盒测试方法,性能测试方法这类词眼时,耳朵经常失灵,别扭,这句话就象是有人在发问“软件测试的手段有哪些”,低下有人喊了“黑盒测试方法,性能测试方法”,可我还是觉得你说的是测试的类型而不是测试的方法(手段)。面试时注意人家问你的是什么?

可能有点吹毛求疵的感觉,但实际上如果能用“黑盒测试的方法有哪些”或“性能测试的手段有哪些”等词我觉得会好一些,这样起码让人家知道黑盒测试,性能测试是一种类型,实现它有好几种方法,即OO中的class.method的意味。

总之,测试类型和测试方法要分开。
 
从这几道流行的软件测试面试题想到的(三)

3.下列关于alpha 测试的描述中正确的是:()
A.alpha 测试需要用户代表参加
B.alpha 测试不需要用户代表参加
C.alpha 测试是系统测试的一种
D.alpha 测试是验收测试的一种


Comments:

首先我们来看一下Alpha测试和Beta测试的定义:
Alpha测试与Beta测试的定义 (引用网上的文章)

Alpha版 (内部测试版) :一般只在软件开发公司内部运行,不对外公开。主要是开发者自己对产品进行测试,检查产品是否存在缺陷、错误,验证产品功能与说明书、用户手册是否一致。 

【Alpha测试------软件工程导论(第四版) 清华大学出版社
Alpha测试由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试。开发者负责记录发现在错误和使用中遇到的问题。总之,Alpha测试是在受控的环境中进行的。 】
 
Beta版(外部测试版):软件开发公司为对外宣传,将非正式产品免费发送给具有典型性的用户,让用户测试该软件的不足之处及存在问题,以便在正式发行前进一步改进和完善。一般可通过Internet免费下载,也可以向软件公司索取。

据百度所讲,广义上对测试有三个传统的称呼,alpha、beta、gamma,用来标识测试的阶段和范围。alpha 是指内测,即现在说的 CB,指开发团队内部测试的版本或者有限用户体验测试版本。beta 是指公测,即针对所有用户公开的测试版本。然后做过一些修改,成为正式发布的候选版本时(现在叫做 RC - Release Candidate),叫做 gamma。


1.OK,很简单,这道题是要澄清一下Alpha测试和Beta测试时,用户在不在场的问题。
答案是都在场,只不过Alpha时在开发者的场所,Beta时在用户自己的场所。

2.把这道题扩展一下,我们来讨论一下Alpha测试和Beta测试时,测试人员要不要在场的问题。
答案是:测试人员都不在场

3.实际的情况是只有大的IT公司才遵从这些测试规范,更加现实的情况是不管Alpha或Beta测试什么人在场都有。如果你能为规范的大公司工作,那你接触到的流传都会是很严格的
posted @ 2009-11-25 16:04  简简单单幸福  阅读(574)  评论(0编辑  收藏  举报