广告
返回顶部
首页 > 资讯 > 移动开发 >Android敏捷开发指南(上)
  • 299
分享到

Android敏捷开发指南(上)

Android 2022-06-06 13:06:00 299人浏览 薄情痞子
摘要

  本文紧密结合移动开发方法与技术,围绕Android平台的开发探讨提供更高质量移动产品的解决方案。作者中分析了移动开发中常见的问题,从两方面阐述了ThoughtWorks

  本文紧密结合移动开发方法与技术,围绕Android平台的开发探讨提供更高质量移动产品的解决方案。作者中分析了移动开发中常见的问题,从两方面阐述了ThoughtWorks使用的测试开发方案和相应的架构方法与常用工具应用,并进一步阐述了为移动开发流程所提供的持续发布方案。

  随着云计算、移动互联等一系列新技术概念的崛起,新一轮的IT经济正在不断扩大发展。带来无限机遇的同时,也提出了许多有别于传统开发的挑战。近几年来,我一直在尝试各种移动项目,虽然它们在应用领域、技术类型以及工作模式等方面各不相同,但我在摸索中逐渐总结出了一些比较具有共性的问题。

  移动项目中的常见问题

  为了实现较好的用户体验,反复的设计与验证导 致产品发布时间延长。移动应用由于其多样性的应用场景,使产品设计侧重于适应不同目标的展现方式与操作习惯。设计实现的方式与使用用户群、企业服务模式、新的科技实现手段,以及各种碎片分化的目标支持设备等一系列因素密切相关。在产品实现初期,许多的内容和形式都需要在已有开发原型的基础上,进行紧密结合用户体验的测试。不少团队花了很长时间完成了目标,可测试后又要经历反复且大量的修改。这对产品的如期发布提出了巨大的挑战,发布时间也会因此一拖再拖。 即便是产品磕磕绊绊地发布了,设计的改变往往也是让人头痛的问题。

  市场导向性强,业务需求变化快与缩短产品交付周期需求之间产生矛盾。经过了一系列的市场分析、产品设计、项目研发过程后,一个移动产品终于投放到了市场。但这完全不能看做是一个项目的交付完成,恰恰相反,这只是一个新阶段的开始。在残酷的市场竞争中,用户不是产品的被动消费者,而是需求的提出者,会在各种下 载市场(例App Store、Google Play)发出评论对应用进行评估,从而直接影响应用的市场占有率。同时随着一系列用户体验数据的收集分析和整理,业务部门的需求递增,新功能点开始一个 个被搬上研发经理的台面。这给开发团队应对需求改变以及对递增的代码结构升级能力提出了更高要求。图1展示了一个产品在过去一年多时间里首页面的变化。

  可以看出在项目所经历的四个比较大的阶段中,仅一个首界面的功能,也经历了从开始的普通列表界面,到后来增加地图功能、书签的过程。在第四个阶段中,为了满足用户注册登录等需求,首页面还进行了基于左侧滑动菜单的导航转型与登录反馈等的功能扩充。每个重大阶段的转型,都来自真实的市场评论数据,并结合 Omniture(通过收集用户数据行为分析的工具)等产品的体验数据分析与业务增长需要进行开发。

  为了实现更加精细的体验效果并兼容 Android的各个版本(例如图1中列表和地图间的切换需要通过动画三维翻转实现等),所有这一切都必须在同一个Activity内完成交互。这给大量的页面逻辑、状态和视图层级关系的升级改造带来了很大的难度。与此相对应的坏消息是,移动应用对短周期的快速发布有着强烈的需求。即使是一个好的应用,如 果没有及时保持稳定频率的更新,很快会被接踵而来的竞争者追赶,后落到被用户遗忘的境地。从某种角度讲,除了产品新功能的推出外,应用程序的更新也具 备某种广告的职能,去强化品牌在消费人群中的地位,稳定和扩大市场的占有率。

  移动团队虽小,但要求更良好的产品集成性。同一个产品,一般根 据支持平台的数量以及并行发布需求,配置有多个小团队和数据整合(api)团队。每个团队的开发因为进度不同和平台特点的不同,往往在整合过程中提出各自不同的集成需求(包括数据集成和逻辑集成),例如Android的内存性能不好,要求服务端的图片质量与剪裁要和iOS有所区别;再例如有时为了降低网络 性能对体验的影响,会更改设计,将逻辑分散在API整合段和设备端。这为团队间的整合埋下了风险。事实上,这在多团队的并行开发中,并不是个别现象。

  多样化的设备和版本、长期的维护开发,带来快速升高的测试成本。随着开发功能的增加,页面布局、操作响应和交互处理大量逻辑模块增加,以及越来越分化的设备 和系统版本,给测试工作带来了相当大的难度。在之前我做咨询时,一个项目经理告诉我,他有一个运行了一年半的项目,当时还有一周要上线,可仍有60个Bug,5名测试工程师因为对质量没有信心而不停加班,开发也为修改一个个错误都头痛不已。

  通过技术方案寻求解决途径

  为了解决上述常见移动项目的问题,在项目实践中,我们试图通过合理地运用技术方案来帮助完成高质量移动软件的目标。

  实现高可维护性的代码,减少代码扩展过程中的腐化和变动带来的副作用。随着功能增加,越来越多的逻辑模块被堆砌在同一个单元内,导致代码可读性下降,维护复杂度提高。这时的修改都存在破坏原有功能的潜在风险。

  如果解决这两个问题,将在很大程度上提高应用在开发过程中对产品需求改变和开发周期控制的适应能力。实践中,我们使用元素组件化开发和测试驱动开发解决方 案。组件化的基本目的是将代码的可读性置于编码过程中,通过形成独立子元素组件来代理自身的功能逻辑,并以此结构化XML的布局资源,提高可读性。同 时,通过测试驱动的开发方式为代码的粒度质量提供原始保障,让代码演进过程减少编码副作用破坏其他功能的现象,从而提升代码的可维护性。

  通过功能自动化测试,保证开发过程中测试成本的相对稳定和质量保障。这里要分两个部分来谈。第一部分是通过提高自动化测试的比例,减少由人工重复完成的测 试。在应对多平台、多版本、反复回归测试时,自动化测试对质量的保障显得尤为重要;第二部分是由于对需求理解偏差,产生的质量问题和因此增加的返工。这 里需要引入基于业务行为驱动开发(BDD)的自动化测试管理。让需求成为可验证的执行代码,将会巨大限度的缩小业务需求、开发和测试之间的鸿沟。

  当然,我在从事多个项目开发咨询的过程中,也曾遇到大量的需求变更,导致自动化测试废弃,从而提高成本的案例。这时往往要注意协调自动化测试金字塔,即单元测试、功能测试、UI界面测试等几部分的比例关系,实现质量与成本的平衡。

  让随时可工作的产品来提高团队的交付能力。面对不断变更的需求与任何时候都可能出现的产品延时,提高团队的整体交付能力,显得格外的重要。作为重要一环的持续集成和可用多点环境下测试,便成为这其中不可或缺的重中之重。而如果产品的各个平台都可以保证相对稳定的持续集成与发布,那么这样的方案也自然成为消 除团队合作壁垒的重要技术保障。

  加快用户体验验证周期,增加修改频率降低单次修改的调整规模。的用户体验,永远是前端工程师关心的部分。这需要能够尽早地去做更深入的分析与验证,更快地发现问题,并接进行修改与调整。同时缩短反馈回到开发端的周期,将大大降低代码的修改难度,提高产品效率。而自动化的编译、集成与部署操作流程是用一个非常有效的方法来完成闭环回路。可持续集成与部署技术为缩短周期提供了根本上的保证。

  刚刚提到了许多用来移动项目问题的解决方案。那么下面让我们来看看在Android开发领域,这些方案是如何具体实施的。

  结构化组件

  所谓组件化是将应用内部的UI元素充分拆分成相互独立子部件(例如常见的Android的Widget组件)。大的子部件由多个小的子部件组成。

  这样的好处是除了在代码层面上更易于修改外,同时也通过对类和方法的命名实现了XML代码的结构化。图2作为一个简单的示例,大致表现了图1中第四个阶段首页面的组成方式。可以看出XML代码中的每一个子组件都是一个相应的视图组件,这些组件通过Java类和XML的对应完成一个子视图功能。XML中大体可 以表达出页面视图的一个可读性组成方法,而对应的Java文件则代表了每个视图的生成细节模型和交互响应逻辑。

  另外需要说明的是,我们曾尝试了多种消息传递机制。后证明,组件的单一顺序传递是一种相对稳定和易理解的传递方法,子视图的交互消息只能传递给其父视图,然后由父视图传递给其他 子视图。即如图2中ContentRotableScreen接收到一个自己不能处理的响应事件,应该将消息传达给SlidableContainer, 再统一分发给需要处理事件的NavMenuScreen作相应的动作。

  这样做既保证了消息传递的准确性,又维护了一个统一的代码结构,方便实现代码的可读性和可维护性。

  单元测试工具

  单元测试是测试驱动开发的主体测试构成,旨在从代码粒度上实现对应用质量的把握,是可维护性代码的核心。其具体粒度大小取决于在代码出现问题后,能在多大程 度上准确定位问题。这也是单元测试大的意义所在。这份意义所带来的是更高的代码可维护性、更稳定的代码可重构性、更便捷的可扩展性。而这一切为稳定结构 变化、减弱代码腐化影响、技术改进所带来的代码变更奠定了良好的基础。

  为了实现比较良好的单元测试,需要一系列代码结构优化和测试工具使用的辅助。

  在做深入说明Android系统开发结构之前,先来看一下在该平台开发时所常见的工具和相应的优缺点对比,如表1所示。

  根据现有经验,我们曾尝试了表1中四种单元测试方法。很难说哪一个方案是好的,在目前的项目实践中,我们联合应用Robolectric和Java JUnit,为了避免Robolectric速度、模拟功能不全和质量检测工具等问题,需要对Robolectric的代码进行修改,并尽量减少对其的应 用。转而通过一些结构上的应用,大量采用Java JUnit测试。

  JUnit。鼎鼎大名的Java测试框架,无数应运而生的mock框架支持,使其无论是可用性还是易用性方面在Java领域无人能及。利用JUnit可以实现非常快捷单元测试。也是常见的一种单元测试形式。

  Robolectric。这是由Pivotal Labs开发的一套开源的Android单元测试框架。其通过一系列对底层Android元素的替换来实现对原有元素调用的模拟,从而实现脱离模拟器的测 试。非常值得一提的是,在测试服务器请求时,Robolectric的数据模拟和延时发送模拟,给多线程状态下的测试提供了很好的解决方法。

  Robotium。 因为其对整体应用的黑盒操作特性,绝大多数技术文章将其作为功能测试工具,因此后文在叙述功能测试时也有提及。但因为其已有代码库,进行测试前需要组合编 译,而且可以完成方法级别的功能测试,因此本文还是将其描述重点在单元测试时和其他工具进行对比说明。但并不等于它是单元测试。

  Android JUnit。这是一种常见的单元级别测试。它由Android官方提供,通过虚拟机自身提供的测试接口完成。图3源于Android开发者官网,基本上 阐述了整个测试框架各个组成部分。其中,下面方框中描述的即为框架中基于JUnit的测试部分。可以看到,其通过Android的内部测试包,调用测试 执行模块完成对目标应用的测试。

  该测试大的好处是其与Android系统结合紧密,贴近真实环境。但其弊端也正是因为使用大量基于平台的虚拟,导致测试运行速度相对偏慢,影响测试效率。又因为开发过程中,单元测试是大,也是常规的测试,所以这种影响带来的效率降低显得特别严重。

  小结

  本文我们介绍了移动开发中的常见问题、技术解决方案的基本思路,以及在具体实现中所要涉及的结构化组件和单元测试工作。在下期中,我将继续讲解技术方案的具体实现方法,包括如何通过框架选取实现测试驱动方案,业务行为驱动的功能测试方案、持续集成、部署,以及如何让调试可持续化。

  本文选自《程序员》杂志2012年09期Http://www.programmer.com.cn/13757/


