评审需求文档和原型

  1. 你们的项目组使用源代码管理工具了么?
    应该用。VSS、CVS、PVCS、ClearCase、CCC/Harvest、FireFly都可以。我的选择是VSS。

  2. 你们的项目组使用缺陷管理系统了么?
    应该用。ClearQuest太复杂,我的推荐是BugZilla。

  3. 你们的测试组还在用Word写测试用例么?
    不要用Word写测试用例(Test Case)。应该用一个专门的系统,可以是Test Manager,也可以是自己开发一个ASP.NET的小网站。主要目的是Track和Browse。

  4. 你们的项目组有没有建立一个门户网站?
    要有一个门户网站,用来放Contact Info、Baselined Schedule、News等等。推荐Sharepoint Portal Server 2003来实现,15分钟就搞定。买不起SPS 2003可以用WSS (Windows Sharepoint Service)。

  5. 你们的项目组用了你能买到最好的工具么?
    应该用尽量好的工具来工作。比如,应该用VS.NET而不是Notepad来写C#。用Notepad写程序多半只是一种炫耀。但也要考虑到经费,所以说是“你能买到最好的”。

  6. 你们的程序员工作在安静的环境里么?
    需要安静环境。这点极端重要,而且要保证每个人的空间大于一定面积。

  7. 你们的员工每个人都有一部电话么?
    需要每人一部电话。而且电话最好是带留言功能的。当然,上这么一套带留言电话系统开销不小。不过至少每人一部电话要有,千万别搞得经常有人站起来喊:“某某某电话”。《人件》里面就强烈谴责这种做法。

  8. 你们每个人都知道出了问题应该找谁么?
    应该知道。任何一个Feature至少都应该有一个Owner,当然,Owner可以继续Dispatch给其他人。

  9. 你遇到过有人说“我以为…”么?
    要消灭“我以为”。Never assume anything。

  10. 你们的项目组中所有的人都坐在一起么?
    需要。我反对Virtual Team,也反对Dev在美国、Test在中国这种开发方式。能坐在一起就最好坐在一起,好处多得不得了。

  11. 你们的进度表是否反映最新开发进展情况?
    应该反映。但是,应该用Baseline的方法来管理进度表:维护一份稳定的Schedule,再维护一份最新更改。Baseline的方法也应该用于其它的Spec。Baseline是变更管理里面的一个重要手段。

  12. 你们的工作量是先由每个人自己估算的么?
    应该让每个人自己估算。要从下而上估算工作量,而不是从上往下分派。除非有其他原因,比如政治任务工期固定等。

  13. 你们的开发人员从项目一开始就加班么?
    不要这样。不要一开始就搞疲劳战。从项目一开始就加班,只能说明项目进度不合理。当然,一些对日软件外包必须天天加班,那属于剥削的范畴。

  14. 你们的项目计划中Buffer Time是加在每个小任务后面的么?
    不要。Buffer Time加在每个小任务后面,很容易轻易的就被消耗掉。Buffer Time要整段的加在一个Milestone或者checkpoint前面。

  15. 值得再多花一些时间,从95%做到100%好值得,非常值得。
    尤其当项目后期人困马乏的时候,要坚持。这会给产品带来质的区别。

  16. 登记新缺陷时,是否写清了重现步骤?
    要。这属于Dev和Test之间的沟通手段。面对面沟通需要,详细填写Repro Steps也需要。

  17. 写新代码前会把已知缺陷解决么?
    要。每个人的缺陷不能超过10个或15个,否则必须先解决老的bug才能继续写新代码。

  18. 你们对缺陷的轻重缓急有事先的约定么?
    必须有定义。Severity要分1、2、3,约定好:蓝屏和Data Lost算Sev 1,Function Error算Sev 2,界面上的算Sev 3。但这种约定可以根据产品质量现状适当进行调整。

  19. 你们对意见不一的缺陷有三国会议么?
     必须要有。要有一个明确的决策过程。这类似于CCB (Change Control Board)的概念。

  20. 所有的缺陷都是由登记的人最后关闭的么?
    Bug应该由Opener关闭。Dev不能私自关闭Bug。

  21. 你们的程序员厌恶修改老的代码么?
    厌恶是正常的。解决方法是组织Code Review,单独留出时间来。XP也是一个方法。

  22. 你们项目组有Team Morale Activity么?
    每个月都要搞一次,吃饭、唱歌、Outing、打球、开卡丁车等等,一定要有。不要剩这些钱。

  23. 你们项目组有自己的Logo么?
    要有自己的Logo。至少应该有自己的Codename。

  24. 你们的员工有印有公司Logo的T-Shirt么?
    要有。能增强归属感。当然,T-Shirt要做的好看一些,最好用80支的棉来做。别没穿几次就破破烂烂的。

  25. 总经理至少每月参加次项目组会议要的。
    要让team member觉得高层关注这个项目。

  26. 你们是给每个Dev开一个分支么?
    反对。Branch的管理以及Merge的工作量太大,而且容易出错。

  27. 有人长期不Check-In代码么?
    不可以。对大部分项目来说,最多两三天就应该Check-In。

  28. 在Check-In代码时都填写注释了么?
    要写的,至少一两句话,比如“解决了Bug No.225”。如果往高处拔,这也算做“配置审计”的一部分。

  29. 有没有设定每天Check-In的最后期限?
    要的,要明确Check-In Deadline。否则会Build Break。

  30. 你们能把所有源码一下子编译成安装文件吗?
    要的。这是每日编译(Daily Build)的基础。而且必须要能够做成自动的。

  31. 你们的项目组做每日编译么?
  当然要做。有三样东西是软件项目/产品开发必备的:1. bug management; 2. source control; 3. daily build。

  32. 你们公司有没有积累一个项目风险列表?
    要。Risk Inventory。否则,下个项目开始的时候,又只能拍脑袋分析Risk了。

  33. 设计越简单越好越简单越好。
    设计时候多一句话,将来可能就带来无穷无尽的烦恼。应该从一开始就勇敢的砍。这叫scope management。

  34. 尽量利用现有的产品、技术、代码千万别什么东西都自己Coding。BizTalk和Sharepoint就是最好的例子,有这两个作为基础,可以把起点提高很多。或者可以尽量多用现成的Control之类的。或者尽量用XML,而不是自己去Parse一个文本文件;尽量用RegExp,而不是自己从头操作字符串,等等等等。这就是“软件复用”的体现。

  35. 你们会隔一段时间就停下来夯实代码么?
    要。最好一个月左右一次。传言去年年初Windows组在Stevb的命令下停过一个月增强安全。Btw,“夯”这个字念“hang”,第一声。

  36. 你们的项目组每个人都写Daily Report么?
    要写。五分钟就够了,写10句话左右,告诉自己小组的人今天我干了什么。一则为了沟通,二则鞭策自己(要是游手好闲一天,自己都会不好意思写的)。

   37. 你们的项目经理会发出Weekly Report么?
     要。也是为了沟通。内容包括目前进度,可能的风险,质量状况,各种工作的进展等。

   38. 你们项目组是否至少每周全体开会一次?
     要。一定要开会。程序员讨厌开会,但每个礼拜开会时间加起来至少应该有4小时。包括team meeting, spec review meeting, bug triage meeting。千万别大家闷头写code。

  39. 你们项目组的会议、讨论都有记录么?
    会前发meeting request和agenda,会中有人负责主持和记录,会后有人负责发meeting minutes,这都是effective meeting的要点。而且,每个会议都要形成agreements和action items。

   40. 其他部门知道你们项目组在干什么么?
    要发一些Newsflash给整个大组织。Show your team’s value。否则,当你坐在电梯里面,其他部门的人问:“你们在干嘛”,你回答“ABC项目”的时候,别人全然不知,那种感觉不太好。

  41. 通过Email进行所有正式沟通
    Email的好处是免得抵赖。但也要避免矫枉过正,最好的方法是先用电话和当面说,然后Email来确认。

  42. 为项目组建立多个Mailing Group
    如果在AD+Exchange里面,就建Distribution List。比如,我会建ABC Project Core Team,ABC Project Dev Team,ABC Project All Testers,ABC Project Extended Team等等。这样发起Email来方便,而且能让该收到email的人都收到、不该收到不被骚扰。

  43. 每个人都知道哪里可以找到全部的文档么?
    应该每个人都知道。这叫做知识管理(Knowledge Management)。最方便的就是把文档放在一个集中的File Share,更好的方法是用Sharepoint。

  44. 你做决定、做变化时,告诉大家原因了么?
    要告诉大家原因。Empower team member的手段之一是提供足够的information,这是MSF一开篇的几个原则之一。的确如此,tell me why是人之常情,tell me why了才能有understanding。中国人做事喜欢搞限制,限制信息,似乎能够看到某一份文件的人就是有身份的人。大错特错。权威、权力,不在于是不是能access information/data,而在于是不是掌握资源。

  45. Stay agile and expect change 要这样。
    需求一定会变的,已经写好的代码一定会被要求修改的。做好心理准备,对change不要抗拒,而是expect change。

  46. 你们有没有专职的软件测试人员?
    要有专职测试。如果人手不够,可以peer test,交换了测试。千万别自己测试自己的。

  47. 你们的测试有一份总的计划来规定做什么和怎么做么?
     这就是Test Plan。要不要做性能测试?要不要做Usability测试?什么时候开始测试性能?测试通过的标准是什么?用什么手段,自动的还是手动的?这些问题需要用Test Plan来回答。

   48. 你是先写Test Case然后再测试的么?
    应该如此。应该先设计再编程、先test case再测试。当然,事情是灵活的。我有时候在做第一遍测试的同时补上test case。至于先test case再开发,我不喜欢,因为不习惯,太麻烦,至于别人推荐,那试试看也无妨。

  49. 你是否会为各种输入组合创建测试用例?
    不要,不要搞边界条件组合。当心组合爆炸。有很多test case工具能够自动生成各种边界条件的组合——但要想清楚,你是否有时间去运行那么多test case。

  50. 你们的程序员能看到测试用例么?
    要。让Dev看到Test Case吧。我们都是为了同一个目的走到一起来的:提高质量。

   51. 你们是否随便抓一些人来做易用性测试?
    要这么做。自己看自己写的程序界面,怎么看都是顺眼的。这叫做审美疲劳——臭的看久了也就不臭了,不方便的永久了也就习惯了。
  52. 你对自动测试的期望正确么?
    别期望太高。依我看,除了性能测试以外,还是暂时先忘掉“自动测试”吧,忘掉WinRunner和LoadRunner吧。对于国内的软件测试的现状来说,只能“矫枉必须过正”了。

  53. 你们的性能测试是等所有功能都开发完才做的么?
    不能这样。性能测试不能被归到所谓的“系统测试”阶段。早测早改正,早死早升天。

  54. 你注意到测试中的杀虫剂效应了么?
    虫子有抗药性,Bug也有。发现的新Bug越来越少是正常的。这时候,最好大家交换一下测试的area,或者用用看其他工具和手法,就又会发现一些新bug了。

   55. 你们项目组中有人能说出产品的当前整体质量情况么?
    要有。当老板问起这个产品目前质量如何,Test Lead/Manager应该负责回答。

  56. 你们有单元测试么?
    单元测试要有的。不过没有单元测试也不是不可以,我做过没有单元测试的项目,也做成功了——可能是侥幸,可能是大家都是熟手的关系。还是那句话,软件工程是非常实践、非常工程、非常灵活的一套方法,某些方法在某些情况下会比另一些方法好,反之亦然。

  57. 你们的程序员是写完代码就扔过墙的么?
    大忌。写好一块程序以后,即便不做单元测试,也应该自己先跑一跑。虽然有了专门的测试人员,做开发的人也不可以一点测试都不做。微软还有Test Release Document的说法,程序太烂的话,测试有权踢回去。

   58. 你们的程序中所有的函数都有输入检查么?
    不要。虽然说做输入检查是write secure code的要点,但不要做太多的输入检查,有些内部函数之间的参数传递就不必检查输入了,省点功夫。同样的道理,未必要给所有的函数都写注释。写一部分主要的就够了。

   59. 产品有统一的错误处理机制和报错界面么?
    要有。最好能有统一的error message,然后每个error message都带一个error number。这样,用户可以自己根据error number到user manual里面去看看错误的具体描述和可能原因,就像SQL Server的错误那样。同样,ASP.NET也要有统一的Exception处理。可以参考有关的Application Block。

  60. 你们有统一的代码书写规范么?
    要有。Code Convention很多,搞一份来发给大家就可以了。当然,要是有FxCop这种工具来检查代码就更好了。

  61. 你们的每个人都了解项目的商业意义么?
    要。这是Vision的意思。别把项目只当成工作。有时候要想着自己是在为中国某某行业的信息化作先驱者,或者时不时的告诉team member,这个项目能够为某某某国家部门每年节省多少多少百万的纳税人的钱,这样就有动力了。平凡的事情也是可以有个崇高的目标的。

   62. 产品各部分的界面和操作习惯一致么?
    要这样。要让用户觉得整个程序好像是一个人写出来的那样。

   63. 有可以作为宣传亮点的Cool Feature么?
    要。这是增强团队凝聚力、信心的。而且,“一俊遮百丑”,有亮点就可以掩盖一些问题。这样,对于客户来说,会感觉产品从质量角度来说还是acceptable的。或者说,cool feature或者说亮点可以作为质量问题的一个事后弥补措施。

   64. 尽可能缩短产品的启动时间要这样。
     软件启动时间(Start-Up time)是客户对性能好坏的第一印象。

   65. 不要过于注重内在品质而忽视了第一眼的外在印象程序员容易犯这个错误:太看重性能、稳定性、存储效率,但忽视了外在感受。而高层经理、客户正相反。这两方面要兼顾,协调这些是PM的工作。

   66. 你们根据详细产品功能说明书做开发么?
    要这样。要有设计才能开发,这是必须的。设计文档,应该说清楚这个产品会怎么运行,应该采取一些讲故事的方法。设计的时候千万别钻细节,别钻到数据库、代码等具体实现里面去,那些是后面的事情,一步步来不能着急。

   67. 开始开发和测试之前每个人都仔细审阅功能设计么?
    要做。Function Spec review是用来统一思想的。而且,review过以后形成了一致意见,将来再也没有人可以说“你看,当初我就是反对这么设计的,现在吃苦头了吧”

  68. 所有人都始终想着The Whole Image么?
    要这样。项目里面每个人虽然都只是在制造一片叶子,但每个人都应该知道自己在制造的那片叶子所在的树是怎么样子的。我反对软件蓝领,反对过分的把软件制造看成流水线、车间。参见第61条。

   69. Dev工作的划分是单纯纵向或横向的么?
    不能单纯的根据功能模块分,或者单纯根据表现层、中间层、数据库层分。我推荐这么做:首先根据功能模块分,然后每个“层”都有一个Owner来Review所有人的设计和代码,保证consistency。

  70. 你们的程序员写程序设计说明文档么?
    要。不过我听说微软的程序员1999年以前也不写。所以说,写不写也不是绝对的,偷懒有时候也是可以的。参见第56条。

  71. 你在招人面试时让他写一段程序么?
    要的。我最喜欢让人做字符串和链表一类的题目。这种题目有很多循环、判断、指针、递归等,既不偏向过于考算法,也不偏向过于考特定的API。

  72. 你们有没有技术交流讲座?
    要的。每一两个礼拜搞一次内部的Tech Talk或者Chalk Talk吧。让组员之间分享技术心得,这笔花钱送到外面去培训划算。

  73. 你们的程序员都能专注于一件事情么?
    要让程序员专注一件事。例如说,一个部门有两个项目和10个人,一种方法是让10个人同时参加两个项目,每个项目上每个人都花50%时间;另一种方法是5个人去项目A,5个人去项目B,每个人都100%在某一个项目上。我一定选后面一种。这个道理很多人都懂,但很多领导实践起来就把属下当成可以任意拆分的资源了。

  74. 你们的程序员会夸大完成某项工作所需要的时间么?
    会的,这是常见的,尤其会在项目后期夸大做某个change所需要的时间,以次来抵制change。解决的方法是坐下来慢慢磨,磨掉程序员的逆反心理,一起分析,并把估算时间的颗粒度变小。

  75. 尽量不要用Virtual Heads 最好不要用Virtual Heads。
    Virtual heads意味着resource is not secure,shared resource会降低resource的工作效率,容易增加出错的机会,会让一心二用的人没有太多时间去review spec、review design。一个dedicated的人,要强过两个只能投入50%时间和精力的人。我是吃过亏的:7个part time的tester,发现的Bug和干的活,加起来还不如两个full-time的。参见第73条。73条是针对程序员的,75条是针对Resource Manager的。
