云服务器内容精选

  • 如何识别用户故事的坏味道(BadSmell) 如同低质量的代码会有Bad Smell,用户故事也一样会有坏味道: 几十页上百项需求堆在Product Backlog里。 提交的需求,自始至终没人和你沟通,某一天突然发现需求被实现了。 排在Product Backlog中段和后段的用户故事太过详尽。 大家依赖Product Backlog电子系统,而不是面对面进行沟通。 用户故事长得像需求规格说明书。 说不出故事的目标用户以及带来的价值。 很难为众多故事排优先级(不是高中低,而是唯一顺序)。 故事之间牵一发而动全身。 如果你发现上面任意一条出现在你的项目中,那说明你的用户故事还需要改进。
  • 非功能性需求以及技术类需求 非功能性需求(Non Functional Requirement)往往是决定产品或项目成败的关键,却往往容易被忽视。当非功能性需求欠缺太多,就背负了技术债务,需要通过定期的技术类活动进行清理。 典型的非功能性需求包括:性能、可移植性、可扩展性、可用性、易用性、可维护性、可重用性、可操作性、安全性、容量等。 技术类需求的例子包括:重构、搭建持续交付流水线、测试自动化活动、环境的维护与搭建、架构改造等。 目前CodeArts没有预置非功能性需求和技术类需求作为单独的工作项类型,不希望工作项类型过于膨胀而增加了使用的复杂性。 通过新增字段可以标识不同类型的需求,更好的方式则是采用Tag标签。善用标签和过滤器的结合,可以实现非常强大的功能,关于过滤器的使用技巧,我们可以单开一个主题来讨论。
  • 如何创建和收集故事? 通常有几种方式进行用户故事的创建和收集,其中前两种是最经常采纳的: 用户访谈 故事编写工作坊 问卷调查 观察 用户访谈的关键是找到真正的用户,所以用户访谈之前是用户画像,也就是找到Who的过程。 “你们的确开发了我所说的功能,但它并不是我真正想要的”,用户往往不知道或很难准确表达自己想要的,所以沟通需要频繁,需要拿着不同阶段的产物进行确认。说者无心,听者有意,会不会是自己主观臆断?说者有心,听者无意,会不会遗漏关键字?同理心说起来容易,做起来很难。 用户故事编写工作坊是捕获需求最有效的方式,原则是:数量优先而不是质量优先,鼓励大家输出,而不要去评判某个故事的好坏;深度优先而不是广度优先,先把一条路走通,而不要中途跳到岔路上。用户最可能做什么?可能会犯什么错误?会有什么困惑?会需要什么信息?在工作坊里最好用贴纸,便于交互,随后再整理到工具平台上。 观察用户真实使用产品的机会是难能可贵的,你会发现用户永远不会按照你设计的方式使用产品。
  • 有关用户故事的一些零散建议 需求要有时间点。多问一句“什么时候需要?”,你往往会发现对方其实心里没数,ASAP不是一个好答案,越快越好只能说明不信任。尽管会有顾虑,我依然会如实说“这个功能与一个月之后的某个活动相关,在此之前实现即可,但需要预留给我一周的时间进行验证和修复”。 进行故事优先级排序时,需要考虑成本,一个重要的需求,有可能因为成本过高而延后,另一种方法是对其进行拆分。 不要着急给用户故事添加细节,遵循Kent Beck提出的最后责任时刻原则(Last Responsible Moment),团队要等到开始实现软件特性前才写下特性的具体细节,优先级排序,近期、中期、长期需求的详略程度。 纸质卡片、贴纸,还是电子工具? 在需求收集和引导的前期,例如需求编写工作坊,建议采用纸质卡片,便于交互,并且卡片的有限文字空间保证了我们不会过早进入细节。 当需求收集告一段落,统一将需求录入到CodeArts平台,需求不只是Card一个维度,多方位的信息需要有工具平台来支撑和记录。同时平台也提供了团队成员之间的协同,CodeArts团队异地的协同场景就是基于CodeArts平台进行的。
  • 我们遵循Ron Jeffries提出的原则 关于用户故事,Ron Jeffries用3个C来描述它: Card(卡片):我们在用户故事编写工作坊中使用贴纸或卡片编写,随后录入到CodeArts成为工作项,展现方式可以是卡片、列表或树状结构。卡片代表需求而不是记录需求,详尽的需求内容可以用其他文档表述。 Conversation(讨论):讨论的过程建议是面对面的,如果与CodeArts的成员一样,分布在不同地域,可以通过电话或IM工具(华为内部用eSpace,可以聊天,也可以语音、视频)进行,将重要的结论写在工作项提供的讨论功能中。简单的讨论可以直接通过工作项的讨论进行,但需要牢记的是,文字的讨论永远无法取代面对面或是电话的沟通。 Confirmation(确认):用户故事并不具备契约性质,达成协议的验证要点是测试的依据,用来验证用户故事是否符合用户的期望。在用户故事编写工作坊中,验证信息可以写在故事卡片的背面,随后录入工作项。针对每一个测试要点都应该变成完整的测试用例,测试用例会与需求进行关联,由此完美的将3C结合在一起。 在CodeArts中的用户故事: 卡片是用户故事的展现形式,我们会切换到迭代视图的卡片模式,通过拖动卡片完成状态更新。 讨论是沟通的方式,不要让讨论的内容蒸发掉,讨论过程中最大的浪费就是大量的信息随后被遗失掉了。我们通常在Story工作项的评论中记录讨论结果,或是直接在评论中进行讨论,并用@通知他人。 确认是验收方式,验收信息可以填写在描述信息中,也可以在项目设置中在Story工作项的模板中添加一个属性字段完成,具体实现方式不一,并且实现起来非常灵活,所以并未做进预置的项目模板中。 一个用户故事工作项,事实上是一个需求的入口,以条目化或是卡片的形式展现,同时可以进行多方位的关联。 由验收信息生成的测试用例,会关联到工作项的“关联用例”中。 在对话和沟通的过程中会产生的有用信息,可以通过Wiki(知识共享)、Docman(文档协同)来保存,并且可以关联到Story工作项。 可以将现有的文件添加为工作项的附件。
  • 前言 秉承吃狗粮的文化,CodeArts团队在践行精益敏捷DevOps的同时,也在使用CodeArts工具进行实践落地。 需要说明的是: 本文中提到的实践方式,CodeArts团队在践行,所以具有一定的示范性。 不具备普适性,每个团队都应该根据自己团队的业务特性、团队成熟度、流程以及对方法论的解读,来进行落地实现。 里面有很多优化的空间,并没有最好的实践,只有适合的实践。 通常而言,软件开发起始于需求收集与分析,所以本文从需求谈起。 传统的瀑布研发模式基于三个假设: 用户准确的知道自己想要什么。 开发人员能够完全理解用户在说什么。 需求在研发过程中不会发生变化。 但事实上这三个前提假设都不存在,需求沟通之后做出来的产品,往往与需求大相径庭。