第一次个人编程作业
软件工程第一次个人编程作业
这个作业属于哪个课程 | 2023软件工程双学位 |
---|---|
这个作业的要求在哪里 | 第一次个人编程作业 |
这个作业的目标 | 学习用git来管理项目;学会使用PSP表格来规划项目;用编程语言实现论文查重并进行性能分析和单元测试 |
目录
2.计算模块接口的设计与实现过程
根据题目要求,代码分为三个模块:(sentence_input(FILE* file, int flag)、sentence_check(char s[], char t[])、
ans_output(float ans,FILE* fp_output))
分别实现将文章按句子读取、求出两篇文章对应句子的重复字数、计算最终的重复率并将浮点结果转换成字符串然后输出到对应的文件。
文件读入函数的实现方法是直接按顺序对文件中的字符进行读取只有<0(也就是中文字符)才会被读入,当读取到句子结束符号如'!'、'?'、'。'则结束这一句的读取并记录已读取的文字数方便下次从这一句后面开始读取。
句子比较函数的实现方式参考了字符串比较的方法,就只是直接按顺序比较并记录相同的文字数。
结果输出函数中主要的问题是文件输出函数只能向文件输出字符串而不能输出浮点数,所以需要先将计算的结果通过sprintf函数转换成字符串类型。
3.计算模块接口部分的性能改进
性能分析图:
cpu占用:
内存:
由性能分析中的cpu占用图可知整个程序大部分时间消耗在sentence_check这一个函数以及文件读取上,对于文件读取的函数进行分析发现每次读取下一个句子前都要先把前面的字符再重新检索一遍,所以如果能在每次读取文件时都能直接跳过之前的句子从指定位置开始那么读取时间将大幅减少,但是在查阅大量文档后也没能找到这种方法。
附录:
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 30 |
·Estimate | ·估计这个任务需要多少时间 | 20 | 50 |
Development | 开发 | 200 | 250 |
·Analysis | ·需求分析(包括学习新技术 | 300 | 400 |
·Design Spec | ·生成设计文档 | 40 | 60 |
·Design Review | ·设计复审 | 10 | 30 |
·Coding Standard | ·代码规范(为目前的开发制定合适的规范 | 10 | 20 |
·Design | ·具体设计 | 30 | 100 |
·Coding | ·具体编码 | 200 | 240 |
·Code Review | ·代码复审 | 30 | 60 |
·Test | ·测试(自我测试,修改代码,提交修改 | 50 | 90 |
·Reporting | ·报告 | 30 | 40 |
·Test Repor | ·测试报告 | 30 | 50 |
·Size Measurement | ·计算工作量 | 20 | 30 |
·Postmortem & Process Improvement Plan | ·事后总结,并提出过程改进计划 | 20 | 20 |
·合计 | 940 | 1470 |