2007年1月31日

需求书

如何编写高质量需求

Karl E Wieger

Process Impact

www.processimpact.com

译者说明:本文于19995月初版于软件开发,再版(有修订)得到软件开发杂志的授权

译文未得到相应授权,禁止用于商业目的。有出处,以原文为主。

你的工程应该有个好的起点。一个小组要带领客户进入需求启发阶段而且你要写软件需求说明书。这份说明有些大,但客户会很重视,所以说明必须得到赞同。

现在你正在设计其中的一个特性,已经发现了需求的一些问题。你可以用多种不同的方式解释需求15;需求9 的说明正好与需求21相反,你因该相信哪一个?需求24非常含糊,你根本不明白它的意思;你不得不花上一个小时与2位开发人员讨论需求30,只因为你们对其各有各的理解;并且,唯一能够澄清这些问题的客户没有给你们答复。你被迫破解众多需求的含义,并且你能预料到,如果你错了,你要做大量的重复工作。

许多软件需求说明书(SRS)写得非常糟糕。任何产品的质量需要其原始材料的质量保证,糟糕的软件需求说明书不可能产出优秀的软件。不幸的是,几乎没有开发人员受过与需求的抽象、分析、文档、质检有关的教育。而且,没有非常多的好需求可以借鉴学习,部分原因是很少有工程可以找到一个好的借鉴,其他原因是公司不愿意将其产品说明书放在公共区域。

这篇文章描述了高质量需求叙述和说明的几个特性(特点)。我们将用这些观点检查一些有缺陷的需求,带着痛楚重新编写。而且我会谈一些如何编写好的需求的提示。你也许想通过这些质量标准评估你的工程需求。对于修订,也许迟了,但你会学到一些有用的东西,并帮助你的小组在下次编写出更好的需求。

不要期望能够编写出一份能体现需求应具备的所有特性的SRS。无论你怎么细化、分析、评论和优化需求,都不可能达到完美。但是,如果你牢记这些特性,你就会编写出更好的需求,生产出更好的产品。

高质量需求叙述的特性

我们如何从一些有问题的需求中分辨出好的软件需求?这一节将分别介绍需求叙述应体现的6个特性,下一节将从整体上介绍SRS文档应具备的特性。判断每个需求是否具备应有的特性的一种方式是由持有不同观点的工程资金管理人所作的正规检查。另一种有力的方法是在编写代码前依据需求编写测试例子。测试例子能够明确显现在需求中描述的产品行为(特性),能够显现缺陷、冗余和含糊之处。

正确:每个需求必须精确描述要交付的功能。正确性依据于需求的来源,如真实的客户或高级别的系统需求说明书。一个软件需求与其对应的系统需求说明书相抵触是不正确的(当然,系统需求说明书本身可能不正确)。

只有用户的代表能够决定用户需求的正确性,这就是为什么在检查需求时,要包括他们或他们的代理的关键所在。不包括用户的需求检查就会导致开发人员的:“这是没意义的”,“这可能是他们的意思”等众所周知的猜测。

可行性:在已知的能力、有限的系统及其环境中每个需求必须是可实现的。为了避免需求的不可行性,在需求分析阶段应该有一个开发人员参与,在抽象阶段应该有市场人员参与。这个开发人员应能检查在技术上什么能做什么不能做,哪些需要需要额外的付出或者和其他的权衡。

必要性:每个需求应载明什么是客户确实需要的,什么要顺应于外部的需求,接口或标准。每个需求源于你认可、具有权说明需求的原始资料,这是考虑必需的另外情形(译注,此句翻译不顺,请参照原文:Another way to think of “necessary” is that each requirement originated from a source you recognize as having the authority to specify requirements)。跟踪每个需求回溯到出处,如用例,系统需求,规章,或来自其他用户的意见。如果你不能标识出处,可能需求只是个镀金的例子,没有真正的必须。

优先权:为了表明在一个详细的产品版本中应包含哪些要点,需要为每个需求,特征,或用例分配实现的优先权。客户或其代理都应有强烈的责任建立优先权。如果所有的需求都被视为同等重要,那么由于在开发中,预算削减,计划超时或组员的离开导致新的需求时, 项目经理将不能起到作用。优先权的作用是提供给客户的价值,实现的相关费用,实现相关联的有关技术风险。

我是用3种级别的优先权:高优先权表明需求必须体现在下一个产品版本中,中优先权表明需求是必须的,但是如果需要可以推迟到晚一些的产品版本中,低优先权表明有它很好,但我们必须认识到如果没有充足的时间或资源,它可以被放弃掉。

