一个项目的成败不仅仅是由产品、运营决定的,技术及项目管理方面也是极为 重要的一个指标。使用的技术是否恰当,项目的管理是否有助于提高整体开发效率以及质量……这些都是我们需要关注的。本系列文章将在多年的项目经验基础上,总结、展示一套完整的快速、高质量开发方案。
概述
让我们先来思考一个问题:一套完整的快速、高质量开发方案究竟需要包含哪些特征?
- 源码管理
- 合理运用MVC/MVP/MVVM/MVPVM框架
- 单元测试
- 自动化
本文将简要说明这些特征在项目实施过程中的重要性,并在后续的文章中详细介绍如何设计并满足这些特征。
源码管理
在一个APP项目中,对于开发者而言,触及最多的毫无疑问是源码,每天我们都要敲出数百数千行代码,因此如何对这些代码进行可持续的管理是我们首先要面对的问题。
从整个开发行业来说,目前源码管理都是git或Subversion,通常企业会根据项目选用最适合的一套源码管理系统。在网上也有许多文章在比较不同的源码管理系统之间的差别及其适用情况,在此不再赘述。
对于APP应用,由于其代码规模以及快速迭代的特征,通常来说,使用Git是相对最为合适的。故而,我将详细介绍在git环境下的源码最佳实践——Git-Flow。
代码框架
当确定了源码管理流程之后,开发者将开始根据需求编写产品代码。此时,将首先面临一个至关重要的问题,代码框架该如何设计?一个设计合理、可用的框架在产品的迭代开发中将会使我们事半功倍,再复杂的业务在合理的切分之后都能快速实现。
在后续的文章中将基于Kotlin+Retrofit+RxJava+ARouter+Dagger构建一套MVPVM架构的框架,并展示它的组件化运用。
单元测试
当代码编写完毕之后,该开始我们的产品测试了。在团队开发APP时,我们大可以忽视代码层面的白盒测试,将测试的重任完全交给测试团队,让他们进行人工测试。然而,这真的合适吗?对于一套整体的快速开发方案来说,显然是否定的。
试想一种场景:在一个很简单的需求开发时,我们需要对一个已经被多处引用的方案进行扩展修改,最完美的情况将是它在不对其他需求造成影响的情况下实现这个简单的需求。对于“自信”的程序员来说,它是肯定能满足的。但是现实是残酷的,程序员的“自信”往往都不可信,有太多的经验、教训告诉我们,再优秀的程序员都无法百分之百保证这一点。
因此,我们需要使用技术手段来帮助我们尽可能保证做到不对其他页面产生影响。这时候,单元测试就该闪亮登场了。
虽然在实际工作中,可能80%(随便说的一个数)以上的项目、团队都完全没有使用单元测试,但是不可否认的是,它是我们保证质量的利器。
自动化
最后,在整个项目开发的过程中,我们会发现有太多的重复的工作需要我们手动去执行:
- 代码写好了,提交到git上时,需要跑一遍单元测试来确定能够通过所有的测试用例
- 定期不定期的需要执行一些质量保障脚本,来确保代码处于最佳状态
- 一个迭代版本开发完毕,需要合并到master分支并出Release包
- 出于市场推广、运用需要,需要对每个应用市场出带有特定渠道号的包
- 出于裁减Apk包体积的考虑,可能还需要使用微信的AndResguard进行资源压缩
- 出于代码安全考虑,或360应用市场强制性要求,还需要使用360提供的加固保进行应用加固,由于加固保的限制,加固完了还需要重新进行签名并打入渠道号
看到这么多需要手动执行的事务,我的心里是悲伤的。有些事务执行频率太高了,嫌麻烦;有些事务太繁琐,手动执行的时候,一个不小心就出错,导致从头开始;还有些……
因此,善用自动化工具及脚本将会是我们的救星,在工具及脚本的帮助下,这些头大的事务都将变成一句命令的事情;也许只是1个按钮点击的事情。这将彻底解放我们,让我们可以把时间与经历放在编码这一核心工作上。