抄袭与查重¶
禁止抄袭
你提交到 GitLab 上的 所有代码 将被作为查重的依据,进行横向和纵向的交叉查重,代码库包括了本实验框架启用以来的所有代码。恶意篡改 Git Commit 时间也视为作弊(比如在 DDL 之后把时间调到 DDL 之前)。请三思而后行!
- 第六章 学术不端、违反学习纪律的行为与处分
- 第二十一条 有下列违反课程学习纪律情形之一的,给予警告以上、留校察看以下处分:
- (一)课程作业抄袭严重的;
- (二)实验报告抄袭严重或者篡改实验数据的;
- (三)期中、期末课程论文抄袭严重的;
- (四)在课程学习过程中严重弄虚作假的其他情形。
- 第二十一条 有下列违反课程学习纪律情形之一的,给予警告以上、留校察看以下处分:
请同学们三思而后行。
设置熔断措施:如果某一年出现抄袭同学往届代码比例超过阈值,则下一年替换作业内容。
下面是一些关于抄袭与查重的常见问题:
如何参考网上的代码?
按照下列步骤进行:
- 理解网上的代码,理解其工作原理
- 把代码复制到本地,对其进行修改或重构
-
在源码中按照如下格式标记:
// Adapted/Copied from <url> from <author name> on <date> // <brief description of what the code does>
如果原样复制了代码,并没有进行修改,则标记为
Copied
;如果在原代码的基础上做了修改,则标记为Adapted
。样例:
// Adapted from https://docs.rs/colored/latest/colored/ from @mackwic and @kurtlawrence on 2023-07-01 // A utility function to display something in colorful characters in terminal fn display_something() {}
-
在 HONOR-CODE 文件中添加如下内容:
我在 <date> 参考了 <author name> 在 <url> 编写的代码,引入到了 <code.rs> 代码中。
什么时候可以不标注来源:
- 多次引用同一份代码时,第一次必须标注,其余可以不标注
- 在第三方库文档中出现的常见用法,可以不标注
我可以参考哪些代码呢?
原则是:
- 不可以大篇幅地复制代码,除非某个特定问题只有唯一的解法,例如要绕过一个难以解决的 BUG,自己没有办法给出一个其他的解决方法
- 不可以复制同届或往届同学的直接对应作业的代码,即使同学的代码公开在网上
- 可以参考自己或者同学在其他课程中开发的代码,但是不能原封不动复制过来,需要针对作业内容进行修改
抄袭是怎么判定的?
我们首先将使用工具进行自动化查重,并根据结果与相关同学进行面谈,最终由课程教师给出判定。判定的标准是“代码的相似程度是否超出了(不交流具体代码的)正常范围”。由于“是否直接发送代码”是我们无法验证的行为,用这个标准处理是不现实的。对于“大范围交流某次作业的过多实现细节”或者“口述每一行、函数的每一个参数用法和形式”这样的情况,客观后果和“直接发送代码”并无区别。
这是希望同学们完全独立完成作业,不能交流吗?
我们依然持续鼓励同学间的交流和帮助,但直接发送代码(无论是否完整、是文本或截图)、直接帮助同学编写代码、以过细的粒度指导同学(如口述每一行、函数的每一个参数用法和形式,这样的行为极其容易导致大片重复)都是不可取的。
我完全独立地完成了作业,只是因为好心教了其他同学导致出现了代码雷同
非常感谢你为助教分担答疑任务,但我们不鼓励直接对代码形式进行教学。尤其考虑到具体实现会限制其他同学的思路,并不对同学培养解决问题的能力具有显著的作用。希望你下次可以把相应的文档发送给他,并且解释的时候尽量屏蔽自己具体实现细节。这对答疑的同学提出了更高的要求,但我们也相信这对双方都是更难但更有收获的方式。
我可以用 GitHub Copilot、ChatGPT 等人工智能的方法进行代码补全完成作业吗?
不可以。
我可以用 ChatGPT 等人工智能的方法帮助学习和理解作业吗?
可以,核心是不能抄代码。例如你可以询问 ChatGPT 一些关于实现思路的问题,但是不要让 ChatGPT 直接生成代码,人性是经不住考验的,所以不要考验自己。如果你觉得自己不能拒绝诱惑,那就不要用 ChatGPT。
如果你使用 ChatGPT 辅助学习,同时也要记住 ChatGPT 提供的答案不一定是正确的。如果 ChatGPT 的回答有所帮助,可以写在代码注释或者 HONOR CODE 中,格式:
在代码中:
// Inspired from ChatGPT:
// <answer from ChatGPT>
在 HONOR CODE 中:
关于 <problem>,我向 ChatGPT 提问了 <question>,ChatGPT 回答了 <answer>,启发了我在 <code> 中的实现。
样例:
关于如何重构 Rust 项目的问题,我向 ChatGPT 提问了:在 Rust 里面,如果我想让多个二进制程序共用一部分代码,我该怎么做?
ChatGPT 回答了:
在 Rust 中,如果你想让多个二进制程序共用一部分代码,可以使用 Rust 的模块系统。
首先,将你希望共用的代码放到单独的 Rust 模块中,可以是一个单独的源文件或一个子目录。创建一个名为 `lib.rs` 的文件,这个文件必须包含一个名为 `mod` 的声明,指向你的模块代码的文件或目录:
```
// src/my_shared_code/lib.rs
mod my_module {
// 公共代码
}
```
然后,在你的二进制程序的 `Cargo.toml` 文件中,添加一个依赖项,指向你的共享代码模块:
```
[dependencies]
my_shared_code = { path = "./path/to/my_shared_code" }
```
最后,在你的二进制程序的代码中,使用 `use` 语句导入你的共享代码:
```
// src/my_binary.rs
use my_shared_code::my_module;
fn main() {
// 使用共享代码
}
```
这样你的二进制程序就可以使用共享代码模块中的代码了。你还可以在其他二进制程序中重复使用同一共享代码模块。
这启发了我的作业的代码组织方式。