这里没有软件测试的泛泛理论,只有博主的最佳实践。 博主的研究方向为静态分析和性能测试,致力于各种测试工具的引入、评估和开发。 本博的测试文章均为作者原创,转载请务必注明出处。

语义搜索 and 语义分析

上一篇 / 下一篇  2008-07-30 20:59:55 / 个人分类:感悟

上周恢复硬盘数据时,干巴巴的等着没事干,随手翻了翻最新一期的《电脑报》,其中一则新闻有点意思。大概标题是《微软收购语义搜索引擎Powerset,欲抗衡Google》,刚才在sina和sohu找了一下相关的新闻,如下:

http://tech.sina.com.cn/i/2008-06-27/07352287530.shtml

http://it.sohu.com/20080702/n257871791.shtml

http://it.sohu.com/20080702/n257871704.shtml

Powerset的搜索引擎是基于“自然语言”的,也就是所谓的语义,从理论上来讲,基于“语义”的“自然语言”搜索比Google和Baidu现有的基于“关键字”的搜索更先进,它更接近于人类的语言,so 搜出来的结果更准确,比如我想知道“刘翔曾输给过哪位黑人选手?”,采用Google现有的“关键字”搜索,虽说出来海量的结果,但这些都不是我要的,换句话说,它都是没有价值的。

举个形象的例子来说,如果你是面试官,你问应聘者“你认为白盒测试有什么缺点?”,应聘者回答了一大堆“白盒测试”概念和自己的“缺点”,你对这样的答案能满意吗?而Google现有的搜索引擎从原理上讲就是这样的。

既然Powerset的基于“语义”的搜索引擎这么好,为什么那么多人都不知道它?就是因为目前它还有一些技术上的难题没有解决,而且我估计未来五年都不一定能解决的,就是它的速度——太慢,还没有办法适应当前网络上海量的信息,所以目前它只是应用于“维基百科”网站的搜索,尚不能扩展到整个网络。微软此次收购Powerset,八成是想努努力,扩展到整个Internet,从而和Google决一死战。

写到这,我想起了另外一个和“语义”有关的话题——语义分析。

PolySpace分析c/c++代码,强调自己使用的是语义分析技术,它分析代码的行为,就和程序员当时写代码时想的一样,所以它号称“能发现100%的代码错误,绝不会漏报”,可惜的是,它的分析速度奇慢无比,虽说没有漏报,但误报特别多。

而Coverity和Klocwork采用的技术有点类似基于“关键词”的技术,如检查“内存泄漏”,就重点观察malloc、new等关键字,一旦你把内存申请函数换个名,它们就不知道了,哈哈。其优点也很明显,就是分析速度奇快,但它们均不能保证“没有漏报”,只能强调自己“误报率特别低”。真的是各有千秋!

出差无聊时的一点小小的瞎猜想,不一定正确,仅供消遣!


TAG: 感悟

Visual Unit 官方博客 引用 删除 VisualUnit   /   2008-08-01 16:13:48
呵呵,楼主是值得交的朋友,有机会聊聊。这个号是我们公司公用的,楼主博客又是常排最前面的专家博客,访问自然多了。
不要误会我抵毁别人的产品。我们对待同类产品的原则是:人家做得好的,我们“应该赞赏,不能模仿”,人家做得不好的,我们“可以评价技术,不能评价产品”。没有这点子器量,我们也不可能做好自己的产品。
但我对过份的浮夸和误导很反感。如果只看工具和技术方面的介绍文章,似乎单元测试是很容易做的,但实际上呢?很少企业做得了,这就说明其中有很多的浮夸和误导。我觉得作为厂商也罢,做培训或咨询的专家也罢,都要客观地评价技术与工具,不能误导用户,只有用户真正取得了效益,才有厂商与专家的生存和发展空间。
‘楼下的看仔细了,人家说的是“能发现100%的代码错误”,而不是功能错误。’我第一眼看到这句话时,愣了一下,代码错误不包括代码中的功能错误?百度了一下,没找到“代码错误”的权威定义。按照字面来理解,“代码错误”,意思是“代码中包含的错误”,当然包括代码包含的功能错误,代码没有实现正确的功能就不是代码错误,只有数组可能越界、内存泄漏等才是代码错误?这好象说不过去。我没有做过调查,但我相信,多数人看到“能发现100%的代码错误”这句话时,都会认为是指“能发现代码中的所有错误”,如果我这个说法是成立的,那么这种说法算是误导不为过吧?
数组越界,我还是认为是“语法特征错误”,数组具有维数,维数决定了下标的合法范围,这就是语法特征。其他如除法运算中被除数不能为0,C/C++条件表达式中一般只用比较操作符不用赋值操作符,动态申请的内存要释放等,都具有语法特征。
huior的测试烩 引用 删除 huior   /   2008-08-01 09:56:08
另补充一句:谢谢VisualUnit 一直关注本站。你们的VisualUnit 工具我很早就有过了解,很不错的,继续努力。
huior的测试烩 引用 删除 huior   /   2008-08-01 09:54:03
楼下的看仔细了,人家说的是“能发现100%的代码错误”,而不是功能错误。通常的代码错误,如:数组可能越界、内存泄漏等,另我不同意诸如“数组越界”等只是语法特征的错误。

功能错误当然只能靠人,目前没有任何工具能理解你的需求。
Visual Unit 官方博客 引用 删除 VisualUnit   /   2008-07-31 11:31:50
工具不可能自动了解程序的功能,程序功能是人为的设计,这里目前无法突破的基本现实。PolySpace仍然是静态分析,能发现的也只能是语法特征错误,可能比一般静态方法发现的错误多一些,但不能超过“语法特征错误”这个范围,只不过在分析语法特征时考虑了上下文。
Visual Unit 官方博客 引用 删除 VisualUnit   /   2008-07-31 11:19:01
它号称“能发现100%的代码错误,绝不会漏报”
胡吹乱吹,像这种最简单代码中最简单错误,它能发现吗:
int func(int a, int b){return a-b;};这是加法函数,错误是加号写成了减号。
如果没有人工干预,给它分析一百年,它也找不出这种错误,它怎么知道我要实现的是加法功能?
 

评分:0

我来说两句

Open Toolbar