诸位,咱当电子工程师也是十余年了,不算有出息,环顾四周,也没有看见几个有出息的!回顾工程师生涯,感慨万千,愿意讲几句掏心窝子的话,也算给咱们师弟师妹们提个醒,希望他们比咱们强!

 

[1]  好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,爽一些。那么,就需要慎重安排自己的轨迹。从哪个行业入手,逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会,以后钱根本不是问题。频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新手!

 

[2] 可以做技术,切不可沉湎于技术。千万不可一门心思钻研技术!给自己很大压力,如果你的心思全部放在这上面,那么注定你将成为孔乙己一类的人物!适可而止为之,因为技术只不过是你今后前途的支柱之一,而且还不是最大的支柱,除非你只愿意到老还是个工程师!

 

[3] 不要去做技术高手,只去做综合素质高手!在企业里混,我们时常瞧不起某人,说他“什么都不懂,凭啥拿那么多钱,凭啥升官!”这是普遍的典型的工程师的迂腐之言。8051很牛吗?人家能上去必然有他的本事,而且是你没有的本事。你想想,老板搞经营那么多年,难道见识不如你这个新兵?人家或许善于管理,善于领会老板意图,善于部门协调等等。因此务必培养自己多方面的能力,包括管理,亲和力,察言观色能力,攻关能力等,要成为综合素质的高手,则前途无量,否则只能躲在角落看示波器!技术以外的技能才是更重要的本事!!从古到今,美国日本,一律如此!

 

