让调研再充分些

算法在被应用于不同领域的过程中,得到了扩展

Posted by Helena Wang on October 28, 2018

让调研再充分些

前因

这两周一直在准备一个和几位外校老师的交流会,交流会的目的就是请老师们了解下我们在做的东西,给予些指导。交流会结束后,我发现老师对我们每个人都说了“调研再充分些的”的建议。

之所以自己的调研被老师认为不够充分,我觉得有两方面的原因。第一是自己所在的环境并没有很浓厚的科研氛围,一线做科研的老师太少,因此我受到的科研训练就比较少。第二可能是和自己的心态有关。调研到一定程度后,我就会构思自己的方法。但是每构思一种后,我就会再去找有没有人已经用过我的这种方法了,结果大多是失望而归,不仅有人做过,而且人家还想得比我清楚、做得比我完善。这是赤裸裸的失败体验啊。陈海贤老师说,创造新的成功的体验,才是改变的开始。但这件事本身就很有难度了,而且我觉得是可遇而不可求的。

前两天读万维钢老师的文章,他发现很多CEO做重大决策前是没有调研的。但是人家不是在做科研,人家是做产品,可以通过用户的反馈来不断改进、渐进式地做东西。而科研不行,你有最终用户吗,能收集用户反馈并不断迭代吗?你所做的东西在你开始做的那一刻是新的,但没法保证在做出来之后还是没有人和你做一样的呀。我觉得这个反馈的过程太慢了。而且我觉得计算机领域的科研不同于自然科学,它的目的通常不是去发现什么世界本身就有的规律,而是去人为创造一个世界上没有的东西,用来解决实际问题。

后果

信马由缰的话到此结束。对于自己的课题的调研这个事,我近期还在做。可是博客却迟迟没能写好。目前的调研主要集中在两个方面:

  1. 图相似度计算
  2. 程序相关的图(如PDG, CFG)

把这两点结合起来的现有研究工作已经不少了。后面会单独讲一讲我读过后收获很大的论文。这里粗略地说一下最近读到的两篇不错的论文。

第一篇来自韩国的Seoul National University,2016年出品[1],基于PDG和遗传算法计算代码相似度。其中遗传算法部分,我觉得有些分治的味道,先求解了子问题,然后在子问题的基础上不断扩充,最终得到全局的解。

另一篇是大名鼎鼎的GPLAG,来自UIUC的团队,2006年出品[2]。它应该是第一个采用PDG的工具,属于基于图的比较,先前较流行的方法都是基于token流的。这篇文章还总结了当时比较成熟的(在论文中经常被用作对比实验工具)代码相似度计算工具,出品时间基本在2000年初。列表如下: |approach |Compare unit|robust to | fragile to| tools| |—-|—-|—-|—-|—-| |string-based|statement|format alteration|identifier renaming| | |AST-based|subtree|identifier renaming|statement reordering, control replacement| | |token-based|token sequence|identifier renaming|statement reordering, code insertion, control replacement|CCFinder-2002, JPlag-2002, MOSS-2003|

这篇文章非常值得学习的是,它还给出了几类的抄袭伪装手段(plagiarism disguises),表格中列出了很多。具体这几类怎么定义,它们会对PDG等结构带来什么影响,待我再专门为这篇论文写一篇博客时介绍。

值得注意的是,这两篇都不是发表在软件工程相关的会议或期刊上,而是发表在进化计算( Genetic and Evolutionary Computation Conference 2016)、数据挖掘领域(KDD2006)的会议上。这也和指导老师提到的,可以把自己的论文投到这种专门研究一类算法的会议上,自己工作的价值便是把自己的领域问题转化为了这类算法可以解决的问题。我觉得这也确实很有价值,毕竟单纯研究算法本身的人是少数人,而算法也在被应用于不同领域的问题的过程中,得到了扩展。

但愿自己可以在自己的课题上实现这样的应用创新。

参考资料

[1] Jinhyun Kim, HyukGeun Choi, Hansang Yun, and Byung-Ro Moon. 2016. Measuring Source Code Similarity by Finding Similar Subgraph with an Incremental Genetic Algorithm. In Proceedings of the Genetic and Evolutionary Computation Conference 2016 (GECCO ‘16), Tobias Friedrich (Ed.). ACM, New York, NY, USA, 925-932. DOI: https://doi.org/10.1145/2908812.2908870
[2] Chao Liu, Chen Chen, Jiawei Han, and Philip S. Yu. 2006. GPLAG: detection of software plagiarism by program dependence graph analysis. In Proceedings of the 12th ACM SIGKDD international conference on Knowledge discovery and data mining (KDD ‘06). ACM, New York, NY, USA, 872-881. DOI=http://dx.doi.org/10.1145/1150402.1150522