learn.lianglianglee.com/专栏/软件工程之美/14 项目管理工具:一切管理问题,都应思考能否通过工具解决.md.html
2022-05-11 18:57:05 +08:00

1279 lines
36 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<link rel="icon" href="/static/favicon.png">
<title>14 项目管理工具:一切管理问题,都应思考能否通过工具解决.md.html</title>
<!-- Spectre.css framework -->
<link rel="stylesheet" href="/static/index.css">
<!-- theme css & js -->
<meta name="generator" content="Hexo 4.2.0">
</head>
<body>
<div class="book-container">
<div class="book-sidebar">
<div class="book-brand">
<a href="/">
<img src="/static/favicon.png">
<span>技术文章摘抄</span>
</a>
</div>
<div class="book-menu uncollapsible">
<ul class="uncollapsible">
<li><a href="/" class="current-tab">首页</a></li>
</ul>
<ul class="uncollapsible">
<li><a href="../">上一级</a></li>
</ul>
<ul class="uncollapsible">
<li>
<a href="/专栏/软件工程之美/00 开篇词 你为什么应该学好软件工程?.md.html">00 开篇词 你为什么应该学好软件工程?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/01 到底应该怎样理解软件工程?.md.html">01 到底应该怎样理解软件工程?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/02 工程思维:把每件事都当作一个项目来推进.md.html">02 工程思维:把每件事都当作一个项目来推进.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/03 瀑布模型:像工厂流水线一样把软件开发分层化.md.html">03 瀑布模型:像工厂流水线一样把软件开发分层化.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/04 瀑布模型之外,还有哪些开发模型?.md.html">04 瀑布模型之外,还有哪些开发模型?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/05 敏捷开发到底是想解决什么问题?.md.html">05 敏捷开发到底是想解决什么问题?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/06 大厂都在用哪些敏捷方法?(上).md.html">06 大厂都在用哪些敏捷方法?(上).md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/07 大厂都在用哪些敏捷方法?(下).md.html">07 大厂都在用哪些敏捷方法?(下).md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/08 怎样平衡软件质量与时间成本范围的关系?.md.html">08 怎样平衡软件质量与时间成本范围的关系?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/09 为什么软件工程项目普遍不重视可行性分析?.md.html">09 为什么软件工程项目普遍不重视可行性分析?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/10 如果你想技术转管理,先来试试管好一个项目.md.html">10 如果你想技术转管理,先来试试管好一个项目.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/11 项目计划:代码未动,计划先行.md.html">11 项目计划:代码未动,计划先行.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/12 流程和规范:红绿灯不是约束,而是用来提高效率.md.html">12 流程和规范:红绿灯不是约束,而是用来提高效率.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/13 白天开会,加班写代码的节奏怎么破?.md.html">13 白天开会,加班写代码的节奏怎么破?.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/软件工程之美/14 项目管理工具:一切管理问题,都应思考能否通过工具解决.md.html">14 项目管理工具:一切管理问题,都应思考能否通过工具解决.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/15 风险管理不能盲目乐观凡事都应该有B计划.md.html">15 风险管理不能盲目乐观凡事都应该有B计划.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/16 怎样才能写好项目文档?.md.html">16 怎样才能写好项目文档?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/17 需求分析到底要分析什么?怎么分析?.md.html">17 需求分析到底要分析什么?怎么分析?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/18 原型设计:如何用最小的代价完成产品特性?.md.html">18 原型设计:如何用最小的代价完成产品特性?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/19 作为程序员,你应该有产品意识.md.html">19 作为程序员,你应该有产品意识.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/20 如何应对让人头疼的需求变更问题?.md.html">20 如何应对让人头疼的需求变更问题?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/21 架构设计:普通程序员也能实现复杂系统?.md.html">21 架构设计:普通程序员也能实现复杂系统?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/22 如何为项目做好技术选型?.md.html">22 如何为项目做好技术选型?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/23 架构师:不想当架构师的程序员不是好程序员.md.html">23 架构师:不想当架构师的程序员不是好程序员.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/24 技术债务:是继续修修补补凑合着用,还是推翻重来?.md.html">24 技术债务:是继续修修补补凑合着用,还是推翻重来?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/25 有哪些方法可以提高开发效率?.md.html">25 有哪些方法可以提高开发效率?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/26 持续交付:如何做到随时发布新版本到生产环境?.md.html">26 持续交付:如何做到随时发布新版本到生产环境?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/27 软件工程师的核心竞争力是什么?(上).md.html">27 软件工程师的核心竞争力是什么?(上).md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/28 软件工程师的核心竞争力是什么?(下).md.html">28 软件工程师的核心竞争力是什么?(下).md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/29 自动化测试如何把Bug杀死在摇篮里.md.html">29 自动化测试如何把Bug杀死在摇篮里.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/30 用好源代码管理工具,让你的协作更高效.md.html">30 用好源代码管理工具,让你的协作更高效.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/31 软件测试要为产品质量负责吗?.md.html">31 软件测试要为产品质量负责吗?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/32 软件测试:什么样的公司需要专职测试?.md.html">32 软件测试:什么样的公司需要专职测试?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/33 测试工具为什么不应该通过QQ微信邮件报Bug.md.html">33 测试工具为什么不应该通过QQ微信邮件报Bug.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/34 账号密码泄露成灾,应该怎样预防?.md.html">34 账号密码泄露成灾,应该怎样预防?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/35 版本发布:软件上线只是新的开始.md.html">35 版本发布:软件上线只是新的开始.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/36 DevOps工程师到底要做什么事情.md.html">36 DevOps工程师到底要做什么事情.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/37 遇到线上故障,你和高手的差距在哪里?.md.html">37 遇到线上故障,你和高手的差距在哪里?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/38 日志管理:如何借助工具快速发现和定位产品问题 .md.html">38 日志管理:如何借助工具快速发现和定位产品问题 .md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/39 项目总结:做好项目复盘,把经验变成能力.md.html">39 项目总结:做好项目复盘,把经验变成能力.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/40 最佳实践:小团队如何应用软件工程?.md.html">40 最佳实践:小团队如何应用软件工程?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/41 为什么程序员的业余项目大多都死了?.md.html">41 为什么程序员的业余项目大多都死了?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/42 反面案例:盘点那些失败的软件项目.md.html">42 反面案例:盘点那些失败的软件项目.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/43 以VS Code为例看大型开源项目是如何应用软件工程的.md.html">43 以VS Code为例看大型开源项目是如何应用软件工程的.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/44 微软、谷歌、阿里巴巴等大厂是怎样应用软件工程的?.md.html">44 微软、谷歌、阿里巴巴等大厂是怎样应用软件工程的?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/45 从软件工程的角度看微服务、云计算、人工智能这些新技术.md.html">45 从软件工程的角度看微服务、云计算、人工智能这些新技术.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/一问一答第1期 30个软件开发常见问题解决策略.md.html">一问一答第1期 30个软件开发常见问题解决策略.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/一问一答第2期 30个软件开发常见问题解决策略.md.html">一问一答第2期 30个软件开发常见问题解决策略.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/一问一答第3期 18个软件开发常见问题解决策略.md.html">一问一答第3期 18个软件开发常见问题解决策略.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/一问一答第4期 14个软件开发常见问题解决策略.md.html">一问一答第4期 14个软件开发常见问题解决策略.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/一问一答第5期 22个软件开发常见问题解决策略.md.html">一问一答第5期 22个软件开发常见问题解决策略.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/学习攻略 怎样学好软件工程?.md.html">学习攻略 怎样学好软件工程?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/特别放送 从软件工程的角度解读任正非的新年公开信.md.html">特别放送 从软件工程的角度解读任正非的新年公开信.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/结束语 万事皆项目,软件工程无处不在.md.html">结束语 万事皆项目,软件工程无处不在.md.html</a>
</li>
</ul>
</div>
</div>
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
<div class="sidebar-toggle-inner"></div>
</div>
<script>
function add_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.add('show')
}
function remove_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.remove('show')
}
function sidebar_toggle() {
let sidebar_toggle = document.querySelector('.sidebar-toggle')
let sidebar = document.querySelector('.book-sidebar')
let content = document.querySelector('.off-canvas-content')
if (sidebar_toggle.classList.contains('extend')) { // show
sidebar_toggle.classList.remove('extend')
sidebar.classList.remove('hide')
content.classList.remove('extend')
} else { // hide
sidebar_toggle.classList.add('extend')
sidebar.classList.add('hide')
content.classList.add('extend')
}
}
function open_sidebar() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.add('show')
overlay.classList.add('show')
}
function hide_canvas() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.remove('show')
overlay.classList.remove('show')
}
</script>
<div class="off-canvas-content">
<div class="columns">
<div class="column col-12 col-lg-12">
<div class="book-navbar">
<!-- For Responsive Layout -->
<header class="navbar">
<section class="navbar-section">
<a onclick="open_sidebar()">
<i class="icon icon-menu"></i>
</a>
</section>
</header>
</div>
<div class="book-content" style="max-width: 960px; margin: 0 auto;
overflow-x: auto;
overflow-y: hidden;">
<div class="book-post">
<p id="tip" align="center"></p>
<div><h1>14 项目管理工具:一切管理问题,都应思考能否通过工具解决</h1>
<p>你好,我是宝玉,我今天想与你分享的主题是:一切管理问题,都应思考能否通过工具解决。</p>
<p>早些年我在做项目管理工作的时候,除了制订计划外,还要花不少时间去跟踪计划的执行情况。</p>
<p>项目管理上出了问题,管理者总是喜欢从流程规范的角度去想办法,于是为此设定了不少流程规范,例如每天要写日报,根据日报更新项目进度,每周要开周例会,看看项目有没有执行上的问题。</p>
<p>对任务进度的量化也是个很困扰项目经理的事情,需要频繁地去问程序员:“你这个任务进展如何,大概完成比例多少?”,从程序员那得到的答复通常都是个很乐观的数字,例如 80%。第二天以为他能做完,结果一问是 90%,就这样要持续好多天才真的算做完。</p>
<p>所以后来我得出来一个结论:<strong>一个任务,只有 0% 和 100% 两种状态是准确的,中间状态都是不靠谱的。</strong></p>
<p>除此之外,还有个问题就是,项目的进展并不太直观,除了项目经理每天看计划表,对计划有一个大概了解以外,其他人可能只有在到了计划设置的“里程碑”时,才对进度有比较直观的感觉。</p>
<p>项目成员手头事情做完,如果和计划有出入,也不知道自己接下来该干嘛,都要跑去问项目经理,所以项目经理对于很多事情都要从中协调,日常有很多繁重的任务管理工作。</p>
<p>后来我发现其实很多管理者都有类似的困惑:任务不好量化难以估算,项目成员对当前项目进度缺少直观感受,管理者要花大量时间在任务管理上。</p>
<p>这些年,随着软件项目管理工具的发展进化,发现当年困扰我的这些问题已经不再是一个主要问题,因为通过工具就能很好的解决这些问题。</p>
<p>这也是我这些年项目管理和技术管理的一点感悟:</p>
<blockquote>
<p>一切管理问题,都应思考能否通过工具或技术解决,如果当前工具或技术无法解决,暂时由流程规范代替,同时不停止寻找工具和技术。</p>
</blockquote>
<p>下面的微博即是一例,当遇到问题时,不仅从流程上思考有没有问题,更要考虑是不是可以用工具或技术手段来解决。</p>
<p><img src="assets/c7d2a286af31b9f79f95487b507859f7.png" alt="img" /></p>
<p>在这里,我还是先带你看一下项目管理工具软件发展史,通过工具的演化,你可以更深入的了解到工具是怎么解决这些管理问题的。</p>
<h2>项目管理工具软件发展史</h2>
<h4>在没有项目管理工具的年代,都是怎么管理项目的?</h4>
<p>早些年,我除了好奇过大厂是怎么开发大型软件项目以外,还好奇过像登月这种超大型项目是如何做项目管理的。正好前不久看了余晟老师写的一篇文章<a href="https://mp.weixin.qq.com/s/-u0TtSBA5EynVpTkuSVdog?">阿波罗“登月中的工程管理一瞥</a>,让我有机会一窥究竟。</p>
<p>其实这种大项目的项目管理并不神秘就是像我们专栏《11 项目计划:代码未动,计划先行》那一篇讲的,这种大项目也是采用 WBS工作分解结构把所有任务一级级分解再排成计划按照计划有序进行。</p>
<p>但阿波罗项目是个超大型项目,所有的任务分成了 A、B、C 三级,到 C 级已经有超过 4 万个任务。要给这四万多任务排出项目计划就太不容易了,一共要几十名分析人员来协调和跟踪所有的任务。最终列计划的图表贴在墙上超过 100 平米。</p>
<p><img src="assets/d838250d8a9150eab8af735f16f9f5bc.png" alt="img" /></p>
<p>阿波罗登月项目巨型计划图</p>
<p>在没有项目管理工具的年代,要制订一个项目计划非常之不容易,需要专业人士花大量时间,而且每次修改调整,都要再花费大量时间精力。</p>
<h4>最初的项目管理软件:项目计划工具</h4>
<p>直到后来像微软的 MS Project 这样的项目计划工具软件普及,才让制订计划变成了一个相对容易的事情,可以方便的对分解好的任务排出计划。</p>
<p>图片来源MS Project官网</p>
<p>早些年软件项目的开发以瀑布模型为主,瀑布模型的这种按阶段划分的开发模式,和 WBS 工作分解结构这种将任务层层分解的理念不谋而合MS Project 这种软件可以非常好的将所有任务分解、制订计划,按照计划跟踪执行。所以那时候,会使用 MS Project 就是项目经理的标配。</p>
<p>MS Projec 虽然解决了计划制订的问题,但还是有些不足之处。例如不方便跟踪任务进度,进度不直观等。</p>
<p>再加上后来敏捷开发开始兴起,很多项目都开始采用 Scrum 的方式来进行项目管理,开发变成了迭代的方式,以前单纯的项目计划工具,就不能很好的满足项目管理需要了。</p>
<h4>基于 Ticket 的任务跟踪系统</h4>
<p>传统的项目计划软件还有很多问题无法解决。比如,很多人都有过以下类似的项目经历:</p>
<ul>
<li>
<p>产品经理口头让开发对产品做一点小改动,开发也答应了,后来就把这事忘了,或者测试都不知道还有这事,也不记得要测试这个模块;</p>
</li>
<li>
<p>代码审查的时候,发现组内某个同事的代码没有写单元测试,但是因为任务紧,只能先上线,于是叮嘱他后面一定要把单元测试代码补上,结果还是忘了。</p>
</li>
</ul>
<p>日常项目中像这样的小事情不少,如果不记下来很容易忘记,如果用传统的项目计划软件排进去又很麻烦,直到后面有了基于 Ticket 的任务跟踪系统,才很好的解决了这个问题。</p>
<p>Ticket 跟踪最早源于客服的工单Ticket系统每次客户接到一个问题就创建一个工单后续和客户的每一次交流和处理都要更新工单内容和状态直到结束。</p>
<p>最早在软件项目中,应用 Ticket 跟踪系统的领域是测试领域,用来追踪 Bug后来逐步衍生到整个项目管理领域不仅跟踪 Bug还用来跟踪需求、开发任务等。</p>
<p>也有很多系统用 Issue 来表示 Ticket 的概念,无论 Ticket 还是 Issue表示的都是一个工作任务可以包括软件的 Bug、功能需求、某个模块的开发、系统的重构任务等。</p>
<p>那一个 Ticket 应该包含哪些主要信息呢?</p>
<p>一个 Ticket应该包含</p>
<ul>
<li>
<p>标题:摘要性的描述 Ticket 内容;</p>
</li>
<li>
<p>类型:属于什么类型的 TicketBug、需求、任务</p>
</li>
<li>
<p>内容Ticket 的详细内容,例如,如果是 Bug 的话,除了要写清楚 Bug 内容,还需要重现步骤。如果是需求的话,要有需求的描述,可能还需要额外的文档链接辅助说明;</p>
</li>
<li>
<p>创建人:谁创建的这条 Ticket</p>
</li>
<li>
<p>优先级:这个 Ticket 的优先级高还是低;</p>
</li>
<li>
<p>状态Ticket 的状态,例如:未开始、处理中、已解决、重新打开、关闭等;</p>
</li>
<li>
<p>指派给谁:这个 Ticket 被指派给谁了,谁来负责;</p>
</li>
<li>
<p>历史记录:整个 Ticket 改变的历史信息,用以跟踪;</p>
</li>
</ul>
<p>当然除了这些外,还有一些其他信息,例如创建时间、附件、标签、版本等。另外现在的 Ticket 跟踪软件都有强大的定制功能,可以增加额外的辅助信息,例如你是基于敏捷开发,还可以加上 Sprint、故事分数等信息。</p>
<p>Ticket 的这些内容,基本上可以包含一个工作任务所需要的所有内容。有了 Ticket 之后,无论大到一个功能需求,还是小到一个 Bug从它创建一直到完成整个过程都可以方便的被跟踪起来了。再也不担心像任务被忘记等前面提到的这些情况了。</p>
<p>基于 Ticket 去跟踪任务,不再需要通过日报、一对一会议的方式来收集任务执行情况,负责 Ticket 的项目成员在完成任务后,会直接修改 Ticket 的状态,这样其他人就可以看到 Ticket 是否已经完成。</p>
<p>Ticket 通过各种不同状态,例如未开始、开发中、完成等,可以很直观的了解任务的进展,这就避免了任务难以量化的问题。</p>
<p>Ticket 跟踪系统和敏捷开发也是很好的搭档。在敏捷开发中,产品 Backlog产品待办任务列表是一个用来放所有产品的待办任务的清单在每个 Sprint 开始前的迭代计划会议上,从产品待办任务清单里面选取一部分任务到 Sprint 的待办任务清单Sprint Backlog中。</p>
<p>当使用 Ticket 跟踪系统后,就可以把所有产品的待办任务用 Ticket 都记录起来,当我们在迭代计划会议上选取好任务后,就标记为要在当前 Sprint 完成,这样后面就可以方便的筛选出属于当前 Sprint 的所有 Ticket这样大家就可以从 Ticket 跟踪系统知道我们这个 Sprint 有哪些 Ticket 需要完成、进展如何。</p>
<p>如果将当前 Sprint 中,从开始到结束,每天记录一下 Sprint Backlog 中未完成 Ticket 的数量,绘制成一张图表,横轴表示时间,纵轴表示剩余 Ticket 数量,就可以通过图表直观地看到还剩下多少工作。</p>
<p>这种用于表示剩余工作量的工作图表也叫燃尽图burn down chart可以直观的预测工作将在何时全部完成。</p>
<p><img src="assets/c2311b8e2943ffe41c3775a80eb491ca.png" alt="img" /></p>
<p>图片来源:维基百科</p>
<p>基于 Ticket 的任务跟踪系统,很好的弥补了项目计划工具的不足,让项目中大大小小的各种开发任务都可以方便的记录跟踪起来。燃尽图也可以直观的了解剩余工作情况。</p>
<p>如果说美中不足的话,就是整体的 Ticket 状态还不是很直观,例如不能清楚的看到哪些任务在进行中,哪些任务待领取。</p>
<h4>基于看板的可视化任务管理</h4>
<p>看板本来是在 1940 年由“丰田汽车”发明的生产管理系统,其中一些理念被借鉴到软件开发中,尤其是其可视化的任务管理方式,很好地解决了早期 Ticket 跟踪系统不直观的问题。</p>
<p>所以现在的 Ticket 任务跟踪系统几乎都会有看板视图,通过看板可以很直观的看到当前任务进展情况。</p>
<p><img src="assets/ae93062b417fbe91e475841c9b781916.jpg" alt="img" /></p>
<p>参考上图,可以看出,在看板视图上的所有 Ticket可以很直观的看出哪些还没开始哪些进行中哪些已经完成。</p>
<p>这种可视化的任务视图,不仅是对项目经理,可以很直观看到进展,对于普通项目成员也是很方便。</p>
<ul>
<li>
<p>从“待选取”栏选择一个 Ticket拖动到“开发中”栏表示这个 Ticket 已经选取,开始开发了。</p>
</li>
<li>
<p>手头上的 Ticket 开发完成后,就可以将 Ticket 拖动到下一栏——“测试”栏。</p>
</li>
<li>
<p>测试人员看到新加入“测试”栏就可以从测试栏选取 Ticket 进行测试。</p>
</li>
<li>
<p>如果测试没通过Ticket 就会被拖动到“待选取”栏。</p>
</li>
<li>
<p>如果测试通过Ticket 就会被拖动到下一栏——“待部署”栏。</p>
</li>
<li>
<p>部署完成后,所有“待部署”栏的 Ticket 就会被拖动到“完成”栏。</p>
</li>
</ul>
<p>整个过程完全不需要项目经理从中协调太多,尤其是结合每日站立会议,可以让项目成员自发有序地按照看板开展日常工作。</p>
<p>借助 Ticket 跟踪和看板可视化,项目经理可以从繁重的任务管理中解放出来,可以抽出来时间做一些其他更重要的事情。</p>
<p>以上就是项目管理工具的一个演化简史,可以看到,每一次工具的发展进化,相应的很多项目管理工作就可以得到简化,很多早期的项目管理问题,也就不再是问题了。</p>
<h2>有哪些项目管理软件可以选择的?</h2>
<p>在了解完项目管理工具的发展历史后,再给你介绍一些目前国内国外主流的项目管理软件,帮助你根据自己项目需要进行选择。</p>
<p>如果单纯是项目计划工具,功能最好、最全的应该是微软的<a href="https://products.office.com/zh-CN/project/">MS Project</a>,但遗憾的是只能运行在 Window 上,不支持 Mac 平台。如果要在 Mac 上使用项目计划工具,可选的有<a href="https://www.omnigroup.com/omniplan">OmniPlan</a><a href="http://www.projectwizards.net/en">Merlin Project</a></p>
<p>而且这些项目计划工具,现在也都支持了看板视图。不过如果只是单机支持的话,意义并没有那么大,需要在线版的 Ticket 跟踪结合看板视图,才能让整个团队可以一起浏览操作,发挥其最大效用。</p>
<p>基于 Ticket 的任务跟踪系统,最有名的应该是<a href="https://www.atlassian.com/">Atlassian</a>公司出品的<a href="https://www.atlassian.com/software/jira">Jira</a>软件功能全面体验很好。Jira 主要是在海外比较流行,因为访问速度和使用习惯等原因,国内用户要相对少一些。</p>
<p>同类产品也很多,微软的<a href="http://visualstudio.microsoft.com/zh-hans/tfs/?rr=https%3A%2F%2Fshimo.im%2Fdocs%2F5A0wCnmLwn0nCjE9">Azure DevOps</a> (以前叫 TFS, Team Foundation Server和微软系的产品如 Visual Studio、Azure 可以很好的整合。</p>
<p>代码托管平台GitHub本身也集成了一套 Issue 跟踪管理系统,虽然没有 Jira 那么强大,但是对于普通项目来说,足够用了。尤其是对于开源项目,完全可以基于 GitHub 的 Issue 进行日常的项目管理。</p>
<p>国内同类的软件有:</p>
<ul>
<li>
<p>禅道:为数不多提供开源版本可以自己搭建的;</p>
</li>
<li>
<p>Worktile集成了即时消息软件</p>
</li>
<li>
<p>TAPD腾讯出品可以和腾讯的服务很好整合例如企业微信和腾讯云</p>
</li>
<li>
<p>云效:阿里巴巴出品,可以和阿里的服务很好整合,例如阿里云和钉钉;</p>
</li>
<li>
<p>DevCloud华为出品和华为云有很好的整合。</p>
</li>
</ul>
<p>还有一些其他产品,这里就不一一列举。</p>
<p>那么该如何选择适合的工具呢?</p>
<p>从功能上来说,基本上,上面提到的每一款产品都能满足日常项目管理的基本需求,建议从项目特色、团队成员、价格和服务等因素综合考虑。</p>
<p>例如说你的项目完全是微软技术栈,就可以考虑使用 TFS如果你深度使用阿里云和钉钉那么就可以考虑阿里的云效如果你想自己搭建那么就可以考虑 Jira 或者禅道。</p>
<p>这些产品都有免费版本,可以先试用,你可以仔细对比后,根据自身的情况再最终决定。</p>
<h2>总结</h2>
<p>今天我带你一起了解了软件项目管理工具的发展历史:从完全手工方式管理项目,到借助计划工具分解安排计划,到基于 Ticket 跟踪管理任务,再到基于看板的任务可视化。每一次工具的升级,都是对项目管理工作的一次简化。</p>
<p>合理的使用项目管理工具,可以帮你极大提高管理效率,起到事半功倍的效果。我也列举了一些目前国内外主流的项目管理工具,希望可以帮助你做出选择。</p>
<p>最后,对于日常项目管理的问题,你也可以多思考是不是可以由工具或者技术手段来解决的。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/软件工程之美/13 白天开会,加班写代码的节奏怎么破?.md.html">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/软件工程之美/15 风险管理不能盲目乐观凡事都应该有B计划.md.html">下一页</a>
</div>
</div>
</div>
</div>
</div>
</div>
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
</div>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"70997c4bab4e3cfa","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}' crossorigin="anonymous"></script>
</body>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-NPSEEVD756');
var path = window.location.pathname
var cookie = getCookie("lastPath");
console.log(path)
if (path.replace("/", "") === "") {
if (cookie.replace("/", "") !== "") {
console.log(cookie)
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
}
} else {
setCookie("lastPath", path)
}
function setCookie(cname, cvalue) {
var d = new Date();
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
}
return "";
}
</script>
</html>