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

第一次个人编程任务

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13477
这个作业的目标 实现一个论文查重程序
我的github https://github.com/wjx4300/3223004300

一、PSP表格(包括预估与实际耗时)

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

二、函数模块接口的设计和实现

2.1函数模块

各模块主函数名称 函数功能 耗时(分钟)
readFile 文件读取 15
preprocessText 文本预处理 50
calculateSimilarity 相似度计算主方法 60
getTermFrequency 词频向量构建 45
cosineSimilarity 余弦相似度计算 60
main 调用各函数 10

2.2程序主流程

数据流程

2.3函数模块关系架构

函数模块关系

2.4主要模块函数设计实现

2.4.1文本处理模块

文本处理

2.4.2构建文章词频向量

构建词频向量

2.4.3余弦相似度计算

余弦相似度计算

三、单元测试展示

3.1文本处理测试函数

public void testPreprocessText() {String text = "今天是星期天,天气晴,今天晚上我要去看电影。";List<String> words = checker.preprocessText(text);
//        System.out.println("原始文本:" + text);
//        System.out.println("处理后词语:" + words);// 预期结果:去除停用词和标点后的词语列表String[] expected = {"今天", "星期天", "天气", "晴","晚上", "要","去","看", "电影"};assertArrayEquals(expected, words.toArray(new String[0]));}

构造思路

  • 包含停用词("是"、"我"),验证停用词过滤效果
  • 包含标点符号(","、"。"),验证特殊字符去除效果
  • 预期结果明确对应处理后的有效词汇,确保分词准确性

3.2相似度计算测试

@Testpublic void testCalculateSimilarity_Identical() {String text1 = "今天是星期天,天气晴,今天晚上我要去看电影。";String text2 = "今天是星期天,天气晴,今天晚上我要去看电影。";double similarity = checker.calculateSimilarity(text1, text2);assertEquals(1.0, similarity, 0.01);}@Testpublic void testCalculateSimilarity_Similar() {String text1 = "今天是星期天,天气晴,今天晚上我要去看电影。";String text2 = "今天是周天,天气晴朗,我晚上要去看电影。";double similarity = checker.calculateSimilarity(text1, text2);// 预期相似度应该较高,在0.7以上assertTrue(similarity > 0.7);}@Testpublic void testCalculateSimilarity_Different() {String text1 = "今天是星期天,天气晴,今天晚上我要去看电影。";String text2 = "明天会下雨,我计划待在家里读书。";double similarity = checker.calculateSimilarity(text1, text2);// 预期相似度应该较低,在0.3以下assertTrue(similarity < 0.3);}@Testpublic void testCalculateSimilarity_EmptyText1() {String text1 = "";String text2 = "今天是周天,天气晴朗,我晚上要去看电影。";double similarity = checker.calculateSimilarity(text1, text2);assertEquals(0.0, similarity, 0.01);}@Testpublic void testCalculateSimilarity_EmptyText2() {String text1 = "今天是星期天,天气晴,今天晚上我要去看电影。";String text2 = "";double similarity = checker.calculateSimilarity(text1, text2);assertEquals(0.0, similarity, 0.01);}@Testpublic void testCalculateSimilarity_BothEmpty() {String text1 = "";String text2 = "";double similarity = checker.calculateSimilarity(text1, text2);assertEquals(0.0, similarity, 0.01);}

构造思路

  • 测试两个完全相同文本,相似度应为1,确保核心算法无基础偏差
  • 测试两个相似文本,验考察对语义相似性的识别能力
  • 测试两个完全不同的文本,验证算法区分差异的能力
  • 测试三种空文本情况,确保边界值处理正确

3.3测试覆盖率图

测试覆盖率图

  • 指令覆盖率 85%、分支覆盖率 88%

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

4.1文件不存在异常

  • 设计目标:当程序尝试读取的文件不存在时,抛出此异常,用于明确告知用户 “指定路径的文件找不到”
  • 错误场景:用户传入的原文文件路径或抄袭版文件路径指向的文件不存在
@Test(expected = IOException.class)public void testReadFile_InvalidPath() throws IOException {checker.readFile("invalid/path/file.txt");}

4.2兜底异常处理

  • 设计目标:作为兜底的异常捕获,处理程序运行过程中可能出现的其他未明确分类的异常
  • 错误场景:比如在预处理文本时,传入的文本为null,导致后续调用text.length()等方法时抛出NullPointerException
@Test(expected = NullPointerException.class)public void testPreprocessText_NullInput() {checker.preprocessText(null);}
http://www.hskmm.com/?act=detail&tid=15027

相关文章:

  • 概率期望总结
  • redis实现秒杀下单的业务逻辑
  • 关于边缘网络+数据库(1)边缘网络数据库模式及选型
  • 题解:B4357 [GESP202506 二级] 幂和数
  • 2025年9月23日 - 20243867孙堃2405
  • 2025.9.23
  • 软件工程学习日志2025.9.23
  • markdown 使用指南
  • 第6.2节 Android Agent制作<三>
  • LVS 服务器 知识
  • 07-django+DRF项目中统一json返回格式 - 详解
  • 软工第二次作业——个人项目
  • 近十年 CSP-J 复赛知识点分布表
  • AT_arc181_d [ARC181D] Prefix Bubble Sort
  • 【MySQL】使用C/C++链接mysql数据库 - 指南
  • 枚举子集
  • cv-css 快捷方式,将指定节点的计算样式获取下拉 获取tailwind网页样式成原生样式
  • day002
  • PyTorch图神经网络(四)
  • 软件工程:构建数字世界的基石
  • Avalonia 学习笔记07. Control Themes(控件主题)
  • matter 协议的架构;
  • matter 协议解析;
  • 9月23日
  • Nordic 的支持对Matter 协议的支持;
  • nRF54LM20A USB
  • nRF54LM20A GRTC
  • 2025年10款最佳生产力提效chrome插件推荐,亲测有用
  • Avalonia 学习笔记06. Page Layout(页面布局)
  • 发表第一篇文章,谈谈对软件工程的理解