Published on

论基于架构的软件开发方法及应用

Authors

论基于架构的软件开发方法及应用

摘要

本文以我在2021年参与的某机场航班节点运行保障系统为例,主要论述了基于架构的软件开发方法及应用,该项目的目标是进一步优化机场现有航班保障作业流程,提高航班地面运行保障效率。我在其中担任系统架构师,主要负责系统整体架构设计工作。该项目主要采用基于架构的软件开发方法设计与实现,通过需求获取、标识构件和需求评审完成架构需求。通过选择架构风格、分析构件以输出架构设计。采用在线文档服务维护架构文档。由机场地服工作人员参与架构复审。经过构件分析设计、构件实现、构件组装与系统测试完成架构实现。通过适当架构演化产出最终架构。历时13个月,系统顺利投产上线,至今运行稳定,获得用户认可。

正文

2021年,某机场集团委托我公司承建该机场航班节点运行保障系统,该项目的是进一步优化机场现有航班保障作业流程,提高航班地面运行保障效率。我在项目中担任系统架构师,主要负责系统整体架构设计和架构实现等工作。航班节点运行保障对机场的运行保障及协同调度至关重要,现有航班节点运行主要依靠人工记录实现,航空器到达与离开、客舱门打开与关闭、乘务人员和旅客人员到达与离开,客梯车到达与离开、食品车到达与离开、保洁员到达与离开等节点均需要记录保障。由于该机场航班节点运作主要依赖人工记录,人力成本高,易出现漏填误填,高峰状态下保障效率难以满足需求,且数据实时性差,数据不及时,不利于及时发现问题和分配资源。机场航班节点运行保障系统由三个子系统组成,分别是航班数据中心、航班节点运行保障子系统和对账子系统。航班数据中心主要负责汇聚航班计划、航班动态和客货邮行等数据并向其它系统提供数据服务;航班节点运行保障子系统处理核心业务,包括生成、记录保障节点和电子签单等功能;对账子系统主要包括机场与各航空公司进行费用结算和对账等功能。

鉴于航班节点运行保障系统具有较高的复杂性,需要清晰的架构来指导开发,对系统的性能、可靠性、可维护性等有较高要求,需要从架构层面进行精心设计和规划。从交付层面考虑,希望能够快速构建系统的框架和基础结构,以便后续开发能够高效进行。从需求层面考虑,需要频繁应对需求变更,而架构的灵活性和可扩展性至关重要。经过分析讨论和评审决定采用基于架构的软件开发方法设计与实现,经过架构需求、架构设计、架构文档化、架构复审、架构实现以及架构演化6个阶段,以满足系统功能和非功能需求,以下针对该项目对基于架构的软件开发方法及实现阶段进行详细论述。

一、架构需求

需求阶段主要活动包括确定系统的关键需求和约束,识别关键质量属性。首先是获取需求,通过与机场地服工作人员进行频繁的业务需求调研,我们定义了航班节点保障系统必须要实现的软件功能,使得机场地服工作人员能够通过系统辅助完成他们的任务,从而满足运行保障业务上的功能需求,与此同时还获取到软件的质量属性,即系统需要满足的非功能需求。其次是标识构件,在标识构件过程,为航班节点保障系统生成初始逻辑结构,包含了大致的构件。我们通过生成类图、对类进行分组以及把类打包成构件。这些构件可以分组合并成更大的构件。然后是需求评审,由系统分析人员、机场客户、设计人员和测试人员组成评审小组,对架构需求及相关构件进行了仔细的审查。审查的主要内容包括所获取的需求是否真实反映了用户的要求,类的分组是否合理,构件合并是否合理等。

二、架构设计