[4] 多交社会三教九流的朋友!不要只和工程师交往,认为有共同语言,其实更重要的是和其他类人物交往,如果你希望有朝一日当老板或高层管理,那么你整日面对的就是这些人。了解他们的经历,思维习惯,爱好,学习他们处理问题的模式,了解社会各个角落的现象和问题,这是以后发展的巨大的本钱,没有这些以后就会笨手笨脚,跌跌撞撞,遇到重重困难,交不少学费,成功的概率大大降低!

 

[5] 知识涉猎不一定专,但一定要广!多看看其他方面的书,金融,财会,进出口,税务,法律等等,为以后做一些积累,以后的用处会更大!会少交许多学费!!

 

[6] 抓住时机向技术管理或市场销售方面的转变!要想有前途就不能一直搞开发,适当时候要转变为管理或销售,前途会更大,以前搞技术也没有白搞,以后还用得着。搞管理可以培养自己的领导能力,搞销售可以培养自己的市场概念和思维,同时为自己以后发展积累庞大的人脉!应该说这才是前途的真正支柱!!!

 

[7] 逐渐克服自己的心里弱点和性格缺陷!多疑,敏感,天真(贬义,并不可爱),犹豫不决,胆怯,多虑,脸皮太薄,心不够黑,教条式思维。。。这些工程师普遍存在的性格弱点必须改变!很难吗?只在床上想一想当然不可能,去帮朋友守一个月地摊,包准有效果,去实践,而不要只想!不克服这些缺点,一切不可能,甚至连项目经理都当不好--尽管你可能技术不错!

 

