软工第三次作业 - 结对编程
一、结对信息
- 姓名1:伊尔番·艾山
- 学号1:3123004762
- 姓名2:梁子恒
- 学号2:312300746
- GitHub仓库:https://github.com/IrErV123/Primary-Math-Exercise-Generator
二、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 90 |
· Estimate | · 估计这个任务需要多少时间 | 30 | 45 |
Development | 开发 | 480 | 720 |
· Analysis | · 需求分析 (包括学习新技术) | 90 | 150 |
· Design Spec | · 生成设计文档 | 60 | 90 |
· Design Review | · 设计复审 | 30 | 45 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 30 |
· Design | · 具体设计 | 90 | 120 |
· Coding | · 具体编码 | 240 | 360 |
· Code Review | · 代码复审 | 60 | 90 |
· Test | · 测试(自我测试,修改代码,提交修改) | 120 | 180 |
Reporting | 报告 | 90 | 120 |
· Test Report | · 测试报告 | 30 | 45 |
· Size Measurement | · 计算工作量 | 30 | 30 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 45 |
合计 | 总计 | 630 | 930 |
三、设计实现
3.1 需求分析
本项目旨在开发一个小学四则运算题目生成器,主要功能包括:
- 生成指定数量的四则运算题目
- 支持真分数运算
- 避免重复题目
- 控制数值范围
- 自然语言处理生成题目
3.2 架构设计
采用模块化设计,主要包含以下模块:
- 题目生成模块:负责生成各类运算题目
- 分数处理模块:处理分数运算和化简
- 重复检测模块:确保题目唯一性
- 输入输出模块:处理命令行参数和文件输出
3.3 核心算法
分数生成算法
def generate_fraction():"""生成真分数"""denominator = random.randint(2, 10)numerator = random.randint(1, denominator - 1)return Fraction(numerator, denominator)
题目去重算法
采用表达式标准化方法,将不同形式但结果相同的表达式识别为重复。
3.4 类图设计
主要类包括:
ExerciseGenerator
:题目生成器主类FractionHandler
:分数处理类ExpressionValidator
:表达式验证类
四、测试用例
4.1 单元测试
测试用例1:分数运算正确性
def test_fraction_calculation():# 测试分数加法result = calculate_fraction("1/2 + 1/3")expected = Fraction(5, 6)assert result == expected# 测试分数减法result = calculate_fraction("2/3 - 1/4")expected = Fraction(5, 12)assert result == expected
测试用例2:重复检测
def test_duplicate_detection():expressions = ["1 + 2", "2 + 1", "3 - 1"]unique_expressions = remove_duplicates(expressions)assert len(unique_expressions) == 2
测试用例3:数值范围控制
def test_range_control():exercises = generate_exercises(range_limit=10, count=100)for exercise in exercises:numbers = extract_numbers(exercise)assert all(0 <= num <= 10 for num in numbers)
4.2 集成测试
测试场景1:命令行参数处理
- 输入:
python myapp.py -n 10 -r 20
- 期望输出:生成10道题目,数值范围不超过20
测试场景2:文件输出功能
- 输入:指定输出文件路径
- 期望输出:题目正确写入文件
4.3 性能测试
- 大数据量测试:生成10000道题目,耗时控制在30秒内
- 内存使用测试:确保内存占用不超过100MB
五、项目小结
5.1 项目收获
-
技术技能提升:
- 掌握了Python分数运算库的使用
- 学会了表达式解析和评估
- 提高了算法设计能力
-
团队协作经验:
- 学会了Git协作开发流程
- 提高了代码review的能力
- 加强了沟通协调能力
-
软件工程实践:
- 体验了完整的软件开发生命周期
- 学会了需求分析和设计文档编写
- 掌握了单元测试和集成测试方法
5.2 遇到的问题及解决方案
-
分数运算精度问题
- 问题:浮点数运算存在精度误差
- 解决:使用Python的Fraction类进行精确分数运算
-
题目重复检测难题
- 问题:"1+2"和"2+1"本质相同但形式不同
- 解决:实现表达式标准化算法,统一表达式格式
-
大数据量性能问题
- 问题:生成大量题目时效率低下
- 解决:优化算法,使用集合进行快速去重
5.3 改进建议
-
功能扩展:
- 增加更多运算类型(乘方、开方等)
- 支持更复杂的表达式结构
- 添加图形化用户界面
-
性能优化:
- 使用多线程提高生成效率
- 实现更高效的去重算法
- 添加缓存机制
-
用户体验:
- 增加进度条显示
- 提供更友好的错误提示
- 支持批量操作
六、目录结构
Primary-Math-Exercise-Generator/
├── README.md # 项目说明文档
├── requirements.txt # 项目依赖包
├── myapp.py # 主程序入口
├── src/ # 源代码目录
│ ├── __init__.py
│ ├── generator.py # 题目生成核心模块
│ ├── fraction_handler.py # 分数处理模块
│ ├── validator.py # 表达式验证模块
│ └── utils.py # 工具函数模块
├── tests/ # 测试代码目录
│ ├── __init__.py
│ ├── test_generator.py # 生成器测试
│ ├── test_fraction.py # 分数运算测试
│ └── test_validator.py # 验证器测试
├── docs/ # 文档目录
│ ├── design.md # 设计文档
│ └── api.md # API文档
├── examples/ # 示例文件
│ ├── Exercises.txt # 示例题目文件
│ └── Answers.txt # 示例答案文件
└── .gitignore # Git忽略文件
七、运行说明
7.1 环境要求
- Python 3.7+
- 依赖包:见requirements.txt
7.2 安装步骤
git clone https://github.com/IrErV123/Primary-Math-Exercise-Generator.git
cd Primary-Math-Exercise-Generator
pip install -r requirements.txt
7.3 使用方法
# 生成10道题目,数值范围不超过20
python myapp.py -n 10 -r 20# 生成题目并指定输出文件
python myapp.py -n 50 -r 100 -o exercises.txt
GitHub仓库链接:https://github.com/IrErV123/Primary-Math-Exercise-Generator
完成时间:2025年10月10日