使用模型驱动开发来加速 Android 设备及应用程序的交付

随着 Android 平台在不同的设备上快速地扩展市场份额,嵌入式产品设计变得越来越复杂,而产品生命周期也一再缩短,高效的开发变得重要起来。本文演示了一些情景,在这些情景中使用模型驱动开发(MDD)来帮助开发人员加速基于 Android 的设备和应用程序的交付。

Beery D. Holstein, Rhapsody 产品开发高级经理, IBM

Beery D. HolsteinBeery Holstein 在开发软件工程工具方面有 20 多年的经验,在开发 Rhapsody,一个用于嵌入式、实时软件开发行业的 MDD 工具方面,有 12 年的经验。他是开发 Rhapsody 最早的团队成员之一,在其成为 IBM Rational 软件部分之前(i-Logix,然后是 Telelogic)。Beery 现在管理核心产品的开发,包括其它一些事情,代码产生,反向工程,以及支持 Android 的闭环能力。



2012 年 1 月 16 日

Android 平台正不断扩展在不同设备上,例如手机、平板电脑、电视,以及车载信息及娱乐系统上的应用程序部署市场份额。市场的复杂性,新设备的爆炸性发展,以及不同用户的需求,促使设备制造商和应用程序提供商引入高质量革命性的产品,以缩短开发时间,并同时压缩开发的预算。如此严酷的开发环境使得高效使用开发资源变得越来越重要起来。

随着嵌入式产品设计变得越来越复杂,同时产品的生命周期不断缩短,高效率的开发就变得更加重要起来。模型驱动开发(MDD)的出现,使得加速开发过程变得可能。通过模型驱动开发,软件工程师可以更清楚地理解和分析需求,定义设计规格,使用模拟测试系统概念,并为目标硬件上的直接部署自动生成代码。本文展现了一些场景,在这些场景中可以使用模型驱动开发来帮助开发人员加速基于 Android 的设备和应用程序的交付。

关注 Android 平台

Android 是移动设备的平台。它包含了一个操作系统、中间件,以及关键性的应用程序(参见 参考资料 中所列的“What is Android”链接,以得到更多信息)。Android SDK 为使用 Java 编程语言来在 Android 平台之上开发应用程序提供了一些必要的工具与 API。它包含了一个设备模拟器、调试的工具、内存与性能剖析工具,以及 Eclipse 开发环境的一个插件。图 1 显示了应用程序框架、库、Android 运行时,以及 Linux 核心内 Android 操作系统的主要构件。

图 1. Android 平台的主要构件
构建 Android 平台架构的 5 层

图 1 的大图

Android 软件开发人员可以归类为两类:平台销售商和应用程序开发人员。

  • 平台销售商 就是合并软件和硬件以生产实际设备的机构。这些设备可以作为智能设备应用程序的安装环境,或者应用程序的“设备级”部分(许多这样的应用程序还包含了一个服务器构件)。
  • 应用程序开发人员 就是创建软件的团队,该软件会调用 Android 设备(“平台”)所发布的服务。在该类别之中,需要注意到平台销售商会不断想要交付预载有一系列应用程序的设备,这样设备就可以变得即时有用起来,平台销售商一般想要开发应用程序,并确保由第三方开发的应用程序能够与销售商预期提供的设备兼容。

嵌入式系统的模型驱动开发

您可以使用模型来代表更高抽象层次上的系统,同时改善一致性及精确性。因为模型的抽象层次相比源代码更高,它们支持视图的构建,这些视图可以回答关于系统或者软件的功能、架构,或者行为方面的问题。区别“图形”和语义模型之间的差别是很重要的。用一个孤立的图片来展示一个模糊的概念可以是非常有用的,然而采用一个语义模型来代表软件相关方面的具体内容,可以向开发人员和其他涉众提供更多的好处。特别需要指出,使好的模型与软件一直相关联,这样模型就能一直代表软件的实际内容,这增加了视图之间的一致性,改善涉众之间关于软件本身的交流。