明确:需求叙述的读者应只能从其得到唯一的解释说明,同样,一个需求的多个读者也应达成共识。自然语言极易导致含糊。要避免使用一些对于SRS作者很清楚但对于读者不清楚的主观词汇,如:用户友好性,容易,简单,快速,有效,几个,艺术级,改善的,最大,最小等等。每写一个需要都应简洁,简单,直观的采用用户熟知的语言,不要采用计算机术语。检查需求模糊的有效方式包括需求说明书的正规检查,根据需求写测试,建立用户的假想来说明产品某个特定部分预期的特性。

可证实:看你是否能够做出测试计划或其他验证方式,如检查和实证,来决定在产品中每个需求是否正确的实现。如果需求是不可验证的,决定需求是不是正确的实现就成了判断的事。需求之间不一致,不可行,不明确也能导致不可证实。任何需求如果说产品将要支持什么也是不可证实的。

高质量需求说明的特征

一个完整的SRS不仅是包括长长的功能性需求列表,还包括外部接口描述和一些诸如质量属性,期望性能的非功能性需求。下面描述了高质量的SRS的一些特性。

完整:不应该遗漏要求和必需的信息。完整性也是一个需求应具备的。发现缺少的信息很难,因为根本不存在。在SRS中将需求以分层目录方式组织,将帮助评审人员理解功能性描述的结构,使他们很容易指出遗失的东西。

在需求抽象时,相对于系统功能,你过多的注意用户的业务,将导致在需求的全局观和引进不是真正必需的需求上显得不足。在需求抽象上,应用用例方法会发挥很好的作用。能够从不同角度察看需求的图形分析模型也可以检查出不完整性。

如果你知道已缺少一些信息,使用TBDto be determined)标准标志可以突出这些缺陷,当你在构建产品的相关部分时,就可以从一个给定的需求集中解决所有的缺陷。

一致性:一致性需求就是不要于其他的软件需求或高级别的系统(商业)需求发生冲突。需求中的不一致必须在开发开始前得到解决。只有经过调研才能确定哪些是正确的。修改需求时一定要谨慎,如果只审定修改的部分,没有审定于修改相关的部分,就可能导致不一致性。

可修改性:当每个需求的要求修改了或维护其历史更改时,你必须能够审定SRS。也就是说每个需求必须相对于其他需求有其单独的标示和分开的说明,便于清晰的查阅。通过良好的组织可以使需求易于修改,如:将相关的需求分组,建立目录表,索引,以及前后参考(照)。

可追踪:你应能将一个软件与其原始材料相对应,如高级系统需求,用例,用户的提议等。也能够将软件需求与设计元素,源代码,用于构造实现和验证需求的测试相对应。可追踪的需求应该具有独立标示,细密和结构化的编写,不应过大,不应是叙述性的文字和公告式的列表。

需求质量的评审

这些有关需求质量的特性的描述在理论上都是非常好的,但一个好的需求到底是个什么样子的呢?为了体现得更切合实际,我们做个小练习。下面有几个从实际的工程选出的需求,依据上面的质量标准,评估每个需求,看看有什么问题,然后用更好的方式重写。我将对每个例子都提出自己的分析和改进的建议。也欢迎你提出不同的见解。我所占优的只是我知道每个需求的出处。因为你我都不是真正的客户,我们只能猜测每个需求的意图。

1.“产品应在不少于每60秒的正常周期内提供状态信息”

这个需求是不完整的:状态信息是什么,如何显示给用户。这个需求有几处含糊。我们在谈论产品的哪部分?状态信息间隔真的假定为不少于60秒?,甚者每10年显示一条新的状态信息也可以?也许它的意图是消息间隔不应超过60秒,那么1毫秒是不是太短?“每”这个词导致了不确定性。问题的后果,就是需求的不可证实。

弥补缺陷,重写需求的一种方法:

1、状态信息

11后台任务管理器因该以误差上下不超过10秒的60秒间隔,在用户界面的指定位置显示状态信息

12如果后台进程处理正常,那么应该显示任务已完成的百分数/

13任务完成时,应显示相关的信息

14后台任务出错应该显示错误信息

为了分别测试和追踪,我将其分成了多个需求。如果将几个需求串接在一节中,在构造和测试时就很容易漏掉一个。

2.“产品应瞬间在显示和隐藏不可打印字符间切换”

计算机在瞬间不能做任何事,所以这个需求不切实可行。它的不完整性表现在没有声明触发状态切换的条件。软件要在某些条件下更改自己?或者用户为了模仿更改要做一些动作?而且,在文档中改变显示的范围是多大:选中的文本,整个的文档,或其他的?这也是个模糊的问题。不可打印字符合隐藏字符一样吗?或者是一些属性标志或一些控制字符?问题的后果,就是需求的不可证实。