[8] 工作的同时要为以后做准备!建立自己的工作环境!及早为自己配置一个工作环境,装备电脑,示波器(可以买个二手的),仿真器,编程器等,业余可以接点活,一方面接触市场,培养市场感觉,同时也积累资金,更重要的是准备自己的产品,咱搞技术的没有钱,只有技术,技术的代表不是学历和证书,而是产品,拿出象样的产品,就可技术转让或与人合作搞企业!先把东西准备好,等待机会,否则,有了机会也抓不住!

 

[9] 要学会善于推销自己!不仅要能干,还要能说,能写,善于利用一切机会推销自己,树立自己的品牌形象,很必要!要创造条件让别人了解自己,不然老板怎么知道你能干?外面的投资人怎么相信你?提早把自己推销出去,机会自然会来找你!搞个个人主页是个好注意!!特别是培养自己在行业的名气,有了名气,高薪机会自不在话下,更重要的是有合作的机会...

 

[10] 该出手时便出手!永远不可能有100%把握!!!条件差不多就要大胆去干,去闯出自己的事业,不要犹豫,不要彷徨,干了不一定成功,但至少为下一次冲击积累了经验,不干永远没出息,而且要干成必然要经历失败。不经历风雨,怎么见彩虹,没有人能随随便便成功!
1) 大致浏览一遍模式
    特别注意其适用性部分和效果部分,确定它适合你的问题。


