摘要:互联天下,移动为王。丝丝理清,避免乱麻。程序员在本身的环境,有本身熟悉的开发工具或者IDE,有本身熟悉的调试工具或者流程。修改生产环境的任何一行代码,均可能会影响到用户。没有任何人敢保证当前这行代码不会影响用户的使用。android
互联天下,移动为王。丝丝理清,避免乱麻。ios
曾经一度也作过移动APP的后端开发,根据本身的一些经验,谈一谈后端API接口的开发流程与环境的关系。
01 后端三个环境git
1、开发环境
一般是api开发人员的本身机器,通常的做法是每一个开发人员本身有一个环境,也有几个开发人员共用一个开发环境的状况。程序员
开发环境的优点:数据库
程序员在本身的环境,有本身熟悉的开发工具或者IDE,有本身熟悉的调试工具或者流程,遇到问题能以本身熟悉的方式很快找到问题并解决。后端
另一个因素,恐怕是网络的影响了。在本身本机开发与调试,基本不受网络影响。若是是直接在测试环境(一般在远程)进行开发,公司网络你们用,总有那么一些时间,会出现打一个字符卡一下的状况,这样根本没法进行有效的编码。api
开发环境的劣势:网络
须要本身搭建一个和测试环境、生产环境几乎一致的环境,包括各类依赖包。但这对一个程序员来讲,应该不是问题。何况,一个程序员连环境都配置很差,那么,他必定不是一个合格的程序员。工具
须要同步数据库,这个比较麻烦,由于不少状况须要数据支持才能进行开发与调试。一般可按期或者在须要的时候,同步一份测试环境的数据库下来,本地还原数据。在偶尔的状况,也能够直接去链接测试环境的数据库。单元测试
2、测试环境
一般是程序员开发完成后,完成了由开发人员的自测,包括单元测试后,将代码更新到测试环境,交由测试人员进行测试。
若是测试人员测出了问题,这一般有如下几种状况:
确实是程序员致使的bug,须要由程序员修复。此时,程序员会将发现的问题,再在本地开发环境进行跟踪(通常这比在测试环境快),一旦找到问题并修复,再将代码更新到测试环境,由测试人员进行确认。若是还有问题,重复这个步骤。
若是是测试人员和开发人员对问题的理解不一样形成的,这个时候应该对照需求进行讨论。若是是程序员的问题,继续回到步骤1进行。若是是测试人员的问题,由测试人员本身记录并保持代码不变。
因为开发人员的环境或者数据库与测试环境不一致致使的问题(开发环境没有问题,测试环境却有问题),此时,能够直接修正开发人员的本地环境,或者直接修正测试环境(有多是测试环境须要更新等)。
一般状况,开发人员是不会在测试环境修改任何东西的,即便直接修改测试环境,一般也只是针对一些特定的bug(本地没法重现的)进行必定的跟踪与调试,最多加入一些日志信息或者临时修改部分代码。若是在测试环境修改代码后,问题解决。开发人员仍是得在本地再按一样的方法修改,改好后又同步一次。为何每次都得强调在本地修改一次,这是版本管理的一个重要概念,本地须要对代码的全部修改进行跟踪,最终的全部修改都能在git等版本管理里面能跟踪的。
若是测试人员没有测试出问题,即确认知足了已知的问题。此时进入发布阶段。
3、生产环境
一般是测试人员确认了在测试环境的全部代码后,便可直接发布到生产环境。
发布到生产环境后,仍是可能会出问题,发现了bug,bug一般有几种:
由测试不全面致使的,即在测试环境没有测试到的bug,也意味着这个bug在测试环境一样存在,这个应该由测试人员来负责找到问题并告诉开发人员修复。若是要定责,也应该是测试人员的责任。固然,有些bug也是由数据量致使的,测试环境毕竟数据量不够,可能在生产环境的某个用户会出现问题,而测试环境根本没有这个用户。
因为测试环境与生产不一致致使的,须要让测试环境与生产环境一致,若是还有问题,也须要记录,每次发布是否要做特殊的操做。
在生产环境发现的任何问题,须要与测试环境进行对比,是否测试环境也一样有这个问题,是否这个问题是开发人员致使的问题,若是是开发人员的问题,又须要从:开发-测试-生产这个流程来走,是不能在生产环境直接进行修改的。
修改生产环境的任何一行代码,均可能会影响到用户。没有任何人敢保证当前这行代码不会影响用户的使用。软件由代码组成,每一行代码可能都会影响一个因素。
02 客户端三个版本
依照上面的三个环境的状况来,开发人员须要有每一个客户端更新版本的三个环境版本:
ios客户端:
开发版本 测试版本 生产版本
android客户端:
开发版本 测试版本 生产版本
最严格的来讲,任何客户端更新后(哪怕只是修复一个小bug),都应该同时发这版本的:开发、测试、生产三个环境版本给开发人员,不然,会出现的问题:
只发测试版本,而后说服务端有哪些问题须要修正,这就很明显了,要求服务端开发人员直接去测试环境跟踪问题,并修复。这个明显不是最好的方式,并且修改的代码不能很好的进行本地代码版本管理。
只发生产版本,这就更有问题了,生产环境上面是不能修改任何代码的。
缘由很简单,开发人员须要在本地跟踪问题,发现问题,并最后修复问题。这些所有是在本地进行的,完成后再更新到测试环境测试,由测试人员确认后再更新到生产环境。
除了本地没法重现bug这惟一的特殊状况,须要去测试环境进行跟踪与调试外,不得上测试环境改任何代码。陈了测试环境没法重现bug这惟一的特殊状况,须要去生产环境进行跟踪与调试外,不得上生产环境改任何代码。
03 流程与需求管理
开发流程还和需求管理有很大的关系,这个自己算是单独一个主题了,在此,只简单说说:
首先,须要明确,哪些是bug,哪些是新功能。这个bug,是在哪一个环境有(测试仍是生产)?仍是都有?这究竟是一个bug,仍是一个新功能。不能上了生产环境,才发现一个原本是新功能但没有作,但却告诉开发人员这是一个bug。这是不合理的。
其次,这个bug是何时致使的?不能由于之前没有测出来的bug,硬说成是新修改致使的bug。代码是可跟踪的,bug也须要能够跟踪。这个版本,须要开发人员解决哪些bug,添加哪些新功能,都是要明确的。须要在第一阶段一块儿提出来。