象这样编写需求也许更好一些:“用户能够在一个由特定触发条件激活处于编辑的文档中在显示和隐藏所有HTML标记间切换”。现在就很清楚,不可打印字符是HTML标记。由于没有定义触发条件,需求对设计没有约束力。只有设计人员选定了触发条件后,你才能编写测试验证触发的正确操作。

3.“HTML分析器可以产生HTML标记错误报告,帮助HTML入门者快速解决错误”。单词“快速”使其模糊,没有加进错误报告的定义也是其部完整。我不知道,你怎么验证这个需求。找一个自称为HTML的入门者,看看能不能根据错误报告快速解决错误?

试试这个:“HTML分析器可以产生一个错误报告,错误报告包含有在被分析文件中出错的HTML文本和行号以及错误的描述。如果没有错误,就不会产生错误报告”。现在我们知道了,什么会被加到出错报告中,但是出错报告是个什么样子,则留由设计人员决定。我们还指定了一个例外:如果没有发现错误,不产生错误报告。

4.“如果可能,主管号码应通过联机校验,而不是通过主全体主管号码列表校验”。真感到绝望,什么是“如果可能”:如果技术上可行?如果主全体主管号码列表可以联机获得?要避免象“应该”的这类不确切的词。客户是需要这个功能性还是不需要。我曾看过一些需求说明书,采用诸如:应,将,应该/将要等一些词描述优先级的细微差别。但我更喜欢用“应”清楚的说明需求的意图,指明优先级。这是修改后的:系统应校验输入的主管号码而不通过联机的主全体主官号码列表。如果在列表中没有发现主管号码,将会显示一条错误信息,也不接受指令。

在理解各个已完成的糟糕需求上,开发人员将会遇到的难题是:开发人员与客户将会在审核需求,未达成共识前发生激烈的争论。详细检查大的需求文档不是一件轻松的事情。我清楚有人做过,而且他们花在检查上的每一分钟都是值得的。相对于开发阶段和用户的抱怨电话,在这个阶段修补缺陷是便宜的,

编写质量需求的方针

编写优秀的需求是没有公式化的方法的。这需要大量的经验,要从你在过去的文档中发现的问题学习。请在组织软件需求文档时,严格遵从这些方针。

l 句子和段落要短。采用主动语气。使用正确的语法,拼写,标点。使用术语,要保持一致性,并在术语表或数据字典中定义它们

l 要看需求是否被有效的定义,可以以开发人员的观点看看。在内心将“当你们做完了找我”这句加到文档尾部,看看能不能是你紧张起来。换句话说,你是否需要SRS的编写者的额外解释帮助开发人员很好的理解需求,以便于设计和实现?如果是的话,在继续工作前,需求还需要细化。

l 需求编写者还要努力正确地把握细化程度。要避免包含多个需求的长的叙述段落。有帮助的提示是编写独立的可测试的需求。如果你认为一小部分测试可以验证一个需求的正确,那么它已经正确的细化了。如果你预想到多种不同类的测试,几个需求可能已挤到了一起,需要拆分开。

l 密切关注多个需求合成了单个需求。一个需求中的连接词“和”/“或”建议几个需求合并。不要在一个需求中使用“和”/“或”。

l 通篇文档细节上要保持一致。我曾看见过多个需求说明书前后不一致。如:“对于红色合法的颜色代码应是R”及“对于绿色合法的颜色代码应是G”就有可以以分散的需求分离开,而“产品应能对来自语音编辑指示做出反应”应作为一个子系统,不应作为单个的功能性需求。

l 避免在SRS中过多的申述需求。在多处包含相同的需求可以使文档更易于阅读,但也会给文档的维护增加困难。文档的多份文本要在同一时间内全部更新,避免不一致性。

如果你遵从了这些方针,你能够尽早地经常正式或非正式的审查需求,这些需求对于产品的构造,系统测试以及最后的客户满意,都会成为好的奠基石。并且要记住,没有高质量的需求,软件就象一个巧克力的盒子,你不会知道你将要得到什么

2007年1月30日

宝贝

我的宝贝宝贝
给你一点甜甜
让你今夜都好眠
我的小鬼小鬼
逗逗你的媚眼
让你喜欢这世界
哗啦啦啦啦啦,我的宝贝
整个时候有个人陪
哎呀呀呀呀呀,我的宝贝
让你知道你最美

