1.什么是软件缺陷?软件缺陷的产生对软件有什么影响?

 

(1)需求不明确。软件需求不清晰或者开发人员对需求理解不明确,导致软件在设计时偏离客户的需求目标,造成软件功能或特征上的缺陷。此外,在开发过程中,客户频繁变更需求也会影响软件最终的质量。

 

 

 

 

 

(2)软件结构复杂。如果软件系统结构比较复杂,很难设计出一个具有很好层次结构或组件结构的框架,这就会导致软件在开发、扩充、系统维护上的困难。即使能够设计出一个很好的架构,复杂的系统在实现时也会隐藏着相互作用的难题,而导致隐藏的软件缺陷。

 

 

 

 

 

(3)编码问题。在软件开发过程中,程序员水平参差不齐,再加上开发过程中缺乏有效的沟通和监督,问题累积越来越多,如果不能逐一解决这些问题,会导致最终软件中存在很多缺陷。

 

 

 

 

 

(4)项目期限短。现在大部分软件产品开发周期都很短,开发团队要在有限的时间内完成软件产品的开发,压力非常大,因此开发人员往往是在疲劳、压力大、受到干扰的状态下开发软件,这样的状态下,开发人员对待软件问题的态度是“不严重就不解决”。

 

 

 

 

 

(5)使用新技术。现代社会,每种技术发展都日新月异。使用新技术进行软件开发时,如果新技术本身存在不足或开发人员对新技术掌握不精,也会影响软件产品的开发过程,导致软件存在缺陷。

 

2.什么是软件测试?软件测试的基本原则是什么?

 

1、所有测试的标准都是建立在用户需求之上的,测试的目的在于发现系统是否满足规定的需求。

 

2、尽早的和不断的测试,越早进行测试,缺陷的修复成本就会越低。

 

3、程序员应避免检查自己的程序,由第三方进行测试更客观有效。

 

4、穷举测试是不可能的。

 

5、充分注意测试中的群集现象,一段程序中一发现的错误数越多,其中存在的错误概率越大,因此对发现错误较多的程序段,应进行更深入的测试。

 

6、设计测试用例时应包括合理输入和不合理输入,以及各种边界条件、特殊情况下要制造极端状态和意外状态。

 

7、注意回归测试的关联系,往往修改一个错误会引起更多错误。

 

8、测试应从“小规模”开始,逐步转向“大规模”。

 

9、测试用例式设计出来,不是写出来的,应根据测试的目的,采用相应的方法设计测试用例,从而提高测试的效率,更多的发现错误,提高程序的可靠性。

 

10、重视并妥善保存一切测试过程文档(测试计划,测试用例,测试报告等)。

 

3.什么是软件测试用例?良好的测试用例应该具有什么样的特性?

 

 1、用例覆盖程度

 

  毫无疑问,这一点应该是最重要的,无需多说,覆盖率最大化是一套测试用例的最重要评价标准,如果漏测就杯具了。

 

 

 

  2、用例是否已经达到工作量最小化

 

 

 

  在满足用例覆盖程度最大化的前提下,应该尽量减小执行用例所需要的工作量。这些方面的方法有不少,如条件覆盖,分支覆盖,正交覆盖等方法。面对不同的测试对象,也有不同的方法来保证:对于网页背后的php逻辑,可以通过在网页上测试后,用一些工具比如xdebug来统计代码覆盖率;对于向外提供接口的server,采用的方式就是分析在外面暴露的接口设计用例,大致的通过接口参数来估计一下分支判断的情况。

 

 

 

  3、用例的分类以及描述是否足够清晰

 

 

 

  用例的分类,在这里是指相同类型的用例是否放在一起了。例如:接口类的用例,参数的取值范围是1-3,但是现在却传入4;数据类用例,状态机现在位于状态2,却要求状态跳转到无法到达的4;逻辑类用例,正常功能的产出等。将相同类型的用例放在一起,有助于理清思路,清楚了解用例设计是否完备。

 

 

 

  用例的描述,是指描述的清晰程度是否能够形成文档。例如上面参数取值范围的例子,用例这样写:“传入错误的值”或者“传入非1-3的值”,明显没有写成“传入值4”有效。这与写程序一样,总是写闭区间的范围而不是开区间。

 

 

 

  4、用例是否表明了测试目的

 

 

 

  写明用例的测试目的,对文档的易于理解性和工作交接的好处不言而喻,现代软件工程不可能只有一个人在做事情,项目于人员的变动也是难免的。在过程中留下足够的信息,可以在后续工作提高很多效率。

 

 

 

  5、测试用例的易于维护性

 

 

 

  如果被测对象有所升级,测试用例的说明或者脚本是不是容易维护呢?例如在有状态机的情况下,测试用例之间是相互依赖的(即需要一定的执行顺序),这样被依赖的用例修改后,后端不需要同步根据修改。而如果用例之间没有相互依赖关系(如用例是自己造的数据,不是依赖于前端的产出),可能一旦有变化,就需要修改这两个。当然,这两种情况不能绝对的说哪种好,是需要看实际使用时候的情况进行取舍的。不过,通过一些系统性的工具支持,也会出现一种做法绝对性的好于另外一种的情况,情况。

 

4.怎样搭建软件测试环境?对软件测试人员有什么要求?

 

