软件工程第二次作业
软件工程第二次作业
| 作业属于哪个课程 | 班级 |
|---|---|
| 作业要求 | 论文查重 |
| 作业的目标 | 熟悉PSP流程、gitcode使用方法以及单元测试自动化 |
1.作业gitcode链接
2.PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(小时) | 实际耗时(小时) |
|---|---|---|---|
| Planning | 计划 | 2 | 2 |
| · Estimate | · 估计这个任务需要多少时间 | 2 | 2 |
| Development | 开发 | 16 | 13 |
| · Analysis | · 需求分析 (包括学习新技术) | 2 | 2 |
| · Design Spec | · 生成设计文档 | 2 | 1 |
| · Design Review | · 设计复审 | 1 | 1 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 1 | 1 |
| · Design | · 具体设计 | 1 | 1 |
| · Coding | · 具体编码 | 4 | 3 |
| · Code Review | · 代码复审 | 2 | 2 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 3 | 2 |
| Reporting | 报告 | 6 | 5 |
| · Test Repor | · 测试报告 | 3 | 2 |
| · Size Measurement | · 计算工作量 | 1 | 1 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 2 | 2 |
| · 合计 | 24 | 20 |
3.计算模块接口的设计与实现过程
3.1. 代码组织
主要分为以下功能模块
- 文件I/O模块:读取原文和抄袭版文件内容->read_file
- LCS计算模块:计算最长公共子序列长度->lcs_length
- 结果输出模块:将查重率写入答案文件->main
- 工具函数模块:提供基础算法支持->max, swap, swap_long
3.2. 函数关系
- main函数调用read_file(读取原文及抄袭版)、lcs_length(计算查重率)、输出文件
3.3.关键算法流程
- 比较字符串长度,初始化dp数组,然后遍历字符。如果字符匹配,则更新DP[j] = DP[j-1][i-1]+1;如果不匹配,则取max(DP[j-1], DP[i][j-1])。直到遍历完成后,返回dp数组末位值。
4.计算模块接口部分的性能改进
4.1.改进过程
- 初始为二维dp数组,改为一维滚动数组,然后增加字符串长度预处理,交换长短串。lcs_length函数中将内层循环步长减少,减少分支判断。
4.2.性能分析图以及消耗最大函数
5.计算模块部分单元测试展示
5.1.单元测试代码
用空文件、单字符文件、全相同字符文件进行边界测试




浙公网安备 33010602011771号