《船用软件系统可重构设计指南(T-CICC 02004—2019).pdf》由会员分享,可在线阅读,更多相关《船用软件系统可重构设计指南(T-CICC 02004—2019).pdf(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、ICS 35.020 L70/84 中 国 指 挥 与 控 制 学 会 团 体 标 准 T/CICC 02004-2019 船用软件系统可重构设计指南 Guide to the design of Shipborne Software System refactoring 2020-1-19 发布 2020-1-30 实施 中国指挥与控制学会 发 布 T/CICC 02004-2019 I 目 次 前言.II 1 范围.1 2 术语和定义.1 3 一般要求.2 4 船用可重构组件详细设计.6 T/CICC 02004-2019 II 前 言 本标准按照 GB/T 1.1-2009标准化工作导则
2、第 1 部分:标准的结构和编写的规则起草。本标准由中国指挥与控制学会提出并归口。本标准起草单位:中国船舶重工集团公司第七一六研究所、南京航空航天大学、中国船舶重工集团公司第七一研究所。本标准主要起草人:王阳、孔祥营、张振华、姚洁、王进宁、陈杰、胡洋、庄毅、胡镡文。T/CICC 02004-2019 1 船用软件系统可重构设计指南 1 范围 本标准规定了船用软件系统可重构组件开发、外部接口封装以及通信协议的结构、内容和描述方法,指导船用软件系统运行时可重构设计。本标准适用于基于公共计算环境架构的船用软件系统运行时可重构设计。其他有相似特点的软件系统如有可重构需求也可参照本标准执行。2 术语和定义
3、 下列术语和定义适用于本标准。2.1 船用软件系统 shipbornesoftware system 用于船舶领域由多个独立功能组件集成或耦合而成的软件系统。(注:各组件间功能相对独立且关系复杂,整个系统的行为难以通过各组件特征的简单叠加加以刻画,能够完成复杂、多任务关联的大型任务系统。)2.2 可重构refactoring 在运行时态,依据一定的规则和策略执行功能软件的部署、迁移、关闭、冗余切换等功能,实现船用软件系统的高可用性的过程。2.3 船舶环境 shipborneenvironment 船所处的外在物理环境与内部软硬件环境的集合。一般包含船外环境、舱室环境、硬件环境、软件环境、任务环
4、境等。2.4 组件 component 软件系统内功能相对独立的柔性组成单元,可按需求被其他功能组件替换,对软件系统提供输入输出,可被独立部署、迁移、调用和第三方组装使用。(注:组件也称构件。)2.5 模块 module 能够独立命名并且独立完成特点功能的程序的集合。是软件系统中逻辑上的最小单元。2.6 公共计算环境 public computing environment 基于公共计算环境的软件系统任务逻辑、网络拓扑相对固定,各个软件系统与功能软件功能明确清晰,对实时性要求较高。2.7 可重构软件模型 refactorablesoftwaremodel 约束可重构软件系统设计的核心模型,定义
5、了编写具有可重构特性的可重构组件的基本要求,包括T/CICC 02004-2019 2 属性、封装、接口、通信。3 一般要求 3.1 软件系统可重构结构组成 可重构软件系统应遵循以下一般设计要求:a)软件系统可重构一般包含四个组成部分:可重构软件、环境信息收集模块、监控组件与重构执行模块;b)可重构软件一般应包含一个或多个功能组件;功能组件至少包含一个功能模块;c)一个可重构软件,对应一个或多个适配组件,以适配不同的底层软硬件环境;d)所有环境信息收集模块连接到数据分析模块,形成传感器网络;e)决策调度组件与每一个可重构软件中的监控组件、重构执行模块通信,以完成决策调度工作。依据可重构软件系统
6、一般设计要求,可重构软件系统组成示意图如图 1 所示。决策调度组件决策调度组件感知评估模块感知评估模块重构决策模块重构决策模块功能模块1功能模块1功能模块N功能模块N可重构组件可重构组件功能组件1功能组件1环境信息收集模块环境信息收集模块可重构软件可重构软件数据分析模块数据分析模块监控组件监控组件重构执行模块重构执行模块多源信息融合多源信息融合环境态势感知环境态势感知功能组件M功能组件M可重构软件系统可重构软件系统 图 1 可重构软件系统组成 3.2 软件系统可重构设计流程 软件系统可重构一般采用以下设计流程,如图 2 所示:a)在组件开发过程中对功能组件进行约束和封装,形成可重构组件;b)一
7、个或多个可重构组件、功能组件与基本框架形成可重构软件;c)一个或多个可重构软件与重构功能的组件或模块(注:包含监控组件、可重构执行模块以及环境信息收集模块)组成可重构软件系统。功能组件功能组件可重构组件可重构组件可重构软件可重构软件功能软件功能软件封装构成可重构软件系统可重构软件系统构成构成组成重构功能组件或模块重构功能组件或模块 图 2 软件系统可重构设计流程 T/CICC 02004-2019 3 3.3 功能组件设计 功能组件是软件系统中具有相对独立功能的模块,一般具有以下特性:a)一个独立的功能单元,具有明确的对外接口,具有详细的功能说明,能够独自实现或通过组件间的组合实现具体功能;b
8、)允许依赖于组装环境,可使用平台提供的服务,或使用其它组件的功能;c)仅允许通过接口进行访问和调用;d)与其他组件或软件松耦合,替换组件时对其他组件的功能性不产生影响。3.4 可重构组件设计流程 可重构组件设计宜采用以下几个步骤,如图 3 所示:a)获取可变性需求:根据应用需求,对功能结构、业务逻辑流程、进行建模;b)健壮性分析:标明新组件中可变部分,根据功能与接口查找统一模型数据库,是否有可参考的实例组件与接口;c)根据模型映射为实际的界面设计、业务逻辑与数据库、表,设计内部结构,定义接口,将需求分解实现功能组合;d)依据 c)的逻辑结构、内部结构与接口定义,采用编码方法完成可重构组件开发;
9、e)可重构组件完成之后,应进行封装打包、测试工作。获取重构需求获取重构需求健壮性分析健壮性分析设计内部结构划分功能模块设计内部结构划分功能模块可重构组件编码实现可重构组件编码实现编码封装功能性测试封装功能性测试 图 3 可重构组件设计流程 3.5 可重构软件实现 可重构软件一般由可重构组件、功能组件以及基本框架组成。在组件开发过程中对功能组件进行必要的约束,形成可重构组件,一般包含:a)可重构组件分类的要求;b)可重构组件封装的要求;c)可重构组件接口的要求;d)可重构组件通信的要求。3.6 数据分析模块 数据分析模块根据接口协议对检测录取的应用数据进行在线、实时分析,提取出船外环境信息,然后
10、向外分发。一般应包含:a)多源信息融合 主要将多个通道获得的环境信息融合为软件系统的综合环境信息,实现以单个功能应用软件为基本粒度的环境信息整合,提供面向服务器、舱室、以及任务系统的综合环境信息,并传递给态势感知模块。T/CICC 02004-2019 4 b)环境态势感知 对综合环境信息进行评估分析,形成环境态势,为下一步调度决策组件提供必要信息。3.7 决策调度组件 决策调度组件依据执行步骤分为感知评估模块、重构决策模块和重构执行模块。a)感知评估模块 感知评估一般包含以下步骤:确定评估对象;确定评估属性与目标;确定评估标准;确定评估算法;确定评估结果。b)重构决策模块 主要完成:给出影响
11、重构方案决策的约束因素;综合考虑各类约束因素给出最佳重构方案的规则方法。c)重构执行模块 对需要重构的软件进行资源需求分析,明确重构的资源需求;在资源分配规则的约束条件下,根据资源可用状态评估的结果对资源进行重构分配;设定需求阈值,当环境变化对软件可用度的影响数值大于实时任务需求时,可以暂不进行自适应;当环境变化对软件可用度的影响小于实时任务需求时,在不影响高优先级任务时,给出重构方案决策的结果,并依照方案执行重构。3.8 可重构组件分类 3.8.1 可重构组件划分 依据实现功能的不同,可重构组件一般可以如下划分管理组件与应用组件,具体如图 4 所示:应用组件应用组件功能组件功能组件环境组件环
12、境组件决策调度组件决策调度组件信息收集模块信息收集模块数据分析模块数据分析模块感知评估模块感知评估模块重构决策模块重构决策模块重构执行模块重构执行模块监控组件监控组件管理组件管理组件可重构组件可重构组件 图 4 可重构组件分类 T/CICC 02004-2019 5 3.8.2 监控组件 实现船用软件系统中执行关键任务的可重构软件备份冗余运行,确保软件系统的高可用性。冗余运行组件将软件运行状态信息实时监控,并反馈给决策调度组件;需要时实现可重构软件、可重构组件的备份运行与状态切换。主要功能一般包含:a)启动一个或多个可重构软件/可重构组件;b)关闭一个或多个可重构软件/可重构组件;c)完成主程
13、序与备份之间的状态切换。3.8.3 决策调度组件 3.8.4 环境组件 信息收集模块收集但不局限于下列信息:a)船外环境信息 船所处的外部环境信息,需要时可以采集传感器数据并返回数据。b)舱室环境信息 船内部存放物理设备舱室的环境信息,主要采集:舱室温度;舱室湿度。c)硬件环境信息 舱室内部存放物理设备的硬件信息,主要采集:服务器的运行状态;CPU 温度;主板温度;硬盘温度;服务器计算资源可用量与总量;服务器内存资源可用量及总量;服务器网络资源可用量及总量;服务器存储资源可用量及总量。d)软件环境信息 舱室物理设备上运行的计算中心、存储中心等软件内部的资源、环境信息,主要采集:船用软件运行状态
14、;船用软件计算资源可用量与总量;船用软件内存资源可用量及总量;船用软件网络资源可用量及总量;船用软件存储资源可用量及总量。e)任务环境信息 T/CICC 02004-2019 6 设备是正在运行任务的基本信息,主要采集:正在执行任务种类;正在执行任务优先级;队列中任务种类;队列中任务优先级。3.8.5 功能组件 功能组件应具有一定实用功能、可用于完成用户任务中某些需求的一类组件。一般包含实现具体功能的模块,例如算法功能模块面向用户提供用于实际业务的算法支持,界面模块提供可重构软件平台主界面,以及在业务组件中为人机交互界面。业务功能模块为实现某一特定功能的程序集合等等。4 船用可重构组件详细设计
15、 4.1 可重构组件设计模型 约束船用软件系统可重构设计的核心模型,称为核心 RSM(refactoring software model),定义编写具有可重构特性的可重构组件的基本要求。如图 5 所示:a)属性,提供了一组适用于船舶环境下可重构组件的属性值;b)封装,提供了一组适用于船舶环境下软件封装编码约束;c)通信,提供适用于船舶环境下可重构组件通信约束;d)接口,提供适用于船舶环境下可重构组件与外部调用约束。船用可重构组件船用可重构组件封装封装接口接口属性属性通信通信 图 5 RSM 模型 4.2 属性 4.2.1 必选属性 可重构组件的属性应以简单的键/值对方式进行存储,必选属性应包
16、含:a)Name 名称取值为简短字符串,反映该可重构组件能够处理的问题。b)Id 标识符取值为全球唯一标识符,区分不同的可重构组件。4.2.2 可选属性 可重构组件的类型应以简单的数/值对方式进行存储,可选属性应包含:a)日期(Date)包含一个符合默认 XML 格式(YYYY-MM-DD)的有效日期,说明可重构组件的最后修改日期。T/CICC 02004-2019 7 b)状态(State)状态说明了可重构组件当前的状态,主要用于可重构组件在可重构组件库中发布之前所需经历的一系列评审。c)版本(Version)版本是一串字符串,用于比较两个标识符属性相同的可重构组件。d)访问权限(Acces
17、s right)访问权限是一串字符串,来说明用户对可重构组件的访问权限。e)简短描述(Short-description)可重构组件的简短描述,主要关于可重构组件整体或某些组成元素的说明文字,查询可重构组件库时应提供可重构软件的 name 和 short-description 如:The Description.value Here f)属性(Reference)属性指向一个外部文档或 URL,对软件进行详细的解释说明。g)类型(Type)类型是一串字符串,指定可重构组件类型的信息,如:h)类别(Category)可重构组件库类别不同分类存储三种组件:功能组件和管理组件。i)依赖类型(Dep
18、endency-type)依赖类型描述了可重构组件在设计时、编译时或运行时的依赖,为适配组件的编写提供必要信息。4.3 封装 船用可重构软件的可重构性质,由组成软件的可重构组件体现,因此需将不同功能的组件打包封装为不同类型的可重构组件,因此对组件进行封装约束,每种类型封装约束各不相同,只对功能组件进行封装要求。功能模块一般应具有一定实用功能、可用于完成用户任务中某些需求的一类组件。在实现过程中,应包含但不局限于以下两者:a)函数封装为类 将函数封装为类,提供对应的 Get 和 Set 函数用于数据的导入导出,对特定共有参数进行内部封装。(注:以编程语言 C+为例)b)标识组件专有名称属性 标识
19、该信号发生组件的相关信息属性,如组件名称、版本号、修改日期、开发人员等。T/CICC 02004-2019 8 4.4 接口 4.4.1 接口定义与分类 船用可重构组件进行封装之后,功能相对完整、独立,对外作为一个整体提供各类接口调用。可重构接口的设计,按照各类接口完成的功能不同一般划分为以下四类:a)查询类接口 查询类接口用于传递参数信息,依据传入参数值的不同返回相应的查询值。外界用户可以通过查询接口,获得该可重构组件的属性值,包括但不局限于:可重构组件的名称、id、类型、版本号、完成功能说明、依赖信息等等。外界用户也可通过查询接口获取该可重构组件接受的输入值与类型,以及输出值、类型以及各字
20、段含义。b)操作类接口 操作类接口接受外界输入,根据输入字符串的不同进行对应的操作,并返回执行操作的状态与执行结果的相关信息。c)上传下载类接口 上传下载类接口作为一个文件传输接口,需要与其他组件进行通信,实现文件的发送与接收、解析工作等。同时也是能够完成可重构组件迁移的必要接口。返回值可以是响应代码、响应体、路径 URL信息等等。d)通信类接口 通信类接口用于可重构组件之间、可重构组件与一般组件之间的通信,遵循约定的通信协议,通信协议可自行开发,也可以应用 socket、xmpp 等协议进行通信。4.4.2 接口设计 a)查询类接口 返回类型应是字符串,通常为对象或数组对象,见表 1、表 2
21、。表 1 查询类接口参数说明 参数名 必选 类型及范围 说明 xxx true String 表 2 查询类接口返回值说明 返回值 类型 返回值 说明 result String 结果代码信号 ok 结果成功,fail 结果失败 Response Object 响应体 Key1 int 响应字段值 Key2 String 响应字段值 Key3 Object 响应字段值 可以包含对象体 Key3_Key1 int 响应字段值 T/CICC 02004-2019 9 b)操作类接口 返回执行的状态,必要时可以返回执行结果相关信息,见表 3、表 4。表 3 操作类接口参数说明 参数名 必选 类型及范
22、围 说明 xxx true String 用户名 表 4 操作类接口返回值说明 返回值 类型 返回值 说明 result String 结果代码信号 Response Object 响应体 id int 增数据的 ID 或者标志 text String 操作提示语 如操作成功,可为空 c)上传下载类接口 返回上传下载结果,必要时可以返回执行结果相关信息。见表 5、表 6。表 5 上传下载类接口参数说明 参数名 必选 类型及范围 说明 xxx true String 用户名 xxx true File 值为文件类型 表 6 上传下载类接口返回值说明 返回值 类型 返回值 说明 result St
23、ring 结果代码信号 Response Object 响应体 filePath String 文件存放的绝对路径 上传 d)推送类接口 返回推送结果,必要时可以返回执行结果相关信息,见表 7、表 8。表 7 推送类接口参数说明 参数名 必选 类型及范围 说明 xxx true String 用户名 表 8 推送类接口返回值说明 返回值 类型 返回值 说明 result String 结果代码信号 Response Object 响应体 T/CICC 02004-2019 10 4.5 通信 4.5.1 协议格式 船用可重构软件中组件间通信采用消息队列协议,定义属性 Msg,包含可重构组件通信
24、的相关信息。通信协议应用于平台层级的可重构组件与其他组件或软件框架的信息通信。通信协议亦可采用其他协议,如 socket、xmpp 等。当使用其他协议时,本章内容仅作为参考。4.5.2 协议数据字段 协议数据字段应包含:用于方法参数的原生数据字段及用于多个应用之间传递数据的字段表。a)整数(Integers)定义原生整数类型长度:无符号字节应为 8 bits;无称号短整形应为 16 bits;无符号长整形应为 32 bits;无符号长长整形应为 64 bits;整形和字符串长度总是无符号的,且按网络字节顺序保存。b)位字段(Bits)定义原生位字段类型:位累积成整个字节;在帧中两个或更多位相邻
25、时,应被当作成一个或多个字节;字节中以低位开始。c)字符串(Strings)字符串长度可变;由一个整数长度后跟零个或多个字节数据表示;短字符串应以 8 位无称号整形长度后跟 0 个或多个字节数据存储;短字符串最长为 255 字节的 UTF-8 数据且不能包含二进制零字节;长字符串应以 32 位无称号整形长度后跟 0 个或多个字节数据存储;长字符串可包含任意长度数据。d)时间戳(Timestamps)时间戳应以 POSIX time_t 格式保存;长度应为 64 位。4.5.3 协议通用帧格式 协议通用帧格式为:a)帧应以 7 个字节的头开始,采用图 6 格式;b)七个字节中应包含一个 type
26、 字段(长度 1 字节),一个 channel 字段(长度 2 字节)和一个size 字段(长度 4 字节)。size 字段是负载的大小,不包括结束帧字节。T/CICC 02004-2019 11 图 6 通用帧格式 c)Type 字段定义如下帧类型:Type=1,METHOD:方法帧;Type=2,HEADER:内容头帧;Type=3,BODY:内容体帧;Type=4,HEARTBEAT:心跳帧。d)Channel 字段定义了如下的通信通道类型:Channel=0,代表全局连接中的所有帧;Channel=1-65535,代表特定通道的帧。4.5.4 协议方法帧 方法帧的体应包含类型、方法的标
27、识符与一个不可变的数据字段列表(arguments),采用图 7 格式。图 7 方法帧格式 a)类型 class-id 与方法 method-id 应是由类和方法定义的 short 类型常量;b)数组字段表 arguments 应是特定于每个方法中的一组字段:Class id 中%x00.01-%xEF.FF 范围内的值被标准类保留使用;Class id 中%xF0.00-%xFF.FF(%d61440-%d65535)范围内的值可用于非标准扩展类实现。4.5.5 协议内容头帧 4.5.5.1 内容头负载应采用图 8 格式。图 8 内容头帧格式 a)class-id 应与方法帧 class i
28、d 匹配;b)节点应对无效的 class-id 应 501 回复码(帧错误)并且抛出一个连接异常;c)weight 字段未使用时应置为 0;d)body 定义了内容体的总大小,长度为 64 位值;T/CICC 02004-2019 12 e)无内容体帧时 body 应置为 0;f)property flags 为位数组,应表示每个属性的存在性情况。位应从最高到最低进行排序,即位 15 代表第一个属性;g)property flags 允许指定多于 16 属性。当最后位(0)被设置是,表明其后有进一步的属性标志字段;h)内容帧中的通道编码不能为 0,收到 0 通道编号的节点时应使用 504 回复
29、码(通道错误)来发出异常信号 5.5.4.5 协议内容体帧。4.5.5.2 内容体负载应是二进制块,其后跟着一个结束帧字节,采用图 9 格式。图 9 内容载体帧格式 a)内容体允许根据需要分成多个帧;b)帧负载超过最大值时,可由两端协商解决;c)节点应将分成多个帧的内容体作为单一集合进行存储处理,采用方法包括:分成更小的帧重新传输 连接成单个块分发给应用程序 4.5.6 协议心跳帧 心跳帧显示当前会话的连接状态,应满足以下行为:a)连接时心跳帧速率、时间可调;b)心跳帧的通道编号应为 0;c)收到无效心跳帧的节点应使用 501 回复码(帧错误)抛出异常;d)节点不支持心跳,应丢弃心跳帧并且不发错误或失败信号;e)发送方(Client)收到 Connection.Tune 方法后应开始发送心跳,收到 Connection.Open 后,应开始侦听;f)接收方(server)应在收到 Connection.Tune-Ok 后,开始发送和监控心跳;g)节点应按固定频率来发送心跳;h)节点在两个心跳间隔或更长时间内,未探测到传入的心跳,运行在不遵循Connection.Close/Close-Ok 握手的情况下,关闭连接,并记录错误信息。