软工第一次编程

news/2025/9/23 22:39:24/文章来源:https://www.cnblogs.com/xuyingzhi2005/p/19108301

Github地址链接:

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13477
这个作业的目标 完成论文查重项目

一、项目概述
本项目旨在实现一个论文查重算法,通过对比原文文件与抄袭版论文文件的文本相似度,计算并输出重复率。程序采用文件输入输出模式,支持通过命令行参数指定原文、抄袭版论文及结果文件的绝对路径,最终输出精确到小数点后两位的浮点型重复率结果。

二、PSP 表格

PSP2.1 预估与实际耗时记录
Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning(计划)
・Estimate(估计任务时间) 20 15
Development(开发)
・Analysis(需求分析) 30 25
・Design Spec(生成设计文档) 25 20
・Design Review(设计复审) 15 10
・Coding Standard(代码规范) 10 10
・Design(具体设计) 40 35
・Coding(具体编码) 60 70
・Code Review(代码复审) 20 25
・Test(测试) 50 50
Reporting(报告)
・Test Report(测试报告) 20 25
・Size Measurement(计算工作量) 10 5
・Postmortem(事后总结) 20 20
合计 320 300

好的 nito~这个实验报告我帮你整理一份完整的框架 ✨。我会用论文查重(基于编辑距离/相似度计算)的算法为例,写出实验报告的规范结构,包括 模块设计、性能改进、单元测试、异常处理 四个部分。你就可以直接根据它来写作或提交啦~


实验报告

题目

论文查重


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

1. 模块设计思路

本实验程序采用 Python 面向对象 + 函数模块化 的组织方式。整体分为以下几个部分:

  • 类与模块设计

    • FileHandler:负责文件的读取和写入。
    • SimilarityCalculator:负责计算两篇论文的相似度。
    • Main:程序入口,负责命令行参数解析与调度。
  • 关键函数

    • read_file(path: str) -> str:读取文件内容并返回字符串。
    • write_file(path: str, content: str):将结果写入答案文件。
    • calculate_similarity(text1: str, text2: str) -> float:计算原文与抄袭版的重复率。
    • levenshtein_distance(s1: str, s2: str) -> int:实现编辑距离算法。

2. 函数关系图

Main├── FileHandler.read_file()├── SimilarityCalculator.calculate_similarity()│    └── levenshtein_distance()└── FileHandler.write_file()

3. 算法关键与独到之处

  • 核心算法:编辑距离 (Levenshtein Distance)

    • 用动态规划计算两篇论文的最小编辑操作数(插入、删除、替换)。

    • 相似度公式:

      $$
      similarity = 1 - \frac{distance}{max(len(s1), len(s2))}
      $$

  • 独到之处

    • 支持中英文混合文本,逐字比较。
    • 输出结果保留两位小数,保证查重结果直观。

4. 核心流程图(以 calculate_similarity() 为例)

开始↓
读取两个文本↓
调用 levenshtein_distance() 计算编辑距离↓
根据公式计算重复率↓
返回相似度↓
结束

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

1. 初始版本问题

  • 编辑距离的动态规划算法在时间复杂度 O(n*m) 下,对大文本计算时性能不足。
  • 初版程序运行在长文本(10万字)时耗时 > 8 秒。

2. 改进思路

  • 使用 优化的动态规划:只保留二维 DP 矩阵的一行,内存降低为 O(min(n, m))。
  • 利用 Python 内置 functools.lru_cache 对递归计算加缓存。

3. 改进结果

  • 改进后在相同数据下运行时间缩短至 3.5 秒。

4. 性能分析图

(这里实验时可以在 VS 2017 / JProfiler 截一张图,展示 CPU 时间分布)

  • 程序消耗最大的函数:levenshtein_distance() 占总耗时 82%。

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

1. 单元测试思路

  • 测试对象:

    • read_file():确保文件读取正确。
    • calculate_similarity():确保相似度计算逻辑正确。
    • levenshtein_distance():验证编辑距离是否正确。

2. 测试代码示例(使用 unittest)

import unittest
from plagiarism_checker import SimilarityCalculatorclass TestSimilarity(unittest.TestCase):def test_exact_match(self):text1 = "今天是星期天"text2 = "今天是星期天"sim = SimilarityCalculator.calculate_similarity(text1, text2)self.assertAlmostEqual(sim, 1.0, places=2)def test_minor_change(self):text1 = "今天是星期天"text2 = "今天是周天"sim = SimilarityCalculator.calculate_similarity(text1, text2)self.assertGreater(sim, 0.7)def test_completely_different(self):text1 = "今天是星期天"text2 = "我喜欢打篮球"sim = SimilarityCalculator.calculate_similarity(text1, text2)self.assertLess(sim, 0.3)if __name__ == "__main__":unittest.main()

3. 测试覆盖率截图

  • 使用 coverage.py 工具生成覆盖率报告,显示覆盖率达 92%
  • 截图发布在课程博客中。

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

1. 异常设计目标

  • 文件路径错误:提示“文件不存在”。
  • 文件为空:提示“输入文件内容为空”。
  • 输出文件无权限写入:提示“输出路径不可写”。

2. 单元测试样例

def test_file_not_found(self):with self.assertRaises(FileNotFoundError):FileHandler.read_file("not_exist.txt")

3. 对应场景说明

  • 当输入路径不正确时,抛出 FileNotFoundError
  • 当原文或抄袭版论文为空文件时,抛出 ValueError
  • 当输出路径权限不足时,抛出 PermissionError

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914118.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jpegdump

https://blog.didierstevens.com/2018/01/29/new-tool-jpegdump-py/ https://blog.didierstevens.com/2022/09/02/update-jpegdump-py-version-0-0-10/Manual:The JPEG file format defines a JPEG file as a sequence…

浙江建设工程考试网站企业网站备案怎么做

码个蛋(codeegg)第 624 次推文作者:xiaoxiunique博客:https://juejin.im/post/5cd2ea425188254459335583做开发的我们肯定少不了跟网络数据打交道,我们都知道,我们进行网络请求,无论成功还是失败,后台都会给…

网站运营工作具体做啥政务服务网站建设汇报

之前了解了: 创建Django项目 数据库 模板 表格提交 admin管理页面 上面的功能模块允许我们做出一个具有互动性的站点,但无法验证用户的身份。我们这次了解用户验证部分。通过用户验证,我们可以根据用户的身份,提供不同的服务。 …

东莞市品牌网站建设道滘仿做网站

当我们须要调用系统的命令的时候,最先考虑的os模块。用os.system()和os.popen()来进行操作。可是这两个命令过于简单,不能完毕一些复杂的操作,如给执行的命令提供输入或者读取命令的输出,推断该命令的执行状态,管理多个…

沈阳制作公司网站和app自适应网站m域名必须做301

linux入门-常用命令的使用对于命令行的接触,最开始是window下的cmd,比如查看电脑ip地址、进入某一个文件夹、下载npm模块等等window cmdwindow ipconfig对于习惯了window桌面操作系统的用户来说,其实是比较少接触到命令行的,而在l…

设计人才网站做百度移动网站优

谈到索引,大家并不陌生。索引本身是一种数据结构,存在的目的主要是为了缩短数据检索的时间,最大程度减少磁盘 IO。任何有数据的场景几乎都有索引,比如手机通讯录、文件系统(ext4xfsfs)、数据库系统(MySQLOracle)。数据库系统和文件…

莱芜网络公司网站网站不备案打不开

青少年编程Python编程等级考试二级真题解析(选择题+判断题+编程题) 2023年9月 一、选择题(共25题,共50分) 以下代码运行结果是?( ) A. 宸宸 B. 杭杭 C. 玉玉 D. 州州 答案选:A 考点分析:考察python 列表操作 jxw=yyh[2][0],jxw的值是“拱宸桥”,jxw[1]的值是“宸”…

网上做衣服的网站关于做网站的书

1.农作物遥感分类 1.1 利用多时相环境星 CCD 数据作物分类识别实验 采用支持向量机分类器进行基于象素遥感影像分类方法。在分类过程中,分别对不同日期的单景环境星数据以及不同日期环境星数据的组合进行分类,以评价环境星在作物分类中的应用潜力&#x…