2) 回头研究结构部分、参与者部分和协作部分
    确保你理解这个模式的类和对象以及它们是怎样关联的。


3) 看代码示例部分,看看这个模式代码形式的具体例子
    研究代码将有助于你实现模式。


4) 选择模式参与者的名字,使它们在应用上下文中有意义
    设计模式参与者的名字通常过于抽象而不会直接出现在应用中。然而,将参与者的名字和应用中出现的名字合并起来是很有用的。这会帮助你在实现中更显式的体现出模式来。例如,如果你在文本组合算法中适用了Strategy模式,那么你可能有名为SimpleLayoutStrategy或TeXLayoutStrategy这样的类。


5) 定义类
    声明它们的接口,建立它们的继承关系,定义代表数据和对象引用的实例变量。识别模式会影响到你的应用中存在的类,做出响应的修改。


6) 定义模式中专用于应用的操作名称
    这里再次体现出,名字一般依赖于应用。使用与每一个操作相关联的责任和协作作为指导。还有,你的名字约定要一致。例如,可以使用“Create”前缀统一标记Factory方法。


7) 实现执行模式责任和协作的操作
    实现部分提供线索指导你进行实现。代码示例部分的例子也能提供帮助。
●考虑设计模式怎样解决设计问题的
    找到合适的对象、决定对象的粒度、指定对象接口以及设计模式解决设计问题的几个其他方法。


●浏览模式的意图部分
    通读每个设计模式的意图,找出和你的问题相关的一个或多个模式。可使用分类方法缩小你的搜索范围。


●研究模式怎样互相关联
    研究设计模式之间的关系能指导你获得合适的模式或模式组。


●研究目的相似的模式
    对照创建型模式、行为型模式、结构型模式之间的共同点和不同点。


●检查重新设计的原因
    看一看从“设计应支持变化”小节开始讨论的引起重新设计的各种原因,在看看你的问题是否与它们有关,然后再找出哪些设计模式可以帮助你避免这些会导致重新设计的因素。


●考虑你的设计中哪些是可变的
    这个方法与关注引起重新设计的原因刚好相反。它不是考虑什么会迫使你的设计改变,而是考虑你想要什么变化却不引起重新设计。最主要的一点是封装变化的概念,这是许多设计模式的主题。

最好的程序界面就是用户无需去阅读*作手册就知道该如何使用的界面。 

原则

1.一致性
   如果你可以在一个列表的项目上双击后能够弹出对话框,那么应该在任何列表中双击都能弹出对话框。要有统一的字体写号、统一的色调、统一的提示用词、窗口在统一的位置、按钮也在窗口的相同的位置。

2.设置标准并遵循它
   可以参数一些工业标准,如IBM的界面设计规范或MS的设计规则,它提供了90%你所需要的规范。

3.设置向导
   如果用户使用了一个功能后,不知道如何做下一个,他们就会放弃。如果*作流程和手工工作流程一致,用户就会努力去完成它。最好的方式来引导用户就是在桌面上设置一个流程向导。

4.提示信息必须恰当且规范
   提示信息必须容易理解并且口径统一,比如“您输入了错误的数据”、“用户编码不能超过8位”。一致的措词,提示信息还应该出现在一致的位置,如弹出提示窗口、窗口的上方或窗口的下方。对用户的称呼应该统一,比如有时提示“用户输入了错误的数据”,有时提示“您输入了错误的数据”,有时又提示“纳税人输入了错误的数据”,这样会使用户无所适从。

5.借鉴好的程序
   多了解同类软件的界面,并加以分析与了解,直到能够区别好的用户界面与差的用户界面。但不能够机械的模仿别人的界面。

6.功能的统一
   有一些很常用的功能,如添加、修改、删除、查看,同一个软件中,这些功能应该有相同的*作方法。举个例子,几乎我们所有的程序中都有*作员管理这一块功能,但没有一个功能最完善统一的模块可供调用,结果虽然程序员间相互复制这个模块,但经过修改后,每个程序的*作管理都不相同。

