全文检索lucene中文分词的一些总结
2010-03-23 14:53
全文检索几乎是所有内容管理系统软件(CMS)必备的功能,在对公司的CMS产品的开发维护过程中,全文检索始终是客户重点关注的模块,为满足客户各式各样越来越高的要求,对全文检索曾做过一段时间相对深入的研究,尤其是对分词机制,趁如今换工作比较空闲之际做个简单总结。
1、 什么是中文分词
学过英文的都知道,英文是以单词为单位的,单词与单词之间以空格或者逗号句号隔开。而中文则以字为单位,字又组成词,字和词再组成句子。所以对于英文,我们可以简单以空格判断某个字符串是否为一个单词,比如I love China,love 和 China很容易被程序区分开来;但中文“我爱中国”就不 一样了,电脑不知道“中国”是一个词语还是“爱中”是一个词语。把中文的句子切分成有意义的词,就是中文分词,也称切词。我爱中国,分词的结果是:我 爱 中国。
目前中文分词还是一个难题———对于需要上下文区别的词以及新词(人名、地名等)很难完美的区分。国际上将同样存在分词问题的韩国、日本和中国并称为CJK(Chinese Japanese Korean),对于CJK这个代称可能包含其他问题,分词只是其中之一。
2、 中文分词的实现
Lucene自带了几个分词器WhitespaceAnalyzer, SimpleAnalyzer, StopAnalyzer, StandardAnalyzer, ChineseAnalyzer, CJKAnalyzer等。前面三个只适用于英文分词,StandardAnalyzer对可最简单地实现中文分词,即二分法,每个字都作为一个词,这样分出来虽然全面,但有很多缺点,比如,索引文件过大,检索时速度慢等。ChineseAnalyzer是按字分的,与StandardAnalyzer对中文的分词没有大的区别。 CJKAnalyzer是按两字切分的, 比较武断,并且会产生垃圾Token,影响索引大小。以上分词器过于简单,无法满足现实的需求,所以我们需要实现自己的分词算法。
现有的中文分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。后面两者只是听说过,没深入接触过,这里着重讲下基于字符串匹配的分词方法。
基于字符串匹配的分词方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”机 器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。按照扫描方向的不同,串匹配分词方法可以分为正向匹配和逆向匹配;按照不 同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相结合的一体化 方法。常用的几种机械分词方法如下:
1)正向最大匹配法(由左到右的方向);
2)逆向最大匹配法(由右到左的方向);
3)最少切分(使每一句中切出的词数最小)。
这种分词方法,首先要有一个词库。一个好的分词器需要一个庞大优良的词库以及设计优秀的数据结构来缓存该词库。下面使用一个名为MMAnalyzer的开源分词器做简单的分词演示,然后大致讲下怎么样基于lucene实现自己的分词器。MMAnalyzer 简介:
1、支持英文、数字、中文(简体)混合分词
2、常用的数量和人名的匹配
3、超过22万词的词库整理
4、实现正向最大匹配算法
5、词典的动态扩展
6、分词效率: 第一次分词需要1-2秒(读取词典),之后速度基本与Lucene自带分词器持平。内存消耗: 30M+
MMAnalyzer的分词算法如下:
1、读取一个字,然后联想,直到联想到不能为止。如果当前可以构成词,便返回一个Token。
2、如果当前不能构成词语,便回溯到最近的可以构成词语的节点,返回。
3、最差的情况就是返回第一个单字。
4、然后从返回结果的下一个字重新开始联想。
public static void main(String[] args) throws IOException {
String text = "2008年前三季度,美国次贷危机升级,全球金融持续动荡,世界经济增长全面放缓,全球经济增长动力减弱,世界主要经济体与新兴市场正面临巨大的外部冲击。";
Analyzer analyzer = new MMAnalyzer();
TokenStream stream = analyzer.tokenStream("xxx", new StringReader(text));
while (true) {
Token token = stream.next();
if (token == null) break;
System.out.print("[" + token.termText() + "] ");
}
}
返回结果如下:
[2008] [年前] [三季度] [美国] [次] [贷] [危机] [升级] [全球] [金融] [持续] [动荡] [世界经济] [增长] [全面] [放] [缓] [全球] [经济] [增长] [动力] [减弱] [世界] [主要] [经济] [体] [新兴] [市场] [正] [面临] [巨大] [外部] [冲击]
MMAnalyzer分词器有两个构造函数MMAnalyzer()和MMAnalyzer(int n)。
MMAnalyzer():采用正向最大匹配的中文分词算法,相当于分词粒度等于0。
MMAnalyzer(int n):参数为分词粒度:当字数 >= n,且能成词,该词就被切分出来。
另外MMAnalyzer还有以下常用方法:
addDictionary(FileReader reader):增加一个新词典,采用每行一个词的读取方式。
addWord(String newWord):往词库里新增加一个新词。
其中addWord方法测试了好像只会把新词加入到缓存了的词库中,并不会并永久性写入词典文件中。如果需要写入词典文件,可再按以下方法处理。
URL dictionaryPath = URLUtil.getResourceFileUrl("resources/dictionary.txt");
if(dictionaryPath != null){
// new FileWriter(String, boolean) 第二个参数true表示追加文件到尾部
BufferedWriter bw = new BufferedWriter(new FileWriter(dictionaryPath.getPath(), true));
bw.write(searchStr);//追加文件内容
bw.newLine();
bw.close();
}
当然也可自己实现分词器,实现过程很简单,首先实现一个Tokenizer(需要继承lucene包里的Tokenizer抽象类),覆写里面的next()方法,这也是lucene分词器实现的最关键的地方。然后再实现一个Analyzer(需要继承lucene包里的Analyzer抽象类),将上面实现的Tokenizer指定给该Analyzer。
3、 中文分词一些常见问题及解决办法
3.1 分词的缺失
比如同义词。用户搜 "北京 饭店" 能不能把" 首都 饭店"也列出来呢? 这个分词器无能为力。所以这个问题,解决办法就只能是在分词之前,我们再加一层:同义词返回模块。这个思路很不错,也比较简单,很容易实现。关键是词库的建立。
3.2 优先级
例如:我还清晰地记得我们坐在江边聊天的情境。
分出来是: 我 还清 晰 地 记得 我们 坐在 江边 聊天 的 情境。
结果: 清晰 被拆开了。
这个是基于词库的分词算法固有的问题。没有很好的解决方法。有统计结果表明,单纯使用正向最大匹配的错误率为1/169,单纯使用逆向最大匹配的错误率为1/245。有一种解决方案是正向匹配结果后再逆向匹配一次,然后比较结果,消除歧义。最好加入词汇概率统计功能.有歧义的用概率决定。
3.3 最大匹配的问题
比如搜索“三季度”这个词,词库里同时有 “三季度” 和 “季度”这两个词,分词时按最大正向匹配 则 “三季度” 被分成一个完整的词,按 “季度” 去检索反而搜不出来了。
解决办法:缩短分词粒度,当字数等于或超过该粒度参数,且能成词,该词就被切分出来。
3.4 新词识别
新词,也就是那些在字典中都没有收录过,但又确实能称为词的那些词。最典型的是人名,人可以很容易理解句子“王军虎去广州了”中,“王军虎”是个词,因为是一个人的名字,但要是让计算机去识别就困难了。如果把“王军虎”做为一个词收录到字典中去,全世界有那么多名字,而且每时每刻都有新增的人名,收录这些人名本身就是一项巨大的工程。即使这项工作可以完成,还是会存在问题,例如:在句子“王军虎头虎脑的”中,“王军虎”还能不能算词?
新词中除了人名以外,还有机构名、地名、产品名、商标名、简称、省略语等都是很难处理的问题,而且这些又正好是人们经常使用的词,因此对于搜索引擎来说,分词系统中的新词识别十分重要。目前新词识别准确率已经成为评价一个分词系统好坏的重要标志之一。
其他的还有如热度、高亮显示等问题。总言之,中文分词机制的好坏,直接影响到用户对搜索结果的满意度,所以如何分词是搜索引擎的重中之重。
2010年11月23日星期二
2010年11月17日星期三
软件测试
软件测试
培训目的
什么是软件测试
如何做好软件测试
什么是软件测试
软件测试是以发现软件的缺陷为目的,使软件运行,将软件运行中所产生的危险性降低到允许的范围,是一个为发现错误而执行程序的过程
软件的缺陷是对软件产品预期属性的偏离现象。包括对产品规格说明书的偏离;对客户/用户的期望的偏离,客户/用户的要求没有纳入软件产品中(可能是产品规格说明书说明时的遗漏,也可能是软件实现的问题)。
软件测试的几个基本概念
单体测试:是指对单个模块或者是一个函数等更小单位的测试
集成测试:是指多个模块组合起来,或者一个子系统的所有模块都结合起来后进行的测试
系统测试:是指整个系统的所有子系统都结合起来以后进行的测试
回归测试:是指修复或调整好软件环境之后进行测试
差分测试:是指当测试时间较短时(不足以进行一遍系统测试时),而只对整个系统中新变更或者新追加功能的相关部分的测试
手动测试:是指测试人员,根据功能规格说明书、编写的测试大纲或者其他测试文档,直接运行程序而完成的测试
自动化测试:是指测试人员,使用自动测试工具、或者编写测试脚本,让程序自动运行而进行的测试
软件产品周期简介
根据需求文档进行分析制定测试策略和测试计划
分别根据需求分析、概要设计和详细设计的输出进行测试设计
使用测试设计文档,进行各个阶段的测试执行
产品Release之后进行测试工作的总结
当软件产品周期,需求文档变化时,将重新进行前三个工作
测试计划的制定
主要输入:需求文档和里程碑
主要输出:测试进度的制定和采取的测试策略
测试进度内容包括测试设计开始和结束的时间,测试执行的开始和结束时间,测试总结开始和结束时间,还包括测试设计、测试执行和测试总结所花费的工作量
测试策略内容包括采取测试方法、测试资源的分配和测试中风险的控制计划
测试设计
根据测试阶段的不同,测试设计包括以下几种
系统测试的测试设计
集成测试的测试设计
性能测试的测试设计
单体测试的测试设计
其中单体测试的测试设计由开发人员完成,其他一般情况下由测试人员完成
系统测试、集成测试的 测试设计
CheckList的编写
根据需求分析文档得到软件产品应该包括的功能点(包括大小功能点),组成CheckList的第一部分,要求CheckList必须覆盖软件产品应该包括的全部功能点
理解需求分析文档得到每个功能点的细化部分,组成CheckList的第二部分,要求覆盖需求文档中所有可测试的内容
根据测试经验和业务知识,进一步分析需求分析文档,得到需求分析文档上没有描述的内容,补充CheckList的第二部分
对每个功能点的细化部分,确定其测试方法(或者测试步骤)和预计的正确测试结果
测试用例的编写
需要特殊条件才能测试的功能点,编写测试用例以对应
编写一些测试用例,以覆盖主要的功能点,以供功能验证时使用
性能测试的测试设计
根据性能指标,选择测试用例
根据需求文档得到用户明确要求的性能指标
版本升级的项目,各功能的性能指标不得低于旧版本的性能指标
模型产品,新模型各功能的性能指标以不低于旧模型的性能为要求
根据收集的性能指标,建立性能测试的CheckList
单体测试的测试设计
白盒测试的测试设计
命令覆盖
分支覆盖
路径覆盖
单体测试_白盒测试设计1
单体测试_白盒测试设计2
单体测试_黑盒测试设计
黑盒测试的测试设计
等价类划分
边界值分析
测试执行
根据测试阶段的不同,测试执行分成
单体测试的测试执行
单集成测试的测试执行
集成测试和系统测试的测试执行
性能测试的测试执行
单体测试的测试执行
根据白盒测试设计和黑盒测试设计得到测试用例
编写对待测试代码进行输入和得到输出程序,或者找到能对待测试代码进行输入和得到输出的调试方法
使用测试用例逐一输入,收集输出结果,检查输出结果是否正确
单集成测试的测试执行-1
自顶向下法
单集成测试的测试执行-2
自底向上法
集成测试和系统测试的执行-1
判定需求,执行测试设计和测试用例,填写结果
及时准确反馈产品缺陷
定期完成修改的确认
分析缺陷发生趋势,制定测试策略
需求变更时,对应变更测试设计文档
收集测试数据,分析并使用
集成测试和系统测试的执行-2
判定需求,执行测试设计和测试用例,填写结果
获得测试版本的同时要获得版本对应的测试需求,根据需求选择相关的测试设计文档和测试用例文档
根据选择的文档进行测试,要求至少完成一遍的覆盖,覆盖测试后填写测试结果(OK和NG)
完成版本的测试时,把完成的文档测试结果和该版本发现的缺陷一起提交
注意:这里提到的需要提交文档测试结果的版本一般上是比较大的版本(项目负责人决定),普通的版本之提交发现的缺陷即可
集成测试和系统测试的执行-3
及时准确反馈产品缺陷
测试中发现缺陷(包括不确定的)时,首先要进行记录,其次在进行是否缺陷的分析
当天发现的缺陷要尽量在当天完成登陆
要准确填写错误等级和再现率
错误等级
A类为严重影响系统运行(并且不可恢复)
B类为影响系统运行(可以恢复)
C类为不影响系统运行但必须修改
D类为所提建议
再现率
要求记录准确的测试和再现次数,尽量不要出现1/1的情况
再现时注意环境的正确,在已经出现缺陷的环境上继续再现的意义不大
再现前要尽量通过分析降低再现的难度和再现的步骤
集成测试和系统测试的执行-4
及时准确反馈产品缺陷
补充发现缺陷的相关信息(DEBUG信息,缺陷发生的图片,死机时的堆栈信息,发生缺陷的现场等)
集成测试和系统测试的执行-5
定期完成修改的确认
当发布新的版本到测试时,要得到该版本开发人员投入的已经修改的缺陷,进行确认
合理的分配测试时间,当测试工作量比较大时,首先完成变更点的测试,然后再进行确认测试
NotBug的及时确认
对于开发人员分配成NotBug的缺陷进行确认时,要以下面的顺序进行参考
仕样中是否有明确说明>>用户是否明确的文档说明>>其他模型的参考和自己正确的分析>>开发人员的分析
出现和开发人员无法达成一致时通过和测试负责人或者项目负责人沟通解决
对于开发人员判断错误的缺陷及时进行NG的处理,使开发人员尽快得到信息
集成测试和系统测试的执行-6
分析缺陷发生趋势,制定测试策略
集成测试和系统测试的执行-7
需求变更时,对应变更测试设计文档
对应产品开发过程中的需求变更方法,要和项目开始前的需求分析方法相同,对需求变更的部分及时修改或者填写测试设计文档
集成测试和系统测试的执行-8
收集测试数据,分析并使用
区分整个测试时间里,测试时间占用情况的分类
功能覆盖测试
脱离测试设计文档的自由测试
差分测试 (针对功能点变更进行的测试)
发现缺陷的再现测试
确认测试
开发人员调试
根据不同分类收集测试数据
根据测试时间占用情况的分类进行测试数据的收集
分析测试效率,发现问题
对于功能覆盖测试、自由测试和差分测试都是有效的测试时间,基本上90%以上的缺陷都是这个期间发现的,因此可以得到测试组以及每个测试人员的测试效率,然后再结合实际进行分析,就能得到测试组或者某个测试成员的测试状态如何
性能测试的测试执行
选择性能测试的对象,建立性能测试CheckList
收集评价用的性能数据,向CheckList进行补充
定期根据性能测试CheckList,对产品进行性能测试数据收集
提前进行性能数据的收集,以评估当前的产品是否能够达到性能要求
反馈性能数据
对提前收集的性能数据分析,评估当前的产品不能达到性能要求时立即向开发人员反馈性能数据
对性能测试阶段收集的性能数据,进行分析后提交开发人员
评估和预定的性能指标的差异
帮助开发人员分析造成性能指标差异的原因
例题
Myers问题: 读入三个整数值。这三个数值表示了一个三角形三条边的长度。程序将输出一条信息,说明该三角形是不等边三角形,等腰三角形,还是等边三角形。(并不要求写出程序)写出你认为能充分地测试这个问题的测试实例(即特定的数据集)。
(格式可写成:测试实例说明 测试实例值 期望输出)。
例题答案-1
*1 合法的不等边三角形 5 3 4 不等边三角形
*2 合法的等腰三角形 3 3 4 等腰三角形
*3 合法的等边三角形 3 3 3 等边三角形
*4 两个相同值边的互换(第一次) 50 50 25 等腰三角形
5 两个相同值边的互换(第二次) 25 50 50 等腰三角形
6 两个相同值边的互换(第三次) 50 25 50 等腰三角形
*7 一条边为0 1000 1000 0 非法
*8 一条边值为负 3 3 -4 非法
*9 两条相同边的第一次互换(非法) 5 5 10 非法
10 两条相同边的第二次互换(非法) 10 5 5 非法
11 两条相同边的第三次互换(非法) 5 10 5 非法
*12 两条较小的边长之和小于最大的边长 8 2 5 非法
13 上例的二条边第二次交换 2 8 5 非法
14 上例的二条边再次交换 2 5 8 非法
15 上例的二条边再次交换 8 5 2 非法
16 上例的二条边再次交换 5 8 2 非法
17 上例的二条边再次交换 5 2 8 非法
例题答案-2
*18 所有的边为0 0 0 0 非法
*19 第一个参数为非整数 # 3 7 非法
20 第二个参数为非整数 7 @ 8 非法
21 第三个参数为非整数 6 9 $ 非法
*22 缺少第一个参数的输入 4 5 非法
23 缺少第二个参数的输入 3 5 非法
24 缺少第三个参数的输入 3 4 非法
*25 三条边大于0,一边等于另两边之和 12 5 7 非法
26 上例的交换 12 7 5 非法
27 上例的再次交换 5 12 7 非法
28 上例的再次交换 5 7 12 非法
29 上例的再次交换 7 12 5 非法
30 上例的再次交换 7 5 12 非法
*31 三条边有最大的可能值 2147483647 2147483647 2147483647(32767) 等边
32 二条边有最大的可能值 2147483647 2147483647 1 等腰
33 一条边有最大的可能值 1 2147483647 1 非法
培训目的
什么是软件测试
如何做好软件测试
什么是软件测试
软件测试是以发现软件的缺陷为目的,使软件运行,将软件运行中所产生的危险性降低到允许的范围,是一个为发现错误而执行程序的过程
软件的缺陷是对软件产品预期属性的偏离现象。包括对产品规格说明书的偏离;对客户/用户的期望的偏离,客户/用户的要求没有纳入软件产品中(可能是产品规格说明书说明时的遗漏,也可能是软件实现的问题)。
软件测试的几个基本概念
单体测试:是指对单个模块或者是一个函数等更小单位的测试
集成测试:是指多个模块组合起来,或者一个子系统的所有模块都结合起来后进行的测试
系统测试:是指整个系统的所有子系统都结合起来以后进行的测试
回归测试:是指修复或调整好软件环境之后进行测试
差分测试:是指当测试时间较短时(不足以进行一遍系统测试时),而只对整个系统中新变更或者新追加功能的相关部分的测试
手动测试:是指测试人员,根据功能规格说明书、编写的测试大纲或者其他测试文档,直接运行程序而完成的测试
自动化测试:是指测试人员,使用自动测试工具、或者编写测试脚本,让程序自动运行而进行的测试
软件产品周期简介
根据需求文档进行分析制定测试策略和测试计划
分别根据需求分析、概要设计和详细设计的输出进行测试设计
使用测试设计文档,进行各个阶段的测试执行
产品Release之后进行测试工作的总结
当软件产品周期,需求文档变化时,将重新进行前三个工作
测试计划的制定
主要输入:需求文档和里程碑
主要输出:测试进度的制定和采取的测试策略
测试进度内容包括测试设计开始和结束的时间,测试执行的开始和结束时间,测试总结开始和结束时间,还包括测试设计、测试执行和测试总结所花费的工作量
测试策略内容包括采取测试方法、测试资源的分配和测试中风险的控制计划
测试设计
根据测试阶段的不同,测试设计包括以下几种
系统测试的测试设计
集成测试的测试设计
性能测试的测试设计
单体测试的测试设计
其中单体测试的测试设计由开发人员完成,其他一般情况下由测试人员完成
系统测试、集成测试的 测试设计
CheckList的编写
根据需求分析文档得到软件产品应该包括的功能点(包括大小功能点),组成CheckList的第一部分,要求CheckList必须覆盖软件产品应该包括的全部功能点
理解需求分析文档得到每个功能点的细化部分,组成CheckList的第二部分,要求覆盖需求文档中所有可测试的内容
根据测试经验和业务知识,进一步分析需求分析文档,得到需求分析文档上没有描述的内容,补充CheckList的第二部分
对每个功能点的细化部分,确定其测试方法(或者测试步骤)和预计的正确测试结果
测试用例的编写
需要特殊条件才能测试的功能点,编写测试用例以对应
编写一些测试用例,以覆盖主要的功能点,以供功能验证时使用
性能测试的测试设计
根据性能指标,选择测试用例
根据需求文档得到用户明确要求的性能指标
版本升级的项目,各功能的性能指标不得低于旧版本的性能指标
模型产品,新模型各功能的性能指标以不低于旧模型的性能为要求
根据收集的性能指标,建立性能测试的CheckList
单体测试的测试设计
白盒测试的测试设计
命令覆盖
分支覆盖
路径覆盖
单体测试_白盒测试设计1
单体测试_白盒测试设计2
单体测试_黑盒测试设计
黑盒测试的测试设计
等价类划分
边界值分析
测试执行
根据测试阶段的不同,测试执行分成
单体测试的测试执行
单集成测试的测试执行
集成测试和系统测试的测试执行
性能测试的测试执行
单体测试的测试执行
根据白盒测试设计和黑盒测试设计得到测试用例
编写对待测试代码进行输入和得到输出程序,或者找到能对待测试代码进行输入和得到输出的调试方法
使用测试用例逐一输入,收集输出结果,检查输出结果是否正确
单集成测试的测试执行-1
自顶向下法
单集成测试的测试执行-2
自底向上法
集成测试和系统测试的执行-1
判定需求,执行测试设计和测试用例,填写结果
及时准确反馈产品缺陷
定期完成修改的确认
分析缺陷发生趋势,制定测试策略
需求变更时,对应变更测试设计文档
收集测试数据,分析并使用
集成测试和系统测试的执行-2
判定需求,执行测试设计和测试用例,填写结果
获得测试版本的同时要获得版本对应的测试需求,根据需求选择相关的测试设计文档和测试用例文档
根据选择的文档进行测试,要求至少完成一遍的覆盖,覆盖测试后填写测试结果(OK和NG)
完成版本的测试时,把完成的文档测试结果和该版本发现的缺陷一起提交
注意:这里提到的需要提交文档测试结果的版本一般上是比较大的版本(项目负责人决定),普通的版本之提交发现的缺陷即可
集成测试和系统测试的执行-3
及时准确反馈产品缺陷
测试中发现缺陷(包括不确定的)时,首先要进行记录,其次在进行是否缺陷的分析
当天发现的缺陷要尽量在当天完成登陆
要准确填写错误等级和再现率
错误等级
A类为严重影响系统运行(并且不可恢复)
B类为影响系统运行(可以恢复)
C类为不影响系统运行但必须修改
D类为所提建议
再现率
要求记录准确的测试和再现次数,尽量不要出现1/1的情况
再现时注意环境的正确,在已经出现缺陷的环境上继续再现的意义不大
再现前要尽量通过分析降低再现的难度和再现的步骤
集成测试和系统测试的执行-4
及时准确反馈产品缺陷
补充发现缺陷的相关信息(DEBUG信息,缺陷发生的图片,死机时的堆栈信息,发生缺陷的现场等)
集成测试和系统测试的执行-5
定期完成修改的确认
当发布新的版本到测试时,要得到该版本开发人员投入的已经修改的缺陷,进行确认
合理的分配测试时间,当测试工作量比较大时,首先完成变更点的测试,然后再进行确认测试
NotBug的及时确认
对于开发人员分配成NotBug的缺陷进行确认时,要以下面的顺序进行参考
仕样中是否有明确说明>>用户是否明确的文档说明>>其他模型的参考和自己正确的分析>>开发人员的分析
出现和开发人员无法达成一致时通过和测试负责人或者项目负责人沟通解决
对于开发人员判断错误的缺陷及时进行NG的处理,使开发人员尽快得到信息
集成测试和系统测试的执行-6
分析缺陷发生趋势,制定测试策略
集成测试和系统测试的执行-7
需求变更时,对应变更测试设计文档
对应产品开发过程中的需求变更方法,要和项目开始前的需求分析方法相同,对需求变更的部分及时修改或者填写测试设计文档
集成测试和系统测试的执行-8
收集测试数据,分析并使用
区分整个测试时间里,测试时间占用情况的分类
功能覆盖测试
脱离测试设计文档的自由测试
差分测试 (针对功能点变更进行的测试)
发现缺陷的再现测试
确认测试
开发人员调试
根据不同分类收集测试数据
根据测试时间占用情况的分类进行测试数据的收集
分析测试效率,发现问题
对于功能覆盖测试、自由测试和差分测试都是有效的测试时间,基本上90%以上的缺陷都是这个期间发现的,因此可以得到测试组以及每个测试人员的测试效率,然后再结合实际进行分析,就能得到测试组或者某个测试成员的测试状态如何
性能测试的测试执行
选择性能测试的对象,建立性能测试CheckList
收集评价用的性能数据,向CheckList进行补充
定期根据性能测试CheckList,对产品进行性能测试数据收集
提前进行性能数据的收集,以评估当前的产品是否能够达到性能要求
反馈性能数据
对提前收集的性能数据分析,评估当前的产品不能达到性能要求时立即向开发人员反馈性能数据
对性能测试阶段收集的性能数据,进行分析后提交开发人员
评估和预定的性能指标的差异
帮助开发人员分析造成性能指标差异的原因
例题
Myers问题: 读入三个整数值。这三个数值表示了一个三角形三条边的长度。程序将输出一条信息,说明该三角形是不等边三角形,等腰三角形,还是等边三角形。(并不要求写出程序)写出你认为能充分地测试这个问题的测试实例(即特定的数据集)。
(格式可写成:测试实例说明 测试实例值 期望输出)。
例题答案-1
*1 合法的不等边三角形 5 3 4 不等边三角形
*2 合法的等腰三角形 3 3 4 等腰三角形
*3 合法的等边三角形 3 3 3 等边三角形
*4 两个相同值边的互换(第一次) 50 50 25 等腰三角形
5 两个相同值边的互换(第二次) 25 50 50 等腰三角形
6 两个相同值边的互换(第三次) 50 25 50 等腰三角形
*7 一条边为0 1000 1000 0 非法
*8 一条边值为负 3 3 -4 非法
*9 两条相同边的第一次互换(非法) 5 5 10 非法
10 两条相同边的第二次互换(非法) 10 5 5 非法
11 两条相同边的第三次互换(非法) 5 10 5 非法
*12 两条较小的边长之和小于最大的边长 8 2 5 非法
13 上例的二条边第二次交换 2 8 5 非法
14 上例的二条边再次交换 2 5 8 非法
15 上例的二条边再次交换 8 5 2 非法
16 上例的二条边再次交换 5 8 2 非法
17 上例的二条边再次交换 5 2 8 非法
例题答案-2
*18 所有的边为0 0 0 0 非法
*19 第一个参数为非整数 # 3 7 非法
20 第二个参数为非整数 7 @ 8 非法
21 第三个参数为非整数 6 9 $ 非法
*22 缺少第一个参数的输入 4 5 非法
23 缺少第二个参数的输入 3 5 非法
24 缺少第三个参数的输入 3 4 非法
*25 三条边大于0,一边等于另两边之和 12 5 7 非法
26 上例的交换 12 7 5 非法
27 上例的再次交换 5 12 7 非法
28 上例的再次交换 5 7 12 非法
29 上例的再次交换 7 12 5 非法
30 上例的再次交换 7 5 12 非法
*31 三条边有最大的可能值 2147483647 2147483647 2147483647(32767) 等边
32 二条边有最大的可能值 2147483647 2147483647 1 等腰
33 一条边有最大的可能值 1 2147483647 1 非法
2010年11月8日星期一
english word
Sporting house 妓院(不是体育室)
Dead president 美钞(不是死了的总统)
Lover 情人(不是爱人)
Busboy 餐馆勤杂工(不是公汽售票员)
Busybody 爱管闲事的人(不是大忙人)
Dry goods 纺织品 谷物(不是干货)
Heart man 换心人(不是有心人)
Mad doctor精神病科医生(不是发疯的医生)
Eleventh hour最后时刻(不是十一点)
Blind date(由第三者安排的)男女初次见面(并非盲目的约会或者是瞎约会)
Personal remark人身攻击(并非个人评论)
Sweet water淡水(不是糖水或者甜水)
Confidence man骗子(不是信得过的人)
Criminal lawyer 刑事律师(不是犯罪的律师)
Service station加油站(不是服务站)
Rest room厕所(不是休息室)
Dressing room化妆室(不是试衣间或者更衣室)
Horse sense常识(不是马的感觉)
Capital idea 好主意(不是资本主义思想)
Familiar talk 庸俗的交谈(不是熟悉的谈话)
Black tea红茶
Black art 妖术(不是黑色艺术)
Black stranger 完全陌生的人(不是陌生的黑人)
White coal (作动力来源用的)水
White man忠实可靠的人(不是皮肤白色的人)
Yellow book黄皮书(法国政府报告书,以黄纸为封,不是黄色书籍)
Red tape 官僚习气(不是红色带子)
Green hand 新手
Blue stocking 女学者,女才子(不是蓝色长筒袜)
China policy 对华政策(不是中华政策)
Chinese dragon 麒麟(不是中国龙)
American beauty 一种玫瑰,名叫美丽动人(不是美国美女)
English disease 软骨病(不是英国病)
Indian summer指的是秋天结束到冬天之前温暖的天气---》中国话 秋老虎 (谢谢ekin0906更正)
Greek gift 害人的礼品(不是希腊的礼物)
Spanish athlete 吹牛的人(不是西班牙的运动员)
French chalk 滑石粉(不是法国粉笔)
Pull ones leg 开玩笑(不是拉后腿)
In ones birthday suit 赤身裸体(不是穿着生日礼服)
Eat ones words 收回前言(不是食言)
An apple of love 西红柿(不是爱情之果)
Handwriting on the wall 不祥之兆(不是大字报)
Bring down the house 博得满堂喝彩(不是推倒房子)
Have a fit 勃然大怒(不是试穿)
Make ones hair stand on end 令人毛骨悚然,恐惧(不是令人发指,气愤)
Be taken in 受骗,上当(不是被接纳)
Think a great deal of oneself 高看或者看重自己(不是为自己想的很多)
Pull up ones socks 鼓起勇气(不是提上袜子)
Have the heart to do 用于否定句,忍心做(不是有心做或者有意做)
What a shame 多可惜,真遗憾(不是多可耻)
You don’t say 是吗?(不是你别说)
You can say that again 说的好(不是你别说)
I haven’t slept better 我睡得很好(不是我从未睡好过)
You can’t be too careful in your work 你工作越仔细越好(不是你工作不能太仔细)
It has been 4 years since I smoked 我戒烟4年了(不是我抽烟4年了)
All his friends did not turn up 他的朋友没全到(不是他的朋友全没到)
People will be long forgetting her 人们在很长时间内会记住她的(不是人们会永远忘记她)
He was only too pleased to let them go 他很乐意让他们走(不是他,不愿让他们走太高兴了)
It can’t be less interesting 它无聊极了(不是它不可能没有趣)
Dead president 美钞(不是死了的总统)
Lover 情人(不是爱人)
Busboy 餐馆勤杂工(不是公汽售票员)
Busybody 爱管闲事的人(不是大忙人)
Dry goods 纺织品 谷物(不是干货)
Heart man 换心人(不是有心人)
Mad doctor精神病科医生(不是发疯的医生)
Eleventh hour最后时刻(不是十一点)
Blind date(由第三者安排的)男女初次见面(并非盲目的约会或者是瞎约会)
Personal remark人身攻击(并非个人评论)
Sweet water淡水(不是糖水或者甜水)
Confidence man骗子(不是信得过的人)
Criminal lawyer 刑事律师(不是犯罪的律师)
Service station加油站(不是服务站)
Rest room厕所(不是休息室)
Dressing room化妆室(不是试衣间或者更衣室)
Horse sense常识(不是马的感觉)
Capital idea 好主意(不是资本主义思想)
Familiar talk 庸俗的交谈(不是熟悉的谈话)
Black tea红茶
Black art 妖术(不是黑色艺术)
Black stranger 完全陌生的人(不是陌生的黑人)
White coal (作动力来源用的)水
White man忠实可靠的人(不是皮肤白色的人)
Yellow book黄皮书(法国政府报告书,以黄纸为封,不是黄色书籍)
Red tape 官僚习气(不是红色带子)
Green hand 新手
Blue stocking 女学者,女才子(不是蓝色长筒袜)
China policy 对华政策(不是中华政策)
Chinese dragon 麒麟(不是中国龙)
American beauty 一种玫瑰,名叫美丽动人(不是美国美女)
English disease 软骨病(不是英国病)
Indian summer指的是秋天结束到冬天之前温暖的天气---》中国话 秋老虎 (谢谢ekin0906更正)
Greek gift 害人的礼品(不是希腊的礼物)
Spanish athlete 吹牛的人(不是西班牙的运动员)
French chalk 滑石粉(不是法国粉笔)
Pull ones leg 开玩笑(不是拉后腿)
In ones birthday suit 赤身裸体(不是穿着生日礼服)
Eat ones words 收回前言(不是食言)
An apple of love 西红柿(不是爱情之果)
Handwriting on the wall 不祥之兆(不是大字报)
Bring down the house 博得满堂喝彩(不是推倒房子)
Have a fit 勃然大怒(不是试穿)
Make ones hair stand on end 令人毛骨悚然,恐惧(不是令人发指,气愤)
Be taken in 受骗,上当(不是被接纳)
Think a great deal of oneself 高看或者看重自己(不是为自己想的很多)
Pull up ones socks 鼓起勇气(不是提上袜子)
Have the heart to do 用于否定句,忍心做(不是有心做或者有意做)
What a shame 多可惜,真遗憾(不是多可耻)
You don’t say 是吗?(不是你别说)
You can say that again 说的好(不是你别说)
I haven’t slept better 我睡得很好(不是我从未睡好过)
You can’t be too careful in your work 你工作越仔细越好(不是你工作不能太仔细)
It has been 4 years since I smoked 我戒烟4年了(不是我抽烟4年了)
All his friends did not turn up 他的朋友没全到(不是他的朋友全没到)
People will be long forgetting her 人们在很长时间内会记住她的(不是人们会永远忘记她)
He was only too pleased to let them go 他很乐意让他们走(不是他,不愿让他们走太高兴了)
It can’t be less interesting 它无聊极了(不是它不可能没有趣)
订阅:
博文 (Atom)