Scrum和极限编程(XP):最佳实践
我们遵循Scrum在我们的组织中进行软件开发。 虽然我们在Scrum方面有着相当的经验,但是我们并没有在一天结束的时候生成好的源代码。 人们正在讨论将极限编程(XP)与Scrum结合起来,以产生可预测的结果。
我已经经历了极限编程材料,但无法得到一个好的图片。
如何在软件开发中使用Scrum和极限编程?
Scrum是一个敏捷的项目pipe理方法论。 它没有涉及创build任何forms的“货物”所需的做法,而是给我们提供了一个过程 ,使我们从一个愿景的开始到最终产品,而不pipe实际的发展过程如何。 Scrum过程不会告诉你如何创build质量。 它会告诉你什么是质量问题,你的问题在哪里,以及如何解决问题。
极限编程是一种敏捷的软件开发方法。 它为我们提供了一个以灵活和高效的方式创build软件的过程。 它所涉及的,虽然并不专注于开发过程的pipe理 ,并且主要关注软件质量所需的工程实践 。
当采用Scrum来进行软件开发时,工程实践是从敏捷软件开发实践中导入的,最常见的是来自XP。 这些做法是可以以与其他发展做法脱节的方式采用的做法。 通常,这些实践是: testing驱动的开发,重构,结对编程和用户故事 ,但绝不是Scrum所需要的,或者是做事情的唯一方法(强烈推荐)。 敏捷build模是敏捷工程实践的另一个常见来源。
所以简而言之,当混合使用Scrum和XP(这是目前最常见的组合)时,可以使用Scrum的所有pipe理工件,例如Sprint,日常Scrum,回顾,烧录图等等,并添加XP的TDD,重构,对编程和JITdevise通过用户故事。
当然,Scrum就是Scrum,这就是你如何开始,并且不断调整(重构,如果你愿意的话)这个过程来回答你组织的具体需求。
检查和适应。
没有银子弹
没有什么神奇的血清能让团队成功,因为他们使用了Scrum / XP / Agile等。 find你的瓶颈,一次消除一个瓶颈
更新 :有些人觉得我的回答没有足够的帮助。 我声称'敏捷疤痕'已经离开了我这样 – (戴上我有用的帽子)也许你应该从战壕中读取Scrum和XP
Scrum对编程没有什么可说的。
在我看来,如果没有软件工程实践,在技术层面上,您可以快速响应变化:增量devise,单元和验收testing,重构,持续集成,集体代码所有权。
这是所有其他需要的东西,如客户的高度参与和团队内外的有效沟通。
除了这里提到的其他书籍,James Shore和Shane Warden 的“敏捷开发的艺术”是关于敏捷软件开发的最好的书籍。
一些其他人在这里提到的链接的链接:
持续集成
重构
Henrik Kniberg 在Trenches上的Scrum和XP ( infoq.com 精彩演讲)
实用程序员(Jim Ferrans提到的)和Clean Code都是敏捷程序员的优秀资源。 你也可能想看看极限编程系列中的书籍。
Scrum实践适合于产品所有者的协作和优先级。 但是,Scrum本身并不能使开发团队保持可持续的发展速度。
XP专注于工程实践testing驱动开发(TDD),共享代码库,简单进化devise,配对编程,自动化testing,持续集成,技术债务等实践。
在所有的工程实践中,TDD是最难学的,一般来说,工程实践比pipe理(Scrum)实践有更高的学习曲线。 但是,如果没有工程实践,代码将会变得无法保持速度。 原因是代码将花费更长和更长的时间来testing,并变得脆弱的变化。
如果你要采取工程实践,最好是将技术或工程教练embedded到团队中。 教练将提供每个练习的介绍培训,并通过配对快速宣传团队的实践。
Scrum和XP是一个伟大的比赛。 一些研究表明,将Scrum和XP结合在一起是最有效的敏捷团队。 鉴于每个焦点都是独特而互补的,在任何敏捷团队中使用Scrum和XP都是明智之举。
Scrum是项目pipe理的敏捷过程,因此它不会对代码质量产生影响,除非是在每个2-4周的“冲刺”结束时总是有一个潜在的可交付系统。 通过保持短跑速度并获得每日反馈,项目经理可以更好地了解新function需要付出多less努力才能实施,团队对每个新function的相对重要性有良好的感受。
你仍然需要努力编程。 在这方面有很多很棒的书籍(比如McConnell的Code Complete ,Hunt和Thomas的Pragmatic Programmer ),你应该仔细研究它们并将它们应用于你的工作。
你正在写错误的代码,因为:
- 你的团队不知道如何。
- 没有人在权限检查,批准需要好的代码。
- 你没有足够的时间?
- 对糟糕的遗留代码太依赖了。
- 没有给出适当的工具(源代码控制,开发环境,通信等)
我不确定这些都与敏捷/ Scrum有关。
每个开发人员,他/她的风格,技能以及总是沉浸在新信息中的渴望都与开发过程中的代码质量和最终产品的成功密切相关。
如果你没有合适的人,没有下午技术会帮助你。 首先find合适的人,可以分别生成好的代码的人,然后担心团队合作。 一个人可能会破坏整个团队的努力。
在旁注中,我讨厌SCRUM的一件事是每天的站立会议。 Yarrr。
克里什,你的立场是什么? 一个团队经理? 我发现作为Scrum团队领导者最好的做法是在团队面前提出问题,并让团队提出解决scheme。 例如,我们总是在冲刺结束时脱离目标。 所以,在一次冲刺回顾中,我提出了“给我代表我们冲刺队的能力的小时数”的问题。 有三个结果:
- 我们从来没有接近达到我们的标志
- 该数字高于我的估计:-))
- 所有的团队成员都付出了额外的努力
我们正在使用软件工具(在我们的例子中是OnTime)跟踪所有重要的措施,并在每次冲刺之后辩论我们的统计数据。 另外,我们还有一个在每个冲刺中至less改变一件事的做法。
希望这有助于,请随时要求更多
马捷
看看这个由James Shore制作的比较SCRUM和XP的良好实践matrix 。 顺便说一下,如果你想了解XP,我发现他的书很有用。 也有一些文章可以给你一些thouse做法的想法。
SCRUM方法学非常stream行。 软件公司使用SCRUM的最好方法是对每个程序员进行个人层面的SWOT分析。 将程序员与项目开发过程中特定部分的XP结合使用。 然后,通过SWOT分析,使用Sashimi或其他基于SWOT的项目生命周期。 尽pipe这个项目看起来像一大堆垃圾,但对于一个团队来说,没有一个完美的方法论或生命周期的“银弹”。 项目经理必须了解并分配每个成员的angular色,这取决于他/她在项目中将会更有效率。 只是我2美分。
除了敏捷/混乱,我推荐以下(一些想法必须由pipe理层实施…所以祝你好运):
- 在写一行代码之前与他人分析讨论; 这包括引入有关的开发者和非开发者
- 代码评论前检查(这可以在TFS和其他源代码pipe理系统中强制使用)
- 鼓励组织上自由stream动(以身作则); 从来不惩罚某个人分享他们的想法(好,有理由),因为这样做与自由stream动的观点相矛盾,企业更敏捷(而且更有利可图)
- 为可能从外部招聘的开发人员build立一个“高级”或“架构师”的位置,他们是非常能干的,但也不害怕为了良好的软件架构而推迟pipe理,避免“特征”妥协的长期可扩展性等
你是什么意思“好代码”? 为什么好的代码很重要? 您是否在谈论可维护性 – 这是否需要良好的代码或良好的文档? 您是否在谈论可靠性 – 这是否需要良好的代码或良好的testing和logging的要求? 等等
使用常识,build立合理的标准和评估体系,试图忽视某些技术或工具所导致的未经证实的成功主张。