mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-09-17 08:46:40 +08:00
1347 lines
34 KiB
HTML
1347 lines
34 KiB
HTML
<!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>15 风险管理:不能盲目乐观,凡事都应该有B计划.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 href="/专栏/软件工程之美/14 项目管理工具:一切管理问题,都应思考能否通过工具解决.md.html">14 项目管理工具:一切管理问题,都应思考能否通过工具解决.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
<a class="current-tab" 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>15 风险管理:不能盲目乐观,凡事都应该有B计划</h1>
|
||
|
||
<p>你好,我是宝玉,我今天想与你分享的主题是:风险管理,凡事都应该有 B 计划。</p>
|
||
|
||
<p>说到风险,很多人都模模糊糊有一些了解,然而在软件项目中,有风险意识的却不多。比如说:</p>
|
||
|
||
<ul>
|
||
|
||
<li>
|
||
|
||
<p>估算一个模块工作量,程序员总是会给出一个乐观的进度,而最终实现这个模块的时候,却发现总是有些其他的事情发生影响了进度;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>一个关键的程序员,突然离职了,导致项目进度停滞。其实早前就有一些迹象,而项目经理没引起重视;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>技术负责人很激进的采用了一个最近很流行的新技术,结果做的过程中,发现这个技术还不太成熟,很多坑没法填,导致项目最终失败;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>服务器突然挂了,才发现硬盘坏了而数据没有备份,造成巨大的损失。</p>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p>这些问题其实都和风险相关,如果没有及时发现这些潜在的风险,没有应对方案,轻则导致项目进度延迟,重则导致项目失败,造成重大损失。</p>
|
||
|
||
<p>在软件工程里面,针对这些可能造成风险的问题,对风险进行提前识别和管理,就可以有效地应对。</p>
|
||
|
||
<h2>什么是风险管理?</h2>
|
||
|
||
<p>风险是指不确定的事件,一旦发生,将会造成消极的影响。风险包含两个方面的内容:</p>
|
||
|
||
<ol>
|
||
|
||
<li>发生后,会造成什么样的损失?</li>
|
||
|
||
<li>发生的概率有多大?</li>
|
||
|
||
</ol>
|
||
|
||
<p>所以也有人认为:<strong>风险 = 损失 x 发生概率。</strong></p>
|
||
|
||
<p>比如说,有一次我负责一个小项目,激进的采用了刚开始流行的 React 框架,如果使用熟悉的 Angularjs 框架,正常来说一个月就能完成,当时很乐观的觉得 React 和 Angularjs 也差不多,时间应该不会多出来太多,就按照一个月时间来做项目计划。</p>
|
||
|
||
<p>最后到实际开发的时候,发现 React 和 Angularjs 有很多不一样的地方,必须要现学现用,原本计划一个月完成的,最后加班加点拖到一个半月时间才完成。</p>
|
||
|
||
<p>在这个项目中,使用新技术就是一个风险:</p>
|
||
|
||
<ul>
|
||
|
||
<li>
|
||
|
||
<p>造成的损失就是导致了进度延误;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>发生延误的概率,如果项目开始前估算,大概在 60% 左右,项目进行中这个概率就上升到 80% 了。</p>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p>像软件项目中这样的风险,如果发生后就会变成问题,问题如果没有及时解决,就会影响到项目计划。如果我们能有效的对风险加以识别,加以管理,就能减少对项目的负面影响。</p>
|
||
|
||
<blockquote>
|
||
|
||
<p>风险管理就是指在项目进行过程中,识别可能的风险,对风险进行评估,并加以监控,从而减少风险对项目的负面影响。</p>
|
||
|
||
</blockquote>
|
||
|
||
<h2>风险管理重要吗?</h2>
|
||
|
||
<p>对于风险管理,现在软件项目中提起的不多,应用的更少。</p>
|
||
|
||
<p>主要原因还在于大家都比较乐观,多少有一定侥幸心理,都觉得自己不会运气那么差,风险事件正好就发生了。还有就是因为如果要做风险管理,需要额外多做一些工作。</p>
|
||
|
||
<p>这就跟你买保险的道理一样,风险事件没发生,相当于你买保险的钱白花了,但是一旦发生了,你才知道买保险的钱花的值得。</p>
|
||
|
||
<p>**对软件项目风险的管理,才是体现项目管理水平的地方。**我们对比下面几种应对风险的层次来看:</p>
|
||
|
||
<ul>
|
||
|
||
<li>
|
||
|
||
<p>被动应对:风险已经发生,造成了问题才被动应对;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>有备无患:事先制定好风险发生后的补救方案,但没有任何防范措施;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>防患未然:对可能的风险做出防范,并把风险防范作为项目任务的一部分。</p>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p>哪一种层次更体现项目管理水平,相信你心中已经有了答案。</p>
|
||
|
||
<p>拿前不久发生的拼多多被“薅羊毛”事件来举例。</p>
|
||
|
||
<blockquote>
|
||
|
||
<p>2019 年 1 月 20 日凌晨,拼多多平台出现系统漏洞,用户可以领取 100 元无门槛券。因此开始出现大批用户借此“薅羊毛”,利用无门槛券下单虚拟商品,例如充话费或 Q 币等等,并一度有消息传出,拼多多将因此损失 200 亿元。</p>
|
||
|
||
</blockquote>
|
||
|
||
<p>这个事件追究原因的话,当然可以说是开发代码没写好,可以说是测试没测好,也可以说运维没有监控好。</p>
|
||
|
||
<p>但另一个角度讲,如果这个项目的负责人有一点风险意识,做了风险管理,即使出现这样的问题,损失也一定不会这么大。</p>
|
||
|
||
<h2>如何做好风险管理?</h2>
|
||
|
||
<h4>1. 培养风险意识</h4>
|
||
|
||
<p>风险管理其实最大的问题不是如何做,而是项目成员缺少风险意识,有了风险意识,才能去识别出来项目中可能的风险,进而去管理风险。</p>
|
||
|
||
<p>对于培养风险意识,我的经验就是:<strong>项目中的任务,不能盲目乐观,都思考一下它最坏的结果是什么,如果最坏的结果不能接受,就说明要有个 B 计划,考虑风险管理了。</strong></p>
|
||
|
||
<p>比如说拼多多的无门槛券,最坏的情况是被无限刷,造成巨额经济损失,那这种结果是不能接受的,就需要考虑风险管理。</p>
|
||
|
||
<h4>2. 管理风险</h4>
|
||
|
||
<p>软件项目风险管理,通常分四步来做。</p>
|
||
|
||
<p><strong>第一步:风险识别,识别可能的风险</strong></p>
|
||
|
||
<p>风险识别,就是看项目中有哪些可能的风险,因为只有找出来有可能存在的风险,才会有后续的步骤。</p>
|
||
|
||
<p>识别风险这种事,经验很重要,因为大部分风险其实都是相似的。以前看 CSDN 总裁蒋涛发过一条微博,内容引发了很多人的共鸣,每一条无不应对着软件项目中的常见风险。</p>
|
||
|
||
<blockquote>
|
||
|
||
<p><strong>10 个项目死亡的信号:</strong></p>
|
||
|
||
<ol>
|
||
|
||
<li>
|
||
|
||
<p>第一版做太多功能 ;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>太依赖新技术平台;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>与公司另一个有份量的产品竞争;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>团队人手不足;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>复杂的问题,需要复杂的解法;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>成员开始隐藏进度落后的事实和原因;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>不断更改、增加的需求 ;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>2.0 症候群 - 非要更大、更强、更美 ;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>产品没有市场立足点;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>你根本无法解决的大问题。</p>
|
||
|
||
</li>
|
||
|
||
</ol>
|
||
|
||
</blockquote>
|
||
|
||
<p>一个识别风险的方法叫<strong>检查表法</strong>,就是可以把类似于上面这些常见风险收集整理起来,分类列成清单,按照清单去检查对照。</p>
|
||
|
||
<p>软件项目的风险主要分成以下几类:</p>
|
||
|
||
<ul>
|
||
|
||
<li>
|
||
|
||
<p>项目风险:项目预算、进度、用户和需求等方面的问题;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>人员风险:人员离职、人手不足等问题;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>技术风险:采用的技术所可能带来的风险;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>商业风险:与市场、产品策略等有关的商业风险。</p>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p>你也可以按照上面的分类整理出自己的风险检查表。</p>
|
||
|
||
<p>另外你还可以借助集体的智慧,定期针对风险问题开一些头脑风暴会议,一起发现可能的风险。另外,要有合适的渠道,让项目成员可以反馈可能发生的风险问题。</p>
|
||
|
||
<p><strong>第二步:风险量化,对风险进行评估量化</strong></p>
|
||
|
||
<p>在风险识别出来以后,需要从两个方面去评估:</p>
|
||
|
||
<ul>
|
||
|
||
<li>
|
||
|
||
<p>发生的概率多大?</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>发生后,后果多严重?</p>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p>对于概率大,后果严重的风险,需要高优先级重点考虑;对于概率不高但后果严重的问题也要考虑,不过优先级略低;对于概率高但后果不严重的风险事件,可以优先级很低或者不考虑;对于概率低后果不严重的,则可以不予考虑。</p>
|
||
|
||
<p>拿拼多多的“无门槛券”来说,这就属于一个高风险、高概率的事,需要重点考虑。</p>
|
||
|
||
<p><strong>第三步:应对计划,对风险制定应对策略</strong></p>
|
||
|
||
<p>在评估后,需要后续进一步考虑的,就要制定好应对的计划。针对风险,主要分成以下几个策略。</p>
|
||
|
||
<p><img src="assets/1f0834c11f675e1846779134746903d5.jpg" alt="img" /></p>
|
||
|
||
<ul>
|
||
|
||
<li><strong>回避风险——更改导致风险的方案</strong></li>
|
||
|
||
</ul>
|
||
|
||
<p>回避风险很好理解,就是要对可能发生的风险,放弃或者修改导致风险的方案。这样就从根源上消除了风险,简单而彻底。</p>
|
||
|
||
<p>就像我前面举的因为使用 React 技术导致风险的例子,可以直接放弃使用 React,用回熟悉的 Angularjs 技术,这样就可以避免技术风险的发生。</p>
|
||
|
||
<p>但这种方案不一定适合所有情况,例如拼多多“无门槛券”的风险,就无法采用这种方案。</p>
|
||
|
||
<ul>
|
||
|
||
<li><strong>转移风险——将损失转嫁出去</strong></li>
|
||
|
||
</ul>
|
||
|
||
<p>以前玩大富翁游戏,最开心就是有一张“嫁祸卡”,万一遇到倒霉事就可以转嫁到其他玩家身上。转移风险也是这个思路,就是为了避免承担风险损失,将损失转嫁出去的方法。</p>
|
||
|
||
<p>日常生活中买保险就是一个例子,发生意外,保险公司会帮助赔付。</p>
|
||
|
||
<p>在软件项目中,举例来说,如果你的团队对于服务器管理不是很在行,有可能会遇到服务器宕机或数据库丢失数据等风险,就可以考虑购买云服务,这样云服务商会帮你解决服务器宕机或数据库丢失的问题,而且万一宕机或丢数据了他们也会承担一定的责任。</p>
|
||
|
||
<ul>
|
||
|
||
<li><strong>缓解风险——降低风险发生概率或减少可能造成的损失</strong></li>
|
||
|
||
</ul>
|
||
|
||
<p>缓解风险就是在风险发生前采取一定措施,降低风险发生的概率,或者减少风险可能造成的损失。</p>
|
||
|
||
<p>比如你要担心数据库数据丢失的风险,就需要定期备份数据库;比如你担心核心成员要离职,那就涨点工资,避免人才流失。</p>
|
||
|
||
<p>拼多多的无门槛券也是个典型的例子,如果对券的消费增加一定的限制,比如说每个用户有领取的上限,一个月不能超过 100 张,每张券不超过 10 元,不能用于购买 Q 币手机话费等虚拟物品,这样即使出现问题,也不会造成很大损失。</p>
|
||
|
||
<p>我们在《04 瀑布模型之外,还有哪些开发模型?》中学到了“螺旋模型”,也是这种策略:每个迭代都要做一下风险评估,再决定项目是不是继续。</p>
|
||
|
||
<ul>
|
||
|
||
<li><strong>接受风险——明知山有虎偏向虎山行</strong></li>
|
||
|
||
</ul>
|
||
|
||
<p>还有一些风险本身很难避免,或者去应对这个风险的成本超过风险发生后造成的损失,那么就没必要应对,直接选择承担风险后果就好了。</p>
|
||
|
||
<p>比如说前面说的采用新技术 React 导致进度延迟的案例,这个风险虽然有很大概率发生,但是进度延迟的影响可以接受,并且让团队今后在技术栈上多了新的选择,长远来看对项目更有利,那么这个风险就是可以接受的,还是可以继续做下去。</p>
|
||
|
||
<p>回避风险、转移风险、缓解风险、接受风险,以上就是针对风险提前准备的一些应对策略,实际项目中,可以根据实际情况来灵活运用以上策略,有效应对风险,减少可能损失。</p>
|
||
|
||
<p><strong>第四步:风险监控,对风险进行监控预警</strong></p>
|
||
|
||
<p>风险在没发生的时候并不会变成问题也不会造成损失,如果风险可以监控,可以预知风险即将发生,或者可以在风险发生后,第一时间知道,那么就可以马上对风险进行干预,避免变成更大的问题。</p>
|
||
|
||
<p>要做好监控,第一要能对监控的内容量化,第二要设置阈值,第三就是要有后续的报警和处理机制。</p>
|
||
|
||
<p>很多公司都已经建立了自己的监控系统,将关键数值量化,并设置阈值,超过阈值后自动触发报警机制。</p>
|
||
|
||
<p>一个简单的例子就是服务器宕机了,监控系统发现机器没响应了,自动通过邮件、短信、电话等方式通知正在值班的人员。</p>
|
||
|
||
<p>还有稍复杂一点的方式,像网络服务,可以监控每一次请求结果的状态码,统计请求的成功率。如果单位时间内,服务出错的比例低于阈值,那说明服务是正常的;如果错误比例超过阈值,那说明是出现了问题,需要报警通知相关人员,马上处理。</p>
|
||
|
||
<p>再回到拼多多“无门槛优惠券”的例子,其实有很多数据可以监控到,比如说单位时间内优惠券使用数量,商品销售数量等,如果结合一些可视化视图,应该可以直观地看到当时有大量虚拟商品销售,大量的优惠款被使用。</p>
|
||
|
||
<p>如果针对优惠款设置了阈值,例如每分钟使用超过 1000 张就触发报警,那么也可以及时发现无限刷的问题,避免造成更大损失。</p>
|
||
|
||
<p>以上四个风险管理的步骤是一个连续循环的过程,在整个项目期间,都要持续地对风险进行识别,对风险量化,对于风险采取应对计划,对风险进行监控。</p>
|
||
|
||
<p><img src="assets/11b6e81fd2baffcb0c025bb56c71e130.jpg" alt="img" /></p>
|
||
|
||
<p>项目风险管理过程</p>
|
||
|
||
<h2>总结</h2>
|
||
|
||
<p>今天带你一起学习了软件项目管理中的风险管理知识。软件项目中的风险就是指那些不确定的但是可能会造成消极影响的事件,通过对风险的管理,可以有效降低风险发生的概率,减少风险发生后的损失。</p>
|
||
|
||
<p>软件项目风险管理包括风险识别、风险量化、应对计划和风险监控四个过程,这四个过程是一个循环的过程,需要在项目中持续进行。</p>
|
||
|
||
<p>希望你在学习后,能提高风险意识,不能盲目乐观,凡事都应该有 B 计划。并且能将学到的风险管理知识应用到项目中,做到对可能的风险了然于胸,未雨绸缪,运筹帷幄。</p>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div>
|
||
|
||
<div style="float: left">
|
||
|
||
<a href="/专栏/软件工程之美/14 项目管理工具:一切管理问题,都应思考能否通过工具解决.md.html">上一页</a>
|
||
|
||
</div>
|
||
|
||
<div style="float: right">
|
||
|
||
<a href="/专栏/软件工程之美/16 怎样才能写好项目文档?.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":"70997c4e19703cfa","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>
|
||
|