2016年11月18日-20日,由CSDN重磅打造的年终技术盛会 —— “2016中国软件开发者大会”(Software Developer Conference China 2016,简称SDCC 2016)在北京京都信苑饭店隆重举行。本届大会云集了100多位国内外顶尖专家和技术大牛,共设新趋势和新实践2大主题会场,14个技术专题。面向国内外的中高端技术人员,聚焦最前沿技术及一线的实践经验,助力企业的技术升级和改造、全面提升技术人员的综合实力。
在11月19日的 Keynote 上,CSDN 开发服务解决方案总监尹亮发表《如何打造高效、敏捷软件开发平台》主题演讲,敏捷开发能够带来降低缺陷率、缩短产品周期、提高生产效率、降低成本等优势,随着在软件开发方面呈现出团队规模变小、工作方式敏捷趋势,越来越多的开发团队在业务流程中使用开发管理工具,比如 Git 在国内外软件开发者群体中的使用率已分别达85%、52%。
以下为演讲整理:
软件开发趋势
大家好,很荣幸站在这里与大家分享如何去选择和使用一些软件开发的工具,建立适合自己与团队的开发平台。首先看一下这几年的软件开发趋势:
1. 团队规模变小,工作方式敏捷
这主要体现在比之过去的集团机制团队,越来越多的团队规模偏小型,却能够在较短的周期内研发出大型的产品或系统,借助于很多敏捷的工具,大大提高了开发者及团队的生产效率。
2. 越来越多地使用开发管理工具
在最新发布的《2016年度中国软件开发者白皮书》中可以看到,64%的开发者在不同程度上使用了软件管理工具,这是指软件生命管理周期工具,譬如项目管理、代码存储、测试管理、Bug 追踪以及集成测试、持续测试、持续部署一直到后来的运维工作等所通用的工具。
在此之中,敏捷是项目管理的基础,以前的很多开发模式已慢慢被敏捷所取代,据一项国外调查数据显示,80%的团队在项目研发中使用到了敏捷。而代码管理作为开发环节中最为重要的部分,有85%的开发团队使用到了 Git,普及率相当高。对比之下,国内则相对较少,敏捷、Git 占比分别为64%、52%。
这其中比较有趣的现象是,2011年,在全球范围内,SVN使用率排第一,到了2012年,除了中国及少部分国家地区外,可以明显地看到,Git 已经占领了世界,直到2014年,Git 才在国内实现较快增长,但许多传统公司使用的依然是 SVN,2016国内软件开发者数据显示,SVN占比69%,而 Git 则为52%。
敏捷开发
俗话有言“工欲善其事必先利其器”,接下来,我会从敏捷、Git、CI/CD 这三个方面具体阐述我们都有哪些工具,又该如何选择和运用。首先是敏捷管理工具,对于“敏捷”这个话题已经持续地热了许多年,也有非常丰富的工具供我们选择。敏捷开发能够在产品质量、发布时间、生产效率、成本、满意度等这些方面带来诸多利好,比如降低缺陷率、缩短产品上市时间、提高14%-95%的效率、降低成本、以透明的方式提升员工满意度和管理等。
当前敏捷开发主要有看板和 Scrum 两种方法,但需要考虑的选择因素却多种多样,因为涉及到产品研发体系的方方面面,从使用者、管理层、工程师、运维等的角度各有不同,比如功能特性、使用规模、部署方式、易用性、维护管理、易于集成、扩展性良好、价格成本等,这里就需要根据公司的具体情况来看怎么去选择一个合适的工具。
- SaaS 服务,如 Trello、Teambition、Tower、Worklite 等,支持通用的任务管理,基本可以定制相对简单的工作流程;
- 专业的敏捷管理工具,如上面提到的 JIRA、Rally、TFS、禅道等,适合于规模较大或有专业需求的公司团队。
至于如何去选择,就需要根据自己的团队规模的情况,在我们谈论敏捷管理的工具时,有些话题是值得我们思考的。借用村上春树的一句话就是——“当我们谈论一个敏捷工具的使用时,其实我们在谈论什么?”其实更多的时候,我们在谈论这个管理流程到底是什么样子,就是有些团队或公司的管理流程不是很清晰,在这上面用什么样的工具都不合适。所以关于敏捷,工具固然重要,但管理才是根本,公司团队需要真正把敏捷的精髓思想学到,再根据情况选择所需要的管理工具。
Git
Git 系出名门,兴起于开源社区,其最重要的特点是分布式,可以本地提交直接做代码库操作。且对分支友好,利于协作,速度快主要体现在版本检出、比较、合并三个方面,且和 Code Review 集成度良好。数据显示,使用 Pull Request 做 CR,缺陷密度能够降低20%。
但是,企业对于 Git 版本控制的需求和开源并不一样,我总结主要分为以下两类:
- 功能:权限、数据分析、现有工具集成、特殊功能定制;
- 架构:HA、易扩展、高性能、多研发中心支持。
使用 Git 优势众多,但开发团队仍然需要注意一些问题,比如:
- 学习曲线较陡峭;
- 权限力度粗;
- Git 工作模式选择;
- 大量二进制文件时的处理;
- 涉及到项目引用/模块重用时,Submodule 的一些操作有些费解。
当然,这些问题不是阻碍我们使用 Git 的理由,我们需要了解这些问题才能够更好地使用它。
持续集成与持续部署
持续部署是最近两年才提出来的,之前一直说的是持续集成,理念在于从开发、测试到部署属于一套自动化的环境。但是现在,在生产环境中用测试部署都比较小心翼翼,很少有团队代码提交一个版本,一个系列的自动化就部署到线上了。但是在测试环境下,大家都比较大胆,新的代码提交后,很快就用 CI/CD 部署到测试环境中,这是因为有很多的团队有比较优秀的实践。
关于持续集成和持续部署需要强调的一点是,一般我们所说的CI/CD工具的本质是一个调度系统,就是调度其他的自动化工具协助完成整个开发流程方面的自动化。自己并不会帮你检测代码、做部署、测试。所以我们用好 CI/CD 自动化是关键,有些自动化是一劳永逸的,你做完一次,以后的话就是提前用都没有问题,不用做大的修改,根据一些自动部署的软件,去写自动部署的脚本,变化不大。但是自动测试的话,就可能需要投入比较大的人力去做自动化测试的脚本,自动化测试包括一些单人测试、功能测试,单人测试可能简单一些,有很多的框架自己接入去做。但功能自动化的测试甚至于性能测试是比较头疼的问题,其实近些年一直没有能够去解决。但是我们还是可以做冒烟测试,把主要流程测下来。如果去做全样的自动化测试,可能需要有一个团队去维护一套自动化测试的脚本,而且天天做修改。
在工具选择方面,和前两个有所不同,基本上呈现着 Jenkins 一家独大的趋势,其在开发者群体中占比45.05%。造成这一现象的因素有很多,第一是本身它的功能比较丰富,基本能够满足我们通用的一些需求,其次 Jenkins 自身的生态链做得比较好,拥有很多的插件,本身是调度系统。还有一个是社区非常活跃,许多问题在社区中都可以得到较快的解答,所以 Jenkins 相对于其他工具甚至是一些商业工具都是绝对的领先。
- 整体开发环境;
- 循序渐进:从基本流程入手,逐步增加自动化环节,扩大应用规模。
在敏捷开发方面,CSDN 有着一整套的全生命周期开发工具,包括需求管理、设计建模、开发、测试、发布部署、知识共享、项目管理、沟通交流。从项目管理需求到开发测试,都有着创新的解决方案,产品主要分为几个部分:精选的商业产品、开源产品定制、自研产品,已经在很多企业都有应用,感兴趣的话欢迎共同交流,谢谢大家。