第一次个人编程作业
https://github.com/silence-github-code/2021SEP
一、PSP表格
(2.1)在开始实现程序之前,在附录提供PSP表格记录下你估计将在程序的各个模块的开发上耗费的时间。
(2.2)在你实现完程序之后,在附录提供的PSP表格记录下你在程序的各个模块的开发上实际花费的时间。
PSP是卡耐基梅隆大学(CMU)的专家们针对软件工程师所提出的一套模型:Personal Software Process (PSP, 个人开发流程,或称个体软件过程)。
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 25 |
· Estimate | · 估计这个任务需要多少时间 | 5 | 10 |
Development | 开发 | 360 | 420 |
· Analysis | · 需求分析 (包括学习新技术) | 10 | 20 |
· Design Spec | · 生成设计文档 | 20 | 10 |
· Design Review | · 设计复审 | 10 | 10 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 15 |
· Design | · 具体设计 | 120 | 120 |
· Coding | · 具体编码 | 420 | 450 |
· Code Review | · 代码复审 | 60 | 120 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 360 |
Reporting | 报告 | 60 | 60 |
· Test Repor | · 测试报告 | 50 | 60 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 60 |
· 合计 | 1545 | 1715 |
二、计算模块接口
(3.1)计算模块接口的设计与实现过程。设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?说明你的算法的关键(不必列出源代码),以及独到之处。
设计了matching函数,用于将待测文本的每一行与敏感词进行匹配
中文
中文敏感词可能进行一些伪装,在敏感词中插入除字母、数字、换行的若干字符仍属于敏感词。如:当山寨为敏感词词汇时,山_寨,山@寨,山 寨,均可视为敏感词。
中文文本中存在部分谐音替换、拼音替代、拼音首字母替代的敏感词(拼音不区分大小写),如 shan寨,栅寨,山Z等均可视为敏感词。
中文文本中还存在少部分较难检测变形如繁体、拆分偏旁部首(只考虑左右结构)等。
不存在变形后再拆开偏旁部首的情况。
英文
英文文本不区分大小写,在敏感词中插入若干空格、数字等其他符号(换行、字母除外),也属于敏感词,如hello为敏感词时,he_llo,h%ell@o,he llo均为敏感词 。
对于中文的同音词,繁体,通过第三方库pypinyin转换成拼音处理,拆分部首通过字库实现
对于 学 木jiao 这类情况不处理
(3.2)计算模块接口部分的性能改进。记录在改进计算模块性能上所花费的时间,描述你改进的思路,并展示一张性能分析图(由VS 2019、JProfiler或者Jetbrains系列IDE自带的Profiler的性能分析工具自动生成),并展示你程序中消耗最大的函数。
(3.3)计算模块部分单元测试展示。展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路。并将单元测试得到的测试覆盖率截图,发表在博客中。
(3.4)计算模块部分异常处理说明。在博客中详细介绍每种异常的设计目标。每种异常都要选择一个单元测试样例发布在博客中,并指明错误对应的场景。
# 由命令行参数打开文件并对异常进行处理
def open_file(path):
try:
file = open(path, 'r+', encoding='utf-8')
except Exception:
print("文件打开失败!")
raise Exception("文件打开失败")
else:
return file
# 检测命令行参数个数
def parameter():
if len(sys.argv) != 4:
print("命令行参数错误!")
raise Exception("命令行参数错误")
三、心得
(4.1)在完成本次作业过程的心得体会(3')
-这次为了完成作业,学了python的一些知识包括类,List,函数,正则等.第一次接触到github,vscode的性能分析工具,单元测试学到了很多
-但是因为没有合理安排时间,导致后面很赶,下次要合理安排时间