前面聊了“什么是二八原理”,接下来得说说如何运用了。由于本博客主要谈IT技术,显然要先来说说和程序员有关的那些事。为了不至于太抽象,我们以开发文本编辑器为例(这玩意大伙儿都熟悉,省得费口水解释),来说说不同职责的开发人员在开发过程中该如何具体运用二八原理。

需求分析

需求分析在整个开发过程中占的工作量不大,但是产生的影响巨大(这又是一个二八原理的例子)。既然需求分析如此重要,照理说应该安排最强的人来搞。但实际情况往往不是如此:很多公司负责需求分析的人并不胜任这项工作。我经历过几个不太成功的项目,其问题的根源都和需求分析有关。

需求分析最要紧的是:搞清楚用户到底想要什么?如果这个问题搞错了、搞偏了,后面的步骤做得再好也是白搭(比如客户想要一个文本编辑器,结果你搞了个图形编辑器给他)。这方面其实有很多的道道,限于篇幅就不展开了,大伙儿如果有兴趣,以后可以单独说一下。

在搞清楚“用户想要什么”之后,接着要整理出功能列表(也有叫Feature List),并筛选出大约20%的重点功能。这个步骤是我今天主要想介绍的,因为这个步骤和后续的各项开发密切相关。一般来说,功能筛选的依据有如下几个:

  1. 用户经常用的功能(比如save、copy、cut、paste)
  2. 宣传的卖点(要能够超出同类软件,吸引眼球)
  3. 和用户利益密切相关的功能(这种功能不允许出错,比如存盘功能)

这个筛选的过程要尽早完成,而且最好是产品人员、开发人员、测试人员三方的头头一起讨论,以保证立场客观、观点全面。筛选出重要功能点后,其他人员的工作安排要“以重点功能为纲”,有所侧重。

项目管理

如果你是个项目经理,在排项目计划时,就得尽量优先安排重点功能的开发/测试,而且要安排能力强的人员来完成。按照我以前的做法,重点功能排计划至少得留出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

二八原理:软件开发中的二八原理相关推荐

  1. 测试自动化金字塔在软件开发中是如何使用的?

    测试自动化金字塔,是一个指南,指导您进行什么类型的测试以及每种测试的数量.测试自动化金字塔有助于创建更高效的测试,并导致向客户发布更可靠的软件. 测试自动化金字塔的好处 测试自动化的大部分好处显而易见 ...

  2. 建模语言UML在软件开发中的应用

      建模语言 UML 在软件开发中的应用 摘要:UML( Unified Modeling Language)是建立系统模型和分析业务处理流程强有力的工具,它能够帮助软件开发人员从不同角度描述系统,使 ...

  3. 我的软件开发中经验教训

    作者:追梦1819 原文:https://blog.csdn.net/weixin_39759846/article/details/116780540 版权声明:本文为博主原创文章,转载请附上博文链 ...

  4. 软件开发中的经验主义和理性主义

    软件开发中的经验主义和理性主义 读<设计原本>笔记 理性主义和经验主义是典型的认识论理论.这两种类型的思想,从古到今,从中到外,互相对立,互相斗争,又互相影响,互相渗透.经验主义者认为人类 ...

  5. 软件工程中的系统文献映射研究实例-软件开发中的假设条件与哪些软件制品关联(第四部分)

    之前的博客详细描述了软件工程中的系统文献映射研究方法.这里接着给出一个我曾经做过的工作作为例子,以更直观地展示这种研究类型.该研究的背景信息这里不再赘述. 这篇博客主要介绍第三个研究问题的结果,即软件 ...

  6. 大型CAx(CAD/CAE/CAM)工业软件开发中的关键组件

    通过对FreeCAD.SALOME等多款代码的分析研究,发现这些软件在架构设计.模块实现等方面,存在许多相似(同)的技术思想.因此,有必要对这些共性.主流的技术予以总结分析. Structuring ...

  7. 彼之蜜糖,吾之砒霜——聊聊软件开发中的最佳实践

    作者:sherrywasp https://www.cnblogs.com/sherrywasp/p/9436623.html "描述一个事物,唯有一个名词定义它的概念,唯有一个动词揭露它的 ...

  8. 视频互动直播软件开发中的连麦问题分析

    直播行业发展至今,我们经常会听到很多朋友谈论"互动直播".那么何谓互动直播呢?其实互动直播的核心在于通过连麦技术,让视频直播有一个超过文字的更深层次的互动交流. 在视频互动直播软件 ...

  9. 统治软件开发中的著名定律

    文| https://www.timsommer.be/famous-laws-of-software-development/ 翻译| 码农翻身 和其他领域一样,在软件开发的世界中也有一些有趣而著名 ...

最新文章

  1. C# 垃圾回收器高效工作
  2. Java架构师必看的10本书
  3. Java 8 Friday:更多功能关系转换
  4. 【牛客 - 289H】约会(思维,数学,奇偶数,水题)
  5. mysql odbc.ini_关于unixodbc中odbc.ini和odbcinst.ini的介绍
  6. 用Kubernetes搭建Etcd集群和WebUI
  7. java对mysql的简单操作的综合运用——修改密码系统
  8. MySQL查询语句(select)详解
  9. 时间复杂度与空间复杂度的研究
  10. WCF Service Configuration Editor的使用
  11. 《软件方法》读书笔记2
  12. NodeJS http 模块
  13. java 输入一个数四舍五入_Java程序将数字四舍五入到n个小数位
  14. Android模拟登录教务系统(强智系统)
  15. 火车运煤问题(马车运草)问题
  16. C. Petya and Exam
  17. 程序员为什么害怕低代码?
  18. 超融合云数据中心,泽塔云为北京城市副中心建设添砖加瓦
  19. 怎么修改iis服务器的密码,服务器的iis在哪里设置密码
  20. 我的第一个Chrome插件:天气预报应用

热门文章

  1. vs Installer 安装vs 下载速度为0 解决方案
  2. PHP读取Excel里的文件
  3. 服务器消息7995,修复sql2000数据库置疑时出现的错误.docx
  4. 获取一起做网店上的商品图片和视频保存
  5. C语言之贪心算法疯牛
  6. unity Invoke语句用法
  7. Excel—LEFT、RIGHT、MID函数提取不同位置的字段
  8. 常用工具类之AJ-Captcha入门
  9. 《Essential C++》笔记
  10. 文章分享:Learning from History and Present