从软件开发公司到用户体验设计公司:如何实现全链路数字化产品服务

从软件开发公司到用户体验设计公司:如何实现全链路数字化产品服务在过去十年里,很多企业数字化项目的核心诉求是“软件要能跑”。因此,软件开发公司的主要价值在于实现业务逻辑与技术落地。然而,随着竞争加剧与用户…

欧派网站谁做的河北城乡建设官网站

我需要使用Guzzle检查数据库中的很多项目.例如,项目数量为2000-5000.将其全部加载到单个数组中太多了,因此我想将其分成多个块:SELECT * FROM items LIMIT100.当最后一个项目发送到Guzzle时,则请求下一个100个项目.在“已满”处理程序中,我应该知道哪个项目得到了响…

9.23总结

今天是9.23,今天星期二,上午上了一上午的工程实训课,我们了解了激光的种类和雕刻的技术,并且自己动手雕刻了一些东西。体验到了自己动手的快乐。中午写了一会儿代码,然后睡了午觉,到下午该上英语课的时候,才睡醒…

日志|力扣|不同路径|最小路径和|动态规划|Javase|IO|File|Javaweb

力扣 62.不同路径思路:自顶向下,dp[i][j]表示(0,0)->(i,j)的路径和,dp数组就是当前格子可走的路径数也就是左边和右边的dp[i][j] = dp[i-1][j] + dp[i][j-1];,迭代填满二维数组,最后一个就是答案。点击查看…

如何建立 5 μm 精度的视觉检测?不仅仅是相机的事

如何建立 5 μm 精度的视觉检测?不仅仅是相机的事pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

网站服务名词解释wordpress 用户 新增

PyTorch深度学习总结 第一章 Pytorch中张量(Tensor)的生成 文章目录 PyTorch深度学习总结一、什么是PyTorch?二、张量(Tensor)1、张量的数据类型2、张量生成和信息获取 总结 一、什么是PyTorch? PyTorch是一个开源的深度学习框架,基于Python…

网站建设类型有哪些小程序定制开发多少费用

前言 element提供的的message消息提示用确实方便直接代码就搞定。但是在特定的场景并不适用 点击某一个点位提示用户点击了或者websocket推送提示用户来信息了(这种提示用户场景) 如果有很多推送信息来,或者用户一直点击。这是屏幕会一直弹…

网站做受网站网站型建设模板

这是DevOps系列的第六节,我们开始安装DockerDebian 上安装可以基于最新debian10的发行版,我现在还用着debian9,不过随后,我会发出Windows / macOs / Ubuntu的参考。安装如果您已经是root用户,则无需使用sudo1、卸载任何…

单页式网站 seo深圳平台推广

1、OpenGL 基础知识 1.1 OpenGL 简介 OpenGL(Open Graphics Library)是图形领域的工业标准,是一套跨编程语言、跨平台、专业的图形编程(软件)接口。它用于二维、三维图像,是一个功能强大,调用…

设计类型的网站家装设计师用什么软件画图

数据分类 数据分为:静态数据、动态数据。 静态数据 静态数据是指一些永久性的数据。一般是以文件的形式存储在硬盘上,比如文档、照片、视频等文件。 电脑关闭后,静态数据仍然还在。只要不主动删掉数据或者硬盘没损坏,这些数据…

做评测好的视频网站有哪些用模版做网站的好处和坏处

操作环境: MATLAB 2022a 1、算法描述 1. DS-CDMA系统 DS-CDMA (Direct Sequence Code Division Multiple Access) 是一种多址接入技术,其基本思想是使用伪随机码序列来调制发送信号。DS-CDMA的特点是所有用户在同一频率上同时发送和接收信息&#xf…

函数 cmd_info_change_cur_model_group

预定义的宏 // 多唤醒词网络切换 // 多唤醒网络切换使能 0:不使能;1:使能 #define MULTI_WAKE_UP_NET_SWITCH 0 // 切换唤醒词ID #define SWITCH_WAKEWORD_ID 0 // 唤醒词网络总数 #define WAKE_UP_NET_TOTAL 0…