软件工程期末总结:开发程序的体会

软件工程在优化模型项目中的应用反思

本文总结了我在开发优化模型的项目过程中,对于软件工程相关原理的应用和体会。

1. 可行性研究

在项目开发过程的一开始,我先对项目的可行性进行了研究,主要从技术可行性的方面进行了可行性分析。在可行性分析的过程中,我通过阅读相关的资料和论文,确定了该项目的制作难度,并且预估可以在规定的时间内完成这一项目。同时,在这一阶段,我也确定了使用C++用于后续的开发和设计。

2. 需求分析

在需求分析阶段,我明确了软件需要支持的优化问题类型(如线性规划和TSP问题)、解决方法(如Simplex算法、LKH算法)。同时,考虑到设计一个含有GUI的界面对用户而言更加友好,因此在这一步骤中,我也选定了使用Qt6配合C++进行开发。

3. 总体设计

总体设计阶段,我遵循了模块化信息隐藏的原则。比如,包括SimplexAlgorithm类在内的每一个负责求解的算法类都与问题类相对独立,保证了这两个模块可以独立更新,互不影响。设计时注重了低耦合高内聚,确保每个类都有明确的职责,同时类之间尽量只使用数据耦合。

设计原则

  • 模块化:每个优化模型被封装成独立的类,职责清晰。
  • 数据流:设计保证了数据在系统中流动清晰,特别是在GUI和算法组件之间。

4. 详细设计

在详细设计阶段,我重点定义了各个算法的具体实现,为每个算法设计了对应的流程图。

例如,SimplexAlgorithm类详细描述了线性规划问题的求解步骤,包括单纯性表的建立和基变量的入基/出基等操作。

使用的工具

  • 程序流程图:用于描述算法流程,特别是在Simplex法和TSP算法中。

5. 实现

实现阶段,重点将设计转化为可运行的代码。Simplex法和TSP求解器的实现使用了高效的数据结构,如矩阵(std::vector<std::vector<int>>)来表示线性规划中的约束条件。GUI界面部分,我使用Qt6开发,使得用户能够更方便地与系统进行交互。

测试

  • 单元测试:对每个类(如LpProblemSimplexAlgorithm)进行了单元测试,确保功能正常。
  • 集成测试:测试了优化模型与GUI之间的集成,确保数据传递顺畅。

6. 维护

未来,项目需要进行定期维护,特别是我们需要经常新增优化问题或者优化方法。项目的模块化设计使得维护变得相对简单,因为新的功能可以在不影响现有功能的情况下进行添加。

维护类型

  • 纠错性维护:修复在测试过程中发现的bug。
  • 适应性维护:根据新的优化方法更新系统。
  • 完善性维护:提高系统的效率、用户体验,并增加新功能(如添加更多求解器)。

7. 面向对象方法学

面向对象的方法学在项目开发中起到了至关重要的作用。通过将不同的优化模型(如线性规划、TSP)封装成独立的类,我确保了系统的模块化和可维护性。面向对象的核心概念,如封装继承多态,在项目中得到了有效的应用。同时,在面向对象的设计中,我们为所有的类画出了对应的用例图、顺序图和类图,将所有的图都附在了文档中。

结论

这个优化模型项目的开发过程是一次非常有价值的软件工程实践。通过需求分析、设计、实现到测试的完整流程,我深刻体会到软件工程原则(如模块化设计、面向对象编程和可维护性)对项目的重要性,并从中获取了大量的经验,可以用于下一次的开发和维护。

posted @ 2025-01-05 22:07  QYsaltyfish  阅读(26)  评论(0)    收藏  举报