第一次个人编程作业

github仓库链接

一、PSP表格

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

二、计算模块接口

  • (2.1)计算模块接口的设计与实现过程。

    面向github和csdn编程。对于敏感词处理问题可以采用AC自动机算法。需要两个类,一个是ac_node类,一个字典树ac_tree类。对于字典树ac_tree类,核心关键在于设计构建字典树build_tree函数和查找匹配search_senten函数。
    假设有模式串 he、she、hers、his、shy,则其字典树构建结果如下。

  • (2.2)计算模块接口部分的性能改进。
    各函数时间


    你程序中消耗最大的函数get_pinyins和search_senten。其中get_pinyins为调用的pypinyin库中的函数,汉字转换拼音需要消耗时间,无法优化。对于查找匹配函数search_senten,采取优化方式,ac自动机中采用fail指针进行优化。

    调用关系图

  • (2.3)计算模块部分单元测试展示。

单元测试模块

test_words = ["垃圾"]
test_text = "在一个类中,我辣鸡们可拉@#@!#圾以定义多个垃圾方法。如果有土立土及可以把这一组方法名做腊鸡"
model = ac_tree()
model.prepare_words(test_words)
model.search_senten(test_text, 1)
model.writeFile('ans.txt')

结果

单元测试覆盖率

  • (2.4)计算模块部分异常处理说明。

    最可能出现错误的模块,输入处理,当从命令行输入的路径参数个数不为3时,即发生错误,进行简单处理
if len(sys.argv) != 4:
  print("error")
  exit(-1)

三、心得

看到这次作业的时候整个人都是懵逼的,不想接受这残忍的现实,于是开启了鸵鸟模式,装作不知道有这个作业的样子。然而该来的总是会来的,前几天就开始慌了,赶紧来一波面向github和csdn的编程模式,发现这个问题可以用ac自动机处理,再找大佬讨教一波,终于在deadline之前搞定了。真是拳不离手,曲不离口,太久没敲代码了,看个代码都能看晕。拒绝deadline驱动,从这次作业开始。
posted @ 2021-09-16 21:33  FZU小菜鸟  阅读(61)  评论(0)    收藏  举报