MTS模拟器:UML、HOOD与Ada集成开发实践
1. 引言
本次项目旨在开发MTS(静态缓冲内存)模拟器。下面将先简要概述项目本身以及MTS软件的现状,接着描述该应用开发的具体特点,包括UML方法在项目分析中的应用、HOOD方法用于设计以及Ada语言用于代码开发的方式。最后会总结从这次经验中获得的启示,分析该技术的优缺点,并为未来的改进和在其他项目中的应用提供建议。
2. MTS模拟器的管理
2.1 MTS简介
MTS是SPOT5和HELIOS2卫星的内存,可用于记录帧文件,记录过程由任务指令进行检查。该项目是为法国国家空间研究中心(CNES)开发的,是名为EGM(任务管理集成)的大型项目的一小部分,EGM将在卫星发射后管理其任务方面。我们利用MTS模拟器的开发来准备使用UML符号进行分析、HOOD方法进行设计以及Ada语言进行开发的方法,这些经验将应用于完整的EGM开发。在文中,“MTS”指物理MTS设备,“MTS模拟器”指我们的计算机程序。
2.2 当前状态
MTS模拟器的开发已完成,CNES目前正在使用生成的图像文件来寻找更好的MTS控制方法。如果MTS管理能够得到改进,我们将更新代码。
2.3 MTS功能描述
MTS具有以下功能:
- 记录和恢复帧文件。
- 可同时对帧文件进行写入、读取或读写操作。
- 若帧文件存储所需空间较小,可仅激活MTS的部分区域,以降低电力消耗。
- 在MTS内部移动帧文件,避免激活部分区域。
- 出现问题时可进行自我检查。
MTS模拟器的输入输出接口如下表所示:
| 输入 | 输出 |
| ---- | ---- |
| 配置参数、指令、初始上下文 | 模拟器结果、最终上下文、日志 |
在特定上下文中,MTS模拟器根据指令处理工作计划。处理过程中若出现错误,日志会记录这些错误,便于追溯错误源。若处理正确,则会生成模拟器结果和最终上下文。无论处理结果如何,都会生成日志。MTS模拟器是在向卫星发送报告之前检查工作计划和指令文件的有效工具。
2.4 项目概况
- 团队组成 :开发团队由两名成员组成,一名经验丰富的技术工程师和一名新手技术工程师。该团队在项目所需的方法和语言方面经验不足,因此在项目开始和设计阶段依赖HOOD和Ada专家的支持。一名质量工程师负责检查工作,并提供关于新方法和语言使用的说明,以定义质量环境,并为未来使用相同技术和方法的开发项目做准备。项目在CS SI的地球观测部门,在项目经理的领导下进行开发。
- 时间安排 :MTS模拟器的开发周期从1998年6月持续到1999年2月。原本开发可能在1999年12月完成,但团队选择花费时间学习新方法并改进使用,为未来项目建立良好的环境。
-
代码量
:总共生成约7000条指令,具体分布如下:
- 不到5%的指令是列表的重用代码。
- 约5%的指令是CNES已使用的日期管理软件和日志的重用和适配代码。
- 代码骨架自动生成。
- 其余由团队开发。
3. 开发周期
3.1 开发环境
项目采用经典的V型开发周期,并根据项目特点进行了调整。开发环境如下:
- 一台HP 9000/735计算器。
- HP-UX 10.20操作系统。
- GNAT的Ada95编译器,版本从3.11.a到3.11.b。
- TNI的STOOD4.04用于实现HOOD4。
- Rational的ROSE用于实现UML。
- Rational的SODA用于将Rose文档转换为Word格式。
ROSE和STOOD可确保整个开发周期,从初步设计阶段,经过编码和测试(对象的单元测试程序包含在对象本身中),到集成,最后到验证。根据客户的意见,我们选择使用UML进行分析阶段,然后继续使用HOOD。保证和维护修改由STOOD负责,未来也将继续由其处理。
3.2 项目跟踪
- 分析阶段的作者/读者循环 :分析阶段包括特定的作者/读者循环,通过设置两个这样的循环来实现。第一个循环是CS SI内部循环,涉及为项目分配的CS SI专家;第二个外部循环是为CNES设置的,涉及CNES项目技术负责人。每个循环包括交叉阅读分析输出并讨论读者的意见,然后考虑这些评论。
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A([开始]):::startend --> B(CS SI内部循环):::process
B --> C(交叉阅读分析输出):::process
C --> D(讨论读者意见):::process
D --> E(考虑评论):::process
E --> F(CNES外部循环):::process
F --> C
E --> G([结束]):::startend
- 分析后的跟进 :在设计和编码阶段结束时,与CNES举行“关键点”会议以跟踪项目进度。在每个关键点,CS SI团队会研究CNES的意见并将其纳入项目。在设计阶段和编码阶段的中途引入了作者/读者循环,以确保项目的正确推进,并保证遵循HOOD和Ada规则。验证阶段结束后,与CNES举行验收会议,逐步审查所有验证案例。每个阶段完成后,将STOOD数据库录入CS SI配置库并交付给CNES。验收后,CNES会进行特定测试检查代码,最终将整个项目(包括STOOD数据库、代码、验证测试和项目说明)交付给CNES。此外,技术团队和项目经理之间的多次进度会议有助于监控技术和进度的推进。
3.3 分析阶段
由于当时没有现成的UML分析方法,CS SI团队开发了一个使用UML对象符号实现完整开发周期的过程,即UML - CS SI方法。CNES对MTS模拟器的规格要求非常明确,因此从一开始就确定了系统的类和参与者。
-
用例定义
:确定系统参与者后,使用用例描述MTS的活动。这些用例有助于定义系统行为,为验证测试做准备。由于规格中对MTS管理的描述精确,此任务相对简单。例如,一个用户运行“模拟”用例,序列图定义了系统行为场景,该场景具有正常的结束状态。
sequenceDiagram
participant User
participant Pilot
participant ServitudesDirectives
participant Sequence1
participant Sequence2
participant MTS
participant Logbook
participant Result
User->>Pilot: toStartSimulation
Pilot->>ServitudesDirectives: toSendMessage(session_begin)
ServitudesDirectives->>MTS: toGetDirectives
MTS->>MTS: toInitializeContext
MTS->>Sequence1: toDefine
MTS->>Sequence2: toDefine
Sequence1->>MTS: toTestFeasability
MTS->>MTS: toProcessRequest
MTS->>Result: toWriteResult
Sequence2->>MTS: toTestFeasability
MTS->>MTS: toProcessRequest
MTS->>Result: toWriteResult
MTS->>MTS: toTestFeasability
MTS->>MTS: toProcessRequest
MTS->>Result: toWriteResult
MTS->>MTS: toSaveContext
Pilot->>Logbook: toSendMessage(session_end)
- 类图定义 :定义用例后,定义类图以展示从场景和MTS规格中识别的类及其关系。仔细研究每个类之间的链接,以准确定义系统并进行细化。此活动较为困难,因为链接名称必须非常明确,以符合MTS规格。例如,MTS作为指挥者,飞行员启动模拟,MTS请求请求类处理请求,结果类生成结果,内存类管理内存。
- 子系统定义 :将类分组为具有较少关系的连贯子系统,为HOOD设计和定义第一个HOOD架构做准备。在我们的应用中,确定了三个子系统:模拟器、日志和MTS,它们的打包方式如下:不包含“Pilot”和“Logbook”类的类图代表MTS子系统,“Pilot”类和“Logbook”类分别代表模拟器包和日志包。由于项目规模相对较小,将项目分解为约30个类比分解为子系统更合适。虽然包的识别和命名相对简单,但将某些类放置在特定包中是一项更具挑战性的任务。
- 反馈阶段 :系统越复杂,开发团队越需要与客户集中进行反馈阶段。由于我们的项目并非过于复杂,分析阶段较短,仅需要一个反馈阶段。CNES重新阅读并接受了我们的分析笔记。
3.4 设计阶段
完成分析(使用UML - CS SI过程)后,可选择HOOD或UML符号进行设计,在两种情况下都使用UML - CS SI。在我们的项目中,客户建议使用HOOD,目标语言是Ada95。虽然团队经验不足,但HOOD支持工具(STOOD)非常高效,在Ada95代码生成和模型检查方面比UML支持工具更具优势。
HOOD是一种设计方法,它基于对反映问题域实体的对象、类和操作的识别,将软件进行层次分解。HOOD方法包括文本和相关图形表示,支持形式化细化、自动检查、用户可定制的文档生成和目标语言源代码生成。在这种层次分解中,顶层称为根模块,STOOD工具使用相同的符号。
UML的使用使设计阶段的开始变得简单。分析阶段确定了重要的类,这些类将成为STOOD对象,UML包将成为STOOD根。MTS STOOD库的架构最初有七个根,后来为了提供功能和类型结构手段,又增加了其他根。例如,MTS UML包在后续环境中成为管理MTS根。
在STOOD的“父功能图”中,“MANAGEMENT - MTS”根在系统配置视图中充当指挥者列表,该视图可显示“MANAGEMENT - MTS”根使用的根。我们识别出在分析阶段已确定的数据流,如MTS和日志之间的错误流。通常每个数据流都有名称,但由于STOOD图空间有限,未全部标注。“Simulator”根未显示在图中,因为它使用“MANAGEMENT - MTS”根。“Request”根原本应在“MANAGEMENT - MTS”根中,但设计阶段将其移动到其他位置。此外,“Configuration”根是在设计阶段添加的。一些根,如“Time”,是从其他项目中重用和适配而来。“Files - SR - 6 - 10”根用于与C语言的重用存档进行接口,以读写UNIX文件。
设计阶段结束时,分析阶段的类通常会成为STOOD对象,并保留继承链接。例如,“Request”根包含两个模块:“Abstract_Request”类定义抽象类型“A_Abstract_Request”,“Servitudes_Requetes”模块包含“Selftest”和“Management - Board”两个类,它们继承自“A_Abstract_Request”类。
我们决定采用Philippe Pichon的研究成果,因此未使用伪代码。我们认为操作文本描述足以理解操作列表。STOOD可轻松生成代码,此阶段结束时,应用程序骨架已完成,开发团队只需开发操作主体。此时,项目已精确界定,使用STOOD快速生成了关于层次化STOOD对象划分的报告,并在“关键点”会议上向CNES展示。此阶段花费的时间比预期长,因为精确描述每个功能、过程以及对象之间的数据交换策略需要大量时间。我们的应用包含48个对象,分为三个层次,其中10个是类。
MTS模拟器:UML、HOOD与Ada集成开发实践
4. 技术优势与挑战分析
4.1 技术集成优势
- 增强开发安全性 :通过将UML用于分析阶段、HOOD用于设计阶段以及Ada语言用于编码,实现了技术的深度集成。这种集成方式在开发过程中提供了强大的内在安全保障。例如,在MTS模拟器项目中,UML的用例和类图分析能够清晰地定义系统行为和结构,HOOD的层次化设计使得软件模块之间的关系更加明确,而Ada语言本身的强类型和并发特性则保证了代码的健壮性。在处理MTS的复杂操作时,如帧文件的记录、恢复和移动等,各个阶段的技术协同工作,减少了潜在的错误和漏洞。
- 提高开发效率 :利用ROSE和STOOD等工具,能够实现从设计到代码生成的自动化流程。ROSE用于UML建模,方便开发团队进行系统分析和设计;STOOD则支持HOOD方法,能够自动生成Ada代码骨架。在MTS模拟器的开发中,代码骨架的自动生成大大节省了开发时间,开发团队可以将更多的精力放在实现具体的业务逻辑上。同时,这些工具还支持单元测试和集成测试,有助于及时发现和解决问题,进一步提高开发效率。
- 便于知识传承和团队协作 :UML和HOOD的图形化表示方式使得系统的设计和结构更加直观,易于理解。无论是经验丰富的工程师还是新手,都能够快速掌握项目的整体架构和各个模块的功能。在MTS项目中,团队成员可以通过查看UML图和HOOD架构图,清晰地了解自己的工作任务和与其他模块的交互关系。此外,文档的自动生成功能也为知识传承提供了便利,新成员可以通过阅读文档快速熟悉项目。
4.2 面临的挑战
- 学习成本较高 :项目中使用的UML、HOOD和Ada等技术对于团队成员来说都有一定的学习曲线。特别是对于新手工程师,需要花费大量的时间来学习这些技术的概念、方法和工具的使用。在MTS项目初期,团队成员在掌握UML - CS SI方法和HOOD设计理念时遇到了一些困难,需要依赖专家的指导和培训。
- 工具兼容性问题 :虽然ROSE和STOOD等工具能够支持整个开发周期,但在实际使用过程中,仍然可能会遇到工具之间的兼容性问题。例如,在将ROSE的UML模型导入到STOOD中进行设计时,可能会出现数据丢失或格式不兼容的情况。此外,不同版本的工具也可能会导致一些功能无法正常使用,需要开发团队进行额外的调试和处理。
- 精确描述功能和交互策略耗时 :在设计阶段,精确描述每个功能、过程以及对象之间的数据交换策略是一项耗时的任务。在MTS项目中,为了确保系统的正确性和可靠性,开发团队需要对每个操作进行详细的分析和设计,这使得设计阶段的时间比预期长。例如,在定义“Request”根的模块和类时,需要考虑各种可能的情况和交互方式,以保证系统的稳定性。
5. 经验总结与未来展望
5.1 经验总结
- 方法选择的重要性 :在项目开发中,选择合适的方法和工具至关重要。根据项目的特点和需求,选择UML、HOOD和Ada等技术的组合是一个明智的决策。UML的可视化和表达能力有助于系统的分析和设计,HOOD的层次化设计适合大型软件项目的架构,而Ada语言的安全性和并发特性则保证了代码的质量。在MTS项目中,这些技术的结合使得开发过程更加高效和可控。
- 团队协作和知识共享 :团队成员之间的协作和知识共享是项目成功的关键。在MTS项目中,通过设置作者/读者循环和关键点会议等方式,促进了团队成员之间的沟通和交流。同时,质量工程师的参与也保证了项目的质量和规范性。此外,利用工具生成的文档和报告,方便了团队成员之间的知识传承和经验分享。
- 持续学习和改进 :技术在不断发展,开发团队需要不断学习和掌握新的知识和技能。在MTS项目中,团队成员在遇到问题时,积极学习和借鉴其他项目的经验,采用了Philippe Pichon的研究成果,避免了使用伪代码,提高了开发效率。同时,通过对项目的总结和反思,开发团队可以发现存在的问题和不足之处,为未来的项目提供改进的方向。
5.2 未来展望
- 应用于更大规模项目 :从MTS项目中积累的经验可以应用于更大规模的项目,如完整的EGM项目。在未来的项目中,可以进一步优化UML - CS SI方法和HOOD设计流程,提高开发效率和质量。同时,随着技术的发展,可以探索使用更先进的工具和技术,如人工智能辅助开发、自动化测试框架等,来提升项目的开发水平。
- 优化开发流程 :根据MTS项目的经验,可以对开发流程进行优化。例如,进一步明确各个阶段的任务和交付物,加强阶段之间的衔接和协调。同时,可以引入敏捷开发方法,提高项目的灵活性和响应速度。在处理需求变更时,能够更加快速地调整开发计划,确保项目按时交付。
- 拓展技术应用领域 :UML、HOOD和Ada等技术不仅可以应用于航天领域的项目,还可以拓展到其他领域,如金融、医疗和工业控制等。这些技术的安全性和可靠性在不同领域都具有重要的价值。未来,可以将MTS项目的经验推广到其他行业,为更多的项目提供技术支持和解决方案。
6. 总结
MTS模拟器项目是一次非常有价值的实践,通过将UML、HOOD和Ada技术集成到一个完整的Ada操作软件项目中,我们取得了许多宝贵的经验。在项目开发过程中,我们充分发挥了这些技术的优势,同时也克服了一些挑战。通过对项目的总结和反思,我们明确了未来的发展方向和改进措施。相信这些经验和成果将对未来的软件开发项目产生积极的影响,为更多的项目提供借鉴和参考。
以下是一个总结项目关键步骤的表格:
| 阶段 | 主要任务 | 工具 | 成果 |
| ---- | ---- | ---- | ---- |
| 分析 | 使用UML进行用例定义、类图定义和子系统定义 | ROSE | 系统分析报告、UML模型 |
| 设计 | 使用HOOD进行层次化设计,生成Ada代码骨架 | STOOD | HOOD架构图、代码骨架 |
| 编码 | 根据代码骨架实现具体业务逻辑 | Ada编译器 | 可运行的MTS模拟器代码 |
| 测试 | 进行单元测试、集成测试和验证测试 | ROSE、STOOD | 测试报告、验证通过的系统 |
| 交付 | 将项目交付给客户 | - | STOOD数据库、代码、验证测试和项目说明 |
下面是一个mermaid格式的流程图,展示了整个项目的开发流程:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A([开始]):::startend --> B(分析阶段):::process
B --> C(设计阶段):::process
C --> D(编码阶段):::process
D --> E(测试阶段):::process
E --> F(交付阶段):::process
F --> G([结束]):::startend
B -.-> H(UML建模):::process
C -.-> I(HOOD设计):::process
D -.-> J(Ada编码):::process
E -.-> K(单元测试、集成测试、验证测试):::process
F -.-> L(交付STOOD数据库、代码等):::process
通过以上的分析和总结,我们可以看到UML、HOOD和Ada技术在软件开发中的强大优势和应用潜力。在未来的项目中,我们可以继续探索和创新,不断提升软件开发的质量和效率。
超级会员免费看
2万+

被折叠的 条评论
为什么被折叠?