7.变灰的功能
   有时有些功能不可用,最好不要删除这些按钮若项目,而是使他们变灰为不可用状态,这样有助于用户理解整个程序的功能。

8.默认按钮
   使用不具有破坏功能的默认按钮,在每个窗口中,为了方便用户,一般都定义了一个默认按钮,当用户敲回车键时可以快速执行某功能,但有时用户会不小心按错回车键,这时候执行了默认功能后,不能产生不可还原的*作,比如删除或保存。

用户界面规范 


    最好的程序界面就是用户无需去阅读*作手册就知道该如何使用的界面。

原则

1.一致性
   如果你可以在一个列表的项目上双击后能够弹出对话框,那么应该在任何列表中双击都能弹出对话框。要有统一的字体写号、统一的色调、统一的提示用词、窗口在统一的位置、按钮也在窗口的相同的位置。

2.设置标准并遵循它
    可以参数一些工业标准,如IBM的界面设计规范或MS的设计规则,它提供了90%你所需要的规范。

3.设置向导
   如果用户使用了一个功能后,不知道如何做下一个,他们就会放弃。如果*作流程和手工工作流程一致,用户就会努力去完成它。最好的方式来引导用户就是在桌面上设置一个流程向导。

4.提示信息必须恰当且规范
   提示信息必须容易理解并且口径统一,比如“您输入了错误的数据”、“用户编码不能超过8位”。一致的措词,提示信息还应该出现在一致的位置,如弹出提示窗口、窗口的上方或窗口的下方。对用户的称呼应该统一,比如有时提示“用户输入了错误的数据”,有时提示“您输入了错误的数据”,有时又提示“纳税人输入了错误的数据”,这样会使用户无所适从。

5.借鉴好的程序
   多了解同类软件的界面,并加以分析与了解,直到能够区别好的用户界面与差的用户界面。但不能够机械的模仿别人的界面。

6.功能的统一
   有一些很常用的功能,如添加、修改、删除、查看,同一个软件中,这些功能应该有相同的*作方法。举个例子,几乎我们所有的程序中都有*作员管理这一块功能,但没有一个功能最完善统一的模块可供调用,结果虽然程序员间相互复制这个模块,但经过修改后,每个程序的*作管理都不相同。

7.变灰的功能
   有时有些功能不可用,最好不要删除这些按钮若项目,而是使他们变灰为不可用状态,这样有助于用户理解整个程序的功能。

8.默认按钮
   使用不具有破坏功能的默认按钮,在每个窗口中,为了方便用户,一般都定义了一个默认按钮,当用户敲回车键时可以快速执行某功能,但有时用户会不小心按错回车键,这时候执行了默认功能后,不能产生不可还原的*作,比如删除或保存。

风险躲在需求的迷雾之后

  以上我们看到的是某客户项目经理与系统开发小组的分析人员讨论业务需求。在项目开发中,所有的项目风险承担者都对需求分析阶段备感兴趣。这里所指的风险承担者包括客户方面的项目负责人和用户,开发方面的需求分析人员和项目管理者。这部分工作做得到位,能开发出很优秀的软件产品,同时也会令客户满意。若处理不好,则会导致误解、挫折、障碍以及潜在的质量和业务价值上的威胁。因此可见——需求分析奠定了软件工程和项目管理的基础。

拨开需求分析的迷雾

  像这样的对话经常出现在软件开发的过程中。客户项目经理的需求对分析人员来讲,像“雾里看花”般模糊并令开发者感到困惑。那么,我们就拨开雾影,分析一下需求的具体内容:

  ·业务需求——反映了组织机构或客户对系统、产品高层次的目标要求,通常在项目定义与范围文档中予以说明。

  ·用户需求——描述了用户使用产品必须要完成的任务,这在使用实例或方案脚本中予以说明。

  ·功能需求——定义了开发人员必须实现的软件功能,使用户利用系统能够完成他们的任务,从而满足了业务需求。

  ·非功能性的需求——描述了系统展现给用户的行为和执行的操作等,它包括产品必须遵从的标准、规范和约束,操作界面的具体细节和构造上的限制。

  ·需求分析报告——报告所说明的功能需求充分描述了软件系统所应具有的外部行为。“需求分析报告”在开发、测试、质量保证、项目管理以及相关项目功能中起着重要作用。

  前面提到的客户项目经理通常阐明产品的高层次概念和主要业务内容,为后继工作建立了一个指导性的框架。其他任何说明都应遵循“业务需求”的规定,然而“业务需求”并不能为开发人员提供开发所需的许多细节说明。

  下一层次需求——用户需求,必须从使用产品的用户处收集。因此,这些用户构成了另一种软件客户,他们清楚要使用该产品完成什么任务和一些非功能性的特性需求。例如:程序的易用性、健壮性和可靠性,而这些特性将会使用户很好地接受具有该特点的软件产品。

  经理层有时试图代替实际用户说话,但通常他们无法准确说明“用户需求”。用户需求来自产品的真正使用者,必须让实际用户参与到收集需求的过程中。如果不这样做,产品很可能会因缺乏足够的信息而遗留不少隐患。

  在实际需求分析过程中,以上两种客户可能都觉得没有时间与需求分析人员讨论,有时客户还希望分析人员无须讨论和编写需求说明就能说出用户的需求。除非遇到的需求极为简单;否则不能这样做。如果您的组织希望软件成功,那么必须要花上数天时间来消除需求中模糊不清的地方和一些使开发者感到困惑的方面。

  优秀的软件产品建立在优秀的需求基础之上,而优秀的需求源于客户与开发人员之间有效的交流和合作。只有双方参与者都明白自己需要什么、成功的合作需要什么时,才能建立起一种良好的合作关系。

  由于项目的压力与日俱增,所有项目风险承担者有着一个共同目标,那就是大家都想开发出一个既能实现商业价值又能满足用户要求,还能使开发者感到满足的优秀软件产品。

