当前位置: 首页 > news >正文

软件工程第二次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13477
这个作业的目标 用软件工程的方法实现论文查重功能的实现

GitHub链接:

一、PSP表格

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

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

1、代码组织
image

2、关键函数流程图
get_word_from_article流程图:

image

compute_sim流程图:

image

3、算法关键之处

利用jieba库提取文本的关键词,利用compute_sim函数通过交并运算实现不同文本之间关键词相似度的比较,实现不同文本之间的查重对比。

三、计算模块接口部分的性能改进

1、性能改进时间记录

改进阶段 花费时间 主要工作内容
初始版本 50min 基础功能实现,关键词提取+杰卡德相似度
第一次优化 20min 文件读取优化,批量处理支持
第二次优化 20min 算法复杂度优化,内存管理
总计 90min 持续的性能优化工作

2、代码调用统计信息:

image

3、耗时最长的函数
get_word_from_article函数

四、计算模块部分单元测试展示

image

image

1、测试函数
compute_sim(word_list1, word_list2)
功能:计算两个关键词列表的杰卡德相似度
算法:相似度 = 交集大小 / 并集大小
输入:两个字符串列表
输出:0.0到1.0之间的浮点数
边界情况:处理空列表,避免除零错误

get_word_from_article(fname)
功能:从文件中提取关键词
流程:读取文件 → 文本清洗 → jieba分词 → 提取关键词
特性:使用LRU缓存避免重复处理相同文件
输入:文件路径字符串
输出:关键词列表(最多50个)

2、构造测试数据思路
输入已知结果的文本测试程序是否能输出期望值,输入极端值观察程序能否正确处理等。

3、测试覆盖率截图
使用pytest工具结果如下:

image

四、计算模块异常处理说明

image

1、基本测试,验证核心功能
# 基本测试 (['论文', '查重', '系统'], ['论文', '查重', '系统'], 1.0, "完全相同"), (['论文', '查重', '系统'], ['音乐', '艺术', '绘画'], 0.0, "完全不同"),
2、边界条件测试,防止极端情况错误
# 边界测试 ([], ['论文'], 0.0, "空列表1"), (['论文'], [], 0.0, "空列表2"), ([], [], 0.0, "都为空"),
3、重复数据测试,验证去重功能
# 重复词汇测试 (['论文', '论文', '查重'], ['论文', '查重', '查重'], 1.0, "重复词汇去重"),

http://www.hskmm.com/?act=detail&tid=11818

相关文章:

  • CSP-J1S1_2025
  • Vdd Vcc
  • 基于ThinkPHP实现动态ZIP压缩包的生成
  • 使用Java实现用户的注册和登录流程
  • Windows安装Kafka(kafka_2.12-3.9.1),配置Kafka,以及遇到的困难解决方案
  • 准备工作之动态内存分配[基于郝斌课程]
  • 2025.6第一套六级听力生词
  • CSP-S 2025游记
  • atof() - 字符串转double类型
  • 完整教程:还在为第三方包 bug 头疼?patch-package 让你轻松打补丁!
  • Kubernetes(k8s)高可用性集群的构建
  • 在CentOS环境下升级GCC编译器
  • 详细介绍:深圳比斯特|电池组PACK自动化生产线厂家概述
  • Chapter 4 Shapes and Texts
  • 手动清除Ubuntu系统中的内存缓存
  • 消除 Vue SPA 刷新导致 404 的问题
  • Docker / Kubernetes 图形化管理工具--------Portainer
  • 【Excel】创建下拉选项框
  • 不定高元素动画实现方案(中)
  • 技术文章
  • 插值相关
  • 密码学学习记录(三)
  • 详解scheduleAtFixedRate 与 scheduleWithFixedDelay 的区别
  • [题解]P11095 [ROI 2021] 旅行 (Day 2)
  • DDR5内存时序参数对照表
  • Linux CentOS 第三方扩展模块编译并安装
  • Java ArrayList中的常见删除操作及方法
  • ADC和GPIO的关系
  • 使用Docker Compose工具进行容器编排的教程
  • 模拟输入的过程