软件测试考试题及答案

  • 格式:doc
  • 大小:300.00 KB
  • 文档页数:16

什么是软件测试

测试是为发现错误而执行的一个程序或者系统的过程。

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

测试目的、目标,

软件测试是一个为了寻找故障而运行程序的过程

一个好的测试用例是很可能找到至今为止尚未发现的故障的测试用例

一次成功的测试是揭示了至今为止尚未发现故障的测试

从软件工程的角度,软件测试的目标是设计这样的测试:既能系统的揭示不同类型的故障而且耗费最少的时间和最少的工作量

软件故障哪些状态,

软件未达到产品描述标明的功能/非功能要求

软件出现了产品描述指明不会出现的错误

软件功能超出了产品描述指明的功能

软件未达到产品描述虽未指明但应达到的目标

测试人员或者最终用户认为软件难以理解、不易使用、运行速度缓慢

测试用例

测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。

白、黑盒,因果图,非功能测试

白盒测试:对于测试对象的内部内容是透明的、可见的,可以设计数据覆盖测试对象的每一条路经。

黑盒测试:黑盒法不关心程序内部的逻辑,而只是根据程序的功能说明来设计测试用例

等价分类法和边界值分析法都没有考虑输入情况的各种组合,也没有考虑各个输入情况之间的相互制约关系

因果图方法的思路:从用自然语言书写的需求规格说明书中找出因(输入条件)和果(输出或者程序状态的改变),通过因果图转换为判定表

非功能测试

以杯子为例:

功能度:用水杯装水看漏不漏;水能不能被喝到

界面测试:查看杯子外观

安全性:杯子有没有毒或细菌

可靠性:杯子从不同高度落下的损坏程度

可移植性:杯子再不同的地方、温度等环境下是否都可以正常使用

兼容性:杯子是否能够容纳果汁、白水、酒精、汽油等

易用性:杯子是否烫手、是否有防滑措施、是否方便饮用

用户文档:使用手册是否对杯子的用法、限制、使用条件等有详细描述

疲劳测试:将杯子盛上水(案例一)放24小时检查泄漏时间和情况;盛上汽油(案例二)放24小时检查泄漏时间和情况等

压力测试:用根针并在针上面不断加重量,看压强多大时会穿透

跌落测试:杯子加包装(有填充物),在多高的情况摔下不破损

震动测试:杯子加包装(有填充物),六面震动,检查产品是否能应对恶劣的铁路\公路\航空运输 说明书测试:检查说明书书写准确性配置/安装测试安装 / 反安装测试的目的:避免“大风浪都挺过来了,却在阴沟里翻了船”

目前市面上有非常流行的、专门制作安装/反安装程序的一些工具,如Install

Shelled。制作安装/反安装程序不再是件难事,关键是不要麻痹大意。主要测试工作: (1)至少在标准配置和最低配置两种环境下测试;2)如果有安装界面,应当尝试各种选项,如选择“全部”、“部分”、“升级”等。

兼容性测试

是指几个硬件之间、几个软件之间或是几个软硬件之间的相互配合的程度。

兼容性的商业规则:弱者设法与强者兼容,否则无容身之地;强者应当避免被兼容,否则市场将被瓜分。

文档和帮助测试

这种测试是检查用户文档(如用户手册)的清晰性和精确性。

健壮性测试

健壮性是指在异常情况下,软件还能正常运行的能力。健壮性有两层含义:一是容错能力,二是恢复能力。

容错性测试通常构造一些不合理的输入来引诱软件出错,例如:

(1)输入错误的数据类型。如“猴”年“马”月。

(2)输入定义域之外的数值。

粗暴一些方式俗称“大猩猩”测试法。除了不能拳打脚踢嘴咬外,什么招术都可以使出来。例如在测试客户机-服务器模式的软件时,把网络线拔掉,造成通信异常中断。

恢复测试重点考察一下几项:

(1)系统能否重新运行;

(2)有无重要的数据丢失;

(3)是否毁坏了其它相关的软件硬件。

性能测试

性能通常是指软件的“时间-空间”效率,而不仅是指软件的运行速度。人们总希望软件的运行速度高些,并且占用资源少些。 既要马儿跑得快,又要马儿吃的少。

有时人们关心测试的“绝对值”,如数据送输速率是每秒多少比特。有时人们关心测试的“相对值”,如某个软件比另一个软件快多少倍。

在获取测试的“绝对值”时,我们要充分考虑并记录运行环境对测试的影响。例如网络环境、计算机主频,总线结构和外部设备都可能影响软件的运行速度。

性能测试

性能优化的关键工作是找出限制性能的“瓶颈”,不要关注无关痛痒的地方。

程序员可以通过优化数据结构、算法和代码(包括SQL)来提高软件的性能。

算法复杂度分析是很好的方法,可以达到“未卜先知”的功效。

性能测试

性能优化就好像从海绵里挤水一样,你不挤,水就不出来,你越挤海绵越干。

有些程序员认为现在的计算机不仅速度越来越高,而且内存越来越大,因此软件性能优化的必要性下降了。这种看法是不对的,殊不知随着机器的升级,软件系统也越来越庞大了和复杂了,性能优化仍然大有必要。