在架构设计阶段,其关键的主要活动包含了构建架构视图,明确地定义架构风格,以及明确组件及其相互关系。考虑到系统业务的独特特性,我们审慎地选择采用基于 Spring Cloud 的微服务架构,它将复杂的系统拆分成众多独立运行且可灵活部署的微服务,每个服务专注于特定的业务功能,实现了高度的解耦和灵活性。依据领域业务的需求,我们对服务进行了细致的拆分,使其形成一个个独立的构件。在这个过程中,我们深入地分析了这些构件之间的相互作用,仔细探究构件间的关联。对于已标识的保障节点、航班信息、结算信息、客货邮行信息等各种构件,确定了关键构件之间的重要关系和相互作用。在得到的中间结构基础上,我们进一步进行细化工作,逐步完善并最终产生出整个架构和清晰的视图。紧接着的下一步,我们邀请了机场地服和结算部门的系统用户对架构进行全面评审。他们凭借丰富的实践经验,对存在疑问的部分展开了充分且深入的讨论,在这个过程中,我们不断进行迭代和改进,以确保架构能够最大程度地满足实际业务的需求,并且能够适应未来可能出现的各种变化和挑战。

三、架构文档化

架构文档化阶段的活动主要是详细记录架构的细节,包括各种视图、接口等。在本项目中,我们使用在线文档服务的方式,将文档同步给所有与系统有关的开发人员,每当文档内容变更后,进行文档服务更新,以保证开发者使用的文档是最新的。本阶段的主要输出结果是架构需求规格说明和测试架构需求的质量设计说明书这两个文档。通过文档化阶段,为开发团队提供清晰、一致的架构蓝图,使团队成员准确理解系统的整体结构和设计思路,以便协同工作,减少理解偏差,为项目的管理和监控提供了重要支撑。

四、架构复审

架构设计、架构文档化和架构复审是一个迭代的过程。我们在每次主版本的软件架构分析之后,均邀请了由机场地服工作人员作为用户代表和领域专家参加复审。架构复审的目的是标识潜在的风险,及早发现架构设计中的缺陷和错误,包括架构能否满足需求、质量需求是否在设计中得到体现、层次是否清晰、构件的划分是否合理、文档表达是否明确、构件设计是否满足功能与性能的要求等。由机场地服工作人员进行复审的目的是保证架构的设计能够公正地进行检验,使我们能够决定正式实现架构。

五、架构实现

通过对航班节点运行保障的实体辨别和分析后,用实体和实体间的关系显示出整体的架构,再通过与机场业务专家共同分析讨论,将实体之间的关系分割成构件。经过构件的分析与设计后,我们使用基于spring-boot的微服务应用开发构件,使用REST风格接口和RabbitMQ实现服务间通信实现构件的连接,逐步完成整个架构的实现工作。在所有的构件完成开发后,我们邀请了机场地服工作人员参与系统测试。实现的整个过程都是以复审后的文档化的架构说明书为基础,所有构件均满足软件架构中说明的对其他构件的职责。

六、架构演化

在构件开发过程中,机场地服用户在部分节点保障的业务侧需求还有变动。经过项目组讨论,我们针对性的对部分构件进行了修改,以适应新的变化后的需求。按照架构演化过程,首先将需求变化进行归类、对架构演化进行计划、构件变动、更新构件的相互作用、构件组装与测试、技术评审,其中从计划到评审是一个迭代的过程,最终为演化后的架构。

经过近13个月的项目开发,该机场航班节点运行保障系统顺利投入使用,我们协助客户对航班节点保障、地空协同运行进行全面的功能和性能的测试和试运行,运行至今客户反馈良好。经过项目团队成员的共同努力,最终保证了该系统的顺利交付。在本项目中,还存在一些不足之处,比如我们对于用户的移动终端操作易用性方面考虑不周,实际节点保障工作场景下,对用户交互和易用性要求较高,后期经过和用户共同打磨,对移动终端界面进行了优化和部分重构,有效解决了该问题;另一个不足是对系统的监控和运维自动化方面,在自动预警和告警方面,系统覆盖的指标不全面导致部分功能仍依赖人工监控,通过使用自动化运维工具,针对具体指标增加了监控功能实现,提高系统监控和运维效率,减少了运维人员成本。后续我们将持续改进,小步重构,不断优化系统,并持续提升团队和个人技术水平,更好的完成软件系统开发工作,为行业提供优质的软件系统。