我的宝贝宝贝
给你一点甜甜
让你今夜都好眠
我的小鬼小鬼
逗逗你的笑脸
让你喜欢这整个明天
哗啦啦啦啦啦,我的宝贝
整个时候有个人陪
哎呀呀呀呀呀,我的宝贝
让你知道你最美
哗啦啦啦啦啦,我的宝贝
孤单时有人把你想念
哎呀呀呀呀呀,我的宝贝
让你知道你最美
啦啦啦啦啦,耶哦耶耶耶哦
哗啦啦啦啦啦,我的宝贝
整个时候有个人陪
哎呀呀呀呀呀,我的宝贝
让你知道你最美
让你知道你最美

2007年1月29日

邮件订阅

我会订阅很多信息源。我把抓虾当作我的新浪。我把delicious当作我的浏览历史精华。
最近发现邮件订阅将会是一种更加精粹的订阅方式。
你必须把邮件订阅控制在10个以内。这样邮件订阅的内容才是有意义的,才能保证你能够当天阅读完,并且有思考的时间。
分享一下我的邮件订阅:
Read/Write Web:一个著名的外国关于web2.0的群博客,很专业,每天都有最新,最一手的很完整的新闻和资料。http://www.readwriteweb.com
艾瑞调查:也是一个很专业的从调研角度解读互联网和web2.0的信息源。我订阅的是web部分的信息。http://www.iresearch.com.cn
纵横周刊:一本以中国视角谈论世界政治的电子期刊。专业+人文=深度+生动。订阅请直接发信给 antisblog@gmail.com
php-class:一个国外的php-class类的分享信息订阅。每天送达有用的class类,学习php,研究php,是一个不错的订阅。http://www.phpclasses.org/

目前就这四个,信息量已经大到把我撑饱的地步,基本不考虑再添加新的,除非你给我一个绝对理由:)

2007年1月26日

终于从旧版blogger转到了新版blogger。
保存了原来的模版html,不错:)

2007年1月20日

能和想

想的时候,不能;
能的时候,不想。
不想的时候,更不能。
不能的时候,更要想。

2007年1月9日

pplive

2007年想换种风格,标题都起得简短些吧。回归自我些吧。
一直迟迟顿顿的,换了新的环境,还没怎么感慨下,就低头做了快要1个月了。是时候回头看看了。当然2006年的总结已经写得很细致,很多感受都放在文档里,自己知道,面对新的开始,当然应该有新的期待。
我先是分析了一下ChinaY的可行性和可信性,然后,分析了一下自己的各种优缺点,离开是发展层面上一个不错的选择。很有缘吧,加入了现在的pplive,一切看似都过渡得相当平滑。
下面来介绍下pplive吧:

我们的地位:PPLive网络电视软件是国内知名度最高、用户数最多、覆盖面最广的P2P网络电视软件。


我们的历程:

2004年12月:PPLive,第一个版本诞生于华中科技大学。

2005年1月:PPLive.com第一版网站发布。

2005年8月:PPLive承载超女总决赛50万人同时在线收看,创下业内最高纪录。

2005年9月:PPLive荣居百度(Baidu)搜索风云榜热门搜索TOP50,软件类排名TOP10,并持续至今。

2005年12月:软件累计下载数已突破2000万。

2005年11月:PPLIVE.COM网站日独立IP访问量超过100万。

2005年12月:被中国太平洋电脑网评为2005年度常用网络软件P2P类第一名,与瑞星、IE、QQ等老牌网络软件并列第一。

2006年1月:被IT168评为2005年十大最有影响力软件产品。

2006年2月:成为全球华人动画春节晚会指定P2P传播平台。

2006年2月:PPLive.com成为中文网站100强。

2006年3月:PPPLive当选中国互联网所颂发——中国互联网行业公益企业奖。

2006年4月20日:PPLive网站,软件全面改版,开创P2P流媒体新纪元。

2006年6月-9月:为东方宽频提供直播技术合作,网络直播“2006年德国世界杯”“我型我show”等大型赛事。

2006年7月:携手光线传媒,中凯文化等传统内容发布机构,打造全新的内容P2P网络发行模式。

2006年8月:和ZIM公司合作,尝试开拓P2P流媒体海外市场。

2006年9月 根据iResearch-2006年中国P2P流媒体研究报告,PPLive的在整个P2P流媒体市场中占有率第一。

2006年10月 PPLive网络直播电影《夜宴》,开启国产大片网络发行新时代。

我们的使命:P2P Change Our LIVEs

共赢 Path to Profit
平等 Peer to Peer
互助 People to People
激情 Passion to Passion
坚韧 Persistence to Persistence

我们的文化:

一颗年轻的心——对互联网的发展趋势有敏锐的直觉,激情,活力。