性能测试的一些注意事项:

不要试图让人拿着钟表去测时间,应当编写一段程序用于计算时间以及相关数据。

应当测试软件在标准配置和最低配置下的性能。

为了排除干扰,应当关闭那些消耗内存、占用CPU的其它应用软件(如杀毒软件)。

不同的输入情况会得到不同的性能数据,应当分档记录。例如传输文件的容量从100K到1M可以分成若干等级。

由于环境的波动,同一种输入情况在不同的时间可能得到不同的性能数据,可以取其平均值。

可靠性测试

可靠性是指在一定的环境下、在给定的时间内、系统不发生故障的概率。由于软件不像硬件那样可以“加速老化”,按此定义,软件可靠性测试可能会花费很长时间。

比较实用的办法是,让用户使用该系统,记录每一次发生故障的时刻。计算出相邻故障的时间间隔,注意要去掉非工作时间。这样我们可以方便地统计出不发生故障的“最小时间间隔”、“最大时间间隔”和“平均时间间隔”。其中“平均时间间隔”会让人们大体了解到系统“可靠”的程度。

安全性测试

信息安全性(security)是指防止系统被非法入侵的能力,既属于技术问题又属于管理问题。

信息安全性测试有如下步骤:

(1)为非法入侵设立目标,例如“盗窃某个文件”或“更改数据库记录”等。

2)邀请(或悬赏)一些人扮演黑客,让他们想尽办法入侵系统,实现“目标”。

压力测试

压力测试也叫负荷测试,即获取系统能正常运行的极限状态。了解“极限”是很有价值的,例如潜艇下潜极限深度„。

压力测试的主要任务是:构造正确的输入,使劲折腾系统却让它刚好不瘫痪。

压力测试的一个变种是敏感测试。在某种情况下,微小的输入变动会导致系统的表现(如性能)发生急剧的变化。敏感测试目的是发现什么样的输入可能会引发不稳定现象。

易用性测试

易用性是指用户使用软件的容易程度。

现代人的生活节奏快,干啥事都想图个方便。所以把易用性作为重要的质量属性对待无可非议。

性能测试工具LoadRunner

是一种预测系统行为和性能的工业标准负载测试工具

通过模拟大量用户实时并发负载和实时性能监测的方式来确认和查找问题

创建虚拟用户 创建真实负载 实施监测 结果分析

单元测试覆盖的区域

单元执行的计算/操作的正确性 低级性能问题 低级可靠性问题 窗口的内容及导航,包括窗口的外观的一致性、热键、功能键和快捷键 报告的内容、布局和计算 文件/记录的创建、更新及删除 互操作单元间的通信

单元的定义

单元的定义与被测试系统的设计方法,以及在开发过程中采用的实现技术有关:

使用过程化程序语言开发的应用中的单元可以用一个函数或过程表示

使用面向对象编程语言开发的应用中的单元可以用一个类表示

可视化编程环境下的单元可以是一个窗口,或者是这个窗口中相关元素的集合

基于组件开发环境中的单元可以是一个预先定义的可重用的组件

单元测试方法

确定如何调用某个给定单元以及每次调用该单元的响应

确定单元的状态和状态间转换

确定单元的每个状态的预期结果,以及确认这些结果所必须的内容

考察被测试系统的需求规格说明文档以及被测试的单元,确认以前的步骤已识别出了所有可能的测试条件,如有必要可以增加附件条件

确定测试该单元的先决条件

使用上述信息生成一套测试该单元的测试用例

单元测试的数据需求

不使用真实数据

需要少量数据时可以考虑可以使用边界分析或等价类划分方法,设计模拟数据

需要大量数据时,可以使用真实数据的拷贝(对于敏感数据应适当处理),或者使用真实数据的有代表性的样本

单元测试输入

被测试系统的需求规格文档 被测试系统的设计文档 补充材料(如用户手册)

单元测试计划单元测试规范说明文档 单元测试指南 单元测试用例 空白的测试记录表格

单元测试-测试技术

针对被测单元需求的功能测试 静态测试 白盒测试 状态转换测试 性能测试

单元测试-输出

完整的被测试过的单元 单元测试证书 修正的测试用例 归档的测试数据 完成的测试结果记录表格 单元测试日志 单元测试重用包

单元测试过程

单元测试停止标准

单元测试用例设计已经通过评审

按照单元测试计划完成了所有规定单元的测试

达到了测试计划中关于单元测试所规定的覆盖率的要求

被测试的单元每千行代码必须发现至少3 个错误

软件单元功能与设计一致

在单元测试中发现的错误已经得到修改, 各级缺陷修复率达到标准

集成测试-概述

进行系统测试之前证明组成被测试系统的各个模块以正确、稳定、一致的方式接口和交互。由开发组/测试组完成 黑盒技术

集成测试覆盖的区域

从其它互操作模块调用一个模块 在互操作模块间正确传输数据 兼容性 性能问题

执行集成测试遵循的方法

识别组成一个完整系统的模块间的关系

评审模块间的交互和通信需求,识别出模块间的接口

使用上述信息产生一套测试该模块的测试用例