阅读以下关于开放式嵌入式软件架构设计的相关描述,回答问题1至问题3。
【说明】
某公司一直从事宇航系统研制任务,随着宇航产品综合化、网络化技术发展的需要,公司的业务量急剧增加,研制新的软件架构已迫在眉睫。公司架构师王工广泛调研了多种现代架构的基础,建议采用基于FACE (Future Airborne Capability Environment)的宇航系统开放式软件架构,以实现宇航系统的跨平台复用,实现宇航软件高质量、低成本的开发。公司领导肯定了王工的提案,并指出公司要全面实施基于FACE的开放式软件架构,应注意每个具体项目在实施中如何有效实现从需求到架构设计的关系,掌握基于软件需求的软件架构设计方法,并做好开放式软件架构中各段间的接口标准化设计工作。
【问题1】(9分)
王工指出,软件开发中需求分析是根本,架构设计是核心,不考虑软件需求便进行软件架构设计很可能导致架构设计的失败,因此,如何把软件需求映射到软件架构至关重要。请从描述语言、非功能性需求描述、需求和架构的一致性等三个方面, 用300字以内的文字说明软件需求到架构的映射存在哪些难点。
【问题2】(10分)
图3-1是王工给出的FACE架构布局,包括操作系统、I/O 服务、平台服务、传输服务和可移植组件等5个段;操作系统、I/O和传输等3个标准接口。请分析图3-1给出的FACE架构的相关信息,用300字以内的文字简要说明FACE5个段的含义。

