跳转至

抄袭与查重

禁止抄袭

你提交到 GitLab 上的 所有代码 将被作为查重的依据,进行横向和纵向的交叉查重,代码库包括了本实验框架启用以来的所有代码。恶意篡改 Git Commit 时间也视为作弊(比如在 DDL 之后把时间调到 DDL 之前)。请三思而后行!

根据《清华大学学生纪律处分管理规定实施细则》

  • 第六章 学术不端、违反学习纪律的行为与处分
    • 第二十一条 有下列违反课程学习纪律情形之一的,给予警告以上、留校察看以下处分:
      • (一)课程作业抄袭严重的;
      • (二)实验报告抄袭严重或者篡改实验数据的;
      • (三)期中、期末课程论文抄袭严重的;
      • (四)在课程学习过程中严重弄虚作假的其他情形。

请同学们三思而后行。

设置熔断措施:如果某一年出现抄袭同学往届代码比例超过阈值,则下一年替换作业内容。

下面是一些关于抄袭与查重的常见问题:

如何参考网上的代码?

按照下列步骤进行:

  1. 理解网上的代码,理解其工作原理
  2. 把代码复制到本地,对其进行修改或重构
  3. 在源码中按照如下格式标记:

    // 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() {}
    
  4. 在 HONOR-CODE 文件中添加如下内容:

我在 <date> 参考了 <author name> 在 <url> 编写的代码,引入到了 <code.rs> 代码中。

什么时候可以不标注来源:

  1. 多次引用同一份代码时,第一次必须标注,其余可以不标注
  2. 在第三方库文档中出现的常见用法,可以不标注

我可以参考哪些代码呢?

原则是:

  1. 不可以大篇幅地复制代码,除非某个特定问题只有唯一的解法,例如要绕过一个难以解决的 BUG,自己没有办法给出一个其他的解决方法
  2. 不可以复制同届或往届同学的直接对应作业的代码,即使同学的代码公开在网上
  3. 可以参考自己或者同学在其他课程中开发的代码,但是不能原封不动复制过来,需要针对作业内容进行修改

抄袭是怎么判定的?

我们首先将使用工具进行自动化查重,并根据结果与相关同学进行面谈,最终由课程教师给出判定。判定的标准是“代码的相似程度是否超出了(不交流具体代码的)正常范围”。由于“是否直接发送代码”是我们无法验证的行为,用这个标准处理是不现实的。对于“大范围交流某次作业的过多实现细节”或者“口述每一行、函数的每一个参数用法和形式”这样的情况,客观后果和“直接发送代码”并无区别。

这是希望同学们完全独立完成作业,不能交流吗?

我们依然持续鼓励同学间的交流和帮助,但直接发送代码(无论是否完整、是文本或截图)、直接帮助同学编写代码、以过细的粒度指导同学(如口述每一行、函数的每一个参数用法和形式,这样的行为极其容易导致大片重复)都是不可取的。

我完全独立地完成了作业,只是因为好心教了其他同学导致出现了代码雷同

非常感谢你为助教分担答疑任务,但我们不鼓励直接对代码形式进行教学。尤其考虑到具体实现会限制其他同学的思路,并不对同学培养解决问题的能力具有显著的作用。希望你下次可以把相应的文档发送给他,并且解释的时候尽量屏蔽自己具体实现细节。这对答疑的同学提出了更高的要求,但我们也相信这对双方都是更难但更有收获的方式。

我可以用 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() {
        // 使用共享代码
    }
    ```

    这样你的二进制程序就可以使用共享代码模块中的代码了。你还可以在其他二进制程序中重复使用同一共享代码模块。

这启发了我的作业的代码组织方式。