论基于架构的软件设计方法的应用

陈杰杰12个月前软考-系统架构工程师20

论基于架构的软件设计方法的应用


摘要

2021年,我所在公司正在开发一套《AGV自动绕障系统》,该项目主要功能为完成机器人自动绕开障碍物并到达指定目标位置。我在该项目中担任系统架构师一职,主要负责对整个项目的架构设计,本文以该项目为例,主要论述了基于架构的软件设计方法的应用。ABSD方法是架构驱动,即强调由业务,质量和功能需求的组合驱动架构设计,它有三个基础:一是功能的分解,二是通过选择架构风格来实现质量和业务需求,三是对软件模板的使用。使用基于架构的软件设计方法主要分为六个步骤:架构需求,架构设计,架构文档化,架构复审,架构实现和架构演化。本文将分别从这六方面进行详细的阐述,同时也列出一些我在项目中使用的有效的和无效的方面。目前项目整体已经交付落地,客户反馈良好,公司也给予了较高的评价。

正文

随着机器人今年来的快速发展,许多传统行业开始考虑使用机器人来代替人工以减少人力成本,提供高质量高效率产品,同时提高公司的科研水平。特别是建筑行业,目前建筑行业面临严重的人力成本,越来越多年轻人不愿参与到建筑行业,这两年建筑机器人也在快速的发展,建筑机器人开始逐渐出现在大家视野中。

2021年,我公司在开发建筑机器人导航系统中,需要开发一个项目《AGV自动绕障系统》,而我们基础院刚好也在预研该技术方向,该系统主要是希望机器人能自主从任意起点到任意终点,由机器人自主生成路径,自主绕开障碍物,再精确的到达目标点。我在该项目中承担系统架构工程师一职。我将系统分成三层,分别为对外接口层,业务层和算法层。其中接口层主要实现对外交互,比如参数配置,任务接收,状态反馈等,业务层主要是对任务进行分类处理,执行等动作,算法层提供六大算法模块,包含地图模块,全局规划算法模块,局部规划算法模块,速度规划算法模块,轨迹跟随算法模块和运动学正逆解模块。

在做系统架构设计时,传统的软件开发过程可以划分从概念知道实现的若干个阶段,包括问题定义,需求分析,软件设计,软件实现和软件测试等,如果采用传统的软件开发模型,软件架构是建立在需求分析之后,概要设计之前,传统的软件开发模型存在开发效率不高,不能很好的支持软件重用等缺点。基于基于架构的软件开发方法是递归的,且迭代的每一个步骤都是清晰定义的,因此,不管设计是否完成,架构总师清晰的,这有助于降低架构设计的随意性。基于架构的软件设计方法主要经历六个阶段:架构需求,架构设计,架构文档化,架构复审和架构的演化。接下来我详细阐述我是如何使用基于架构的软件开发方法进行开发的。

架构需求阶段:该阶段三个小阶段,一是需求获取,主要来自三个方面,即系统的质量目标,系统的业务目标和系统开发人员的商业目标;二是标识构件,主要有生成类图,对类进行分组,打包成构件;三是架构的需求评审,该项目主要由分析人员,客户,设计人员和测试人员组成,检查需求是否真实,类的分组是否合理,构件的合并是否合理,这里我针对《AGV绕障系统》进行详细的需求分析,采用UML4+1视图进行需求分析和需求开发,经过干系人评审,再修改,最终确定终版架构需求。

架构设计阶段:这里分成五个小阶段,提出软件架构模型、映射构件、分析构件相互作用,产生架构,设计评审。在提出架构模型这我针对不同情况做了不同的架构风格设计,在层通信件,我采用了调用/返回风格,使用面向对象的方法,对系统层次结构做了详细划分,在算法库模块中,为了将各个算法模块独立并解耦开来,我采用了独立构件风格,每个算法模块独立形成构件,在业务层我采用了虚拟机风格中的基于规则的系统,用于在机器人遇到各种突发情况采取不同策略。

架构文档化:这里主要的输出结果是架构规格说明书和质量设计说明,这里从使用者角度编写,分发给所有相关的开发人员,保证开发者手中的版本最新,按照项目要求,在本项目中我主要输出的的是设计方案说明书,其中就包含架构规格详细说明。

