如何让自己少写点bug?
The following article is from CodeSheep Author hansonwong99
来源:CodeSheep
1、《往期精选优秀博文都在这里了!》 2、如何优雅地根治null值引起的Bug! 3、答应我,别再if/else走天下了可以吗? 4、Stack Overflow上188W+程序员都关注的问题:Java到底是值传递还是引用传递? 5、Dubbo必会的18个面试题!一网打尽!
很多人都知道学编程需要多写代码!不停的写,不停的写,不停的写,结果写的全是Bug . . .
自学其实可能感觉不到,但这如果是在企业级开发里,你写的每一行代码都是要组成产品的一部分交付到用户手里,所以你提交到代码库的每一行代码都是需要提测、检查的,一提测,哦吼,眼前一片红,不是 error就是 serious warning。
所以如何才能保证代码的质量呢?
第一个因素当然就是人为主观因素,通过提升自己的代码能力来保证代码质量。然而实际是,因为人的能力不同,企业级开发将代码质量完全寄希望于“人”,其实是不靠谱的!
为此,我们又做了非常多的努力,借助于各种各样的工具和系统,搭建了一层层的“代码防护网”,确保每个程序员最终能合入到代码库的代码都是没问题的。
是的,人终究是靠不住的!代码守护的事情得交给机器和工具来做,这个专门做“代码守护”的幕后系统,叫做“持续集成”服务!
持续集成(Continuous Integration,简称 CI,下文全部简称CI系统),指的是代码仓库只要有代码变更(或者说有人想推代码入库),就会自动执行预先设计好的检查、防护流程,运行一系列构建、测试、部署等流程,并最终告知每一步的运行结果,确保人提交上来的代码没有问题后,才有机会将新代码合并到主干分支,而主干分支无论何时都一定是正确可运行的高质量版本,可以随时交付客户使用!
持续集成的词面意思其实某一程度上也道出了该做法思想的精髓:即小步快走!持续地去做代码集成!,关于该指导思想,我在之前B站频道里关于“敏捷开发”那一期视频里已经讨论过,因为这也是大公司落地敏捷的一个重要思想。
我们希望代码每次只做小幅度变更,但立马就能看到变更的结果。我们希望通过一次次频繁地对靠谱小变更的积累,来保证主干分支代码随时高可用;而不是在一个完整的大功能模块开发完之后才一次性合入代码。
额外插一句:恕我直言,就主分支代码随时可交付客户使用这点要求在很多小公司其实都做不到,因为他们的代码几乎没有防护网,程序员随意合入,代码检查做得也不到位!没办法随时拿出去溜一圈。
这些优秀的开源工具墙裂建议大家自学时,没事多折腾折腾
写这篇文章的主要目的是为了让大家彼此提升代码流程守护的意识,尤其希望对在校学生以及自学编程入门的小伙伴们有点意识上的帮助。
项目地址:https://travis-ci.org/
首先要介绍的Travis CI是一个广泛使用的CI工具,因为它简直是Github爱好者的福音,而且用户份额很大。其支持绝大部分主流编程语言,包括但不限于:C、Java、Python、PHP等等。目前有超过90万的开源项目、60万的用户在使用Travis CI来作为他们的持续集成工具。
Travis CI最大的特色和便利店是其与开源社区Github兼容得非常好,它可以极其方便地帮你为Github上的开源项目仓库快速地拉起一个持续集成防护网,而且对于开源项目完全免费,不花一分钱,这对学习者非常友好。
而且Travis CI的用法也不复杂,也不需要你写什么复杂代码,它是用过 yml
配置文件的形式来指定Travis CI要做的事情,来满足你的流程规划,先做什么,再做什么,最后做什么,挺方便。
项目地址:https://jenkins.io/
大名鼎鼎的Jenkins简直如雷贯耳,国内很多的通信大厂、互联网大厂都正在使用中!
Jenkins是一款开源的 CI&CD 工具,工具本身是Java写的,然而却支持各种编程语言项目的自动化任务,包括构建、测试、部署等。
Jenkins一直是开源CI&CD软件领导者, 安装简易、配置简单、提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。Jenkins 支持各种运行方式,可通过系统包安装、也可以作为Java程序安装,甚至可以通过Docker来安装。而且Jenkins在企业级开发中可以非常便捷地与SVN、Git等代码管理工具无缝对接!
如今已经步入2.0时代的Jenkins系统,其最大的特色便是加入了Pipeline流水线功能,Pipeline的加持,让Jenkins系统对项目做持续集成时变得更加灵活和强大。
必须要说的是,Jenkins系统现在确实越来越庞大,越来越“重”了,如果真是个小项目那它来做持续集成有点浪费了。
项目地址:https://circleci.com/
CircleCI 功能上和上面介绍的两个工具其实也差不多,但是使用起来可能更加“轻量”一些,这对学习者来说还是非常友好的!
Circle CI也支持GitHub、Bitbucket等平台上的项目,只要你项目的代码有变更,就会自动抓取,根据你的配置,提供运行环境,执行测试、构建和部署等一系列自动化操作。
项目地址:https://drone.io/
Drone CI与上面提到的诸如Jenkins等系统相比, 它也算是一个更加轻量级的CI工具,无论是工具本身的安装、部署,还是利用它做一些自动化工作流程的构建,都会简洁一些,更加好上手一些。
Drone CI工具的使用,基本上也就是几行配置文件的事情,就像下面这样,不烦心
除了前文提到的这四个主流工具,其他还有诸如像:
flow.ci
CodeShip(这名字和我昵称真像...)
Semaphore CI
等等工具和网站,思想都差不多,都可以帮我们完成持续集成的目标!
上面说了这么多,介绍了这么多工具,然而工具永远只是工具,也仅仅只是一个工具,怎么用好关键还是靠人,以及靠你对自己项目的理解和把握来合理地设置自动化流程!
这个东西不能急,慢慢改造,慢慢演进,慢慢迭代,大公司都亦如此,个人学习时更应如此,共勉!
往期热门文章: