第一次个人作业


这个作业属于哪个课程 <信安1912-软件工程 (广东工业大学 - 计算机学院)>
这个作业要求在哪里 <个人项目作业>
这个作业的目标1 <熟悉使用GitHub、Markdown语法>
这个作业的目标2 <完成PSP表格记录>
这个作业的目标3 <锻炼个人打码能力>

文章导航

代码链接(Golang)


  • 写在前面的话:本次作业原本的要求为使用c++、Java、Python中的一种语言进行程序的编写,但是由于本人目前正在进行区块链的学习,仅能熟练地使用Golang语言,故而本项目为Golang语言编写(已在取得老师的允许下使用Golang语言)
  • GitHub链接
  • 可运行的exe文件已发布至仓库的release包内

PSP表格

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

计算模块接口的设计与实现过程


整体流程

  1. main函数会接收到三个参数
  2. 将两个等待对比的文本内容分别转换为字符串数组
  3. 将字符串先进行哈希运算
  4. simhash函数计算两者之间的海明距离
  5. 再计算两者之间的相似度

工程分包的截图


一共有两个包:main(主函数所在的包)、utils(工具函数所在的包)

1、整体流程

2、函数方法

  • main函数:主函数
  • Simhash函数:计算simhash值(核心算法)
  • Hash函数:md5加密哈希文本
  • HammingDistance函数:计算海明距离
  • Similarity函数:相似度计算

3、核心算法

simhash+海明距离

参照simhash流程图:

性能分析




此处使用的性能分析工具是golang自带的pprof,因此需要在原本代码的基础上进行一些修改

这是针对CPU进行的一个性能分析
在图中不难看出,在本程序中运行时间最长的函数方法为simhash
因为在simhash中既完成了文本的切割
又完成了md5的哈希加密,因此运行10ms,也是属于正常范围
因此性能上基本不需要进行改进

单元测试展示

  1. 读写模块测试
  • 基本思路:
  • 1、测试正常读取
  • 2、测试正常写入
  • 3、测试错误读取
  • 4、测试错误写入
    测试结果如下图所示,运行时间为230ms,代码覆盖率为100%
  1. Simhash模块测试
    测试结果如下图所示,运行时间为243ms,代码覆盖率为92.25%
    此处的代码覆盖率无法达到100%:
  • 1、一部分原因是文本输入出错代码方法未设计
  • 2、另一部分原因是simhash内部循环回避
  1. 海明距离以及相似度模块
    因为此处的函数实现均为数学运算,本人认为较容易达到100%的代码覆盖率,故而没有进行测试

异常处理说明

首先介绍一下异常处理保护模块Protect

这是一个异常处理机制,可以捕获异常,类似于Java中的try/catch
有两个地方应用到了该保护机制

第一处在文本读取的模块,针对此处进行测试,如下对应的错误已经捕获


第二处在文本划分模块,如果划分的文本为空,也会导致错误,针对此处进行测试,如下对应的错误已经捕获

测试


写在最后面的话

首先需要对老师进行道歉
由于本人个人原因,仅能使用golang对作业进行程序编写,给老师添麻烦了
其次就是由于时间原因本程序的实现还不是特别完善

  1. 对代码的审计查重还无法实现
  2. 输出时会对上一次记录进行覆盖
  3. 由于golang设计时不允许main函数带参数和返回值,因此无法对exe文件在其后面直接携带参数


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM