30、软件开发方法:Scrum、RAD与传统方法的深度剖析

软件开发方法:Scrum、RAD与传统方法的深度剖析

1. Scrum方法核心要素

1.1 版本发布(Release)

版本发布是一组商定好的冲刺(Sprints),通常是多个为期1个月的迭代。理想情况下,3个月是一个不错的发布周期,但也可以更长,比如6个月或9个月。版本发布对任务库存进行了限制,也控制了需求方面的投入。较短的发布周期能更频繁地向付费客户交付成果。Scrum通过冲刺和版本发布,体现了快速应用开发(RAD)的基本原理。它通过固定交付日期(最确定的因素)和调整范围(最不确定的因素),将不确定性的影响降到最低。Scrum限制系统中的库存,并尽可能频繁地将库存作为产出交付给客户,从而产生频繁、切实且可用的成果。

1.2 冲刺目标承诺(The Sprint Goal Commitment)

在每个冲刺开始时,冲刺团队会从版本待办事项列表中分析并确定冲刺待办事项列表。这是一个团队共识决策,因为团队要做出团队承诺。这一点非常重要,它涉及到软件开发中的心理因素。由于整个团队都对冲刺待办事项列表做出了承诺,他们会对该承诺产生共同的责任感。这种心理效应会促使团队共同努力以实现承诺。如果团队无法完成承诺,会损害团队的自豪感。如果团队成员接受了超出30天舒适交付范围的需求,他们会觉得有义务更加努力地工作以完成承诺。冲刺目标承诺通过鼓励开发者和测试人员尽一切可能来实现承诺,将他们作为能力受限的资源进行充分利用和提升。

1.3 每日Scrum会议(The Scrum Meeting)

每日Scrum会议是另一个旨在最大限度利用开发者这一能力受限资源的工具。Scrum可能是首个有文档记录的采用每日会议的敏捷方法。在Scrum会议上,开发者可以汇报待办任务的进展情况,请求更多任务,或者寻求解决棘手问题的帮助。每日会议通过让开发者保持忙碌并推动开发工作向前推进,最大限度地利用了开发者这一资源。此外,开发者可以在会议上汇报工作完成情况并获得同行的即时认可。这种认可会让开发者感到安心,并对工作产生良好的感觉。快乐的开发者往往更有生产力。每日Scrum会议还会对团队成员产生同伴压力,促使他们各尽其责。他们都被期望通过确保团队实现冲刺目标承诺来履行职责并维护团队的自豪感。

1.4 团队规模(Team Size)

Scrum建议每个冲刺采用小团队,以减少沟通开销并便于每天进行有效的Scrum会议。超过10人的团队会使会议变得困难,因此建议团队规模为7人。这样可以实现团队成员之间快速、有效的口头沟通。7人团队是最优选择,因为它在最大限度减少沟通开销的同时,能实现最大的工作动力。用约束理论(TOC)的术语来说,7人团队有助于充分利用开发者这一能力受限的资源。

1.5 团队组成(Team Composition)

Scrum还建议每个冲刺团队至少有一名经验丰富的工程师,能够指导团队其他成员。这与Harlan Mills的外科团队模型中的外科医生角色相呼应。导师可以帮助其他团队成员。如果团队成员在每日Scrum会议上报告需要帮助的问题或挑战,导师可以主动提供协助。增加一名经验丰富的导师有助于提高开发者这一能力受限资源的利用率,通过快速解决问题避免停工时间。

1.6 工作环境(Working Environment)

Scrum认为开发者应该拥有完成工作所需的所有工作空间和工具,因为到目前为止,软件开发中最大的开销是员工工资的运营费用(OE)。如果团队成员需要作战室、会议室或安静的阅读室,他们应该能够拥有。如果他们想安排自己的办公隔间或办公桌,以便整个冲刺团队坐在一起、两两配对或分成两个小组,也应该被允许。团队应该能够自行组织其工作环境。
如果团队在进行一些设施变更时遇到阻力,这很可能是成本会计分析显示每个开发者成本增加的结果。经理可以使用产出会计措施进行反驳,认为办公空间和其他开销是固定成本而非边际成本。Scrum认识到处于工作核心的开发者最清楚如何优化他们的时间。允许开发者自行安排工作环境并给予他们足够的空间,将充分利用开发者这一能力受限的资源。DeMarco和Lister建议每位开发者拥有100平方英尺的空间是最佳的。不提供这样的空间可能会降低运营费用,但会以降低产出为代价。而且,不需要太多的产出降低就可以完全抵消提供较小办公空间所节省的成本 —— 假设确实有成本节省,即该空间可以用于其他用途或转租给其他租户。
提供优质的工具也是为了最大限度地利用开发者这一能力受限的资源。如果开发者需要花费7000美元购买最先进的集成开发环境,那么每个开发者的产出只需增加7000美元就能收回投资。投资更好的工具通过增加任何给定开发者的产出潜力,提升了开发者作为能力受限资源的价值。如果Scrum主管监控库存水平和前置时间,并计算产品待办事项列表中每个项目的成本,他就会知道需要从产品待办事项列表中完成多少额外项目才能收回工具投资。因此,可以试用一种工具,并在一个冲刺甚至第二个冲刺期间监控其对生产率(R)的影响。通过60天的数据,应该能够确定该工具是否提高了产出以及提高了多少。
有人认为,为关键约束资源(CCR)中的工作人员购买最新工具来提升约束可能会导致异常行为 —— 毕竟人性如此。想要新设备的团队可能会伪装成约束因素,以证明这笔开支的合理性。应对这种情况的一种方法是进行公开的运营审查。每个人都应该明白为什么要进行提升约束的投资。此外,任何试图人为降低生产率以表现为约束因素的人,都需要在运营审查中向整个企业解释生产率下降的原因。正如前面所讨论的,开放的精神对于维护健康的敏捷开发系统至关重要。

1.7 冲刺评审(The Sprint Review)

冲刺评审在每个30天的冲刺结束时进行,它有几个目的。它可以向客户展示功能,也可能进行交付。如果只是单纯的展示,有助于建立客户信心;如果是交付,则释放库存并为系统产生产出。它还可以兼作运营审查。运营审查只需要1到2个小时。冲刺评审让团队能够从过去30天中吸取经验教训,并用于改进接下来的30天。这是一个正式的活动,鼓励持续改进的环境。团队成员分析已完成的工作,寻找改进的机会。他们识别约束因素,并讨论和商定如何最大限度地利用约束因素,或通过改进技术或新工具来提升约束因素。冲刺评审将改进机会正式化,并鼓励团队不断寻求提高生产率的方法。此外,冲刺评审还让开发团队能够为自己的成就感到自豪。团队成员有反思的时间,回顾并欣赏他们的劳动成果,这对团队士气很重要。因为快乐的开发者更有生产力,所以冲刺评审有助于充分利用开发者这一能力受限的资源。

1.8 工程实践(Engineering Practices)

Scrum没有定义任何工程实践,倡导者认为这是它的一大优势。它明确将Scrum归类为一种管理技术,而非工程技术。这也大大降低了入门门槛。Scrum基于这样一种理念:仅仅通过重新组织工作人员,而不干扰他们的工作技术,就可以显著提高生产率。这种观点与De Luca的第一定律“80%是心理因素,20%是技术因素”一致。Scrum专注于组织人员之间的互动方式,而不试图规定他们如何实现结果。在这方面,Scrum是自我组织过程控制的典范。

下面用表格总结Scrum方法的关键要素:
|要素|描述|
| ---- | ---- |
|版本发布|一组商定的冲刺,固定交付日期,调整范围,降低不确定性|
|冲刺目标承诺|团队共识决策,产生共同责任感,鼓励努力实现承诺|
|每日Scrum会议|汇报进展,请求任务或帮助,获得认可,产生同伴压力|
|团队规模|建议7人,减少沟通开销,实现有效沟通|
|团队组成|至少一名经验丰富的导师,帮助解决问题|
|工作环境|提供空间和工具,允许自行组织,提升开发者价值|
|冲刺评审|展示功能,交付成果,吸取经验,提高士气|
|工程实践|不定义工程实践,专注人员组织|

mermaid格式流程图展示Scrum流程:

graph LR
    A[版本发布规划] --> B[冲刺目标承诺]
    B --> C[每日Scrum会议]
    C --> D[冲刺评审]
    D --> A
    E[团队规模与组成] --> B
    F[工作环境] --> C

2. RAD方法解析

2.1 RAD方法的原则(Principles of RAD)

RAD过程基于这样一个原则:在日历上设定一个日期,并且该日期不会改变。然后,开发工作会根据可用的时间进行调整。交付日期通常按固定间隔设定,如每月、每6周、每季度等。这些间隔通常较短,否则就不能称之为“快速”应用开发。RAD的基础可以用约束理论(TOC)来解释。RAD将交付日期或项目时间表设定为系统约束。以交付日期为约束,其他一切都要服从于它。因此,系统中的其他主要约束必须得到保护和利用,以满足交付日期的约束。
RAD方法正确地将范围确定为最不确定和不可预测的约束。因此,选择保护可预测的进度约束,并将其他一切,包括范围,都服从于这一决策。RAD方法将范围限制在可用时间内可交付的范围内,即使其服从于交付日期。明智的RAD项目经理会对范围进行缓冲,留出一些余地以应对可能危及交付日期的不确定性。开发资源也必须服从于交付日期和商定的范围。因此,RAD方法要求项目配备足够的人员以满足交付日期和商定的范围。否则,范围必须控制在交付日期和可用人力的范围内。

2.2 库存上限(Inventory Cap)

通过为开发周期设定稳定的节奏,RAD方法有效地限制了系统在任何给定时间的库存。这使得成本能够得到仔细控制和规划。限制库存还可以固定人力水平,从而减少或消除对临时人员扩充的依赖。限制库存可以严格控制运营费用(OE),并为准确计算软件工程组织的投资回报率(ROI)提供了更好的机会。

2.3 前置时间(Lead Time)

设定稳定的发布节奏的第二个好处是绝对确定了开发的前置时间。在RAD方法中,前置时间被设定为约束,不能改变。其他一切都要服从于它。通过固定前置时间,开发组织能够做出可以兑现的承诺,并为市场提供可预测性。将前置时间设定为短而快速的周期可能会减少浪费,因为它可以减少客户改变主意或市场发生变化的机会,从而减少变更请求。

2.4 运营费用(Operating Expense)

由于库存上限和固定的前置时间(LT),RAD组织可以严格控制运营费用。然而,运营费用面临估算过程中的不确定性以及未能正确分析所提议功能的复杂性或风险的风险。这些失败可能导致需要增加人员以履行承诺,从而可能导致运营费用暂时增加。

2.5 RAD方法的局限性(Limits of RAD Methods)

RAD认识到软件工程中的基本约束,并选择将它们全部服从于进度约束。但RAD很少涉及软件开发作为一种人类活动的方面。它没有认识到80%的问题是心理因素而非技术因素。
RAD方法确实提供了敏捷性。它们能够实现快速交付,并通过这些快速周期提供接受和应对需求或项目范围变化的能力。RAD方法具有敏捷属性,但并不完全符合敏捷宣言中定义的敏捷方法。
RAD可以被视为敏捷方法的先驱。它确实能够更快、更好、更便宜地交付软件。然而,它还不够完善。敏捷方法吸取了RAD的所有经验教训,并将其进一步发展。通过认识到开发者的人性以及软件开发中的人为因素,敏捷方法试图在软件开发过程中充分利用和提升人类的价值。因此,敏捷方法应该比单纯的RAD方法产生更高的产出。作者的经验表明,敏捷方法(如FDD)比传统的RAD系统能够产生显著更高的生产率。RAD与瀑布方法相比有显著改进。全球采用瀑布方法构建大型系统的组织在转向RAD时注意到了巨大的改进。转向RAD的驱动因素是1995年左右互联网和万维网的出现。突然,高管们开始谈论按“互联网时间”运作,即每个季度就像以前的一年。互联网时间意味着速度提高了四倍。RAD似乎提供了在互联网时间下运作所需的四倍增长。用TOC术语来说,RAD似乎比瀑布方法产生了四倍的产出。实际上,它所做的是更频繁地将库存释放到市场,从而为客户创造了更大的价值。

下面用表格对比RAD方法的优势与局限性:
|方面|优势|局限性|
| ---- | ---- | ---- |
|原则|固定交付日期,调整范围,符合TOC原理|忽略软件开发的心理因素|
|库存上限|控制成本,固定人力,便于计算ROI|/|
|前置时间|提供可预测性,减少浪费|/|
|运营费用|可严格控制|受估算和风险分析影响|
|整体|提供敏捷性,快速交付|不是真正的敏捷方法|

mermaid格式流程图展示RAD方法流程:

graph LR
    A[设定交付日期] --> B[确定范围与资源]
    B --> C[开发周期]
    C --> D[交付成果]
    D --> A
    E[库存上限] --> C
    F[固定前置时间] --> C

3. 不同方法的比较与思考

3.1 传统指标与敏捷原则的冲突(Traditional Metrics Versus Agile Principles)

Capers Jones在超过15年的时间里收集了7000多个IT项目的数据。他通过对这些数据的分析得出了几个结论,表明哪些因素对提高生产率很重要:代码重用是提高功能点交付率的最佳方法;进行同行评审的团队远远优于不进行同行评审的团队;拥有专业人员的团队优于拥有通才的团队;拥有专业维护和性能调优功能的团队优于使用主线开发人员进行此任务的团队。然而,这些结论与大多数敏捷方法的理念相冲突。极限编程、测试驱动开发和Scrum都倡导相反的做法,尽管功能驱动开发(FDD)通过架构和代码审查鼓励代码重用以提高质量。
Capers Jones的结果不容否认或忽视。有如此大量的数据支持,这些结论应该是正确的。然而,这些证据表明,使用具有高质量专业人员的传统软件方法应该表现最佳。这里存在一个根本冲突,而约束理论认为这种冲突是不可能的。其中一组数据必须基于错误的假设。除非存在错误假设,否则这两个相互冲突的观点不可能实现双赢。在思维过程的工具箱中,TOC提供了一种称为“蒸发云图”的机制来帮助解决这种冲突,但深入解释TOC思维过程和蒸发云图超出了本文的范围。

3.2 专业人员与通才(Specialists Versus Generalists)

从Capers Jones的数据来看,拥有专业人员的团队表现更优。但敏捷方法在一定程度上更倾向于通才。这就引发了一个问题:在不同的项目场景中,应该如何选择团队成员的类型?专业人员在特定领域具有深入的知识和技能,能够高效地解决专业问题。而通才则具有更广泛的知识范围,能够在不同的任务之间灵活切换。在一些复杂的、需要深入技术知识的项目中,专业人员可能更合适;而在一些需要快速响应变化、跨领域协作的项目中,通才可能更有优势。

3.3 增加人员与项目进度(Adding More People Makes Projects Later)

在软件开发项目中,有一种观点认为增加人员会使项目进度延迟。这是因为新成员需要时间来融入团队、了解项目情况,并且团队成员之间的沟通和协调成本会随着人员数量的增加而增加。在选择管理方法和团队配置时,需要谨慎考虑是否通过增加人员来加快项目进度。应该综合考虑项目的规模、复杂度、时间要求等因素,合理安排团队规模和人员结构。

不同方法在不同的场景下有各自的优势和适用范围。没有一种管理方法可以适用于所有情况。在实际应用中,需要根据项目的具体特点和需求,综合考虑各种因素,选择最合适的方法。同时,也需要不断探索和尝试,以找到最适合团队和项目的开发方式。未来,随着软件开发行业的不断发展,各种方法也可能会相互融合和改进,以更好地满足日益复杂的项目需求。

4. 软件开发方法选择的综合考量

4.1 项目特点与方法适配

不同的软件开发项目具有不同的特点,如规模大小、复杂度、时间要求、需求稳定性等,这些特点决定了哪种开发方法更为合适。以下是一个根据项目特点选择方法的参考表格:
|项目特点|适用方法|原因|
| ---- | ---- | ---- |
|规模小、需求变化快|Scrum、敏捷方法|能够快速响应变化,灵活调整范围|
|规模大、需求相对稳定|传统方法结合RAD|可以进行更全面的规划和控制,RAD可提高交付速度|
|对质量和性能要求极高|传统方法+专业人员|专业人员和严格的流程有助于保证质量|
|需要快速交付初始版本|RAD、敏捷方法|能够在短时间内产出可用成果|

4.2 团队能力与方法契合

团队的能力和经验也是选择开发方法的重要因素。如果团队成员具有较高的技术水平和丰富的经验,可能更适合采用敏捷方法,因为敏捷方法强调团队的自主性和自我组织能力。而如果团队成员经验不足,传统方法可能更能提供明确的指导和规范。例如:
- 经验丰富、协作良好的团队:可以选择Scrum或其他敏捷方法,充分发挥团队的创造力和灵活性。
- 新组建或经验不足的团队:可以从传统方法入手,逐步积累经验,再过渡到敏捷方法。

4.3 成本效益分析

在选择开发方法时,还需要进行成本效益分析。不同的方法在人力成本、工具成本、时间成本等方面可能存在差异。例如:
- Scrum方法:可能需要投入一定的时间进行团队建设和沟通,但能够提高团队的工作效率和产出质量,从长期来看可能具有更好的成本效益。
- RAD方法:通过固定交付日期和范围,能够有效控制成本,但可能需要投入更多的资源来应对可能的需求变化。
- 传统方法:可能需要更多的前期规划和文档工作,人力成本相对较高,但在大型项目中能够保证项目的稳定性和可控性。

4.4 市场需求与竞争压力

市场需求和竞争压力也是影响开发方法选择的重要因素。在快速变化的市场环境中,企业需要能够快速响应市场需求,推出新产品和服务。因此,敏捷方法和RAD方法可能更适合这种情况。而在一些对质量和稳定性要求较高的市场领域,传统方法可能更受青睐。

mermaid格式流程图展示软件开发方法选择的综合考量流程:

graph LR
    A[项目特点] --> D[选择方法]
    B[团队能力] --> D
    C[成本效益分析] --> D
    E[市场需求与竞争压力] --> D

5. 软件开发方法的融合与发展趋势

5.1 方法融合的必要性

随着软件开发项目的日益复杂,单一的开发方法可能无法满足项目的全部需求。因此,将不同的开发方法进行融合成为一种趋势。例如,将传统方法的严谨性和敏捷方法的灵活性相结合,可以在保证项目质量的同时,提高项目的响应速度和适应性。

5.2 融合案例分析

  • Scrum与传统方法的融合:在一些大型项目中,可以采用传统方法进行前期的规划和设计,然后使用Scrum方法进行迭代开发和交付。这样可以充分发挥传统方法的规划优势和Scrum方法的敏捷性。
  • RAD与敏捷方法的融合:RAD方法的快速交付和敏捷方法的适应性相结合,可以更好地满足市场的快速变化和客户的需求。例如,在项目初期使用RAD方法确定基本框架和功能,然后在后续的开发中采用敏捷方法进行持续改进。

5.3 未来发展趋势

未来,软件开发方法可能会朝着更加智能化、自动化和个性化的方向发展。例如,利用人工智能和机器学习技术来优化开发流程、提高代码质量;根据项目的具体需求和团队的特点,定制个性化的开发方法。同时,软件开发方法也将更加注重团队的协作和沟通,以及对开发者人性的关怀。

6. 总结与建议

6.1 总结

本文深入剖析了Scrum、RAD和传统软件开发方法的核心要素、优势和局限性。Scrum方法通过冲刺、每日会议等机制,充分利用开发者资源,提高团队的工作效率和士气;RAD方法通过固定交付日期和范围,实现快速交付和成本控制;传统方法则强调严谨的规划和流程,保证项目的质量和稳定性。不同的方法在不同的场景下有各自的优势,没有一种方法可以适用于所有情况。

6.2 建议

  • 对于软件开发团队:在选择开发方法时,应根据项目的特点、团队的能力、成本效益和市场需求等因素进行综合考虑。可以尝试将不同的方法进行融合,以发挥各种方法的优势。同时,要注重团队的建设和培养,提高团队的协作能力和技术水平。
  • 对于软件企业:应鼓励创新和探索,不断尝试新的开发方法和技术。建立良好的项目管理体系,根据项目的实际情况选择合适的开发方法。加强对开发者的关怀和支持,提供良好的工作环境和工具,提高开发者的工作满意度和生产力。

通过深入了解和合理运用不同的软件开发方法,软件开发团队和企业可以更好地应对各种挑战,提高软件开发的质量和效率,实现可持续发展。

列表总结本文要点:
1. 详细介绍了Scrum方法的核心要素,包括版本发布、冲刺目标承诺、每日Scrum会议等。
2. 解析了RAD方法的原则、库存上限、前置时间等特点,以及其局限性。
3. 探讨了传统指标与敏捷原则的冲突,以及专业人员与通才、增加人员与项目进度的关系。
4. 提出了软件开发方法选择的综合考量因素,包括项目特点、团队能力、成本效益和市场需求。
5. 分析了软件开发方法的融合与发展趋势,以及未来的发展方向。
6. 给出了软件开发团队和企业在选择开发方法时的建议。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值