论道WP(三):应用程序栏
作者通过具体翔实的例子介绍了Winodws Phone 7中应用程序栏的使用方式。
该内容已经被标记书签!
标记书签错误,请重试!

作者 乔梁 发布于 2011年11月21日
软件项目的估算历来是一个难题。由于软件开发活动还无法实现土建工程那种成熟度,所以也无法像做土建工程那样通过预算速查手册来评估。但是,对于一项投资来说,总要说出要投资多少吧,软件开发也要给出投资额,这就需要做估算了。
本文主要讨论敏捷软件开发中的用户故事(User Story)估算。估算方法有很多,但大体上分为绝对估算和相对估算。在本文中,“绝对估算”就是指以绝对时间(如小时或天)为单位进行估算。而“相对估算”就是通过用户故事之间的大小对比进行估算,估算后的结果没有时间单位(它们之间的差异,不在本文讨论范围之内)。在相对估算方法中,也有很多种不同方式。而相对估算的过程中常常会出现下面的现象,尤其是对那些第一次使用相对估算的团队:
本文所述的估算方法仅是作者在指导工作中曾经使用过且收效不错的经验总结,但并不确保任何情况下都有效。
制定发布计划,通常有一定数量的故事卡。
项目规模较大(一到三个月的周期),已根据用户故事的拆分原则(INVEST原则)得到一个用户故事列表,该列表由各角色共同讨论过,且对每个用户故事的内容已达成共识。同时,团队基本上可以保证,每个卡片都会有两个或两个以上的开发人员了解,并有能力开发。

图1. A与B的大小相当

图 2 B大于A

图3 C介于A和B之间
以此类推。在这个过程中,可以让所有开发人员同时贴卡片,只要彼此不干涉,保持独立判断即可。

图 4 排好序的卡片墙

图 5 已设定好每列大小的卡片墙

图6 已估算好的卡片墙
最后,将每列的用户故事数与列头的数字相乘,得到的数字再相加以后,就得到该项目的总体规模。
这种方法比较快捷。作者已做过数次实践,所带团队各不相同,但结果比较满意。在最近一次实践中,一共有40多张用户故事,用时大约1.5小时,就完成了规模估算和发布计划的制定。下面两张照片就是当时估算的情景。由于该团队一直使用传统的瀑布开发方式,首次尝试使用敏捷开发方法,所以在这次估算中,作者并没有要求团队一定使用仅包含1,2,3,5的数字序列,而是使用是1,2,3,5,8,13的数字序列。但在开发后期,团队已经有能力将较大的用户故事(8和13)进行拆分,使其变成由1,2,3,5组成的多个用户故事。另外,值得注意的是,如图8所示,本次估算中,在大小为“1”的这一列上,并没有任何用户故事。这也是正常现象,从侧面反映了,并不是所有的估算都需要基准“1”。

图7 开发人员正在向墙上贴用户故事卡片,尚未决定每列的数字。

图8 开发人员正在讨论将一个没有数值的用户故事放在哪个数值列下
对于刚刚接触敏捷软件开发方法的团队来说,这种规模估算和计划的方法的确不太容易接受,尤其是在那些已习惯于使用WBS分解方式做计划的团队中,他们会纠结于“1”到底代表多长时间,是代表资深开发人员的一天呢,还是新手的一天?因此,如前所述,这种排序法有其前提条件与假设。而且,在进行用户故事拆分时,进行充分的讨论,让团队成员了解每个用户故事,这是该方法成功的前提,当然,也是敏捷软件开发方法成功的前提。
值得再次强调的一点是,该方法只估算开发工作量。其前提假设是测试工作不是整个交付过程的瓶颈。
另外,用户故事的INVEST原则包括:独立性(Independent),可协商性(Negotiable),有价值(Valuable),可以估算性(Estimable),小的(Small and similar size)和可测试性(Testable)。作者认为,其中的“S”有两方面的含义。一是“small”:一个好的故事在规模上要尽量小,至少要确保在一个迭代内能够完成。用户故事越大,在安排计划,工作量估算等方面的风险就会越大。二是“similar size”:所有用户故事规模不应相差太大,不要为了追求“小”而出现半个小时就能完成的用户故事,结果使得最大和最小的用户故事之间相差数十倍(不要笑,现实中的确见过这种情况)。
感谢张凯峰对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家加入到InfoQ中文站用户讨论组中与我们的编辑和其他读者朋友交流。
在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中对于锁的性能优化,以及锁的存储结构及升级过程。
本次分享将首先介绍现代富文本编辑器的组成和实现,然后结合UEditor的开发过程,与参会者分享UEditor在设计和实现的过程中,所涉及到的核心功能的细节实现。
本次演讲视频录制于百度技术沙龙。
我们所开发的应用程序大多都需要提供一个图形用户界面(GUI)。关于GUI应用的架构设计,已经有了Form & Control、MVC,、MVP、 Passive View等多种模式。模式可以帮助我们建立优雅的架构,但前提是弄清楚模式的应用场景。弄清楚GUI应用面临的设计上的问题,有助于我们正确的挑选设计方案。
MongoDB是一种非常易用的NoSQL方案,Brian C. Dilley在这篇文章里介绍了MongoDB的优劣势,并介绍了MJORM项目。MJORM用于MongoDB,是一个没有注解的Java ORM库。
随着网络基础设施的逐步成熟,从RPC进化到Web Service,并在业界开始普遍推行SOA,再到后来的RESTful平台以及云计算中的PaaS与SaaS概念的推广,分布式架构在企业应用中开始呈现出不同的风貌,然而殊途同归,这些分布式架构的目标仍然是希望回到建造巴别塔的时代,系统之间的交流不再为不同语言与平台的隔阂而产生障碍。
精益软件开发方法因其对市场和交付的重视和在各种场景下体现出的适应能力正在获得广泛的关注。特别是在精益创业(Lean Startup)渐渐兴起和技术日新月异的今天,其"极端"的思想也变得越来越必要和可行。 InfoQ就此主题对他做了深入的采访。
2 条回复
关注此讨论 回复