﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-loveispopular-随笔分类-开发过程</title><link>http://www.blogjava.net/loveispopular/category/40136.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 07 Jun 2009 12:56:14 GMT</lastBuildDate><pubDate>Sun, 07 Jun 2009 12:56:14 GMT</pubDate><ttl>60</ttl><item><title>软件开发过程注意事项</title><link>http://www.blogjava.net/loveispopular/archive/2009/06/07/280463.html</link><dc:creator>george_chen</dc:creator><author>george_chen</author><pubDate>Sun, 07 Jun 2009 12:07:00 GMT</pubDate><guid>http://www.blogjava.net/loveispopular/archive/2009/06/07/280463.html</guid><wfw:comment>http://www.blogjava.net/loveispopular/comments/280463.html</wfw:comment><comments>http://www.blogjava.net/loveispopular/archive/2009/06/07/280463.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/loveispopular/comments/commentRss/280463.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/loveispopular/services/trackbacks/280463.html</trackback:ping><description><![CDATA[需求分析<br />
需求分析在整个开发过程中占的工作量不大，但是产生的影响巨大（这又是一个二八原理的例子）。既然需求分析如此重要，照理说应该安排最强的人来搞。但实际情况往往不是如此：很多公司负责需求分析的人并不胜任这项工作。我经历过几个不太成功的项目，其问题的根源都和需求分析有关。<br />
需求分析最要紧的是：搞清楚用户<strong>到底</strong>想要什么？如果这个问题搞错了、搞偏了，后面的步骤做得再好也是白搭（比如客户想要一个文本编辑器，结果你搞了个图形编辑器给他）。这方面其实有很多的道道，限于篇幅就不展开了，大伙儿如果有兴趣，以后可以单独说一下。<br />
在搞清楚&#8220;用户想要什么&#8221;之后，接着要整理出功能列表（也有叫Feature List），并筛选出大约20%的重点功能。这个步骤是我今天主要想介绍的，因为这个步骤和后续的各项开发密切相关。一般来说，功能筛选的依据有如下几个：<br />
1、用户经常用的功能（比如save、copy、cut、paste）<br />
2、宣传的卖点（要能够超出同类软件，吸引眼球）<br />
3、和用户利益密切相关的功能（这种功能不允许出错，比如存盘功能）<br />
这个筛选的过程要尽早完成，而且最好是产品人员、开发人员、测试人员三方的头头一起讨论，以保证立场客观、观点全面。筛选出重要功能点后，其他人员的工作安排要"以重点功能为纲"，有所侧重。<br />
<br />
●项目管理<br />
如果你是个项目经理，在排项目计划时，就得尽量优先安排重点功能的开发/测试，而且要安排能力强的人员来完成。按照我以前的做法，重点功能排计划至少得留出1/3的时间余量，以防万一（事实证明，几乎每个稍大点的项目都会出现<strong>万一</strong>）。至于<strong>非</strong>重点功能，尽量排到后面，安排能力一般的人开发/测试。<br />
然后，在项目进行过程中，肯定要有定期的例会。作为项目经理，你应该主要关注重点功能的进度情况和风险情况。<br />
一旦项目有延期的风险，就从<strong>非</strong>重点功能开始裁减（俗称砍功能）。由于是裁减<strong>非</strong>重点功能，不至于产生致命的影响。<br />
<br />
●设计界面<br />
设计界面时，你得保证<strong>所有的</strong>常用功能都放在显著的位置（比如工具条）；还得保证它们用起来方便（比如提供快捷键和右键菜单支持）。<br />
对于卖点，它不一定是常用功能，它的目的是激起用户的购买欲望和使用欲望。因此你要把它们设计得比较酷，有噱头。<br />
对于利益相关的功能，大部分情况下都是侧重于业务逻辑实现。如果它既不是常用功能、也不是卖点，那么界面设计方面倒不一定要额外花大力气。<br />
其它的<strong>非</strong>重点功能，只要按照常规方法设计，不用花太大精力。<br />
<br />
●编写代码<br />
我发现很多开发人员有几个通病：先做有趣或容易的功能，然后再做无聊或者繁琐的功能；对自己有兴趣的功能投入精力多，对自己没兴趣的简单应付。<br />
以上这些都是开发的大忌。作为一个职业的开发人员，不应该以自己的兴趣和喜好来决定开发的轻重缓急。正确做法应该如下：<br />
你首先得用主要精力完成上述所说的重点功能，而且要保证它们的代码质量尽可能好，尽可能方便维护（重点功能往往是经常有需求变更，经常被修改的）。<br />
对于重点功能中的&#8220;常用功能&#8221;，要保证<strong>时间</strong>性能够好（能快速响应）。对于"用户利益相关的功能"，要保证bug尽可能少（尤其是安全性、稳定性、健壮性的bug）。<br />
至于其它的<strong>非</strong>重点功能，只要不出明显bug，有点小缺陷无伤大雅。<br />
<br />
●测试<br />
如果你是个测试人员，你同样要把主要精力用于测试那些重点功能。对于"用户利益相关的功能"，多进行一些健壮性测试、稳定性、安全性等测试（比如测试保存大文件是否会出错）。对于常用功能，主要进行易用性和性能测试（比如拷贝、粘贴是否易用）。<br />
至于其它功能，只要进行普通的测试，保证它不出现明显和严重bug即可。要知道Windows 2000发布的时候，尚遗留上千个未修复的bug（当然都是低优先级的），微软不也照样发布。<br />
<br />
●产品演示<br />
有些软件开发完之后，会搞一些Demo进行宣传。如果你是负责进行Demo的人，你肯定要把主要的Demo时间用来秀软件的卖点，这样给客户的印象最深刻，效果最好；至于<strong>非</strong>卖点的功能，都未必要提及。<br />
几种和开发相关工作就介绍到这里，最后送给大伙一句话：<strong>Do not work hard, work smart!</strong><br />
<br />
-----------------------------------------------------------------------------------------------------------------
<p>下面以我们的项目来介绍一个项目的开发过程：</p>
<p>1.首先进行用户需求调研，先弄明白用户想要什么（如果有老系统，可以先参观老系统，看有什么可以改进的，有什么可以继承的）熟悉业务。需求调研完成后，完成开发文档<strong>《用户调研报告》</strong>，然后根据调研，列出功能列表，同时区分重点功能和非重点功能。</p>
<p>2.调研完成后，画界面原型让用户来确认，如何使用等讲解清楚（这个过程中，可以会产生需求的变更），同时完成<strong>《用户需求规格说明书》</strong>，同时完成此文档的评审工作。此时，应该可以说到达了软件的一个里程碑。</p>
<p>3.需求评审完成后，进行数据库设计和详细设计，此时形成的文档有<strong>《数据库设计说明书》，《详细设计说明书》</strong>，同时完成文档的评审工作。</p>
<p>4.设计完成以后，就要进行开发工作了。依据详细设计说明书，此时要先进行重点功能的开发，然后进行非重点功能的开发。在此过程中开发人员进行模块的单测，确保系统的可运行。</p>
<p>5.开发完成后，由专门的测试人员进行单元测试、流程测试、性能测试等。（此时还可能有第三方测试人员和用户代表的参与）。此时会形成专门的测试文档。</p>
<p>6.用户测试。首先进行用户测试的培训，然后挑选部分用户进行系统的测试，此时一般会有开发人员进行现场的技术支持，使用用户尽快的熟悉系统的使用。</p>
<p>7.系统上线试运行。</p>
<img src ="http://www.blogjava.net/loveispopular/aggbug/280463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/loveispopular/" target="_blank">george_chen</a> 2009-06-07 20:07 <a href="http://www.blogjava.net/loveispopular/archive/2009/06/07/280463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>