客户的需求观

  客户与开发人员交流需要好的方法。下面建议20条法则,客户和开发人员可以通过评审以下内容并达成共识。如果遇到分歧,将通过协商达成对各自义务的相互理解,以便减少以后的磨擦(如一方要求而另一方不愿意或不能够满足要求)。

1、 分析人员要使用符合客户语言习惯的表达

  需求讨论集中于业务需求和任务,因此要使用术语。客户应将有关术语(例如:采价、印花商品等采购术语)教给分析人员,而客户不一定要懂得计算机行业的术语。

2、分析人员要了解客户的业务及目标

  只有分析人员更好地了解客户的业务,才能使产品更好地满足需要。这将有助于开发人员设计出真正满足客户需要并达到期望的优秀软件。为帮助开发和分析人员,客户可以考虑邀请他们观察自己的工作流程。如果是切换新系统,那么开发和分析人员应使用一下目前的旧系统,有利于他们明白目前系统是怎样工作的,其流程情况以及可供改进之处。s

3、 分析人员必须编写软件需求报告

  分析人员应将从客户那里获得的所有信息进行整理,以区分业务需求及规范、功能需求、质量目标、解决方法和其他信息。通过这些分析,客户就能得到一份“需求分析报告”,此份报告使开发人员和客户之间针对要开发的产品内容达成协议。报告应以一种客户认为易于翻阅和理解的方式组织编写。客户要评审此报告,以确保报告内容准确完整地表达其需求。一份高质量的“需求分析报告”有助于开发人员开发出真正需要的产品。

4、 要求得到需求工作结果的解释说明

  分析人员可能采用了多种图表作为文字性“需求分析报告”的补充说明,因为工作图表能很清晰地描述出系统行为的某些方面,所以报告中各种图表有着极高的价值;虽然它们不太难于理解,但是客户可能对此并不熟悉,因此客户可以要求分析人员解释说明每个图表的作用、符号的意义和需求开发工作的结果,以及怎样检查图表有无错误及不一致等。

5、 开发人员要尊重客户的意见

  如果用户与开发人员之间不能相互理解,那关于需求的讨论将会有障碍。共同合作能使大家“兼听则明”。参与需求开发过程的客户有权要求开发人员尊重他们并珍惜他们为项目成功所付出的时间,同样,客户也应对开发人员为项目成功这一共同目标所做出的努力表示尊重。

6、 开发人员要对需求及产品实施提出建议和解决方案

  通常客户所说的“需求”已经是一种实际可行的实施方案,分析人员应尽力从这些解决方法中了解真正的业务需求,同时还应找出已有系统与当前业务不符之处,以确保产品不会无效或低效;在彻底弄清业务领域内的事情后,分析人员就能提出相当好的改进方法,有经验且有创造力的分析人员还能提出增加一些用户没有发现的很有价值的系统特性。

7、 描述产品使用特性

  客户可以要求分析人员在实现功能需求的同时还注意软件的易用性,因为这些易用特性或质量属性能使客户更准确、高效地完成任务。例如:客户有时要求产品要“界面友好”或“健壮”或“高效率”,但对于开发人员来讲,太主观了并无实用价值。正确的做法是,分析人员通过询问和调查了解客户所要的“友好、健壮、高效所包含的具体特性,具体分析哪些特性对哪些特性有负面影响,在性能代价和所提出解决方案的预期利益之间做出权衡,以确保做出合理的取舍。

8、 允许重用已有的软件组件

  需求通常有一定灵活性,分析人员可能发现已有的某个软件组件与客户描述的需求很相符,在这种情况下,分析人员应提供一些修改需求的选择以便开发人员能够降低新系统的开发成本和节省时间,而不必严格按原有的需求说明开发。所以说,如果想在产品中使用一些已有的商业常用组件,而它们并不完全适合您所需的特性,这时一定程度上的需求灵活性就显得极为重要了。

9、 要求对变更的代价提供真实可靠的评估

  有时,人们面临更好、也更昂贵的方案时,会做出不同的选择。而这时,对需求变更的影响进行评估从而对业务决策提供帮助,是十分必要的。所以,客户有权利要求开发人员通过分析给出一个真实可信的评估,包括影响、成本和得失等。开发人员不能由于不想实施变更而随意夸大评估成本。

