结对第二次—文献摘要热词统计及进阶需求

课程:软工实践(链接)

作业:结对第二次—文献摘要热词统计及进阶需求 (链接)

Github基础需求项目地址(链接)

Github进阶需求项目地址(链接)

结对学号:221600219 221600212

作业目标:

一、基本需求:实现一个能够对文本文件中的单词的词频进行统计的控制台程序。

二、进阶需求:在基本需求实现的基础上,编码实现顶会热词统计器。

一、Github签入记录

基础需求

进阶需求

自动测试

爬虫数据分析

二、基础需求

项目结构

├── PairProject1-Java  
│   └── 221600219&221600212  
│       └── src  
│           ├── Main.java  
│           └── Lib.java  

类图

核心代码

三、进阶需求

项目结构

├── PairProject2-Java  
│   └── 221600219&221600212  
│       └── cvpr
│           ├── Main.java  
│           └── result.txt  
│       └── src  
│           ├── Main.java  
│           └── Lib.java  

类图

核心代码

使用Junit 进行了单元测试:

单元测试的覆盖率:

使用Jprofiler进行性能测试

本次性能测试的数据都是爬虫爬取到的result.txt数据,一共502篇论文

优化前各项的耗时情况

分析:

我们发现早期的性能瓶颈是因为对文件进行了多次读取,并在每次读取都进行了排序,所以导致Lib.sortWordMap时间占用长。

对于这样的耗时情况,是不能接受的:

我们推翻的之前的方法,通过商讨,摒弃的之前较慢的字符串处理,而是采用了更快的二进制字节处理,同时原本的多次读取文件也改为了一次读取,多次使用。
main调用只读取一次文件:

收集单词使用二进制判断:

优化后各项的耗时情况

从原本的87s左右降低到了仅有3s,大幅度的提升了程序的运行速度:

爬虫

爬虫部分使用java编写,结合了Jsoup,先匹配CVPR网站上的ptitle类,然后查找类中的标签,获取论文链接。

python编写的自动测试工具

为了方便对基础代码进行自动测试,我使用了python的subprocess库进行对Java代码的自动编译和执行,用unitest来对Java程序的运行结果进行测试,用HTML_Runner_Chart库来对测试结果进行呈现。

代码已经开源至Github仓库:https://github.com/numb-men/wordCountAutoTest

代码目录和核心代码

使用Python自动测试结果(动图加载可能较慢)

四、附加题

我们使用Python的pyecharts、subprocess库,对Java的爬虫代码和WordCount进行了调用,对词组词数分别为1-5的情况进行了图表数据呈现。
github仓库地址:https://github.com/numb-men/cvpr2018DataAnalysis

当词组单词数为1时,发现最经常出现的词是learning,是啊,这是个learning的时代,一方面是机器学习、深度学习的火热,一方面是在这个时代IT不保持学习就会落后..

当词组数为2时,neural networks(神经网络)、convolutional neural(卷积神经)都出现在了热词里...


词组数为3时,前二都是卷积神经网络

我们对词组为2时进行了词云图分析

五、PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 2310 2870
  Estimate   估计这个任务需要多少时间 2310 2870
Development 开发 800 1000
 Analysis  需求分析 (包括学习新技术) 100 100
 Design Spec  生成设计文档 60 30
 Design Review  设计复审 30 50
 Coding Standard  代码规范 (为目前的开发制定合适的规范) 20 20
 Design  具体设计 180 250
 Coding  具体编码 800 1000
 Code Review  代码复审 110 110
 Test  测试(自我测试,修改代码,提交修改) 100 150
Reporting 报告 50 50
  Test Repor   测试报告 30 30
  Size Measurement  计算工作量 30 30
 Postmortem &
 Process Improvement Plan
 事后总结, 并提出过程改进计划 60 50
All 合计 2310 2870

六、遇到的困难与解决

  • 使用字符串来进行单词的频率计算,效率低下。后面使用二进制字节来进行了所有的检测流程,效率提高了,但是编码的难度也提高了,好在付出了更多的时间之后还是解决了这个问题。
  • 由于平时没有使用IDE,编写代码后都使用命令行运行,导致对IDEA并不熟悉,花了很多时间来进行程序的性能分析和单元测试覆盖率分析。

七、队友评价

  • 感觉这次能和长平同学结对是一次很愉快的合作。在整个作业的分析,设计,开发,调试过程中,长平一直很认真的在对待,一起沟通问题解决问题。他较为丰富的开发经验以及对Bug的一丝不苟,保障了作业的高质量 完成同时也少走许多歪路。真的是一位很可靠的搭档!

八、总结

  • 这次作业,小组遇到了不少的困难,但也收获了不少新的技能。这次在对需求的分析上,我们遇到了很多的障碍,其实很多需求在作业中已经给明了清晰的定义,只是我们在阅读需求文档的经验不足,导致不能够很敏锐的挖掘出这些潜在的信息。在这次作业里,我觉得我和我的队友都得到了很好的一次锻炼,也充分意识到了,在对需求没有一个清晰的理解下就动手编码,只会让作业的完成事半功倍。在以后的工作岗位上,我们一定会遇到更多的更苛刻的需求,所以很开心可以在这次作业中锻炼自己的这方面的阅读能力。
  • 除了掌握基本的算法知识之外,掌握一些额外的技能也是很重要的,如使用python来进行数据的分析和处理,然后图表化呈现、使用Jprofiler进行Java的性能分析,这些技能能更好的辅助我们进行代码的编写。
posted @ 2019-03-15 22:27  kilig98  阅读(212)  评论(2编辑  收藏  举报