【问题3】(6分)
FACE架构的核心能力是可支持应用程序的跨平台执行和可移植性,要达到可移植能力,必须解决应用程序的紧耦合和封装的障碍。请用200字以内的文字简要说明在可移植性上,应用程序的紧耦合和封装问题的主要表现分别是什么,并给出解决方案。
【问题1】
(1)软件需求通常以非正规的自然语言形式频繁获取。而软件架构则更倾向于使用一种更为正式、结构化的语言来描述系统的组件、接口、通信和交互方式。
(2)非功能属性(如性能、安全性、可用性等)在软件需求中通常被描述为系统属性,但在架构模型中形成规约却较为困难。这是因为非功能属性往往涉及多个系统组件和交互,需要综合考虑多个方面,而架构模型则可能更侧重于描述系统的结构和功能。
(3)从软件需求映射到软件架构的过程中,保持一致性和可追溯性也是一个复杂的任务。由于单一的软件需求可能涉及多个软件架构的关注点,而一个架构元素也可能对应多个软件需求,因此确保它们之间的映射关系是准确且可追溯的非常重要。
【问题2】
操作系统服务段:这是FACE架构的基础,负责提供操作系统、运行时环境和操作系统级的健康监控服务。它通过开放式OSGi框架,为上层功能提供标准化的操作系统接口,并支持上层组件的即插即用能力。
I/O服务段:这个服务段主要负责对专用I/O设备进行抽象,以简化平台服务段软件与硬件设备之间的交互。然而,由于图形服务软件和GPU处理器的紧密关系,I/O服务段并不对GPU驱动进行抽象。
平台服务段:此服务段提供了用户所需的共性软件服务,如系统级健康监控、配置管理、日志记录和流媒体服务等。它进一步细分为平台公共服务、平台设备服务和平台图像服务三类。
传输服务段:作为数据传输的核心,该服务段主要为上层可移植组件段提供平台性的数据交换服务。它确保可移植组件之间通过标准接口进行通信,禁止组件间的直接调用。
可移植组件段:这是FACE架构中提供多组件使用能力和功能服务的部分。它主要包括公共服务和可移植组件两类。
【问题3】
(1)紧耦合问题通常指的是系统中不同部分之间的高度依赖关系。主要变现在:I/O问题、业务逻辑问题、表现问题。
为了解决紧耦合问题,可以采用分离原则。这意味着将系统的不同部分(如I/O、业务逻辑、表现层等)进行隔离,使得它们之间的依赖关系尽可能少。
(2)封装通过将对象的属性和方法隐藏起来,只提供必要的接口供外部调用,主要表现在:
ICD硬编码问题、组件的紧耦合问题、直接调用问题
为了解决封装问题,可以采用提供数据源或槽的软件服务的方法。将紧耦合组件分解出应用程序,并将平台相关部分加入计算环境中,在计算平台内提供数据源或槽的软件服务,并实现接口标准化。
【问题1】
在软件开发过程中,软件需求和软件架构是两个至关重要的组成部分,但它们之间确实存在一些明显的差异和挑战。
首先,软件需求通常以非正规的自然语言形式频繁获取,这主要是因为需求往往来源于业务用户、产品经理或利益相关者,他们习惯于使用日常语言和概念来表达他们的期望和需要。而软件架构则更倾向于使用一种更为正式、结构化的语言来描述系统的组件、接口、通信和交互方式。这种语言差异可能会导致在理解和沟通上的障碍。
其次,非功能属性(如性能、安全性、可用性等)在软件需求中通常被描述为系统属性,但在架构模型中形成规约却较为困难。这是因为非功能属性往往涉及多个系统组件和交互,需要综合考虑多个方面,而架构模型则可能更侧重于描述系统的结构和功能。因此,如何在架构中准确、全面地描述非功能属性是一个挑战。
最后,从软件需求映射到软件架构的过程中,保持一致性和可追溯性也是一个复杂且困难的任务。由于单一的软件需求可能涉及多个软件架构的关注点,而一个架构元素也可能对应多个软件需求,因此确保它们之间的映射关系是准确且可追溯的非常重要。这需要采用适当的需求管理和架构设计技术,以确保需求和架构之间的紧密联系和对应关系。
【问题2】
FACE架构由五个主要的服务段组成,每个服务段都扮演着特定的角色,以确保系统的高效、可靠和模块化运行。以下是这五个服务段的简要描述:
操作系统服务段:这是FACE架构的基础,负责提供操作系统、运行时环境和操作系统级的健康监控服务。它通过开放式OSGi框架,为上层功能提供标准化的操作系统接口,并支持上层组件的即插即用能力,使得系统的扩展和维护变得更为便捷。
I/O服务段:这个服务段主要负责对专用I/O设备进行抽象,以简化平台服务段软件与硬件设备之间的交互。然而,由于图形服务软件和GPU处理器的紧密关系,I/O服务段并不对GPU驱动进行抽象,以确保图形处理的高效性和直接性。
平台服务段:此服务段提供了用户所需的共性软件服务,如系统级健康监控、配置管理、日志记录和流媒体服务等。它进一步细分为平台公共服务、平台设备服务和平台图像服务三类,以满足不同应用场景的需求。
传输服务段:作为数据传输的核心,该服务段主要为上层可移植组件段提供平台性的数据交换服务。它确保可移植组件之间通过标准接口进行通信,禁止组件间的直接调用,从而提高了系统的可移植性和互操作性。
可移植组件段:这是FACE架构中提供多组件使用能力和功能服务的部分。它主要包括公共服务和可移植组件两类,使得开发者能够基于这些组件快速构建和部署应用程序,同时确保这些应用程序在不同平台上的可移植性。
综上所述,FACE架构的五个服务段共同协作,为开发者提供了一个高效、可靠和模块化的软件开发环境。
【问题3】
紧耦合问题通常指的是系统中不同部分之间的高度依赖关系,这种依赖关系可能导致系统难以维护、扩展和测试。
I/O问题:当I/O操作(如文件读写、网络通信等)与业务逻辑紧密耦合时,任何I/O操作的更改都可能影响到整个业务逻辑,使得系统难以维护和扩展。
业务逻辑问题:如果业务逻辑与底层系统(如数据库、文件系统等)紧密耦合,那么在业务逻辑发生更改时,可能需要同时修改底层系统,这增加了系统的复杂性和维护成本。
表现问题:如果用户界面与业务逻辑紧密耦合,那么任何用户界面的更改都可能影响到业务逻辑,这限制了用户界面的灵活性和可定制性。
为了解决紧耦合问题,可以采用分离原则。这意味着将系统的不同部分(如I/O、业务逻辑、表现层等)进行隔离,使得它们之间的依赖关系尽可能少。通过定义明确的接口和协议,不同部分之间可以通过这些接口进行通信,而不需要直接访问对方的内部实现。
接下来,我们来看封装问题。封装是面向对象编程中的一个重要概念,它通过将对象的属性和方法隐藏起来,只提供必要的接口供外部调用,从而保护对象的内部状态和数据安全。然而,在某些情况下,封装可能会出现问题,如:
ICD硬编码问题:当接口控制文档(ICD)中的信息被硬编码到代码中时,任何ICD的更改都需要修改代码,这增加了系统的维护成本。
组件的紧耦合问题:如果组件之间的依赖关系过于紧密,那么一个组件的更改可能会影响到其他组件,导致系统难以维护和扩展。
直接调用问题:当组件之间直接调用彼此的接口时,如果接口发生变化,可能需要修改多个组件的代码,这增加了系统的复杂性。
为了解决封装问题,可以采用提供数据源或槽的软件服务的方法。这意味着将紧耦合的组件分解出应用程序,并将平台相关部分加入计算环境中。在计算平台内,提供数据源或槽的软件服务,这些服务可以封装底层系统的复杂性和变化性,为上层应用提供稳定、可靠的接口。同时,通过实现接口标准化,可以确保不同组件之间可以通过标准接口进行通信,降低了系统的复杂性和维护成本。