软工实践(四)——热词统计

课程:软工实践(连接)

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

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

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

结对学号:221600219 221600212

做业目标:

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

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

1、Github签入记录

基础需求

进阶需求

自动测试

爬虫数据分析

2、基础需求

项目结构

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

类图

核心代码

3、进阶需求

项目结构

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

类图

核心代码

使用Junit 进行了单元测试:

单元测试的覆盖率:

使用Jprofiler进行性能测试

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

优化前各项的耗时状况

分析:

咱们发现早期的性能瓶颈是由于对文件进行了屡次读取,并在每次读取都进行了排序,因此致使Lib.sortWordMap时间占用长。

java

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

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

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

优化后各项的耗时状况

从本来的87s左右下降到了仅有3s,大幅度的提高了程序的运行速度:
git

爬虫

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

github

python编写的自动测试工具

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

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

代码目录和核心代码

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

4、附加题

咱们使用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时进行了词云图分析

5、PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 10
  Estimate   估计这个任务须要多少时间 30 10
Development 开发 1400 2290
 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 报告 120 110
  Test Repor   测试报告 30 30
  Size Measurement  计算工做量 30 30
 Postmortem &
 Process Improvement Plan
 过后总结, 并提出过程改进计划 60 50
All 合计 1550 2410

6、遇到的困难与解决

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

7、总结

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

8、对队友的评价

221600212 :

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

221600219:

和剑威结队的过程当中,也是一个互相学习的过程,咱们在电脑前一块儿讨论,一块儿找bug,有时候我也惊叹他的想法的独到之处,他经常指出我没想到的地方,并且很是认真负责的完成了分工,虽然他在编程上还有待提升,但他是一位能让人感到合做愉快的队友。但愿以后和他的配合会愈来愈默契。机器学习

相关文章
相关标签/搜索