目前最流行的建模语言是统一建模语言(Unified Modeling Language,UML),该语言已经使用了十余年,并取得了巨大的成功。UML 基于一个相对规范的定义,也就是 元模型,元模型既为统一建模语言提供了精确性,又提供了广度。UML 图通过以图形的方式来显示模型元素及其之间的关系,提供了关于系统各个方面的视图。关注应用程序功能和行为的 UML 模型,可以用于生成完全可执行的应用程序,而且该应用程序为在特定的目标、RTOS、中间件和通讯机制上部署做好了准备(参见 参考资料 中所列出的由 Bruce Powell Douglass 所写的两本书)。

注意:
IBM® Rational® Rhapsody® 是为创建实时或者嵌入系统及软件的系统工程师和软件开发人员设计的一种可视化的开发环境。作者使用该软件以及 Android SDK 来演示模型驱动开发(MDD)之中所涉及到的一些概念。


为 Android 软件开发使用 MDD

MDD 提供了一些方法,来加速 Android 设备的开发。例如通过更深入地理解 Android 应用程序和 Android 应用框架,更新和创建新的 Android 应用程序,将软件开发与需求、测试及规划联系起来,从而实现这种优势。这些优势是在基于 Eclipse 来实现的,而 Eclipse 是开发 Android 主机,包括 Android 的 Android SDK 和 MDD 工具的首选开发环境。

将 Android API作为模型的一部分

UML 是用于建模的一种功能强大的语言,但是它为系统信息提供了通用的模板。在过去的数年间,UML 拥有大量的变体,对于特定领域的开发来说,也就是 概要文件(profile)。对相关域更近地建模,降低了模糊性,并提供了同事和客户设计意图更清晰的视图。

为了促进 Android 域内的开发,可以通过一个模型库以及一个概要文件来查看 Android 框架,该模型库由各种包、类,以及公共接口组成,而概要文件包含了一些主要 Android 构建模块作为构造型。开发人员可以将元素从概要文件和模型库中拖拉到 UML 图内。这种方式为正确使用 API 来进行设计和指导自动生成 Android 应用程序提供了更多的帮助。图 2 显示了一个基于 Android API 的 UML 概要文件和模型库。在 Android 应用程序的可视化、创建和更新过程中,都可以在 MDD 工具中使用概要文件和模型库。这使得开发人员在设计时就可以使用 Android 术语了。

图 2. 通过模型库和 UML 概要文件来可视化 Android API
Android 的包(模型库)及概要文件

开发一个 Android 设备涉及到开发的新代码,对已有代码进行的更改,没有变动的已有代码,以及第三方库。可以在模型中可视化已有代码以及第三方插件库,使用 UML 类图可以看到它们的结构以及它们之间的关系。这样的可视化使得开发人员能够理解一个已存在 Android 应用程序的不同方面,并与各种涉众进行交流,例如开发人员、管理人员、架构师,及其他的开发人员,以及测试人员等等。他们还能从模型中获得文档,因此提供了交流的不同方面。

在可视化应用程序的过程中,Android 概要文件与模型库会自动得到使用,以识别特定 Android 的元素,例如各种活动和服务。这就使得不但能够可视化应用程序本身,还可以看到应用程序与 Android API 之间的关系和对 API 使用情况,如图 3 所示。还可以看到,MDD 是怎样集成作为 Eclipse 环境的插件的(查看 参考资料 中对 Paul Urban 文章的引用链接),结合 Android Development Tools(ADT)共同实现建模、编码,以及模拟。

图 3. 可视化 Android 应用程序的架构与规则
有 Java 和建模视角的 Eclipse

图 3 的大图

除了提供图形展现,MDD 工具还在图形环境之中描述了应用程序的执行,可以更好地理解应用程序的运行时行为。图 4 显示了 Android 应用程序中元素之间的在运行时的交互情况,在这一执行期间一个代码代理会对这些情况进行自动捕获。这些信息会以 UML 序列图的方式来展现这些交互,序列图中的垂直线代表 Android 应用程序之中的元素,而水平线显示了元素之间的操作调用。通过从更高抽象层次显示 Android 应用程序中元素之间的交流,应用程序的运行时行为会得到更好的理解,不同的涉众之间也可以更好地进行交流。

图 4. 图形环境提供了对运行时行为的深入洞察
SD 所示 Notepad 内的功能访问

图 4 的大图

创建与更新

如果让 UML 图与源代码不直接关联,只能获得很有限的实践价值。经验清晰地显示,如果系统语义的两个展现方式,一个在模型之中,另一个在代码之中,如果它们之间是分离的,这样模型和代码会很快就不再匹配了。