--结束END--

本文标题: Android敏捷开发指南(上)

本文链接: https://www.lsjlt.com/news/28823.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android敏捷开发指南(上)
      本文紧密结合移动开发方法与技术,围绕Android平台的开发探讨提供更高质量移动产品的解决方案。作者中分析了移动开发中常见的问题,从两方面阐述了ThoughtWorks...
    99+
    2022-06-06
    Android
  • Android敏捷开发指南(下)
      本文延续上期话题,深入到测试、持续集成和部署等环节,紧密结合移动开发方法和技术,围绕Android平台的开发讨论提供更高质量移动产品的解决方案。   通过清晰的架构...
    99+
    2022-06-06
    Android
  • 敏捷开发价值观
    敏捷软件开发的价值观,个人理解是价值和风险驱动的迭代式开发。0x01:面向价值和风险何为价值?价值是满足客户需求或者可以为客户解决问题的Everything。何为风险?风...
    99+
    2022-10-18
  • PHP函数的敏捷开发
    随着互联网的发展,Web开发也变得越来越流行。现在,很多公司和开发人员倾向于使用PHP来开发Web应用程序,因为它易于学习和使用。PHP是一种服务器端编程语言,由于其开源的特性,拥有众多的开发人员和开发社区支持,也很好的支持了现代化的Web...
    99+
    2023-05-19
    开发技巧 PHP函数 敏捷开发
  • 敏捷开发框架的优势
                              敏捷开发框架的优势随着云计算、物联网和互联网+思...
    99+
    2023-06-02
  • 敏捷开发工具Leangoo 怎么用
    这篇文章的内容主要围绕敏捷开发工具Leangoo 怎么用进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!为什么选择 Leangoo?很简单,因为它够简...
    99+
    2023-06-05
  • Android 蓝牙BLE开发完全指南
    目录 介绍连接模式GATT协议使用过程扫描连接设备连接发现服务数据传输其他断开连接参考总结 介绍 1.BLE 是 Bluetooth Low Energy 的缩写,意思为低功耗...
    99+
    2022-06-07
    ble Android
  • C#开发建议:敏捷开发与迭代优化
    C#是一种广泛使用的编程语言,被广泛应用于开发各种类型的应用程序。在C#开发过程中,敏捷开发和迭代优化是两个重要的原则。敏捷开发强调根据实际需求灵活应对变化,而迭代优化则注重不断改进和优化开发过程和产品质量。本文将介绍敏捷开发和迭代优化的概...
    99+
    2023-11-22
    C# 敏捷开发 迭代优化
  • C#上位机开发完整指南
    C#上位机开发完整指南可以分为以下几个步骤:1、准备开发环境:首先,需要安装一个适合C#开发的IDE,例如Visual Studio。同时,确保计算机上安装了.NET Framework或.NET Core SDK。2、创建项目:打开Vi...
    99+
    2023-10-27
    C#开发环境 上位机开发 上位机
  • C# 上位机开发新手指南
    C#是一种面向对象的编程语言,广泛应用于上位机和桌面应用程序开发。下面是C#上位机开发的新手指南:1、学习C#基础知识:首先,需要掌握C#语言的基本语法和面向对象的编程概念,包括类、对象、继承、多态、接口等。可以从一些入门级的C#教程开始学...
    99+
    2023-10-27
    上位机 上位机开发
  • 敏捷实践经验分享,企业如何在敏捷开发中实施DoD
    一、什么是DoD?当你有两个或更多的人参与同一个事情的时候,我们的“团队”就产生了,这时我们最重要的事情,就是要设定和统一团队的期望值,在本文中,这就是“完成标准”。一个迭代做完后,团队要进行验收,来决定本个迭代是否完成。但每个团队对于是否...
    99+
    2023-06-03
  • 探讨敏捷开发在软件开发中的应用
    在软件工程领域,有过很多软件开发模型,如瀑布模型、快速原型模型、增量模型、螺旋模型、演化模型、喷泉模型、 RAD 模型、敏捷软件开发模型、 XP 极端模型。这么多的模型各有各的应用场景、各有各的适用范围,...
    99+
    2022-10-18
  • Linux上的Java开发:一步步指南
    Java是一种广泛使用的编程语言,它拥有跨平台、安全、强大的特性,这使得Java成为企业级应用开发的首选语言。在Linux上开发Java应用程序具有很多优势,比如更灵活的开发环境、更强的系统集成能力等。在本文中,我们将为您提供一步步指南,...
    99+
    2023-09-10
    javascript shell linux
  • 力软敏捷开发框架帮您开发什么软件
    接触这个框架有三年的时间了,初次接触B/S型开发项目时,是在指导人员的帮助下完成的,技术上确实也学到了一些东西,但个人觉得最大的收获是在开发软件项目的过程中,自己意识上的提升,如做项目是考虑其合理性安全性以及并发性的重要性与必要性,这么想来...
    99+
    2023-06-03
  • C#开发经验分享:快速开发与敏捷开发方法论
    在C#开发的过程中,快速开发与敏捷开发方法论都是非常重要的,尤其是在现在快速变化的市场中。在本篇文章中,我将分享我的C#开发经验,重点关注快速开发与敏捷开发的方法论。一、什么是快速开发快速开发是为了快速响应市场需求,使产品能够尽早推出。这种...
    99+
    2023-11-23
    敏捷开发 快速开发 C#开发
  • Android音视频开发之VideoView使用指南
    目录VideoView介绍MediaController使用源码分析进度显示播放尺寸适配VideoView介绍 之前介绍过使用MediaPlayer+SurfaceView实现播放视...
    99+
    2022-11-13
  • Learun FrameWork V7.0,敏捷开发向导快速配置
    力软 敏捷开发 框架是一套基于智能化可扩展组件式的软件系统项目,适合企业管理软件和互联网平台后台系统开发,框架中提供了完善的权限角色管理功能,快速开发功能,工作流引擎开发功能等通用的功能模块,以及可扩...
    99+
    2022-10-18
  • Android开发优化之Apk瘦身优化指南
    目录了解APK结构Android Size Analyzer移除未使用的资源启用资源缩减 (不打包)动态库打包配置总结了解APK结构 在讨论如何缩减应用的大小之前,需要了解应用...
    99+
    2022-06-07
    android开发 apk 优化 Android
  • Android P适配以太网功能开发指南
            Android P适配以太网功能开发指南 前言   此时的我吃着火锅唱着歌,进行着Android P(此P非彼P,Andro...
    99+
    2022-06-06
    以太网 Android
  • Android studio | Android APP开发快捷键
    这次分享给大家一些Android开发中的快捷键: So Welcome to Android Studio 3.5! 通过阅读这些技巧,您可以...
    99+
    2022-06-06
    Android Studio studio app Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作