二八原理:软件开发中的二八原理
前面聊了“什么是二八原理”,接下来得说说如何运用了。由于本博客主要谈IT技术,显然要先来说说和程序员有关的那些事。为了不至于太抽象,我们以开发文本编辑器为例(这玩意大伙儿都熟悉,省得费口水解释),来说说不同职责的开发人员在开发过程中该如何具体运用二八原理。
需求分析
需求分析在整个开发过程中占的工作量不大,但是产生的影响巨大(这又是一个二八原理的例子)。既然需求分析如此重要,照理说应该安排最强的人来搞。但实际情况往往不是如此:很多公司负责需求分析的人并不胜任这项工作。我经历过几个不太成功的项目,其问题的根源都和需求分析有关。
需求分析最要紧的是:搞清楚用户到底想要什么?如果这个问题搞错了、搞偏了,后面的步骤做得再好也是白搭(比如客户想要一个文本编辑器,结果你搞了个图形编辑器给他)。这方面其实有很多的道道,限于篇幅就不展开了,大伙儿如果有兴趣,以后可以单独说一下。
在搞清楚“用户想要什么”之后,接着要整理出功能列表(也有叫Feature List),并筛选出大约20%的重点功能。这个步骤是我今天主要想介绍的,因为这个步骤和后续的各项开发密切相关。一般来说,功能筛选的依据有如下几个:
- 用户经常用的功能(比如save、copy、cut、paste)
- 宣传的卖点(要能够超出同类软件,吸引眼球)
- 和用户利益密切相关的功能(这种功能不允许出错,比如存盘功能)
这个筛选的过程要尽早完成,而且最好是产品人员、开发人员、测试人员三方的头头一起讨论,以保证立场客观、观点全面。筛选出重要功能点后,其他人员的工作安排要“以重点功能为纲”,有所侧重。
项目管理
如果你是个项目经理,在排项目计划时,就得尽量优先安排重点功能的开发/测试,而且要安排能力强的人员来完成。按照我以前的做法,重点功能排计划至少得留出1/3的时间余量,以防万一(事实证明,几乎每个稍大点的项目都会出现万一)。至于非重点功能,尽量排到后面,安排能力一般的人开发/测试。
然后,在项目进行过程中,肯定要有定期的例会。作为项目经理,你应该主要关注重点功能的进度情况和风险情况。
一旦项目有延期的风险,就从非重点功能开始裁减(俗称砍功能)。由于是裁减非重点功能,不至于产生致命的影响。
设计界面
设计界面时,你得保证所有的常用功能都放在显著的位置(比如工具条);还得保证它们用起来方便(比如提供快捷键和右键菜单支持)。
对于卖点,它不一定是常用功能,它的目的是激起用户的购买欲望和使用欲望。因此你要把它们设计得比较酷,有噱头。
对于利益相关的功能,大部分情况下都是侧重于业务逻辑实现。如果它既不是常用功能、也不是卖点,那么界面设计方面倒不一定要额外花大力气。
其它的非重点功能,只要按照常规方法设计,不用花太大精力。
编写代码
我发现很多开发人员有几个通病:先做有趣或容易的功能,然后再做无聊或者繁琐的功能;对自己有兴趣的功能投入精力多,对自己没兴趣的简单应付。
以上这些都是开发的大忌。作为一个职业的开发人员,不应该以自己的兴趣和喜好来决定开发的轻重缓急。正确做法应该如下:
你首先得用主要精力完成上述所说的重点功能,而且要保证它们的代码质量尽可能好,尽可能方便维护(重点功能往往是经常有需求变更,经常被修改的)。
对于重点功能中的“常用功能”,要保证时间性能够好(能快速响应)。对于"用户利益相关的功能",要保证bug尽可能少(尤其是安全性、稳定性、健壮性的bug)。
至于其它的非重点功能,只要不出明显bug,有点小缺陷无伤大雅。
测试
如果你是个测试人员,你同样要把主要精力用于测试那些重点功能。对于“用户利益相关的功能”,多进行一些健壮性测试、稳定性、安全性等测试(比如测试保存大文件是否会出错)。对于常用功能,主要进行易用性和性能测试(比如拷贝、粘贴是否易用)。
至于其它功能,只要进行普通的测试,保证它不出现明显和严重bug即可。要知道Windows 2000发布的时候,尚遗留上千个未修复的bug(当然都是低优先级的),微软不也照样发布。
产品演示
有些软件开发完之后,会搞一些Demo进行宣传。如果你是负责进行Demo的人,你肯定要把主要的Demo时间用来秀软件的卖点,这样给客户的印象最深刻,效果最好;至于非卖点的功能,都未必要提及。
几种和开发相关工作就介绍到这里,最后送给大伙一句话:Do not work hard, work smart!
下一个帖子打算聊一下二八原理在管理中的应用。
转载于:https://www.cnblogs.com/purplefox2008/p/6064272.html
二八原理:软件开发中的二八原理相关推荐
- 测试自动化金字塔在软件开发中是如何使用的?
测试自动化金字塔,是一个指南,指导您进行什么类型的测试以及每种测试的数量.测试自动化金字塔有助于创建更高效的测试,并导致向客户发布更可靠的软件. 测试自动化金字塔的好处 测试自动化的大部分好处显而易见 ...
- 建模语言UML在软件开发中的应用
建模语言 UML 在软件开发中的应用 摘要:UML( Unified Modeling Language)是建立系统模型和分析业务处理流程强有力的工具,它能够帮助软件开发人员从不同角度描述系统,使 ...
- 我的软件开发中经验教训
作者:追梦1819 原文:https://blog.csdn.net/weixin_39759846/article/details/116780540 版权声明:本文为博主原创文章,转载请附上博文链 ...
- 软件开发中的经验主义和理性主义
软件开发中的经验主义和理性主义 读<设计原本>笔记 理性主义和经验主义是典型的认识论理论.这两种类型的思想,从古到今,从中到外,互相对立,互相斗争,又互相影响,互相渗透.经验主义者认为人类 ...
- 软件工程中的系统文献映射研究实例-软件开发中的假设条件与哪些软件制品关联(第四部分)
之前的博客详细描述了软件工程中的系统文献映射研究方法.这里接着给出一个我曾经做过的工作作为例子,以更直观地展示这种研究类型.该研究的背景信息这里不再赘述. 这篇博客主要介绍第三个研究问题的结果,即软件 ...
- 大型CAx(CAD/CAE/CAM)工业软件开发中的关键组件
通过对FreeCAD.SALOME等多款代码的分析研究,发现这些软件在架构设计.模块实现等方面,存在许多相似(同)的技术思想.因此,有必要对这些共性.主流的技术予以总结分析. Structuring ...
- 彼之蜜糖,吾之砒霜——聊聊软件开发中的最佳实践
作者:sherrywasp https://www.cnblogs.com/sherrywasp/p/9436623.html "描述一个事物,唯有一个名词定义它的概念,唯有一个动词揭露它的 ...
- 视频互动直播软件开发中的连麦问题分析
直播行业发展至今,我们经常会听到很多朋友谈论"互动直播".那么何谓互动直播呢?其实互动直播的核心在于通过连麦技术,让视频直播有一个超过文字的更深层次的互动交流. 在视频互动直播软件 ...
- 统治软件开发中的著名定律
文| https://www.timsommer.be/famous-laws-of-software-development/ 翻译| 码农翻身 和其他领域一样,在软件开发的世界中也有一些有趣而著名 ...
最新文章
- C# 垃圾回收器高效工作
- Java架构师必看的10本书
- Java 8 Friday:更多功能关系转换
- 【牛客 - 289H】约会(思维,数学,奇偶数,水题)
- mysql odbc.ini_关于unixodbc中odbc.ini和odbcinst.ini的介绍
- 用Kubernetes搭建Etcd集群和WebUI
- java对mysql的简单操作的综合运用——修改密码系统
- MySQL查询语句(select)详解
- 时间复杂度与空间复杂度的研究
- WCF Service Configuration Editor的使用
- 《软件方法》读书笔记2
- NodeJS http 模块
- java 输入一个数四舍五入_Java程序将数字四舍五入到n个小数位
- Android模拟登录教务系统(强智系统)
- 火车运煤问题(马车运草)问题
- C. Petya and Exam
- 程序员为什么害怕低代码?
- 超融合云数据中心,泽塔云为北京城市副中心建设添砖加瓦
- 怎么修改iis服务器的密码,服务器的iis在哪里设置密码
- 我的第一个Chrome插件:天气预报应用