设计嵌入式软件体系结构的5个步骤
扫描二维码
随时随地手机看文章
软件体系结构是其组件中体现的系统的基本组织,彼此之间的关系以及环境的关系以及指导其设计和进化的原则。软件体系结构并不是要创建一次并将其设置为石头。相反,软件体系结构应在整个产品的一生中发展和变化。多年来,我听到工程师和经理讨论了软件体系结构应该从编码工作中出现,就好像是通过魔术一样。相信一个新兴的,干净的建筑就像相信将一包意大利面倒入开水中会导致烤宽面条面条。
通过实施过程中考虑然后进化的软件体系结构具有许多好处,例如:
· 充当建造的路线图
· 提供可用于培训工程师的软件图片,并向管理者和利益相关者解释该软件
· 最大程度地减少不必要的返工
· 发展成本降低
我经常看到的一个常见问题是,团队很难弄清楚如何定义他们的软件体系结构。团队可以使用五个步骤来开发和发展其软件体系结构:
· 分开软件体系结构
· 识别和追踪数据资产
· 分解系统
· 界面和组件设计
· 模拟,迭代和扩展
因此,让我们探索您可以采取的几个步骤来设计嵌入式软件体系结构。
步骤#1 - 分开软件体系结构
许多嵌入式软件团队将他们的软件体系结构视为包括应用程序代码和硬件交互的单个凝聚力体系结构。以这种方式查看体系结构并不奇怪,因为嵌入式软件工程师通常会从硬件上查看其系统。嵌入式软件是唯一的,因为它必须与硬件进行交互,这与所有其他软件工程领域都不同。虽然这是真的,但现代软件架构师将并且应将与硬件依赖性和与硬件独立的软件分开。
我称此分离为“两个架构的故事”。传统上,开发人员将设计和实施其体系结构,以使硬件的独立和依赖性层紧密结合。但不幸的是,紧密耦合的架构存在很多问题。
紧密耦合体系结构的问题
首先,它们不是很便携。例如,如果微控制器突然变得不可用,会发生什么? (芯片短缺,有人吗?)。如果代码紧密耦合,则尝试将应用程序代码移动以在新的微控制器上运行,将成为一项艰巨的努力。应用程序代码与微控制器上的低级硬件调用紧密耦合!我知道许多最近遭受了苦难的公司。如果他们没有更新架构,则必须返回所有代码,并更改与硬件相互作用的每一行。更新其体系结构的公司通过抽象和依赖注入打破了建筑耦合。
其次,几乎不可能在开发环境中而不是在目标硬件上测试应用程序的单位测试。如果应用程序代码直接拨打了硬件,则可以成功运行该测试的测试线束,或者需要在硬件上进行测试。在硬件上进行测试很慢,通常是手动的,而不是自动化过程。我看到的结果是,该软件的测试无法很好地测试,整体系统质量受到了损失。此外,交付软件可能需要更长的时间。
最后,紧密耦合的体系结构将存在可扩展性问题。紧密耦合的系统通常共享数据。随着软件系统试图增长和添加新功能,每个新功能都会添加新代码变得更加困难。组件之间的相互作用,访问共享数据的能力以及麻烦缺陷的机会急剧上升。结果,尽管开发人员为完成工作而努力工作,但功能开发仍可能停滞不前。
分隔建筑如何解决问题
将软件体系结构分为依赖硬件和独立体系结构,通过紧密耦合的体系结构解决了所有问题。例如,在硬件依赖性和独立体系结构之间创建一个抽象层,可以将应用程序代码从一个微控制器移动到下一个。抽象层打破了硬件依赖性;换句话说,应用程序不知道或关心硬件。相反,应用程序取决于接口。新的与硬件有关的组件只需满足接口的要求即可。这意味着,如果我们更改硬件,只有硬件模块会更改!不是整个代码库。
在两个体系结构之间添加抽象层也解决了单位测试的许多问题。在进行抽象层时,更容易创建测试双打和模拟将预期的数据和意外数据返回到应用程序代码。我们可以编写所有应用程序代码,甚至没有硬件!我知道这听起来对许多嵌入式软件开发人员来说是荒谬的。但是,在上周,我为正在开发的产品中添加了几个新功能,我只打开了一次硬件。我所有的开发都是使用主机计算机上的单元测试完成的!
当我们将体系结构分开并专注于最小化耦合时,扩展软件变得更加容易。但是,仅仅因为我们打破了体系结构并不意味着我们不能在每个体系结构中创建耦合和凝聚力问题。我们仍然需要确保我们遵循两个架构中的坚实原则。好消息是,它使我们能够独立专注于每个体系结构,这意味着实时和硬件约束问题无法进入核心应用程序逻辑。
我要提到的最后一个好处是,通过将依赖硬件和独立体系结构分开,我们可以专注于在硬件可用之前开发和交付应用程序。这里的好处是,可以尽早访问该应用程序并提供反馈。随后迭代应用程序并专注于确保其满足实际需求的能力变得更加易于管理。如今,太多的团队专注于首先准备硬件,而核心应用程序是事后的想法。这是设计和构建系统的方法。
结论
软件体系结构可以帮助团队控制他们的软件。新兴的软件体系结构通常会导致大球和意大利面条代码。这并不意味着我们被迫使用瀑布方法。成功的软件体系结构通常是通过迭代和进化来创建的。设计软件体系结构的第一步是认识到嵌入式系统不仅没有一个体系结构。相反,有两种体系结构:与硬件有关和独立的体系结构。有目的地分开这些架构,使开发人员能够利用现代软件技术和方法来改善市场,质量和开发成本的时间。