程序猿们,如果你感觉到总是在做反复的、机械的工作,你或许可以考虑找些工具帮帮你了。如果你所在的团队号称在做「敏捷开发」,但还是有做不完的重复劳动,也许你们还不够敏捷。
敏捷开发所谓的快指的是「反应快」。敏捷的优势在于用更短的迭代周期去应对不断变更的需求,持续地交付可用的软件。而要在短短的两周或者一个月内交付可用的软件,同样意味着在这个周期内要完成集成、部署、测试等一系列的工作。如果把这些工作都交给开发人员去做,那还有什么时间好好地开发呢?
本文将从沟通、开发、质量这几个方面来介绍一些常用和可靠的工具和它们的使用场景,它们不仅仅适用于敏捷开发。一起看看到底有哪些「重复劳动」可以被工具干掉。
自动化「沟通」
生命周期管理
Lifecycle Management
如果你的项目的需求、任务都还放在长长的Word、Excel文档里,那么是时候找一个项目管理工具了。项目管理工具帮助跟踪和控制项目的整个生命周期:
实时监控项目的进程
不管是项目成员或是客户,都渴望了解项目的实时进展情况。燃尽图、缺陷数量、项目成员变动、风险值、当前迭代交付的内容,项目管理工具可以实时统计和跟踪这些数据。了解每个项目成员的工作
项目管理工具上可以记录任务、用户故事、缺陷,并指派给相应的成员。成员可以记录每项工作所花费的时间、更改工作的状态。开发人员可以了解需求及变更,及时和管理人员甚至直接与客户沟通。定制开发流程
多数的项目管理工具提供了定制流程的功能,保证任何团队都能根据自己的计划和流程完成工作。随时随地的办公
你会不会在下班时间手痒去查收一下工作邮件呢?或是说你频繁出差、跟外国友人合作,多数的项目管理工具现在都提供移动端App,保证你随时随地的透明化办公。
常用的项目管理工具有:Jira, Redmine, Trello, Teambition, Visual Studio Team Foundation Server
消灭重复劳动:手工分析和跟踪项目进度、从长长的文档中找两行关于自己工作的需求
预计每周节省时间: 5小时
聊天工具
Communication Tool
很多人可能都会用QQ、微信、Skype for Business来交流工作,他们也许是够用了,可是就是有这么一个软件异军突起,专注于企业级的聊天工具——Slack,连微软都不得不做了一个仿制品。Slack这类的聊天工具的特别之处在于:
分组通讯
不管是全公司的公用频道、项目频道、某项技术交流的频道还是临时成立的讨论组、私信聊天,Slack都清楚地区分开来。这些频道和分组都是永久保留的,不用担心聊天记录的丢失。Slack也提供@的功能,可以让同事不会错过你的发言,他也可以随时查看所有@他的聊天记录。出色的搜索和文件管理
Slack提供强大的聊天记录的功能,可以快速定位到之前的某条记录。你也可以对某条记录做星标,保证你不会漏掉BOSS给你布置的任务。Slack也会保存聊天中所有的文件,提供实时的预览功能,你也可以很轻松地查看某个分组下所有的文件。集成管理工具
Slack可以接收来自项目管理工具、云存储平台、版本控制平台的各类消息通知。让你专注于工作。跨平台同步
跟项目管理工具一样,现代的聊天工具必然是跨各个终端的,保证你随时随地的加班(误)。
不管是Slack还是Microsoft Teams,都让沟通更加的透明、高效,「边聊天边工作」吧。
消灭重复劳动:打开各个工具平台查看通知、发送一句话邮件
预计每周节省时间: 4小时
自动化「开发」
版本控制
Version Control
版本控制系统是自动化开发的基础。这里不赘述版本控制的重要性了。
常用的版本控制工具有:SVN, Bitbucket, Gitlab, GitHub, Perforce
消灭重复劳动:集成代码、版本回溯
预计每周节省时间: 8小时
依赖管理
Dependency Management
开发中很常见的外部依赖,你还在手动下载和导入吗?如果你不是一个人在开发呢,如果版本更新了呢,这种传统的方式会变成一种噩梦吧。相信还在这样做的团队已经非常少了。
这里介绍一些常用的工具:
编程语言 | 工具 |
---|---|
Java | Maven, Ant |
Node.js | NPM (Node Package Manager) |
JavaScript | Grunt |
iOS | SPM (Swift Package Manager), CocoaPods, Carthage |
拿Maven来说,把各类依赖集中地放在「仓库」,只需要简单的配置文件,就可以帮助开发人员自动管理和下载依赖。如果你的工程需要一个集成一些重复利用率很高的依赖的基础模板,Maven也可以做到。
通常来说,依赖管理工具同时也是构建工具,Maven可以进行编译、单元测试、部署,一个按钮加一条预设的命令脚本,搞定!
消灭重复劳动:下载和导入依赖、保持最新依赖版本
预计每周节省时间: 2小时
持续集成
Continuous Integration
由于软件通常是由多个模块组成的,集成它们是生成交付软件的必经过程。怎么持续集成?简单来讲就是把刚刚提到的版本控制和依赖管理结合起来,放到一个平台上,持续地对代码进行合并、审查、测试、编译、部署,可视化的平台还可以有效的减少项目人员的沟通成本。
持续集成并不是一个工具的名字,更重要的是使用者的思维。如果你所谓的「持续」是每天登录平台手动点一下「构建」的话,那恐怕就南辕北辙了。两点建议:
如果你的工程的编译时间不长,建议配置一个触发器:在每一次主分支代码提交之后,都自动做一次集成,以保证代码提交的正确性,最快速度做出反应。
如果你的工程的编译时间相对较长,或是服务器环境需要相对稳定的版本部署计划,建议配置一个定时器进行集成部署。
常用的CI工具有:Jenkins, GoCD, Travis CI, Bamboo
消灭重复劳动:枯燥的集成和审查流程、服务器部署
预计每周节省时间: 8小时
自动化「质量」
静态分析
Static Analysis
自动化质量很容让人联想到「自动化测试」,实际上代码审查也可以自动化。静态分析(也叫静态检查、静态扫描)不直接执行程序本身,而是对现有的代码结构进行分析、预测,最终生成一个报告,包含可能出现的缺陷以及对代码规范、质量等的各项评定。
常用的静态分析工具有:Coverity, CheckStyle, FindBugs, PMD, JSLint, ESLint
除此以外,很多IDE本身也集成了相关的功能。
消灭重复劳动:代码规范检查、基本代码审查
预计每周节省时间: 4小时
自动化测试
Automation Testing
由于敏捷的迭代的特性,每次迭代的交付都必须经过重复性很强的测试,不论是集成测试、回归测试以及基本的性能测试,如果能自动完成,就是再好不过了。
常用的自动化测试工具有:Selenium, Mocha, QTP, AutoRunner, RFT
消灭重复劳动:复用率高的手工测试
预计每周节省时间: 5小时
静态分析工具和自动化测试工具还可以和持续集成环境配合使用,从而达到真正高校的自动化。
结语
减少枯燥乏味的重复劳动,项目成员才能真正的享受在工作之中。当然,别让使用工具成为另一种负担。
本文提到的工具很有限,欢迎大家留言指正和交流
想了解敏捷开发,你还可以参考
《敏捷开发从信任团队开始》
《「便利贴」里的项目管理 | 利用看板提升沟通效率》