第一次个人作业

随笔 - 2 文章 - 0 评论 - 0 阅读 - 328

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

文章导航

代码链接 (Golang)


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

PSP 表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划3045
· Estimate· 估计这个任务需要多少时间3045
Development开发180345
· Analysis· 需求分析 (包括学习新技术)2020
· Design Spec· 生成设计文档1530
· Design Review· 设计复审1515
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)510
· Design· 具体设计2050
· Coding· 具体编码60150
· Code Review· 代码复审1520
· Test· 测试(自我测试,修改代码,提交修改)3045
Reporting报告7585
· Test Repor· 测试报告1520
· Size Measurement· 计算工作量1015
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划5050
· 合计285475

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


整体流程

  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 文件在其后面直接携带参数

posted on 流竹均雅 阅读 (241)  评论 (0) 收藏 举报

HarmonyOS 创新赛