• 全部
...

个人项目作业-论文查重

ryue.zh 2023-03-01 22:37:27

  • 作业提交截止时间:2023.3.8 23:59:59
  • 完成个人编程作业编码部分
  • 提交作业标题:第一次个人编程作业

 注:评分时如发现:

  • 迟交:在Deadline后24小时内交在该同学原分数上扣30分,24-48小时内扣60 分,48-72小时内扣90分,扣到0分为止
  • 缺交:没交或在Deadline后交的评0分
  • 抄袭:评0分

 


一、编码要求

  1. 在Gitcode仓库中新建一个学号为名的文件夹
  2. 在开始实现程序之前,在PSP表格[附录2]记录下你估计在程序开发各个步骤上耗费的时间,在你实现程序之后,在PSP表格记录下你在程序的各个模块上实际花费的时间。
  3. 使用C++ 、Java语言或者python3实现,提交python代码时请附带上requirements.txt,。C++请使用Visual Studio Community 2017进行开发,运行环境为64-bit Windows 10。对于C++/Java,还需将编译好的程序发布到Gitcode仓库中的releases中
  4. 提交的代码要求经过Code Quality Analysis工具的分析并消除所有的警告。
  5. 完成项目的首个版本之后,请使用性能分析工具Studio Profiling Tools来找出代码中的性能瓶颈并进行改进。
  6. 使用Gitcode[附录3]来管理源代码和测试用例,代码有进展即签入Gitcode。签入记录不合理的项目会被助教抽查询问项目细节。
  7. 使用单元测试[附录4]对项目进行测试,并使用插件查看测试分支覆盖率等指标;写出至少10个测试用例确保你的程序能够正确处理各种情况。

 


二、需求

题目:论文查重

描述如下:

设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。

  • 原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
  • 抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。

要求输入输出采用文件输入输出,规范如下:

  • 命令行参数给出:论文原文的文件的绝对路径
  • 命令行参数给出:抄袭版论文的文件的绝对路径
  • 命令行参数给出:输出的答案文件的绝对路径

我们提供一份样例(  提取码:oogi),使用方法是:orig.txt是原文,其他orig_add.txt等均为抄袭版论文。

注意:答案文件中输出的答案为浮点型,精确到小数点后两位
 


三、测试须知

在进行代码测试的时候,以Windows环境为例(但并不意味着程序一定在Windows环境下进行测试),我们是按照传递命令行参数的方式提供文件的位置,您的提交的作业程序需要从指定的位置读取文件,并向指定的文件输出答案:

  • Python: python main.py [原文文件] [抄袭版论文的文件] [答案文件]
  • C: main.exe [原文文件] [抄袭版论文的文件] [答案文件]
  • Java: java -jar main.jar [原文文件] [抄袭版论文的文件] [答案文件]

保证每个参数以空格隔开,文件路径中不含有空格,例如:

  • java -jar main.jar C:\tests\org.txt C:\tests\org_add.txt C:\tests\ans.txt

——至于如何在程序里接受命令行参数可以去搜索一下

Python需要将入口文件名设置成main.py,C/C++需要提供可执行文件main.exe,Java需要提供编译好的jar包main.jar

一共有18个测试点(不含样例),测试作为评判功能是否正常的依据,全过就没问题,不过要扣分。

——复制别人的可执行程序进行提交骗过测试的行为同样是抄袭,我们会验证你的代码是否可以正常编译、以及是否可以编译出(与你提交的可执行文件)逻辑相同的可执行文件

如遇到下列情况之一,当前测试点将不能通过,对于每个不能通过的测试点从程序评分中扣2分

  • 程序内存泄漏严重
  • 5秒内未给出答案
  • 占用的内存超过2048MB
  • 发生异常退出

凡提交的可执行文件、出现下列情况之一者,作业以0分计

  • 尝试连接网络
  • 尝试读写其他文件
  • 尝试妨碍评测——例如: system("shutdown") 

四、评分规则

博客评分规则