信任互助的精神——团队能成功走到今天,源于团队成员的上下齐心,让我们在失败中不气馁,在成功时更奋进。

有责任感的做事态度——对用户负责,对团队负责,对工作负责,踏实努力。

对他人真诚——关爱用户,关爱自己,关爱同事,关爱团队,融入团队大家庭中。

PPLive网络电视所有频道内容由合作方提供,PPLive不承担由于内容的合法性及健康性所引起的一切争议和法律责任。
欢迎大家对侵犯版权等不合法和不健康的内容进行监督和举报。举报QQ:553475477


我在pplive做什么呢?
网站策划。

2007年1月7日

展望2007,博客又见飞刀!

我一直钟情blogger,是因为它是我目前看到最“自由”的BSP。没有理由不叫人喜欢。从模板到内容都可以自己自由改变,由自己做主。比起其他的bsp来,优势很是明显。只是希望别再次被封锁在长城之外。这也是它最大的政策风险。除此之外,我实在看不出它的弱点。
最近,blogger又推出域名绑定功能,免费。这就是google的魄力和魅力所在。敢于免费,想用户所想。
可惜我现在用的是旧版bloggger,升级入口一直没有出现,域名绑定功能只有在新版blogger上才有,挺郁闷的。
具体如何绑定,看这里:《最完美的BSP,支持域名绑定 》!
由于台湾地震,海底电缆断了,访问blogger速度变慢,好多天没怎么更新了。2006年除了工作上做了一番沉痛总结之外,生活上的许多事情还没怎么记录。最近看到不少有意思的年终总结,想偷懒一下,用标签的形式来记录自己的2006。
网络生活的话,看我的delicious标签 是最好的反应:web2.0,php,网站策划,互联网,博客,世界杯…………
现实生活的话,我想应该有以下这些:
阅读
收获
行走

拍摄
写博客
玩博客
研究博客
party
独处
幻想
音乐
电影
工作
海洋

ChinaY
小羊
奶奶
母亲
上海
或者潜意识中其他未知的许多旅程……

展望2007,我想只做好一件事情,那就是做一个承建自己理想的网站来和大家分享,路途遥遥啊!!!

2007年1月2日

《伤城》?

周二是电影最好的时节;周二是电影最坏的时节。
  周二晚上7-8点,逛遍上海黄金地带四家影院,黄金段放映时间都客满。
  昨天,《伤城》让我感受到了一丝丝电影的火热。已经很久没有看到电影院里坐得这么满了,气氛很不错,但是,播放的电影很烂。
  我对《伤城》的定义是,港片的入门级水平,适合那些对电影迷茫,对明星狂热分子们观看。
  牵强得不能再牵强的剧情,让我不得不感慨,金城武也堕落啦,拍拍王家卫的艺术电影多好,非要搞什么商业。
  残破得不能再残破的对白,如同很多港剧的苍白那样,文化沙漠这个词眼又浮现眼前。每一句都好似在过去的电影记忆中听过,而每一句都是那么得浮云一般。
  高明得不能再高明的包装,金城武,梁朝伟,老徐,舒淇的阵容虽然谈不上豪华,但绝对是一个能让你行动的组合,适合各种层次的观众掏钱来电影院商业一回,看看偶像们的杰作。
  如果把《伤城》当作一个产品,那么,《伤城》的产品策划绝对是一个高手,他已经抛开了电影的所有层面,还原到最本色的商人视角,投入和产出的比例,电影对他来说只是一个资本运作的工具,地道的包装,到位的宣传,可想而知的成本,和一个高速回报的前景。这就是《伤城》的全部。
  
  晚上9点25分这一场,依旧爆满的影院,让这个冬天不再寒冷,相比较,反而《满城尽带黄金甲》的人气没有《伤城》热了,看报道《黄金甲》的票房也不低,那么《伤城》的票房这次在内地,应该是赚满钵了吧。
  如果最后的杀手是老徐的话,我觉得剧情会更突出一些,也更精彩一些,就好像《好奇害死猫》那样。或者只是像《赛末点》那样意外的逃过法律责难的结局那样,也许会多一个层面的思考。
  
  《伤城》顶多也就5元盗版碟,放家里无聊时看看,看金城武买醉的堕落,看梁朝伟残血的报仇,看帅哥和美女就够了,电影靠边站!

PS:由于台湾地震的影响,很久一周之前写的日志只能是今天才发布上:(

博客链免费申请 博客链免费申请 博客链免费申请
域名出售darkseo.cn 域名出售blogseo.cn 域名出售nickyhu.com

My Box.net Files

Share anywhere with Box.net