`
ihuashao
  • 浏览: 4664322 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

无处不在的二八原理[1]:在软件开发中的应用

阅读更多

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

  ★需求分析
   需求分析在整个开发过程中占的工作量不大,但是产生的影响巨大(这又是一个二八原理的例子)。既然需求分析如此重要,照理说应该安排最强的人来搞。但实 际情况往往不是如此:很多公司负责需求分析的人并不胜任这项工作。我经历过几个不太成功的项目,其问题的根源都和需求分析有关。
  需求分析最要紧的是:搞清楚用户到底想要什么?如果这个问题搞错了、搞偏了,后面的步骤做得再好也是白搭(比如客户想要一个文本编辑器,结果你搞了个图形编辑器给他)。这方面其实有很多的道道,限于篇幅就不展开了,大伙儿如果有兴趣,以后可以单独说一下。
  在搞清楚“用户想要什么”之后,接着要整理出功能列表(也有叫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!

  下一个帖子打算聊一下二八原理在管理中的应用

http://program-think.blogspot.com/2009/02/80-20-principle-1-software-developing.html

分享到:
评论

相关推荐

    嵌入式系统原理及应用开发技术

    在我们的日常生活中,嵌入式系统无处不在,从智能手机、掌上电脑(PDA)、DVD播放器到全球定位系统(GPS)和数字电视接收器(机顶盒),它们都依赖于嵌入式软件来实现其智能功能。 嵌入式系统的定义是指一种专用的...

    单片机原理及应用:第1章 单片机基础知识概述.ppt

    单片机原理及应用是电子工程和自动化领域中不可或缺的一部分,尤其在当今信息化时代,单片机被广泛应用在各个行业中,从家用电器到工业控制系统,无处不在。本章主要介绍了单片机的基础知识,包括单片机的概念、学习...

    手机的软件工作原理(手机的软件工作原理)

    然而,在我们日常使用的智能手机中,软件无处不在,从简单的电话簿管理到复杂的游戏应用,每一个功能的背后都有软件在支撑。 #### 二、手机软件的发展历程 手机最初的形态类似于对讲机,最早出现于20世纪40年代,...

    嵌入式系统开发与应用教程(第2版) 田泽 编著

    4. **软件开发**:包括C/C++编程语言在嵌入式系统中的应用,解释如何进行交叉编译和调试,以及固件的烧录和升级流程。 5. **嵌入式系统设计**:探讨系统架构设计、硬件选型、软件设计策略,以及优化技巧,帮助读者...

    嵌入式系统的原理及应用

    这个领域的基础知识包括嵌入式系统的定义、构成、工作原理以及其在实际生活中的应用。 嵌入式系统,简单来说,就是将计算机硬件和软件结合在一起,用于特定功能的系统。它不以计算机为中心,而是以完成特定任务为...

    嵌入式系统原理及应用开发技术-22510.zip

    5. **嵌入式软件设计**:涵盖软件工程在嵌入式系统中的应用,如模块化编程、固件更新机制、错误处理和内存管理。 6. **嵌入式系统应用案例**:通过具体的实例,如智能家居、自动驾驶或物联网设备,展示嵌入式系统的...

    软件开发人员逻辑思维测试及完美解答

    在软件开发中,优化问题是无处不在的,无论是提高算法效率、优化资源分配还是改善用户体验,都需要对优化方法有深入的了解。 以上知识点涵盖了逻辑思维、数学运算、策略规划、概率统计等多个方面,对于软件开发人员...

    二维码软件开发包软件 V8.0

    通过使用这个二维码软件开发包 V8.0,开发者可以轻松地在自己的应用程序中集成二维码功能,提升用户体验,同时利用二维码的广泛适用性来拓宽服务范围。对于希望快速开发二维码相关应用的程序员来说,这是一个非常有...

    单片机原理及应用(包含课件实验指导课堂习题及作业)

    单片机原理及应用是电子工程领域中的一个重要分支,它涉及到计算机硬件、嵌入式系统、数字逻辑和软件编程等多个方面。在这个课程中,学生将深入理解单片机的工作机制,学习如何设计、编程和应用单片机解决实际问题。...

    数据库原理及应用课件:第一章 数据库系统概述.ppt

    - **数据库系统**:数据库系统不仅包括数据库本身,还包括DBMS、操作系统、应用开发工具以及为特定应用开发的数据库应用软件。 2. 数据库管理技术的发展历程 - **人工管理阶段**:早期的数据管理方式,数据不保存...

    嵌入式系统原理及应用题目及参考论文

    嵌入式系统在日常生活中无处不在,从家用电器到汽车、医疗设备以及通信基础设施,它们在各个领域都发挥着关键作用。 标题中的“嵌入式系统原理及应用题目”可能涉及以下几个方面的知识点: 1. **嵌入式系统基本...

    com原理和应用及其源代码

    1. **控件开发**:如ActiveX控件,广泛应用于网页和桌面应用程序中,提供丰富的用户界面元素。 2. **插件系统**:许多应用程序通过COM实现插件扩展,如Adobe Photoshop的滤镜插件。 3. **自动化**:COM允许脚本...

    嵌入式系统及实时软件开发

    实时软件开发则是嵌入式系统中的一个关键环节,尤其在对响应速度和准确性要求极高的应用中,如航空控制、工业自动化等。 嵌入式系统的构成主要包括以下几个方面: 1. 微处理器:这是嵌入式系统的心脏,负责执行...

    嵌入式系统以及实时软件开发

    实时软件开发则是嵌入式系统中的一个关键环节,因为它涉及到程序在规定时间内完成特定任务的能力。 嵌入式系统的核心组成部分包括硬件平台、操作系统(OS)、中间件和应用软件。硬件平台通常由微处理器、存储器、...

    python语言应用领域.docx

    1. 桌面软件开发 Python语言在图形界面开发上很强大,可以用tkinter/PyQT框架开发各种桌面软件。Python的桌面软件开发可以满足不同行业的需求,如: * 文档处理:可以使用Python开发文档处理软件,例如文档编辑器、...

    ARM应用系统开发详解

    在嵌入式领域,ARM(Advanced RISC Machines)架构因其高效能、低功耗的特性而广泛应用于各种设备,从智能手机到服务器,无处不在。本书《ARM应用系统开发详解》旨在深入解析ARM微处理器的原理与实际应用,帮助...

    NUAA南航 嵌入式系统原理及应用第三版 课后习题参考答案全集2.zip

    6. 软件开发流程:包括需求分析、系统设计、编码、测试和调试等步骤,以及相关工具链的使用,如交叉编译器、模拟器等。 7. 电源管理:探讨低功耗设计策略,如动态电压频率调整(DVFS)、休眠模式等。 8. 性能优化:...

    软件工作流原理介绍doc文件

    工作流原理是软件开发中一个重要的概念,它涉及到如何组织和管理复杂的业务流程。在日常生活中,工作流无处不在,比如企业的审批流程、医院的就诊流程等,都是工作流的具体应用。工作流的主要目标是将流程自动化,...

    马基基本原理及方法论.pdf

    - 矛盾的观点:在软件开发中,矛盾无处不在,如需求与资源的冲突、技术与市场的矛盾等。我们需要理解和解决这些矛盾,通过具体问题具体分析,找到最佳解决方案。 3. 辩证唯物主义认识论: - 实践与认识的辩证关系...

    数据库原理与应用ppt

    这个领域的知识对于理解如何高效地处理和利用信息至关重要,尤其在信息化社会中,数据库技术的应用无处不在,从互联网上的搜索引擎到企业内部的数据管理系统,都离不开数据库的支持。 首先,我们来探讨一下数据库的...

Global site tag (gtag.js) - Google Analytics