从一个新的模型开始,或者从一个用以查看已有 Android 应用程序的模型出发,MDD 插件会创建匹配的 Eclipse-Android 项目,并从模型生成相应的代码。它包含了模型的静态部分(例如,包、类与操作)与行为建模(状态机器)。在该过程期间,会自动使用 Android 概要文件与模型库,来创建必须的一些“胶水”代码,来将用户代码与 Android 框架联系起来。

图 5 展示了从架构模型中生成的代码。在开发人员更改模型时,源代码会自动得到更新。与之类似,如果源代码得到了更新,那么模型也会自动得到更改,以反映新的源代码的内容。这种链接模型和代码的能力促进了敏捷性,因为开发人员可以选择处理模型或者源代码,而两者之间的同步也会自动得到维护。

图 5. 从架构模型中生成的代码
源代码与相匹配的类图

调试与测试

尽管在开发过程的早期最有可能引入缺陷,但是往往只有在后期才能发现这些缺陷。而且,发现得越晚,那么修复缺陷的成本就会成指数地增加。如果模型真实地反映了预期的功能以及应用程序的行为,那么您就可以使用模型来在抽象层次的模型上进行测试和调试。

在图 6 之中,可以使用 Android 模拟器来执行从模型中生成的应用程序。您可以同时看到 UML 状态图中的活动状态,并查看执行期间自动生成的 UML 序列图。您可以将序列图与应用程序的预期行为相比较,这样您就可以确认适当的设计操作了。您还可以将自动生成的序列图,与以前执行的应用程序相比较,以识别由于不同的开发迭代周期可能带来的应用程序行为变更。一个基于模型的测试(MBT)工具可以进一步地使用自动生成的序列图,来自动执行它们,因此既可以促进测试,又可以监管测试。

图 6. 可以在代码层次和模型层次上进行调试
活动的状态图和序列图,计时器

图 6 的大图

协作

开发 Android 的设备和应用程序涉及到管理主机系统开发、遗留应用程序维护、硬件开发,等等。管理这些不同领域的集成,会引入复杂性,并需要开发团队独立处理不同领域架构的整体视图。Android 设备的复杂性导致管理联合开发生命周期,测试序列,交付后监管和管理这些系统的挑战性增加了。大量的分布性团队进一步地增加了这种挑战,它通常包括了不同的机构、协议、OEM,以及供应商等等。

持续性的验证与确认是组合了需求、模型、质量管理以及项目监管等方面的支持,如图 7 所示。全体团队可以直接访问模型,该模型可以成为全部设计的源头。YouTube 上的演示(参见 参考资料 的链接)显示了是怎样使用 Rational Team Center 来进行项目开发与监管。

图 7. 协作性地管理智能设备或者应用程序的交付
集成到一起的 ALM 工具

例如,如图 8 所示,通过在模型中来进行查看,您可以使用模型驱动开发来更好地理解需求。需求存储在模型之中,它们与设计元素和测试用例之间的关系可以得到创建,因此有助于提供模型之中的追踪性信息。这反过来可以在测试期间得到使用,以生成需求矩阵和报告。来自需求的信息,例如 ID 或者规格,可以在 Android 应用程序代码之中自动生成,以支持需求、模型设计,及代码实施方面的追踪性。

图 8. 作为模型一部分的需求
类图,作为类附属的需求

图 8 的大图


结论

将 MDD 功能与 Android 开发环境合并起来,有助于提高生产效率,减少投入市场的时间,并降低成本。除了为 Android 编码与建模提供方便的集成开发环境,它还向开发人员提供了设计需求的可视化规格。而且,您可以使用框架来查看已存在的 Android 应用程序,而且能够查看其架构与行为。联系需求、设计与代码的模型使用,还简化了文档,并可以自动生成文档。

在 Android 开发环境之中创建模型之后,Android 应用程序可以自动得到交付。另外,您可以使用模型来执行设计,提供确认,并支持在设计生命周期的早期阶段发现缺陷。该执行还为改进代码的质量提供了自动化的软件单元和回归测试。这一集成式的环境,同时还是分布式团队以及开发团队之间的协作的关键因素。

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=788033
ArticleTitle=使用模型驱动开发来加速 Android 设备及应用程序的交付
publish-date=01162012