测试设计和安全设计——量身定制的软件架构
扫描二维码
随时随地手机看文章
互联设备和系统已成为我们日常生活中不可或缺的一部分,我们认为这是理所当然的。使用智能手机找到到达目的地的最快方式,坐在沙发上在平板电脑上阅读新闻,或者使用智能手机应用程序控制智能供暖——这些系统让生活变得更加方便。然而,这种便利性的提高需要更严格的安全和安全要求,而这些要求必须由开发此类系统的人员来管理。对于自动驾驶来说尤其如此,高效的安全理念是重中之重。
软件架构师应具备的专业知识和技能
产品复杂性的增加和硬件功能的增强导致嵌入式系统中软件的范围不断扩大。软件实现了大多数系统中的大部分功能。嵌入式软件开发部门正在不断增长。这在汽车行业和当前的劳动力市场中尤为明显。例如,梅赛德斯奔驰计划从 2030 年起通过基于软件的系统产生大部分收入。软件开发不再是一个人的表演,而是由分布在全球多个地点的大型团队完成。在过去的几年里,嵌入式软件在嵌入式行业的大多数公司中都取得了显着的重要性,甚至在机电一体化领域也是如此。但这仅仅是开始。
更加关注敏捷软件开发方法
敏捷软件项目使用基于测试驱动的软件开发技术的渐进式软件架构开发。这是两种主要方法:
· 功能架构:软件系统由功能或特性及其依赖关系来表示。
· 组件架构:开发一个粗略的草案以及几个包含经过微调的软件结构的详细草案。
软件架构是项目成功的关键
想要满足其负责任的工作要求的软件架构师需要涵盖以下关键方面的广泛专业知识:
1. 对软件架构的基本理解:在抽象层面上,软件架构是需求和软件实现之间的桥梁。在软件中,架构描述了由软件组件、软件层、软件子系统、接口及其依赖性等组成的粗略结构(在特殊情况下还包括模块和类)。对于这些架构元素,还可以描述交互的和单独的行为。运行时架构是软件架构的另一个关键要素。
2. 软件架构师的角色:每个拥有所需专业知识的人都可以在公司中担任软件架构师的角色。然而,对于真正专业的方法,个人角色应该是首选。根据项目的规模,可以有一名或多名软件架构师参与项目。
3. 首席架构师管理软件架构师团队:软件架构师协调项目中多个角色的一切,因此需要技术和非技术知识——经验越多越好。软件架构师的角色可能不应该分配给缺乏经验的大学毕业生——它需要外向、创新、果断和经验丰富的个性。
设计过程——创建软件架构
设计流程描述了软件(架构)的开发过程。每个公司都必须确定并实施最适合他们的流程。软件架构师在定义此过程中发挥着关键作用。基于V模型类型表示,该设计过程可以应用于完整嵌入式系统的开发,即不仅仅应用于软件的开发。
需求(什么)和相关架构(如何)
在分析过程中,分析师(在大多数情况下也是架构师)在各个层面上确定并记录各自的需求(“什么”)。这些要求是创建架构(“如何”)的基础。基于子系统架构,软件架构师与同一级别的其他开发领域(例如硬件开发)协调开发子系统的软件架构。
根据需求,测试团队开发测试用例,以在开发过程的后期证明正确的实现。这也是在不同层面上进行的。 “测试设计”和“安全设计”是软件架构背景下的基本主题。
设计依据及影响因素
软件需求(功能性和非功能性)源自图 3 所示的 X 分析(此处:软件分析)。基于安全性和可靠性的软件质量属性分别如下所示。
通过分析影响因素,软件架构师确定:
· 软件架构需求的相关性
· 未来需求的变化
· 软件架构后果的推导
非功能性软件需求包括软件的软件质量属性,例如:
· 可移植性
· 可维护性
· 可靠性
· 安全/安保
· 资源需求
· 表现
· 实时兼容性
一些质量属性是一致的,而另一些质量属性也可能产生相反的效果。考虑到这一点,我们可以问以下问题:哪些需求对架构(功能性还是非功能性)影响更大?正确答案是非功能性需求。因此,除了子系统架构之外,软件需求及其产生的影响因素是软件架构最重要的设计依据。
沟通和文档
通过全面的软件架构文档,软件架构师为所有利益相关者提供了项目的基础,从而为参与项目的每个人提供了完全的可追溯性,确保了公司的连续性。文件也是与利益相关者持续协调沟通的基础。
这里最重要的利益相关者是软件开发人员,他们详细完善软件架构并最终用目标编程语言实现它。除了软件开发人员之外,其他角色(例如测试团队)对软件架构也有合法的兴趣。除非您知道需要什么,否则您无法验证实施是否正确。
统一建模语言 (UML) 是一种符号,用于记录软件架构的各种视图和方面,并在设计中对其进行细化 - 直至自动代码生成。
软件设计原则提高软件质量
我们的整个生活都是由规则决定的——即使有些人认为他们不必遵守这些规则。我们所有人都面临着新冠病毒大流行以及相关的规则和规定。您小时候肯定玩过乐高积木,或者您今天也玩过自己的孩子,关于如何正确安装积木是有规则的。
软件架构师凭借其不断增长的知识,绘制出软件开发的风格指南,描述了软件架构开发的规则。这些规则不能应用于任何架构,因为它们取决于特定的要求。在任何情况下,将规则应用于软件架构都可以提高软件质量。
高内聚是一个架构设计原则。它的目的是通过在一个架构元素中处理逻辑相关的任务来减少冗余,而不是在多个架构元素之间分配类似的任务。已发布可应用于嵌入式软件架构的具体设计原则。软件架构师可以通过软件架构模式在实际系统中实现设计原则。
架构开发和架构模式必须满足安全要求
基于他们的技术知识,软件架构师使用他们的模式目录开发软件架构。一般来说,模式是针对重复出现的问题(挑战)的已知的、经过验证的、评级的和可调整的解决方案。例如,在安全相关系统中必须考虑和照顾功能安全性和可靠性等方面。在为我们提供全自动支持的系统中(例如自动驾驶),安全性和可靠性是产品成功的关键。
使用模式可能是软件架构开发中的一个挑战。例如,只有方形砖可用,但一个要求可能是圆形轮廓。根据乐高原理,可以通过将积木分级组装成一排或多排来解决。由于我们不是第一代开发软件的人,因此几乎所有软件开发领域甚至软件架构的开发都已经创建了模式。
质量保证和质量评估
软件架构师负责软件质量和质量保证。在开发架构之前必须定义质量属性。软件架构师知道这些属性对其软件架构的影响,并且软件测试团队知道如何证明它们。顺便说一句,属性不能在开发过程结束时“测试”到产品中。
在质量方面,存在以下区别:
· 内部质量(例如软件架构)
· 外部质量(客户所看到的)
工艺质量对产品质量有重大影响。再次回到乐高的类比——所有的砖块都必须组装起来以支撑结构,否则,一旦进行额外的扩展,它就会倒塌。对于软件架构来说也是如此;它们必须满足所有质量要求并提供之前定义的所有功能。
过去,软件架构预计能够保持 20 年或更长时间的功能。如今,由于不断出现的要求、法规和法律,它们正在不断扩展和改进。因此,开发过程应适应这一方面,因为它是产品进一步开发的关键。
确保质量的最简单方法
与其他架构师和利益相关者一起进行评审是确保软件架构质量的最简单方法。它们用于评估架构是否符合所需的质量属性。通过 UML 模型生成的软件架构文档是审查的合适基础。
在基于场景的审查中,参与者会通过架构检查预定义的案例。例如,如果一个架构在硬件方面要求可移植,这个过程就包括更换硬件,以证明该软件架构能够满足这个要求。
工具使开发软件架构变得更加容易
软件架构师负责或至少共同负责软件开发的工具环境。他或她了解工具市场,能够识别需求、开发工具需求、评估并最终选择工具。在一家没有工具组的公司里,他还负责工具集成。这些工具使参与软件开发的每个人(尤其是软件架构师)的工作变得更加轻松。
工具使软件架构师的工作变得更加轻松:
· 需求管理
· 版本和配置管理
· 造型
· 生成文档和程序代码
· 构建系统
· 静态分析
· 动态分析
软件架构的实现
软件架构师将整个架构或其部分传递给一名或多名软件开发人员进行进一步细化(设计和实现)。软件架构师与软件开发人员合作创建的编码风格指南显示了如何用目标编程语言实现软件架构。嵌入式系统编程的典型目标语言是 C 和 C++。
在C++中,软件架构可以通过命名空间在程序代码中有效地表示。软件架构师和软件开发人员必须确保定义的软件架构在其整个生命周期中得到保留,并且不会被编程“致死”(也称为软件侵蚀)。
如果软件开发人员确定需要更改架构,则所有相关决策和架构更改均由负责的软件架构师协调。产品对安全性、保密性和模块化的要求越高,软件架构师在整个开发过程中的作用就越关键和重要。