第一次个人编程作业

github链接:https://github.com/Anquaner/Anquaner

这个作业属于哪个课程 软件工程
这个作业要求在哪里 作业要求
这个作业的目标 论文查重程序设计+PSP表格使用+性能分析和改进+单元测试+git管理代码

1. PSP表格

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

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

  • 算法设计

基于Levenshtein Distance算法计算文本相似度
Levenshtein Distance是一个度量两个字符序列之间差异的字符串度量标准,两个单词之间的Levenshtein Distance是将一个单词转换为另一个单词所需的单字符编辑(插入、删除或替换)的最小数量。Levenshtein Distance是1965年由苏联数学家Vladimir Levenshtein发明的。Levenshtein Distance也被称为编辑距离(Edit Distance)。
算法详情参考链接


  • 类的设计及类成员函数设计


  • 程序流程图


3.模块接口部分的性能改进

  • 改进前



  • 分析

由性能图分析可得,由于getED()函数占用的大量cpu资源。这是因为getED()函数读取文件时处理的是utf-8编码。而utf-8编码的可变长,一会儿一个字符串是占用一个字节,一会儿一个字符串占用两个字节,还有的占用三个及以上的字节,导致在内存中或者程序中变得不好琢磨。unicode编码虽然占用内存空间,但是在编程过程中或者在内存处理的时候会比utf-8编码更为简单,因为它始终保持一样的长度,一样的长度对于内存和代码来说,它的处理就会变得更加简单。所以utf-8编码在做网络传输和文件保存的时候,将unicode编码转换成utf-8编码,才能更好的发挥其作用;当从
文件中读取数据到内存中的时候,将utf-8编码转换为unicode编码。
新增函数UTF8ToUnicode()实现utf-8编码转换为unicode编码。


  • 改进后


4.模块部分单元测试展示

  • 测试最小编辑距离

  • 测试命令行参数

  • 测试UTF8ToUnicode函数

  • 文本查重运行结果



5.模块部分异常处理说明

  • 参数个数和文件输入路径异常处理


  • 捕捉库函数异常

6.个人总结

本来此次我是想用simhash算法,苦于C++标准库没有自然语言处理,而simhash算法第一步就是分词,上网查了下分词工具找到了结巴分词,但是是python库,我尝试了调用pythonjieba库,但是还是没有成功.后面发现github上有人实现了C++ jeiba.hpp,但是是gcc版本下的;到了VS2017报了好多错,因为能力有限就放弃了simhash算法。后面就选择了levenshetein算法。
我觉得这次项目收获最大的是学PSP表格了,单元测试。以前都没干过,也算一个新技能。
还有更加熟悉了VS这个开发工具。

posted @ 2021-09-17 15:32  网络好卡  阅读(68)  评论(0)    收藏  举报