把测试人员的需要掌握的技能细分,可以划分成下四类。如图3.5
1.业务知识
对业务知识了解的越多,测试越贴近用户的实际需求,并且测试发现的缺陷也是 ,并且测试发现的缺陷也是用户非常关注的缺陷,同时还是项目经理、开发人员都会认为很重要的缺陷。
2.产品设计知识
测试人员对与软件产品相关信息了解越多,对测试越有利,软件的架构方面的信息了解的越多,越有利于把测试进行的更深入。
3.测试人员需要了解软件架构知识
如果不了解软件架构知识,则很难有效的帮助开发人员定位性能瓶颈。很难帮助开发人员解决性能问题。
4.测试人员需要了解统一建模语言
现在大部分软件开发组织都在使用统一的建模语言(UML)指导设计和开发。其实UML对测试也有指导意义,测试人员也非常必要学习一下UML知识。
UML中的用例图可以指导测试人员进行功能测试。
类图可以指导单元测试。
状态图、协作图和活动图可以指导测试用例的设计。
顺序图可以用于系统测试、流程测试。
构件图可以用于指导单元测试和回归测试。
配置图可以指导性能测试、环境测试、兼容性测试等。
5.测试人员的“武器”
优秀的测试人员无一例外地掌握了多样的测试工具,在适当的时候派上用场。下面介绍一些测试用的工具。
6.测试人员需要掌握的测试工具
不同的项目采用的技术手段可能不一样,采用的平台、开发工具、语言、控件也会不完全一样。
这可能导致某个测试方法、测试工具在项目A很好用,但是到了项目B就无效了。
例如:项目A中使用LoadRunner可以录制脚本,而到了项目B就录制不下来,原因有可能是不同项目的产品采用的协议是不一样的。
在项目A可能是B/S结构,采用HTTP协议,而到了项目B可能是C/S结构,使用的ADD.NET2.0协议。
7.测试需要掌握开发工具
比如,如果要进行白盒测试,对开发工具的掌握就必不可少了。
注: LoadRunner,是一种预测系统行为和性能的负载测试工具。
通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,
LoadRunner能够对整个企业架构进行测试。企业使用LoadRunner能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。
LoadRunner可适用于各种体系架构的自动负载测试,能预测系统行为并评估系统性能。
8.用户心理学
测试应该始终站在用户、使用者的角度考虑问题,而不应该站在开发人员、实现者的角度考虑问题。因此,必须掌握用户心理模型、用户操作习惯等。
9.界面设计中的3种模型
- 设计者模型通常关心的是对象、表现、交互过程等。
- 用户模型通常关注的是目标、信心、情绪等。
- 实现者模型关注的数据结构、算法、库等界面实现时要考虑的问题
10.人机交互认知心理学
- 一致性:指是从任务完成、信息传达、界面操作和控制等方面应该与用户理解和熟悉的模式jing尽量保持一致。
- 兼容性:指的是用户期望和界面设计的实现之间要兼容。
- 适应性:用户应该处于控制地位,因此界面应该多方面的适应用户。
- 指导性:通过任务提示和及时的反馈信息来指导用户,需要做到“以用户为中心”。
- 结构性:界面设计应该是结构化的,以减少复杂度。
- 经济型:界面要用做少的步骤来实现一个用于支持用户业务的操作。
11.脚本语言
脚本语言受到大部分测试人员的欢迎,例如:Perl,Python,Ruby等,因为他们简单、易用、有效、程序的产量高,能用做少的代码实现最多的功能。
我们来对比一下C++程序与 Python程序的区别,下面用python编写代码
先看python代码:
if __name__ == '__main__': file_name = input('请输入要查找的文件名:') try: in_file = open(file_name, 'r', encoding='utf-8') lines = in_file.readlines() tag_tok = '' while tag_tok.upper() != 'Q': tag_tok = input('输入您要查找的字符(Q for quit):') if tag_tok.upper() != 'Q': count = 0 line_no = 0 for line in lines: line_no += 1 inline_cnt = line.count(tag_tok) count = count + inline_cnt if inline_cnt > 0 : print('找到字符%s %d次,在行:%d' % (tag_tok,inline_cnt,line_no)) print(line) print('##########################') print('总共找到%s %d次' % (tag_tok,count)) in_file.close() except: print('找不到文件%s' % (file_name))
再看C++代码(是不是要多出30多行):
#include <io.h> void find_fold(const char* mainDir, std::vector<string> &files) { files.clear(); intptr_t hFile; //win10 need long long or intptr_t, long will show error _finddata_t fileinfo; char findDir[250]; strcpy_s(findDir, mainDir); strcat_s(findDir, "\\*.*"); if ((hFile = _findfirst(findDir, &fileinfo)) != -1) { do { if ((fileinfo.attrib & _A_SUBDIR))//find fold { if (fileinfo.name[0] == '.') //avoid . .. continue; char filename[_MAX_PATH]; strcpy_s(filename, mainDir); strcat_s(filename, "\\"); strcat_s(filename, fileinfo.name); string temfilename = filename; files.push_back(temfilename); cout << temfilename << endl; } } while (_findnext(hFile, &fileinfo) == 0); _findclose(hFile); } } void find_file(const char* mainDir, std::vector<string> &files) { files.clear(); intptr_t hFile; //win10 need long long or intptr_t, long will show error _finddata_t fileinfo; char findDir[250]; strcpy_s(findDir, mainDir); strcat_s(findDir, "\\*.jpg"); if ((hFile = _findfirst(findDir, &fileinfo)) != -1) { do { if (!(fileinfo.attrib & _A_SUBDIR))//find fold { if (fileinfo.name[0] == '.') //avoid . .. continue; char filename[_MAX_PATH]; strcpy_s(filename, mainDir); strcat_s(filename, "\\"); strcat_s(filename, fileinfo.name); string temfilename = filename; files.push_back(temfilename); cout << temfilename << endl; } } while (_findnext(hFile, &fileinfo) == 0); _findclose(hFile); } } void main() { std::vector<string> files; find_fold(trainDir, files); //find folder first for (auto d : files) { std::vector<string> jpgs; find_file(d.c_str(), jpgs); //find file in each folder } }
12.文档能力
一个优秀的测试人员应该善于利用这些书面沟通方式来表达自己的观点、体现自己的能力和价值。
我们可以对比表3-2所示的对于同一个Bug两份报告的不同描述方式,想象一下开发人员会喜欢哪一个?
摘自:《软件测试技术大全》