第一次个人编程作业
GitHub作业链接https://github.com/Zachiay/031902342/
一、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
· Estimate | · 估计这个任务需要多少时间 | 15 | 15 |
Development | 开发 | ||
· Analysis | · 需求分析 (包括学习新技术) | 660 | 600 |
· Design Spec | · 生成设计文档 | 60 | 90 |
· Design Review | · 设计复审 | 15 | 5 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 60 | 0 |
· Design | · 具体设计 | 120 | 120 |
· Coding | · 具体编码 | 600 | 720 |
· Code Review | · 代码复审 | 30 | 30 |
· Test | · 测试(自我测试,修改代码,提交修改) | 360 | 360 |
Reporting | 报告 | ||
· Test Repor | · 测试报告 | 30 | 20 |
· Size Measurement | · 计算工作量 | 20 | 15 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 120 | 60 |
· 合计 | 2090 | 2035 |
二、计算模块接口
-
计算模块接口的设计与实现过程。
最开始的设计是在遍历时考虑多种情况(也算暴力吧),所以需要:判断类型函数、汉字转拼音函数、简繁体转换函数、汉字拆分合成函数、dfa敏感词树、命令行输入输出函数、比对函数、符合格式的输出函数、还有主函数。算法的关键是要实现这些函数(后来发现绕来绕去太乱了能力不够实现不来);独到之处:特别麻烦算不算,可能比较不容易漏掉,但也很容易出Bug。
于是组织了汉字拆分ac自动机建树函数、读取词库映射的函数getMap()、建立敏感词的拆字完的部分并保存原词的函数getSensitiveWordPart、建立敏感词的拆字完的部分并保存原词的函数tiveWordPart、建立文章的拆字完的部分并保存原文本的函数clePart()、格式化Wstring的函数format、获取敏感词部分的映射的函数getNdx、输出函数print、拼音库和对应库、汉字转换拼音的函数GetPinYin,但没能写出两个功能都能成功的主函数。
-
计算模块接口部分的性能改进。
在改进计算模块性能上所花费的时间:约等于0...改进思路:因为觉得一直遍历应该会超时,所以直接没有写暴力的算法,就谈不上改进,直接去搜了dfa树和ac自动机等相关算法,最后复制过来也不完全懂,就更不会改了..消耗最大的函数是_CheckForDebuggerJustMyCode...
-
计算模块部分单元测试展示。
测试的函数:拆分后的敏感词匹配;构造思路:用替换将“的”换成拆字后的敏感词
-
计算模块部分异常处理说明。
-
多音字无法转换
转换不成功是因为库里面每个字只唯一对应了一个拼音(不知道如何处理)。
-
繁体字、生僻字无法转换
转换不成功是库不够全,繁体字包括生僻字都无法识别出来(构造简繁体转换函数)。
-
无法识别万能头文件
因为vs2019没有配置头文件(手动配置/自行添加headfile.h/直接复制万能头原型)
-
三、心得
这次作业感觉真正离计算机应用近了一点点,编码的时候学会将头文件和具体cpp文件分开更清晰点(虽然早就该会),也会配置host文件上网页了,还对很多c++相关的操作相对熟练了一点点(也算是有进步吧虽然还远远远远远不够)。
但也又一次发现自己能力真的太太太不足了,尤其是缺乏代码经验,连vs都是刚刚下载的,只会面向OJ编程,实际做项目的时候就很是生疏。很多东西在脑子里就是写不出来。一开始先列计划的时候,就发现需要学的东西真的太多太多了,于是放弃了新学一门语言的可能性,最后看了很多很多帖子和网课,一上手还是废,交上去的代码东拼西凑,基本不是自己写的,明明已经有可以独立运行的汉字拆分和汉字转拼音的程序,但是合并不起来,反而一直越改越废,只好又清空重新打开几小时前的版本,无能狂怒。接下来一定要花更多的时间加倍努力,结对作业可不能拖后腿了(ง •̀_•́)ง