mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-09-17 08:46:40 +08:00
1403 lines
36 KiB
HTML
1403 lines
36 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>17 需求分析到底要分析什么?怎么分析?.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 href="/专栏/软件工程之美/15 风险管理:不能盲目乐观,凡事都应该有B计划.md.html">15 风险管理:不能盲目乐观,凡事都应该有B计划.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/软件工程之美/16 怎样才能写好项目文档?.md.html">16 怎样才能写好项目文档?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
<a class="current-tab" 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>17 需求分析到底要分析什么?怎么分析?</h1>
|
||
|
||
<p>你好,我是宝玉,我今天想与你分享的主题是“需求分析”。</p>
|
||
|
||
<p>通过前面的学习,我们知道在瀑布模型中,第二个阶段就是需求分析阶段,同时需求分析的结果也决定了后续的系统设计、开发、测试等阶段能否顺利如期进行。即使是用敏捷开发,同样也少不了对需求的分析整理。</p>
|
||
|
||
<p>可以说需求就是整个产品的源头,所以需求分析的结果往往决定了产品的成败。如果没有正确把握客户需求,可能就会一步错,步步错!</p>
|
||
|
||
<p>就像我在《特别放送 从软件工程的角度解读任正非的新年公开信》提到的秋千的案例:</p>
|
||
|
||
<blockquote>
|
||
|
||
<p>客户想要一个给三个孩子玩的秋千;产品经理以为就是一个板子加两绳子就行;架构师发现除非把树截开,否则秋千没法荡起来的;程序员以为用绳子和板子连一起就完事了;而真正满足客户需求的,也就只要在绳子上挂个轮胎而已!</p>
|
||
|
||
</blockquote>
|
||
|
||
<p><img src="assets/2a196741845cc6533716f7ff66fa3c70.jpg" alt="img" /></p>
|
||
|
||
<p>所以在本篇文章中,我将带你去了解:需求分析到底要分析什么?以及我们怎么样才能做好需求分析,抓住用户的真实需求,做出来客户想要的软件产品,避免失败或浪费。</p>
|
||
|
||
<h2>什么是需求?</h2>
|
||
|
||
<p>我们日常在项目中,经常会听到“需求”这个词,比如说:</p>
|
||
|
||
<ul>
|
||
|
||
<li>
|
||
|
||
<p>项目经理对产品经理说:用户给我们提了一个需求,想要一个给三个孩子玩的秋千,你分析一下;-</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>产品经理对架构师说:我们现在有一个需求,在树上拴两绳子,再吊一块板子,你做一下设计。</p>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p>很明显,这两个需求的意思不一样,<strong>前面这个需求是用户需求,后面这个需求是产品需求。</strong></p>
|
||
|
||
<p>用户需求是由用户提出来的,期望满足自身一定需要的要求,例如用户说:“想要一个给三个孩子玩的秋千。”这种原始的用户需求通常是不能直接做成产品的,需要对其进行分析提炼,最终形成产品需求。</p>
|
||
|
||
<p>产品需求就是在分析提炼用户真实需求后,提出的符合产品定位的解决方案。就像上面“在树上栓两绳子,再吊一块板子”,就是产品经理针对用户需求提出的解决方案。</p>
|
||
|
||
<h2>需求分析是要分析什么?</h2>
|
||
|
||
<p>其实对用户需求的分析,不是一个动作,而是一个过程。需求分析,就是对用户需求进行提炼分析,最终形成产品需求的过程。</p>
|
||
|
||
<p>而针对每个用户需求的需求分析过程,需要经过三个步骤。</p>
|
||
|
||
<p><strong>第一步:挖掘真实需求</strong></p>
|
||
|
||
<p>大部分用户提的需求,都不见得是其真实的需求,需要透过现象看本质,去挖掘其背后真实的需求。就像福特汽车创始人亨利福特说过的:</p>
|
||
|
||
<p>如果我最初是问消费者他们想要什么,他们应该是会告诉我,“要一辆更快的马车!”</p>
|
||
|
||
<p>这里“要一辆更快的马车”就是一个典型的用户需求,但这并非是用户的真实需求,用户的真实需求,需要通过分析才能得到。</p>
|
||
|
||
<p>要分析用户的真实需求,可以从三个角度入手。</p>
|
||
|
||
<ol>
|
||
|
||
<li>目标用户:用户不同,诉求也不一样;</li>
|
||
|
||
<li>使用场景:使用场景不一样,解决方案也会有所不同;</li>
|
||
|
||
<li>想要解决的问题:用户背后想要解决的问题是什么。</li>
|
||
|
||
</ol>
|
||
|
||
<p>我们假设目标用户是普通乘客,使用场景是日常出行,那么用户想要解决的问题其实并不简单是“要一辆更快的马车”,想要更快的马车只是用户自己能想到的解决方案,而他想解决的问题是“更快更舒适的出行方式”。</p>
|
||
|
||
<p>而现实项目中,大多数人需求分析的不正确,就是因为没有挖掘出用户的真实需求。</p>
|
||
|
||
<p>我们再看之前的秋千项目,目标用户是三个孩子,使用场景是一起户外玩耍,想解决的问题其实是能有一起玩的娱乐设施。</p>
|
||
|
||
<p><strong>第二步:提出解决方案</strong></p>
|
||
|
||
<p>我们知道了目标用户,其使用场景和想要解决的问题,就可以结合产品定位,提出相应的解决方案。</p>
|
||
|
||
<p>比如针对想要“更快更舒适的出行方式”日常出行的乘客,我们就可以提出汽车的解决方案,而不一定要局限于马车,汽车能更好的满足用户需求。</p>
|
||
|
||
<p>针对三个孩子想有一个在户外一起玩的娱乐设施这个需求,我们可以提供一个轮胎式的秋千,就可以很好的满足他们的需求,我们甚至可以建一个小型游乐园。</p>
|
||
|
||
<p><strong>第三步:筛选和验证方案</strong></p>
|
||
|
||
<p>在提出方案后,我们需要对方案进行筛选,比如对于秋千项目,建小型游乐园的方案虽然能满足需求,但是成本太高,需要排除掉。</p>
|
||
|
||
<p>在选好方案后,还需要对方案进行验证,以确保方案能解决用户需求。</p>
|
||
|
||
<p>在传统瀑布模型中,选定方案后,会写成产品设计文档,走相应的评审流程,评审完成后再进行设计、开发和测试,测试完成后会让客户再进行验收。而敏捷开发,在整个开发过程中,每个迭代或者关键的里程碑,也一样需要客户进行验收。</p>
|
||
|
||
<p>通过以上三步,就可以对用户需求进行提炼分析,最终形成产品需求。</p>
|
||
|
||
<p>所以在需求分析过程中,分析的就是一个个用户的需求,找出背后的真实诉求,再有针对性的提出解决方案。</p>
|
||
|
||
<p>对于解决方案,要进行筛选和验证,有些不可行的用户需求不会变成产品需求,可行的用户需求会按照优先级进入实施阶段,最终变成产品。</p>
|
||
|
||
<h2>怎样做需求分析?</h2>
|
||
|
||
<p>前面我介绍了对单个用户需求的分析,主要经过三个步骤:</p>
|
||
|
||
<ul>
|
||
|
||
<li>
|
||
|
||
<p>第一步:挖掘真实需求;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>第二步:提出解决方案;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>第三步:筛选和验证方案。</p>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p>而软件项目的用户需求,从来就不是单一的,而是一系列需求,所以对于软件项目的需求分析,还需要增加收集整理的步骤。整个过程是迭代进行的,如下所示:</p>
|
||
|
||
<ul>
|
||
|
||
<li>
|
||
|
||
<p>收集需求:对用户需求进行收集整理;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>分析需求:对需求进行分析,挖掘用户真实需求;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>需求评估:筛选过滤掉不可行的需求;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>需求设计:针对用户需求提出解决方案,设计成产品方案;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>验证需求:验证方案是否可行。</p>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p><img src="assets/b4f5e9676ed215c1d80da73a15281776.jpg" alt="img" /></p>
|
||
|
||
<p>我在美国 DePaul 大学读书的时候,曾在学校兼职,当时接到一个项目,要为计算机学院的网络教学系统做一个网页版的播放器。</p>
|
||
|
||
<p>我们知道现在的课堂里面,老师上课的时候,会用电脑放 PPT 或者课件,同时还要在黑板(也有的是白板)上写写画画辅助说明。</p>
|
||
|
||
<p>DePaul 大学的网络教学系统,就是在老师上课的时候,用摄像头把老师讲课的整个过程都录制成视频,同时也会用特殊的软件,把当时电脑屏幕上显示的内容,和白板上写的内容,都录制下来。</p>
|
||
|
||
<p>这样选网络课程的同学可以通过网络直接观看,既不会漏了老师讲的内容,也不会错过老师在电脑上放的和白板上书写的内容。播放器要做的就是要播放录制的教学视频、电脑屏幕和白板。</p>
|
||
|
||
<p>我将以这个项目为例,讲讲如何做需求分析。</p>
|
||
|
||
<ol>
|
||
|
||
<li><strong>收集需求</strong></li>
|
||
|
||
</ol>
|
||
|
||
<p>这个项目的原始需求是老师给我的,只是告诉我要做这样一个播放器,让学生能看教学内容。而这个需求还不够,我还需要继续收集用户需求。</p>
|
||
|
||
<p>收集用户需求有很多方法,这里列举部分:</p>
|
||
|
||
<p>头脑风暴:就是大家一起开会头脑风暴讨论;</p>
|
||
|
||
<p>用户调研:通过调查问卷或者访谈,通过问用户一些问题收集反馈;</p>
|
||
|
||
<p>竞品分析:通过分析其他同类产品的功能获得需求;</p>
|
||
|
||
<p>快速原型:通过原型来收集反馈,收集确认需求。</p>
|
||
|
||
<p>拿播放器的项目来说,头脑风暴没有足够的项目成员,也没有同类产品可以做竞品分析,做原型的话,成本有点高,所以用户调研就是最适合的收集需求的方法。它不仅简单,而且能收集到真实的用户反馈。于是我通过微信群、邮件、用户访谈从老师、领导和学生那分别收集了一些反馈。</p>
|
||
|
||
<p>老师们没有什么有效反馈,因为他们基本不需要用到这个软件,领导们有个需求就是希望能播放字幕,而很多学生希望能有 2 倍速快进功能。</p>
|
||
|
||
<ol start="2">
|
||
|
||
<li><strong>分析需求</strong></li>
|
||
|
||
</ol>
|
||
|
||
<p>收集了需求,就要分析用户的真实需求,这是最难的部分,也是最体现产品经理需求分析水平的地方。</p>
|
||
|
||
<p>用户需求背后的真实需求有三个层次:</p>
|
||
|
||
<ul>
|
||
|
||
<li>
|
||
|
||
<p>表层需求:用户对解决问题的期望,例如马车更快;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>深层需求:用户的深层次动机,诉求产生的原因,例如乘客对出行速度的要求;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>底层需求:人性本能的需求,例如对安全感对舒适的追求。</p>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p>要分析好用户需求背后的真实需求,就是要结合“目标用户”和“使用场景”,按照上面三个层次去思考。</p>
|
||
|
||
<p>我们拿刚才播放器为例,目标用户是学生,使用场景是学校机房或者家里,希望解决以下问题。</p>
|
||
|
||
<p>字幕的问题:</p>
|
||
|
||
<ul>
|
||
|
||
<li>
|
||
|
||
<p>表层需求:显示字幕;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>深层需求:语言不好,跟不上老师节奏;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>底层需求:聋哑学生无法听到声音,只能通过字幕学习。</p>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p>快进的问题:</p>
|
||
|
||
<ul>
|
||
|
||
<li>
|
||
|
||
<p>表层需求:能快进播放;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>深层需求:可以节约学习的时间,提高效率;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>底层需求:取得好的学习成绩</p>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p>经过这么一分析,基本上就对于用户的真实需求心里有数了。</p>
|
||
|
||
<ol start="3">
|
||
|
||
<li><strong>需求评估</strong></li>
|
||
|
||
</ol>
|
||
|
||
<p>需求收集分析完了后,还需要进一步评估,以决定做还是不做,优先级如何,先做哪些再做哪些。</p>
|
||
|
||
<p>需求评估考虑的因素有:</p>
|
||
|
||
<ul>
|
||
|
||
<li>
|
||
|
||
<p>可行性:技术能否实现;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>成本:人力成本、时间成本;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>商业风险和收益:有没有商业上的风险,收益是否合理;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>紧急性与重要性:是不是用户迫切的需求。</p>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p>如果确定可行,还需要评估其优先级。评估优先级一个简单的方案就是用“紧急重要四象限”的方法来区分:</p>
|
||
|
||
<p><img src="assets/43965aae9c1a2f294fb5664731e9cdd8.jpg" alt="img" /></p>
|
||
|
||
<p>复杂一点的有 KANO 模型,如下图所示。</p>
|
||
|
||
<p><img src="assets/71cb6e674f8b633be802a02c2e616d7f.jpg" alt="img" /></p>
|
||
|
||
<ul>
|
||
|
||
<li>
|
||
|
||
<p>红色曲线,是用户认为必须要有的功能;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>绿色曲线,就是用户明确提出的需求;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>黄色曲线,属于兴奋型需求,就是用户自己没想到,超出预期的功能。</p>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p>回到我们播放器的例子:</p>
|
||
|
||
<ul>
|
||
|
||
<li>
|
||
|
||
<p>红色曲线(必须要有的功能):能播放视频、播放电脑屏幕,播放白板;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>绿色曲线(用户明确提出的功能):字幕、2 倍速快进;</p>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<p>黄色曲线(超出预期功能):10 秒快进、10 秒快退、在时间轴上记录笔记。</p>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<ol start="4">
|
||
|
||
<li><strong>需求设计</strong></li>
|
||
|
||
</ol>
|
||
|
||
<p>在分析和评估完需求后,还需要提出解决方案,也就是对需求进行设计,做出来有效的产品设计方案。最终的产品设计,会落实到人机交互上面,用户可以通过软件界面交互。</p>
|
||
|
||
<p>现在产品设计方面,各个平台都有一套比较成熟的界面标准控件,大部分产品设计都可以基于标准界面控件,组合成满足需求的用户界面,在满足功能的前提尽可能做得易用和美观。</p>
|
||
|
||
<p>在需求设计的时候,可以用草图、原型设计工具、界面设计工具进行设计。</p>
|
||
|
||
<p>在需求设计阶段,可以参考其他成熟的产品。比如我在设计播放器时,也是通过借鉴其他软件的设计来完成的,比如说向 Youtube 借鉴了视频播放器的设计,向 Skype 的电话会议系统借鉴了其播放区域切换的交互,最终完成了产品设计。</p>
|
||
|
||
<p><img src="assets/a2c1d84a3422cf77bd2a903303249977.png" alt="img" /></p>
|
||
|
||
<p>\5. 验证需求</p>
|
||
|
||
<p>在需求设计好后,还需要进行验证,看解决方案是否能满足用户的需求。</p>
|
||
|
||
<p>对需求的验证方式其实是贯穿整个软件项目生命周期的,在需求分析阶段,会反复验证确认设计好的需求是否满足用户的真实需求,例如各种设计评审。</p>
|
||
|
||
<p>在产品开发完成后,也需要有需求的验收,以确保开发出来的软件产品是客户想要的,满足客户需求的。</p>
|
||
|
||
<p>现在很多互联网产品,还有一种基于数据的验证需求方式,也就是 A/B 测试。</p>
|
||
|
||
<p>设计好一个功能上线后,并不直接让所有用户使用,而是先给一小部分用户使用,然后分析数据,看使用这个功能的用户群和不使用这个功能的用户群,在营收、访问量、活跃度等关键数据上是更好还是更坏。如果好,就加大比例,如果数据不好,可能就会调整甚至取消这个功能。</p>
|
||
|
||
<p>我在设计播放器的时候,首先用 PPT 做了一个简单的草图,拿去给老师确认,收集一些反馈后,写了一个 PC 版的软件原型,拿给一部分同学试用。在收集反馈后,做了一些修改和调整,最终确认了产品的设计。</p>
|
||
|
||
<p><img src="assets/96ffb31d8373ed35bbfc3ea66e4011f1.png" alt="img" /></p>
|
||
|
||
<p>在需求分析完成后,就可以基于需求分析形成的文档,进行设计和开发了。(DePaul 大学的网络教学系统产品演示)</p>
|
||
|
||
<h2>总结</h2>
|
||
|
||
<p>今天带你一起学习了软件工程中一个非常重要的知识点:需求分析。</p>
|
||
|
||
<p>需求分析,就是一个将用户需求变成产品需求的过程。要做好用户需求的分析,需要找出来隐藏在用户需求背后的真实需求,还要针对用户的真实需求提出解决方案,最终验证方案是不是能满足好用户需求。</p>
|
||
|
||
<p>需求是整个产品的源头,很多软件项目失败的原因就在于没有做好需求分析,软件中很多浪费也来源于需求没想清楚导致的返工。做好需求分析对于软件项目来说非常的重要。</p>
|
||
|
||
<p>要做好软件项目的需求分析,需要做好需求的收集整理工作,然后对收集好的需求进行科学的分析,评估是不是可行以及划分优先级,对可行的需求项进行设计,最后还要验证设计出来的结果是不是满足需求。</p>
|
||
|
||
<p>希望你通过这节课的学习,能科学地运用好需求分析的知识,对项目的需求分析把好关,保证最终产品能满足用户需求,超出用户预期。</p>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div>
|
||
|
||
<div style="float: left">
|
||
|
||
<a href="/专栏/软件工程之美/16 怎样才能写好项目文档?.md.html">上一页</a>
|
||
|
||
</div>
|
||
|
||
<div style="float: right">
|
||
|
||
<a href="/专栏/软件工程之美/18 原型设计:如何用最小的代价完成产品特性?.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":"70997c52dc8d3cfa","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>
|
||
|