1.搭建测试环境前,确定测试目的

 

 

 

 

 

 

 

即是功能测试,稳定性测试,还是性能测试,测试目的不同,搭建测试环境时应注意的点也不同。比如要进行功能测试,那么我们就不需要大量的数据,需要覆盖率高,测试数据要求尽量真实,这对硬件环境配置的好坏要求不是太苛刻,为提高覆盖率,就要配置不同的硬件环境。如要进行性能测试,就需要大量的数据,测试数据应尽可能的达到符合实际的数据分配,这时可能需要大量的设备来给测试对象施加压力,要提前准备大量设备。

 

 

 

 

 

 

 

2.测试环境时尽可能的模拟真实环境

 

 

 

 

 

 

 

这个要求对测试人员要求很高,因为很多测试人员没有去过用户使用现场,要完全模拟用户使用环境根本不可能。这时我们就应该通过技术支持人员,销售人员了解,尽可能的模拟用户使用环境,选用合适的操作系统和软件平台,了解符合测试软件运行的最低要求及用户使用的硬件配置,了解用户常用的软件,避免所有配置所有操作系统下都要进行测试,没有侧重点,浪费时间。

 

 

 

 

 

 

 

这样一方面,可以在测试执行过程中发生软件产品与其他协同工作产品之间的兼容性,避免软件发布给用户之后才发现的问题;另一方面也可以用来检验产品是不是用户真正需要的。多说情况下,测试环境都是真空环境,完全纯净的平台,测试时,没有问题,一旦拿到现场,与其它软件并存,硬件配置等原因,问题多多,这个就是搭建测试环境时没有考虑用户的使用环境。

 

 

 

 

 

 

 

3.确保无毒环境

 

 

 

 

 

 

 

我测试过几个项目都是因为搭建的测试环境感染病毒,导致测试软件经常出现莫名的崩溃,运行不起来等现象,导致测试中断。这是杀毒是必要的,但是杀毒的时间也应掌握好,具体可按照下列步骤:选择PC机-à安装操作系统—>安装杀毒软件杀毒—>安装驱动程序及用户常用软件及浏览器à杀毒à安装测试软件—>杀毒,安装测试软件后杀毒,要注意如果我们不是使用正版杀毒软件,很可能我们安装的测试软件的一些文件被当做可疑文件或者病毒被清除,导致测试软件直接不可用。

 

 

 

 

 

 

 

要确保杀毒软件正版,如果不是正版,建议在安装测试软件前,卸载掉杀毒软件。测试过程中,要注意U盘的使用以及测试环境与外网的控制。每次使用U盘前,要在其它机器上先杀毒;当测试环境与外网联通时,不建议使用共享方式互访测试机。当小范围PC机与外界隔离起来做测试环境时,可以禁掉可移动存储设备的使用,只允许一台PC使用,这台PC机上安装杀毒软件,进行资料传送时,先拷贝到这台机器上杀毒,然后以共享的方式进行资料的传送。经过这些措施可以很好的防止病毒感染测试环境,确保无毒环境。

 

 

 

 

 

 

 

4.营造独立的测试环境

 

 

 

 

 

 

 

测试过程中要确保我们的测试环境独立,避免测试环境被占用,影响测试进度及测试结果,比如设备连网后,是不是其他测试组也在共用,这样就可能影响我们的测试结果。有时开发人员为确定问题会使用我们的测试环境,这样会打乱我们的测试活动,更严重的是影响测试进度。为避免这种情况,测试人员在提交缺陷单时,提供详细的复现步骤以及尽可能多的信息。让开发人员根据缺陷单,在开发环境中复现和定位问题。

 

 

 

 

 

 

 

5.构建可复用的测试环境

 

 

 

 

 

 

 

     当我们刚搭建好测试环境,安装测试软件之前及测试过程中,对操作系统及测试环境进行备份是必要的,这样一来可以为我们下轮测试时直接恢复测试环境,避免重新搭建测试环境花费时间,二来在当测试环境遭到破坏时,可以恢复测试环境,避免测试数据丢失,重现问题。构建可“复用”的测试环境,往往要用到如ghost、Drive Image等磁盘备份工具软件;这些工具软件,主要实现对磁盘文件的备份和还原功能;在应用这些工具软件之前,我们首先要做好以下几件十分必要的准备工作:

 

 

 

 

 

 

 

   A.确保所使用的磁盘备份工具软件本身的质量可靠性,建议使用正版软件;

 

 

 

 

 

 

 

   B.利用有效的正版杀毒软件检测要备份的磁盘,保证测试环境中没有病毒

 

 

 

 

 

 

 

   C.对于在测试过程中备份时,为减少镜像文件的体积,要删除掉Temp文件夹下的所有文件,要删除掉Win386.swp文件或_RESTORE文件夹,这样C盘就不至于过分膨胀,选择采用压缩方式进行镜像文件的创建,可使要备份的数据量大大减小;

 

 

 

 

 

 

 

   D.最后,再进行一次彻底的磁盘碎片整理,将C盘调整到最优状态。

 

 

 

 

 

 

 

对于刚安装的操作系统,驱动程序等安装完成之后,测试程序安装之前,也要进行备份工作,这样可以防止不同项目交叉进行时,当使用相同操作系统时,直接恢复即可。