移动开发敏捷实践麦宇安Perficient
麦宇安,Perficient架构师
Android移植项目开发的挑战新员工对敏捷实践尚未熟悉只有Java开发经验(Android速成?)团队总体开发经验不足开发人员的能力不全面如何进行单元测试?如何进行自动化验收测试?在没有成型的架构的前提下如何保持开发效率?如何测量代码质量,和应对技术负债?
要不要做vs怎么做我假设大家已经接受敏捷的价值听课是一会事,问题是如何在一个实际的项目中去实施?怎么解决敏捷实践上和技术上的难题?
如何让团队有效协作前两周结对编程持续代码评审取消正式代码评审,重大设计改变通过会议进行讲解让团队自我组织Done Done的定义
预先定义的角色与职责
预先定义的组织结构
团队自组织角色与职责的“重构”与“浮现”
“浮现”出来的职责Mr. YBuild Master“提醒”谁把Build搞坏了“提醒”谁没按流程做提升验收测试的速度Mr. W大部分界面的工作Mr. X项目打杂(服务型领导)POMr. M重构已经完成的故事避免团队成员在某个技术问题上卡住
DoD完成测试用例测试用例通过PO评审完成自动化验收测试单元测试85%以上覆盖率Sonar:没有Major或以上的问题,没有重复代码产品和测试代码通过高级工程师代码评审PO验收
任务拆分例子登录测试用例登录UI登录Activity登录DAO登录SQL登录验收测试
持续的Burn down
单元测试:Roboletric在JVM运行Android单元测试无需等待Dalvik VM漫长的启动无需Mocking不依赖于网络和数据库获得所有JVM的好处,如:计算代码覆盖率Debugging
例子
Roboletric的Shadow机制
Roboleric的问题并非所有类和函数都是实现了shadow使用已经实现的API或自己去实现shadow(需要架设Maven Repository Server)
Robotium自动化验收测试Android版的Selenium黑盒测试
例子
Robotium演示
Robotium的问题DalvikVM经常死机运行非常消耗时间连接到Android手机上运行?在Hudson上,产品项目和测试项目不能同时运行(Maven)Robotium计算坐标的算法有问题使用HVGA有时无法滚动屏幕message
Android项目的技术挑战在没有成型的架构的前提下如何保持开发效率?Spike?先设计?先开发?如何测量代码质量,和应对技术负债?
自顶向下设计
自底向上设计用浮现设计获得的设计控件显示隐藏DSLDomain Object框架View和Model的双向绑定“表单”验证派生字段,如全名Lookup字段,如省份
控件显示隐藏DSLshowIf(getModel().isMembershipVerified(),    not(membershipAd),     not(noneMemberLayout), showMyMemberCardButton);showIf(items.size() == 0,    not(itemListView),    background(findViewById(R.id.item_button),R.drawable.selector, R.drawable.selector2));
健康的技术债务小组:满足DoD但设计欠佳的用户故事↓最有经验的成员:一天的重构↓小组:参考实现
SonarDashboard
Violations drilldown
时间机器
警告制定
Sonar插件
重复代码检测
SCM Activity配置
Sonar “Blame”
效率假象代码质量代码生产率
持续的产出
Project Burn down
总结新员工对敏捷实践尚未熟悉只有Java开发经验团队总体开发经验不足开发人员的能力不全面如何进行单元测试?如何进行自动化验收测试?在没有成型的架构的前提下如何保持开发效率?如何测量代码质量,和应对技术负债?结对编程,持续代码评审设计交流会议自组织Done DoneRoboletricRobotium自底向上设计,浮现设计健康的债务Sonar
Credithttp://en.wikipedia.org/wiki/Unified_Modeling_Languagehttp://pivotal.github.com/robolectric/quick-start.htmlhttp://docs.codehaus.org/display/SONAR/SCM+Activity+Pluginhttp://img2.zol.com.cn/product/30_450x337/602/ceGx2IS9vB2A.jpghttp://renmai.aliqq.cn/space-15538-do-blog-id-3685.html

移动开发敏捷实践

Editor's Notes

  • #5 介绍我们正在做的iphone到Android的移植项目克服这些困难需要技术上,流程上,团队上各个方面的配合。由于对新技术掌握有一个过程,项目当中容易积累技术负债。互动:大家在移动平台的项目中遇到哪些挑战?
  • #6 互动:有多少心动?有多少行动?没有包治百病的膏药,但有可借鉴的例子
  • #7 正如前4点列出的挑战,团队在技术上和敏捷实践上和要求的还有一定差距,如何在短时间内缩短这些差距?结对编程对流程和技术都能起到培训作用正式代码评审在这样的团队当中并没有效率自组织减少了管理的需要,并能提高总体产出清晰定义的DoD使团队对要完成的东西有明确的概念
  • #8 我每次被指派这样的角色与职责我都浑身不舒服,你只要尽力去做对项目对团队最有贡献的事不就完了。
  • #9 如果你是一支新组建球队的教练,你怎么预先指定谁踢哪个位置?那会是最好的方式吗?
  • #11 团队成员根据自己的能力,兴趣与性格等因素进行磨合
  • #12 Done Done级别的DoD
  • #13 开发人员编写所有测试
  • #15 Dalvik VM运行非常慢和消耗CPU单元测试可以在1分钟内完成
  • #21 录像
  • #22 需要30分钟运行完所有测试
  • #25 通过自底向上设计,提高代码的表达能力,减少了代码行数和复杂度
  • #27 Domain Object框架
  • #28 项目初期开发能力“过剩”,设计能力不足DoD已经保证的代码覆盖率,降低了重构的风险从而打破先设计还是先交付的困境开发人员的到参考实现后可以提高今后的代码质量
  • #31 需要设置Maven项目的版本号
  • #33 需要使用Emma,把Sonar内置的coverage库手工删掉
  • #34 主要找到的重复是超过1个方法的接口实现
  • #36 问题更快的到修复对自己的代码更有责任感
  • #37 初期:由于对新技术不熟悉,代码质量不高,但开发效率也不高,并不能产生太多负债中期:对技术开始熟悉,但认识还不到位,代码质量也不高,一味强调开发效率会产生大量负债持续高产出:高质量,高产出,低缺陷率,低复杂度。我们做的一切都是为了尽快到达并保持在右上角的sweet spot。
  • #38 代码产出并没有明显提高,但由于自底向上的设计,完成相同的功能所需要的代码减少了。Complexity/method = 1.7
  • #39 开发效率在Sprint 5开始提高客户很开心