10、 获得满足客户功能和质量要求的系统

  每个人都希望项目成功,但这不仅要求客户要清晰地告知开发人员关于系统“做什么”所需的所有信息,而且还要求开发人员能通过交流了解清楚取舍与限制,一定要明确说明您的假设和潜在的期望,否则,开发人员开发出的产品很可能无法让您满意。

11、 给分析人员讲解您的业务

  分析人员要依靠客户讲解业务概念及术语,但客户不能指望分析人员会成为该领域的专家,而只能让他们明白您的问题和目标;不要期望分析人员能把握客户业务的细微潜在之处,他们可能不知道那些对于客户来说理所当然的“常识”。

12、 抽出时间清楚地说明并完善需求

  客户很忙,但无论如何客户有必要抽出时间参与“头脑高峰会议”的讨论,接受采访或其他获取需求的活动。有些分析人员可能先明白了您的观点,而过后发现还需要您的讲解,这时请耐心对待一些需求和需求的精化工作过程中的反复,因为它是人们交流中很自然的现象,何况这对软件产品的成功极为重要。

13、 准确而详细地说明需求

  编写一份清晰、准确的需求文档是很困难的。由于处理细节问题不但烦人而且耗时,因此很容易留下模糊不清的需求。但是在开发过程中,必须解决这种模糊性和不准确性,而客户恰恰是为解决这些问题作出决定的最佳人选,否则,就只好靠开发人员去正确猜测了。

  在需求分析中暂时加上“待定”标志是个方法。用该标志可指明哪些是需要进一步讨论、分析或增加信息的地方,有时也可能因为某个特殊需求难以解决或没有人愿意处理它而标注上“待定”。客户要尽量将每项需求的内容都阐述清楚,以便分析人员能准确地将它们写进“软件需求报告”中去。如果客户一时不能准确表达,通常就要求用原型技术,通过原型开发,客户可以同开发人员一起反复修改,不断完善需求定义。

14、 及时作出决定

  分析人员会要求客户作出一些选择和决定,这些决定包括来自多个用户提出的处理方法或在质量特性冲突和信息准确度中选择折衷方案等。有权作出决定的客户必须积极地对待这一切,尽快做处理,做决定,因为开发人员通常只有等客户做出决定才能行动,而这种等待会延误项目的进展。

15、 尊重开发人员的需求可行性及成本评估

  所有的软件功能都有其成本。客户所希望的某些产品特性可能在技术上行不通,或者实现它要付出极高的代价,而某些需求试图达到在操作环境中不可能达到的性能,或试图得到一些根本得不到的数据。开发人员会对此作出负面的评价,客户应该尊重他们的意见。

16、 划分需求的优先级

  绝大多数项目没有足够的时间或资源实现功能性的每个细节。决定哪些特性是必要的,哪些是重要的,是需求开发的主要部分,这只能由客户负责设定需求优先级,因为开发者不可能按照客户的观点决定需求优先级;开发人员将为您确定优先级提供有关每个需求的花费和风险的信息。

  在时间和资源限制下,关于所需特性能否完成或完成多少应尊重开发人员的意见。尽管没有人愿意看到自己所希望的需求在项目中未被实现,但毕竟是要面对现实,业务决策有时不得不依据优先级来缩小项目范围或延长工期,或增加资源,或在质量上寻找折衷。

17、 评审需求文档和原型

  客户评审需求文档,是给分析人员带来反馈信息的一个机会。如果客户认为编写的“需求分析报告”不够准确,就有必要尽早告知分析人员并为改进提供建议。

  更好的办法是先为产品开发一个原型。这样客户就能提供更有价值的反馈信息给开发人员,使他们更好地理解您的需求;原型并非是一个实际应用产品,但开发人员能将其转化、扩充成功能齐全的系统。

18、 需求变更要立即联系

  不断的需求变更,会给在预定计划内完成的质量产品带来严重的不利影响。变更是不可避免的,但在开发周期中,变更越在晚期出现,其影响越大;变更不仅会导致代价极高的返工,而且工期将被延误,特别是在大体结构已完成后又需要增加新特性时。所以,一旦客户发现需要变更需求时,请立即通知分析人员。

19、 遵照开发小组处理需求变更的过程

  为将变更带来的负面影响减少到最低限度,所有参与者必须遵照项目变更控制过程。这要求不放弃所有提出的变更,对每项要求的变更进行分析、综合考虑,最后做出合适的决策,以确定应将哪些变更引入项目中。

20、 尊重开发人员采用的需求分析过程

  软件开发中最具挑战性的莫过于收集需求并确定其正确性,分析人员采用的方法有其合理性。也许客户认为收集需求的过程不太划算,但请相信花在需求开发上的时间是非常有价值的;如果您理解并支持分析人员为收集、编写需求文档和确保其质量所采用的技术,那么整个过程将会更为顺利。

转载于:https://www.cnblogs.com/sanle/archive/2006/04/27/386516.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值