线性规划求解软件开发的PSP数据统计
PSP 报告
1. 计划 (Planning)
估算:
本项目的主要目标是实现线性规划问题的优化模型,并通过 GUI 界面简化用户操作。根据任务复杂度,估算开发工作量约为 40 小时。
2. 开发 (Development)
2.1 需求分析 (Analysis)
在项目中,需求包括以下几点:
- 通过 C++ 实现线性规划问题的优化模型。
- 支持两种调用方式:直接在 C++ 代码中使用模型,以及通过用户友好的 GUI 界面调用模型。
- 支持加载 CSV 文件作为输入。
- 实现多种求解算法(如单纯形法),并将在未来支持内点法等其它算法。
2.2 生成设计文档 (Design Spec)
项目的设计文档通过 README 文件详细说明了系统架构、目录结构、调用方法以及未来的扩展计划。设计文档涵盖了模型类、求解器类、矩阵操作类以及 GUI 界面的代码文件组织。
2.3 设计复审 (Design Review)
设计方案已经过复审,确保了代码结构清晰、模块化、易于扩展。考虑到未来具有添加新求解方法的需求,设计了模块化架构。
2.4 代码规范 (Coding Standard)
项目采用 C++ 编写,遵循标准的 C++ 代码规范,如命名规则、注释规范和模块化设计。注释使用英文,保证代码的可读性和国际化。
2.5 详细设计 (Design)
详细设计包括:
- Matrix 类:实现了矩阵相关的运算操作。
- LpVariable / Expression 类:定义了线性规划的变量与变量组成的表达式,便于线性规划问题的建立。
- LpProblem 类:管理线性规划问题的变量和约束。
- SimplexAlgorithm 类:实现了单纯形法求解算法。
- GUI 界面:实现了用户交互,支持问题类型选择、方法选择、文件输入等功能。
- 未来扩展:保留了扩展接口以支持内点法等新算法。
2.6 具体编码 (Coding)
具体编码任务包括:
- 实现线性规划问题模型的类和方法。
- 实现单纯形法的求解器。
- 完成 GUI 界面的交互设计和功能开发。
- 提供 CSV 文件导入功能,供用户选择文件进行求解。
2.7 代码复审 (Code Review)
代码已经过复审,主要关注点为:
- 算法的正确性和效率。
- GUI 界面操作的简洁性与用户体验。
- 代码的模块化与可扩展性。
2.8 测试 (Test)
编写了多个测试用例,包括:
- 测试各个类模块的正确性。
- 测试线性规划问题求解的正确性。
- 测试 GUI 界面的功能完整性和文件导入正确性。
- 自测时发现并修复了少量界面显示和算法边界条件的问题。
3. 记录用时 (Record Time Spent)
- 需求分析与设计:2 小时
- 代码编写:30 小时
- 测试与调试:10 小时
- 文档编写与复审:4 小时
4. 测试报告 (Test Report)
项目通过了功能测试,主要测试内容包括:
- 求解器的正确性测试。
- GUI 界面的交互流程测试。
- CSV 文件导入的文件格式兼容性测试。
5. 计算工作量 (Size Measurement)
- 代码行数:约 2000 行。
- GUI 界面设计:包含 4 个主要交互按键,支持不同问题类型的选择。
6. 事后总结 (Postmortem)
项目总体完成情况良好,达到了预期的功能目标。通过 GUI 界面简化了复杂的线性规划问题求解过程,未来计划继续扩展内点法求解功能。此外,在实际测试过程中发现了一些细节问题,例如 GUI 界面与算法模块的接口部分还可以进一步优化。
7. 提出过程改进计划 (Process Improvement Plan)
- 在后续开发中,可以更频繁地进行小规模的代码复审,提前发现潜在问题。
- 提高测试覆盖率,确保不同输入场景下的稳定性。
- 将不同求解算法的实现模块化,以便未来能够快速添加更多算法。