好不容易小白将系统开发完成,对于发布到服务器端并没有什么经验,于是在下班后又找到老菜。
小白:老大,不好意思又要麻烦你了,项目已经弄完,但要发布上线我还一头雾水,有空帮我讲解一下吗?
老菜:嗯,系统上线并不一件简单的事情,它可大可小。如果准备不充分,有可能会很多问题出现。你认为写好代码后要怎么发布?
小白:呃,完成开发后,上传到服务器,然后浏览器可以正常访问...
老菜:看来得普及一下上线的相关知识才行。
正规的产品上线一般可以按下面几个步骤来进行:
1. 开发人员自测(开发环境)
2. 测试人员测试(测试环境上)
3. 预生产环境测试
4. 生产环境测试
但根据我所接触的众多公司来看,没有测试人员的公司就占了多数,各公司的BOSS们甚至技术负责人都没有测试的意识,将产品测试交给开发人员或业务人员进行,其产生的后果怎么样就不得而知了。往小方面说用户体验不好,往大方面说可能更新后造成数据丢失,生产环境停机一段时间的情况。
对于开发人员自测,很多程序员都没有这个习惯,多数都是写完代码,自己以为肯定没有问题,然后往服务器上一扔就完事了,等其他同事或客户使用时进行测试,很多时候会出现500或各种bug,问起来都是因为粗心、没注意到或不小心造成的,有时等得到反馈时已经过上好长一段时间了,系统挂了多久都不知道。以前所在公司就遇过有技术人员一个小问题用了超长时间才开发出来,提交了不知多少次到测试环境都不通过,bug反复出现,被测试经理骂的狗血淋头的情况,我在旁边看着都差点忍不住上去怼上一份。可以看得出来,没有自测也是造成测试与开发矛盾的重要原因之一。
当然包括我在内,以前也没有养成自测的习惯,没有测试人员的约束,写好代码就往生产环境上扔,出现故障就在生产环境上调测或还原代码,再慢慢改的情况。以前也以为有没有测试都无所谓,最近几年一直待在有测试团队的公司里就不一样的,有了约束以后,虽然更新效率和速度打大折扣,但代码质量和稳定得到了飞跃性的提升。平时码代码也会习惯性完成后用各种参数跑一下,而使用测试的思维去写代码以后,代码的安全性、严谨性得到了很大的提升。
自测它是一种态度,它也是一种习惯。
一般有测试岗位的公司,都会创建一套测试环境专门给测试人员来进行测试,因为测试与开发共用一个环境时,数据很多时候就会造成混乱,其中一方辛辛苦苦建的数据,另一方拿来就用,又或者技术人员习惯直接打开数据库改数据,某些数据状态突然改变了,而测试人员以为是bug,造成不必要的困扰。一般来说,开发人员在开发环境上自测没有问题以后,才会将代码打包提交给测试人员更新到测试环境上。这个更新频率一般都在固定时间,而不是非常频繁,除非有重大bug测试人员无法继续下去,因为每一个版本的更新,测试人员都会从头到尾,按写好的测试用例全部重新跑一次,频繁的更新会造成测试人员工作量非常大。专业的测试是一个枯燥、重复、非常有耐心且敬业的职位,也是我很佩服的一个岗位。
很多公司产品开发完后是直接上线的,并没有预生产环境进行测试,好多一些重大的安全事故就是这样造成的。比如说没留意sql语句,不小心将生产环境的数据表给清空了;比如说更新后生产环境直接崩溃等情况在工作中时有发生。今年我在的公司也试过发生比较严重的问题,合作公司的小伙伴开发时代码循环写错了,没有经过全面测试就直接发布,APP发版后造成我方生产环境业务接口访问量暴增,短短几天访问量暴涨到6千万,服务器流量、CPU、内存等全部满负荷运行,影响到了其他合作公司业务的正常运行,由于生产环境不能停,服务器端只能通过快速扩容服务器组为高可用群组解决,客户端通过快速发布新版替换。
如果服务器并不是太多的影响下,通常预生产环境和生产环境放在一个服务器里,它只是一个数据库与程序的拷贝。条件充足时,会在本地搭建一个和生产环境一模一样的环境,来做发布前测试。预生产环境测试,可以帮我们避开很多服务器环境因素(配置或包不一致等情况)、数据库结构或配置因素(数据库结构调整未更新或记录参数改变后未同步等情况)和sql语句缺陷等问题造成的重大错误。