线性规划求解软件开发的PSP数据统计

QYsaltyfish / 2024-11-17 / 原文

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)

  • 在后续开发中,可以更频繁地进行小规模的代码复审,提前发现潜在问题。
  • 提高测试覆盖率,确保不同输入场景下的稳定性。
  • 将不同求解算法的实现模块化,以便未来能够快速添加更多算法。