架构复审:这里安排了项目外部人员包括用户达标和项目外其他组相关技术领域专家参与架构复审,我们也称之为技术方案评审,主要是标识架构潜在的风险,及早发现了架构设计中最开始的缺陷和错误,然后做相应调整,评审时我们采取ATAM方式进行评估,最终我们对每个质量场景做了分析,针对多场景交互的权衡点做了折中,最终输出了质量效用树,也仔细的分析了其中关键的风险点,敏感点和权衡点。在此过程复审了3次,最终架构方案才全员通过,这也为项目架构完善了许多之前未考虑到的问题。

架构实现:这里得到了复审后的文档化架构,对其进行分析设计,在架构说明书中已经定义了系统构件与构件之间的关系,构件接口约束对外唯一代表了构件,所以可以从构件库中直接查找符合接口约束的构件,构件实现,必要时开发新的以满足需求的构件,构件组装,和系统测试,包括单个构件的功能性测试和被组装应用的整体功能和性能测试。这里核心算法库在之前预研阶段已经有了雏形,这里重新梳理,使用了外观模式,以局部规划器算法模块为例,我们实现了TEB,DWA,APF,它们的使用场景和特点不一样,我们将其做成一个个的子系统,再做一个门面,通过调动门面的接口就可以实现具体算法模块的调用,这样可以由用户场景决定使用具体的局部路径规划器,以满足不同的使用场景。

构件的演化:包含需求变化归类,制定架构演化计划,构件变动,更新构件的相互作用,构件组装和测试以及技术评审,本项目使用devops来进行需求的管理。在初期实地试用阶段,客户发现了一些可以优化的项,比如在清扫类机器人中绕障的同时也要考虑到清扫的覆盖率,比如实际场地可能很小,如厕所门等需要算法支持进出窄门的的功能。 我们将这些需求一个一个记录在devops上,然后每俩周我们会进行一次快速迭代,每次迭代都会进行一次架构的演化计划,选取优先项进行开发。在每次演化结束后,我们都会进行复盘,收集其中做的好的点和一些不足的地方,好的进行推广,不好的及时改正。

对于整个基于架构的软件设计方法的应用,我个人认为本项目用的比较好的地方在架构复审阶段,由于使用了ATAM方法,使我们能更好的从用户角度出发,对有质量冲突体系中做出折中,可以尽早检查出那些存在于软件体系结构中的潜在的危险。不足的地方在初期的架构设计阶段,在提出架构模型映射构件时,采用了比较多的设计模式,导致分层过于详细,也存在较多的冗余设计,影响了整体的性能,而对于绕障这个核心功能点要求高实时性,这个在架构复审时大家一起讨论最终得到了较好的解决。

由于项目采用了基于架构的软件开发方法,所以整个项目在开发阶段都很顺利,同时也让该系统的可用性,可修改性等方面都达到了设计的要求,项目从2021年初一直持续到2021年底正式交付,到目前已经演化过多轮,也不断有其他的产品采用了该方案,包括室内装修类和地库喷涂类机器人,共计20+款不同机器人,另外,系统运行也相对稳定,未出现过重大故障,收到的公司领导和用户的一直好评。当然由于目前使用的场景会越来越多,到时也会不断的接收到新的需求项,我们会不断的对该系统进行演化,让系统更加智能,更高效率和更加安全,为建筑机器人推广和大批量应用出力。

 


标签: 软考
每天进步一点点!

相关文章

可靠性设计技术

可靠性设计技术题目随着软件的日益普及,系统中软件成分不断增加,是得系统对软件的依赖越来越强。软件的可靠性对系统的可靠性影响越来越大。而实践证明,保障软件可靠性具有最高效,最经济,最重要的手段是在软件设...

论架构评估

论架构评估摘要2021年1月,我所在公司**公司正在开发一套机器人绕障系统,这里简称《绕障系统》,该项目主要完成机器人自动绕开障碍物并精准到达用户下发的指定位置,我有幸在其中担任系统架构师一职,主要负...

系统架构风格

论软件系统架构风格摘要2021年,我所在的公司需要开发《******绕障系统》,之后简称《绕障系统》,该系统为建筑机器人导航系统的一个子系统,主要完成的任务是:实现机器人自主导航从A点到地图任意一点B...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。