第一次个人编程项目
| 学号 | 3123004294 |
|---|---|
| Github仓库链接 | https://github.com/Berluga/3123004294.git |
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 软件工程导论 |
| 这个作业要求在哪里 | 作业要求文档 |
| 这个作业的目标 | 通过实现一个查重系统,综合训练算法设计、工程规范、测试及文档撰写能力 |
PSP 2.1 表格
| PSP阶段 | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|
| 计划 (Planning) | ||
| · 估计任务时间 (Estimate) | 480 | |
| 开发 (Development) | ||
| · 需求分析 (Analysis) | 60 | 40 |
| · 生成设计文档 (Design Spec) | 30 | 10 |
| · 设计复审 (Design Review) | 20 | 40 |
| · 代码规范 (Coding Standard) | 20 | 40 |
| · 具体设计 (Design) | 60 | 60 |
| · 具体编码 (Coding) | 120 | 80 |
| · 代码复审 (Code Review) | 30 | 50 |
| · 测试(包括修改) (Test) | 60 | 50 |
| 报告 (Reporting) | ||
| · 测试报告 (Test Report) | 30 | 30 |
| · 计算工作量 (Size Measurement) | 10 | 10 |
| · 事后总结与改进 (Postmortem) | 30 | 30 |
| 总计 (Total) | 500 | 480 |
一、计算模块设计与实现
模块架构
plaintext
├── 文件处理层
│ ├── readFileAsUTF8() - UTF-8编码文件读取
│ └── filterChinese() - 中文字符过滤
├── 核心算法层
│ └── LCS() - 最长公共子序列计算
├── 相似度计算层
│ └── jaccardSimilarity() - 相似度转换
└── 输出层
└── writeResult() - 结果格式化输出
创新设计
1.混合相似度计算:
最终相似度 = 0.6 * LCS相似度 + 0.4 * Jaccard系数
2.多编码自适应处理:
// 自动检测BOM头
if(buffer[0]0xEF && buffer[1]0xBB && buffer[2]==0xBF)
decode_with_utf8();
else
try_gbk_decoding();
二、性能优化分析
性能热点分析
| Function | CPU% | Call Count |
|---|---|---|
| LCS() | 78.2% | 1 |
| filterChinese() | 15.1% | 2 |
| readFile() | 6.7% | 2 |
三、单元测试展示
测试用例设计

覆盖率报告
| File | Line Coverage |
|---|---|
| main.cpp | 98.2% |
| file_io.cpp | 95.6% |
| lcs.cpp | 100% |
四、异常处理机制
异常类型及测试
1.文件访问异常

2.编码异常处理

3.内存保护机制

浙公网安备 33010602011771号