总分60

  1. 在Gitcode仓库中新建一个学号为名的文件夹,同时在博客正文首行给出作业gitcode链接。(3')
  2. 在开始实现程序之前,在下述PSP表格记录下你估计将在程序的各个模块的开发上耗费的时间。(6')
  3. 计算模块接口的设计与实现过程。设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?说明你的算法的关键(不必列出源代码),以及独到之处。(18')
  4. 计算模块接口部分的性能改进。记录在改进计算模块性能上所花费的时间,描述你改进的思路,并展示一张性能分析图(由VS 2017/JProfiler的性能分析工具自动生成),并展示你程序中消耗最大的函数。(12')
  5. 计算模块部分单元测试展示。展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路。并将单元测试得到的测试覆盖率截图,发表在博客中。(12')
  6. 计算模块部分异常处理说明。在博客中详细介绍每种异常的设计目标。每种异常都要选择一个单元测试样例发布在博客中,并指明错误对应的场景。(6')
  7. 在你实现完程序之后,在附录提供的PSP表格记录下你在程序的各个模块上实际花费的时间。(3')

程序评分规则

总分40分,程序评分是根据代码质量综合考量给出的评分,主要考察如下方面:

  1. 算法的性能(耗费的时间、占用的系统资源、准确度等)(20')
  2. 代码的可读性(至少要有点注释吧?)(10')
  3. 变量、函数、类命名的规范化(10')

五、附录

1.PSP表格

PSP是卡耐基梅隆大学(CMU)的专家们针对软件工程师所提出的一套模型:Personal Software Process (PSP, 个人开发流程,或称个体软件过程)。

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

 

 

· Estimate

· 估计这个任务需要多少时间

 

 

Development

开发

 

 

· Analysis

· 需求分析 (包括学习新技术)

 

 

· Design Spec

· 生成设计文档

 

 

· Design Review

· 设计复审

 

 

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

 

 

· Design

· 具体设计

 

 

· Coding

· 具体编码

 

 

· Code Review

· 代码复审

 

 

· Test

· 测试(自我测试,修改代码,提交修改)

 

 

Reporting

报告

 

 

· Test Repor

· 测试报告

 

 

· Size Measurement

· 计算工作量

 

 

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

 

 

 

· 合计

 

 

一个功能完备的程序不是一蹴而就的。可将一个大任务划分为可操作的小任务,同时最好按照任务难度或紧急程度指定各个任务的完成次序。因此,在动手开发之前,要先估计将在程序各模块开发所需耗费的时间,以及完成整个项目所需的时间,将这个[估计值]记录下来,写成PSP 的形式。
PSP的目的是:记录工程师如何实现需求的效率,和我们使用项目管理工具(例如微软的Project Professional,或者禅道等)进行项目进度规划类似。
有关PSP的更多内容,请自行阅读邹欣老师的博客:现代软件工程讲义 2 工程师的能力评估和发展

2.Gitcode

请阅读邹欣老师的博客:源代码管理,了解源代码管理的10个实践问题。
本次作业要求使用Gitcode进行源代码管理,代码有进展即签入Gitcode。签入记录不合理的项目会被助教抽查询问项目细节。
对代码签入的具体要求如下:根据需求划分功能后,每做完一个功能,编译成功后,应至少commit一次。本例中,至少应区分基本功能和扩展功能,即分别针对基本功能、扩展功能,编译成功后,总共至少应commit两次。具体的功能划分,请自行定义,并在撰写博客时体现出来,遵循自己对需求的功能划分来提交代码即可。
对Commit不是很熟悉的话,请阅读阮一峰的博客:Commit message 和 Change log 编写指南,了解更多细节。

3.单元测试

请根据自己以往积累的测试经验,在编码完成之后,提交产品之前,设计测试用例,并编写单元测试,对自己的项目进行测试。
首先,至少应采用白盒测试用例设计方法来设计测试用例,其他测试方法不限。其次,要设计至少10个测试用例,确保你的程序能够正确处理各种情况。最后,结合测试评估的要求,对自己的测试设计进行评价,这些测试用例能满足该程序测试的要求吗?
另一个重要的措施是要把单元测试自动化,这样每个人都能很容易地运行它,并且可以使单元测试每天都运行。每个人都可以随时在自己的机器上运行。团队一般是在每日构建中运行单元测试的,这样每个单元测试的错误就能及时被发现并得到修改。
推荐阅读邹欣老师的博客:现代软件工程讲义 2 开发技术 - 单元测试 & 回归测试

...全文
给本帖投票
2449 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
76人已提交
任务截止:2023-03-08 23:59:59
用户昵称
用户ID
首次提交
最近提交
提交内容
积分
操作
吴浩翔
03-08 23:58
03-08 23:58
0
--
评分
丁虹杰
03-08 23:51
03-08 23:51
0
--
评分
罗嘉斌
03-08 23:46
03-08 23:46
0
--
评分
陈嘉容
03-08 23:42
03-08 23:42
0
记录
评分
黄华健
03-08 23:32
03-08 23:32
0
--
评分
梁华欣
03-08 23:32
03-08 23:33
0
记录
评分
朱绍聪
03-08 23:20
03-08 23:20
0
--
评分
蔡佳阳
03-08 23:17
03-08 23:17
0
--
评分
林思昶
03-08 23:04
03-08 23:04
0
--
评分
何林华
03-08 22:59
03-08 22:59
0
--
评分
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 8
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
XXXTravis ScottXXX 2023-03-05
  • 打赏
  • 举报
回复 36

不是,谁一来就上强度的呀?

SoftwareTeacher 2023-03-16
  • 举报
回复
@XXXTravis ScottXXX 让大家展现力量!

193

社区成员

发帖
与我相关
我的任务
社区描述
广工软工21级3、4班,软件工程课程学习、训练、讨论交流社区
软件工程 高校 广东省·广州市
社区管理员
  • ryue.zh
加入社区
社区公告
暂无公告

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部