敏捷思维软件架构设计方法论
- 格式:doc
- 大小:466.00 KB
- 文档页数:60
敏捷开发方法论在软件开发领域中,敏捷开发方法论指的是一组涉及软件开发过程的原则和实践,旨在通过迭代、协作和自适应的方式提升项目的交付效率和质量。
敏捷开发方法论已经成为现代软件开发领域的主要方法之一,广泛应用于各种规模的软件项目中。
一、敏捷开发方法论的起源与理论基础敏捷开发方法论起源于1990年代,当时传统的瀑布模型在应对变化需求和不确定性方面存在一定的局限性。
与传统的瀑布模型相比,敏捷开发方法论更加强调团队的协作、快速反馈和灵活性。
敏捷开发方法论的理论基础主要包括以下几个方面:1. 个体和互动胜过过程和工具:敏捷开发方法论强调团队成员之间的密切合作和沟通,鼓励面对面的交流,以促进团队协作和共识的形成。
2. 可以工作的软件胜过详尽的文档:敏捷开发方法论强调软件的可交付价值,通过频繁且可靠地交付功能完备的软件以满足客户需求的变化。
3. 客户合作胜过合同谈判:敏捷开发方法论强调与客户的紧密合作,通过积极地参与需求讨论和产品演示,以便更好地满足客户的期望。
4. 响应变化胜过遵循计划:敏捷开发方法论注重适应性和灵活性,鼓励团队在面临需求变化时能够快速作出相应的调整。
二、敏捷开发方法论的核心原则敏捷开发方法论遵循一些核心原则,这些原则帮助团队在项目开发过程中保持灵活性和高效性,最大限度地提升交付价值。
以下是几个常见的敏捷开发原则:1. 迭代开发:将项目的开发过程分解为多个迭代周期,每个迭代周期都可以交付一部分功能完备的软件。
迭代开发允许团队根据客户的反馈不断调整和改进。
2. 自组织团队:敏捷开发方法论鼓励团队成员自主决策和负责。
团队成员应该具备多种技能,能够共同合作完成项目中的各项任务。
3. 快速反馈:敏捷开发强调及时、频繁地与客户进行沟通和反馈,以便更好地理解需求和调整开发方向。
4. 持续集成:通过持续集成实践,团队可以及时发现和解决软件开发中的问题,确保软件的稳定性和可靠性。
三、敏捷开发方法论的实践工具和技术为了更好地支持敏捷开发方法论的实践,有许多工具和技术可以被团队采用。
软件设计师结构化方法、原型化方法1. 结构化方法是一种系统性的方法论,用于分析、设计和开发软件系统。
2. 结构化方法强调将软件系统分解为小的、可管理的模块,以便于理解和维护。
3. 结构化方法将软件系统的功能和数据定义分离,使得系统更具灵活性和可扩展性。
4. 结构化方法提供了一种规范化的设计和开发过程,使得团队成员可以更加协作和高效地工作。
5. 结构化方法通常包括需求分析、系统设计、模块设计和编码等阶段。
6. 需求分析阶段是结构化方法的起点,用于确定软件系统的功能和性能需求。
7. 系统设计阶段将需求分析结果转化为系统结构和模块之间的关系,通常使用流程图、数据流图和状态转换图等工具进行描述。
8. 模块设计阶段将系统设计结果继续细化,确定模块内部的数据结构、算法和接口规范。
9. 编码阶段是将模块设计结果转化为真正的代码实现,通常使用结构化编程语言和软件开发工具进行。
10. 结构化方法还包括整体测试和维护阶段,用于验证系统的正确性和完整性,并修复已发现的错误。
11. 结构化方法的优势是提供了一种基于模块化的开发框架,使得软件系统更易于理解、修改和扩展。
12. 结构化方法强调抽象和信息隐藏的原则,可以减少复杂系统的复杂性,提高代码的可读性和可维护性。
13. 结构化方法可以提高软件开发的生产效率和质量,降低项目风险和成本。
14. 结构化方法适用于中小型软件开发项目,特别是那些要求较高灵活性和可扩展性的项目。
15. 结构化方法常用的工具包括数据流图工具、流程图工具、结构化编程语言和软件开发环境等。
关于软件设计师原型化方法:16. 原型化方法是一种迭代的、快速开发的方法论,用于验证和优化软件系统的设计和界面。
17. 原型化方法强调通过创建原型来探索用户需求和验证设计思路,以提高系统的用户体验和性能。
18. 原型化方法可以减少需求分歧和风险,加快软件开发的速度和质量。
19. 原型化方法通常包括需求收集、原型设计、验证和修订等阶段。
敏捷软件开发中的Scrum框架详解在软件开发领域中,敏捷开发已经成为了一种趋势,为了让开发过程更加高效,Scrum框架应运而生。
Scrum框架是一种敏捷开发方法,它可以帮助开发团队更好地协作,快速响应客户需求,提高软件开发的质量和效率。
本文将详细介绍Scrum框架的概念、流程和应用。
一、Scrum框架概述Scrum框架是一种基于迭代和增量的敏捷开发方法,它采用迭代、透明、自组织和实时反馈的方式来实现软件开发。
Scrum框架的核心是团队合作和持续交付,每个迭代都需要完成一个潜在可交付的增量。
在Scrum框架中,有三个角色:产品负责人、Scrum Master和开发团队。
产品负责人确定产品需求、优先级和发布计划;Scrum Master负责推动Scrum流程,确保团队遵循Scrum原则;开发团队负责实现需求。
Scrum框架有一些重要的术语和概念,例如冲刺(Sprint)、冲刺计划会议(Sprint Planning Meeting)、每日站会(Daily Scrum)、冲刺评审会议(Sprint Review Meeting)和回顾会议(Retrospective Meeting)等等。
二、Scrum框架流程Scrum框架流程包含以下步骤:1.产品规划:在这个阶段,产品负责人和团队合作定义产品范围、需求和目标,确定一个产品BACKLOG。
2.冲刺计划会议:团队将产品BACKLOG转换为可完成的待办事项,并计划如何实现它们。
冲刺计划会议的结果是一个冲刺目标,该目标概括了需要在此冲刺中完成的所有功能。
3.每日站会:每个工作日的同一时间和地点,开发团队成员在15分钟内互相汇报昨天完成了什么,今天将完成什么,以及他们面临的任何障碍。
4.冲刺周期:每个冲刺都是一个迭代,通常持续2-4周。
在此期间,开发团队将实现待办事项,并与其他团队成员共同努力,以实现冲刺目标。
5.冲刺评审会议:在这个阶段,团队展示他们刚刚完成的工作,并接受利益相关者的反馈和建议。
软件开发中的敏捷开发方法论现代软件开发行业已经从传统的瀑布模型逐渐转向敏捷开发方法论。
它强调快速、高效、反馈式的开发方式,合理地管理团队、时间和资源,更好地满足客户需求。
敏捷开发的基本原则有以下几个方面:一、关注个体与交互,而非流程与工具敏捷开发强调个体之间的交互与沟通,强制建立高度协作的开发环境。
在敏捷开发过程中,开发人员和用户之间建立了一个有效的反馈循环,让开发人员能够通过不断的调整和优化来满足用户的需求。
二、关注可工作的软件,而非详尽的文档敏捷开发注重开发出可工作的软件,而不是花时间写详细的文档。
软件需要预留足够的时间和精力来测试验证,这样才能确保软件的可用性和稳定性,同时也可以保证项目的可靠性和质量。
三、关注客户合作,而非合同谈判敏捷开发方法强调开发人员与客户之间的紧密合作。
这意味着客户在整个开发过程中都需要参与其中,以便确保软件的开发可以更好地满足他们的需求,从而提高软件用户的满意度。
四、关注响应变化,而非遵循计划敏捷开发认为,软件开发是一个不断变化和改进的过程,开发团队应该随时做出及时的调整。
开发人员需要快速反应,不断挑战自己,以及根据需求的变化来优化软件。
同时,软件开发过程中还需要注意不断地完善自己的技能,使团队更加高效地开发软件。
以上是敏捷开发所关注的四个基本原则,深刻地反映了软件开发的实际情况。
这种开发方法不仅可以保证客户的需求得到充分的满足,还可以有效地提高团队的成员间交流和沟通的效率。
当然,敏捷开发在实际的运用过程中也有一些弊端,例如在开发过程中容易出现需求变动、时间压力大、文档不完善等问题。
因此,我们在采用敏捷开发方法时,也需要根据项目的特点和具体情况进行灵活地调整和优化。
最终的目标是在保持敏捷开发的优点的同时,减少其缺点所带来的负面影响。
总的来说,敏捷开发方法论是一种适应变化的、反馈式的、高效的软件开发方式,已经在全球范围内得到了广泛的应用。
它以其高效性、实用性和客户满意度的提高,成为现代软件开发的重要方法之一。
如何进行合理的软件架构设计软件架构设计是开发一个成功的软件系统所必不可少的一项重要工作。
一个合理的软件架构可以使软件系统具备良好的可维护性、可扩展性和可重用性,同时也能提高开发效率和降低开发成本。
下面将从需求分析、模块划分、技术选择和系统交互等方面讨论如何进行合理的软件架构设计。
1. 需求分析- 了解用户需求:与客户或最终用户充分沟通,理解用户需要什么功能和性能,明确软件系统的主要目标和业务流程。
- 制定系统需求规格说明书:明确系统的功能、性能、非功能需求和约束条件,为后续的架构设计提供依据。
- 划分关键需求和非关键需求:将需求进行优先级排序,确保关键需求在软件架构设计中得到合理的考虑。
2. 模块划分- 根据功能进行模块划分:将系统的功能模块分解成若干相对独立的模块,每个模块负责一个明确的功能,便于各个模块的开发和维护。
- 定义模块之间的接口:明确定义模块之间的接口,确保模块之间的交互符合系统需求,同时也方便模块的替换和升级。
- 考虑模块间的数据流和消息传递:合理规划模块间的数据流和消息传递,确保模块之间的通信高效可靠。
3. 技术选择- 根据系统需求选择适当的技术:根据系统的性能要求、数据处理需求等方面,选择适合的编程语言、数据库、网络通信和图形界面等技术。
- 考虑技术的成熟度和可持续性:选择成熟度高、稳定性好的技术,能够降低系统开发和维护的风险。
- 考虑技术的开放性和可扩展性:选择开放源代码、具有良好接口和可扩展性的技术,方便今后系统的升级和功能扩展。
4. 系统交互- 考虑系统的用户界面设计:根据用户需求和交互习惯,设计友好、易用的用户界面,提高用户的操作效率和满意度。
- 考虑系统的分布式部署:如果系统需要在多个节点上运行,需要考虑节点之间的数据同步、一致性和故障恢复等问题,确保系统的可靠性和性能。
- 考虑系统的安全性和权限控制:根据系统的保密性和合规性要求,合理设计系统的安全机制,确保用户数据和系统的安全。
软件架构设计的思路与方法随着信息技术的不断发展,软件的重要性也越来越突出。
然而,在软件的开发中,如果没有一个良好的架构设计,很容易导致软件的混乱和不稳定。
因此,本文将着重讨论软件架构设计的思路和方法,帮助软件开发者更好地设计出高质量的软件架构。
一、软件架构的重要性软件架构是指软件系统各个组成部分之间的关系及其与环境之间的关系。
一个好的软件架构能够保证软件系统的可维护性、可扩展性、可重用性、可靠性和安全性。
与此同时,它还可以提高软件开发的效率和质量。
二、软件架构设计的基本原则1、层次分明原则。
把软件系统分成若干个层次,每个层次都只和其相邻的层次交互,从而降低系统复杂度。
对于大型软件系统而言,只有层次分明,才能使得系统易于维护和更新、扩展。
2、模块化原则。
将整个系统分为许多独立的模块,每个模块只负责完成一个或几个功能,这种分模块的方法可以降低模块之间的耦合度,从而提高了软件的可扩展性和可重用性。
模块化原则的实际应用需要遵循高内聚,低耦合的原则。
3、黑盒原则。
在设计软件架构时,必须将每一个组件都看作一个黑盒,只关心其开放的接口和功能。
这样可以减少组件之间的相互影响,从而提高模块之间的可重用性。
4、软件设计的可扩展性原则。
软件的扩展性需要在设计之初就考虑到。
对于一个高质量的软件,后期容易扩展,不会出现重构的情况。
因此,要在设计之前编写一份详细的需求分析,并考虑设计的易扩展性,避免设计的瓶颈。
5、结构化原则。
一个好的软件架构需要具有良好的结构,设计时应该尽量采用结构化的方法。
同时还需要规划好数据流和控制流,从而降低数据和控制的复杂度。
三、软件架构设计的方法1、一步步分解。
首先将整个系统分解成若干个部分,然后再将这些部分分解成若干个模块,直到每个模块都有一个可行性的实现方案。
2、结构图法。
在软件架构设计过程中,可以使用结构图的方法来帮助分析和设计软件的结构。
这种方法可以让设计者更直观地理解整个软件系统的组成部分和其关系。
什么是软件工程介绍一下常见的软件开发方法论软件工程是关于软件开发与维护的学科领域,旨在通过系统化的方法和工具,提高软件开发的效率和质量。
常见的软件开发方法论有瀑布模型、迭代模型、敏捷开发和DevOps等。
下面将逐一介绍这些方法论的特点和适用场景。
1. 瀑布模型瀑布模型是一种经典的软件开发方法,其开发过程按照线性顺序依次进行,包括需求分析、系统设计、编码、测试和运维等阶段。
每个阶段的工作只会在上一个阶段完成后开始,形成了一条“瀑布式”的流程。
这种方法特点是工作逐一进行,各个阶段之间有清晰的界限,适用于需求变动较少、项目规模较大、稳定性要求高的项目。
2. 迭代模型迭代模型是在瀑布模型的基础上加入了反复迭代的思想。
项目首先会被分解为多个小周期,并在每个周期内进行需求分析、设计、编码、测试等工作。
每个小周期都会产生一个可运行的软件版本,通过用户的反馈来不断修正和完善。
这种方法特点是适应需求变动频繁、项目周期较长的情况。
3. 敏捷开发敏捷开发是一种以迭代和快速响应变化为核心的开发方法。
敏捷开发时会将项目划分为多个短周期,每个周期内团队会优先完成最有价值的任务,并与客户保持紧密的合作和沟通。
敏捷开发方法注重团队的协作和自组织能力,能够适应快速变化的需求和市场环境,特别适用于创新型项目和需要快速上线的产品。
4. DevOpsDevOps是软件开发和运维的一种工作方法和文化。
DevOps强调开发团队和运维团队之间的紧密合作和沟通,通过自动化工具和流程的建立来达到持续交付和持续部署的目标。
DevOps的核心思想是提高软件开发和运维的效率和质量,使软件能够快速、自动地交付和部署到生产环境中。
综上所述,瀑布模型适用于需求稳定、规模较大的项目;迭代模型适用于需求变动频繁、项目周期较长的情况;敏捷开发适用于创新型项目和需要快速上线的产品;DevOps注重开发和运维的协作与自动化,旨在提高交付和部署的效率。
在实际软件开发中,可以根据项目的特点和需求选择合适的方法论,或者结合多种方法论的特点来灵活应用。
掌握并应用敏捷开发方法论敏捷开发是一种快速、灵活适应变化的软件开发方法论,它倡导小团队、迭代开发和持续交付。
通过敏捷开发的实践,开发团队可以更好地应对需求的变化,提高软件交付的质量和效率。
本文将介绍敏捷开发的核心理念,以及如何正确地运用敏捷开发方法论来实现项目的成功。
一、敏捷开发的核心理念敏捷开发有四个核心价值观:个体和互动高于流程和工具、可工作软件高于详尽的文档、客户合作高于合同谈判、响应变化高于遵循计划。
这些价值观的核心体现了团队协作、灵活性和持续反馈的重要性。
1. 个体和互动高于流程和工具敏捷开发注重团队成员之间的交流和协作。
团队成员应该积极参与项目开发过程,相互之间保持密切的沟通。
这种个体和互动的方式比严格的流程和工具更能够推动项目的进展。
2. 可工作软件高于详尽的文档敏捷开发鼓励团队尽早交付可工作的软件,以便客户能够快速获得实际的价值。
与传统开发方法不同,敏捷开发更加注重软件的实际功能,而非过多的文档和规范。
3. 客户合作高于合同谈判在敏捷开发中,客户被视为团队的一员,其参与和反馈对项目的成功至关重要。
与客户紧密合作,能够更好地理解客户的需求,并及时调整开发计划以适应需求的变化。
4. 响应变化高于遵循计划敏捷开发鼓励面对需求的变化,并能迅速做出相应的调整。
团队应该具备灵活性和适应性,能够快速响应变化的需求,从而提供更好的解决方案。
二、敏捷开发的实践方法敏捷开发中有几种常用的实践方法,包括Scrum、极限编程(XP)和看板方法。
这些方法都有自己的特点和适用范围,可以根据项目的需求选择合适的方法。
1. ScrumScrum是一种广泛使用的敏捷开发方法,强调团队协作和迭代开发。
Scrum通过迭代的方式进行开发,每个迭代称为一个Sprint,通常为2~4周。
在每个Sprint中,团队根据产品需求制定目标,并在限定的时间内完成这些目标。
Scrum鼓励团队成员密切合作,及时反馈和调整。
2. 极限编程(XP)极限编程是一种注重代码质量和团队合作的敏捷开发方法。
软件开发方法论软件开发是一个复杂且极具挑战性的过程,需要工程师们运用一系列方法论和技术手段来保证项目的成功。
本文将介绍几种常见且有效的软件开发方法论,包括瀑布模型、敏捷开发、迭代开发和增量开发,并分析其优劣势以及适用场景。
1. 瀑布模型瀑布模型是软件开发中最传统的方法论之一,按照线性顺序依次进行需求分析、设计、编码、测试和部署等阶段。
每个阶段仅在前一个阶段完成后开始,且变更难以引入。
这种顺序性的开发模式适用于需求稳定、规模较小的项目。
其优势在于有明确的阶段划分,有利于开发团队分工合作,同时也能够提前识别和解决问题。
然而,瀑布模型的缺点是变更困难,需求一旦确定难以更改,同时也会造成较长的开发周期和较高的风险。
2. 敏捷开发敏捷开发是一种迭代和增量的开发方法论,注重灵活性和快速响应需求变化。
敏捷开发通过将项目划分为多个迭代周期,每个周期都包含需求分析、设计、编码和测试等步骤,使得开发成果可以迅速交付并得到用户的反馈。
敏捷开发强调团队合作和及时沟通,鼓励开发者与用户紧密合作。
这种方法论适用于需求不确定、项目规模较大的场景。
优势在于可以快速适应需求变化,并且适用于分布式团队协作。
但是,敏捷开发也要求团队成员具备较强的沟通和协作能力,且项目管理相对复杂。
3. 迭代开发迭代开发是将软件开发过程划分为多个迭代周期,每个迭代都包含完整的需求分析、设计、编码和测试等环节,但是每个迭代仅关注部分功能的开发。
迭代开发的优势在于可以更好地控制项目进度和风险,同时也能够及时获得用户反馈进行调整。
这种方法论适用于需求较为确定、项目规模较大的场景。
迭代开发的缺点是需求变更需要在下个迭代中进行,且需要进行一定的规划和管理。
4. 增量开发增量开发是将软件系统划分为多个独立的模块或功能,按照模块的优先级依次进行开发。
每个模块都是一个相对独立的子功能,可以独立开发、测试和部署。
增量开发的优势在于可以快速交付可用功能,降低项目整体风险。
敏捷思维-架构设计中的方法学(1)从方法论看架构设计林星(iamlinx@)2002 年3 月方法论对软件开发而言意味着什么?我们如何看待软件开发中的方法论?方法论能够成为软件开发的救命稻草吗?在读过此文后,这些疑惑就会得到解答。
在第一篇文章中,我们来了解标题中的一些词的含义。
●方法学是什么?●敏捷是什么?●为什么讨论架构?方法论方法论的英文为Methodology,词典中的解释为"A series of related methods or techniques"我们可以把它定义为软件开发(针对软件开发)的一整套方法、过程、规则、实践、技术。
关于方法论的出现的问题,我很赞同Alistair Cockburn的一句话,"方法论源于恐惧。
"出于对项目的超期、成本失控等等因素的恐惧,项目经理们从以前的经验出发,制定出了一些控制、监测项目的方法、技巧。
这就是方法论产生的原因。
在Agile Software Development一书中,作者提到了方法论的十三个要素,基本能够函盖方法论的各个方面:●角色(Roles)●个性(Personality)●技能(Skills)●团队(Teams)●技术(Techniques)●活动(Activities)●过程(Process)●工件(Work products)●里程碑(Milestones)●标准(Standards)●质量(Quality)●工具(Tools)●团队价值(Team Values)它们之间的关系可以用一幅图来表示:图 1. 方法论的十三个要素很多的方法论,都涉及了上面列举的十三要素中的部分要素,因此,我们可以把方法论看作是一个抽象的、无穷的超集,而现实中的方法论都是指超集的一个有限的子集而已。
它们之间的关系就好像有理数和1到100之间的整数的关系一样。
不论是XP,还是UI设计经验之类,都属于方法论的一个子集,只是这两个子集之间有大小的差别而已。
我们还应该看到,讨论一个完备的方法论是没有意义的,因此这种方法论铁定不存在,就好像你视图穷举出所有的有理数一样荒唐。
因此,我们关于一个通用的方法论的说法也是无意义的。
好的方法论,比如说XP、水晶系列,它们都有一个适合的范围,因为它们了解一点,自己并不是一个无所不能的方法论。
在现实中,我们其实不断的在接触方法论。
比如说,为了控制项目的进度,项目经理要求所有的开发人员每周递交一份详细的进度报告,这就是一种方法、一种技巧。
如果把开发过程中的这些技巧系统的组织起来,就能够成为一种方法论。
你可能会说,那一种方法论的产生也太容易了吧。
不,这样产生的方法论并没有太大的实用价值,没有实用价值的方法论根本就没有存在的必要。
因此,一个成功的方法论是要能够为多个的项目所接受,并且能够成功实现软件的交付的方法论。
我和我的同事在实践中做了一些试验,希望能够把一些好的方法论应用于开发团队。
试验的结果很无奈,方法论实施的效果并不理想,一开始我们认为是方法本身的原因,到后来,我们发现事情并不是这么简单。
在试验的过程中,开发人员一致认同方法论的优势所在,但是在实施过程中,鲜有坚持的下来的。
在Agile Software Development中,我发现作者遇到了和我们一样的问题。
Alistair Cockburn在和大量的项目团队的访谈之后,写成了Agile Software Development一书。
在访谈之前,他笃定自己将会发现高度精确的过程控制是成功的关键所在,结果他发现事实并非如此,他把他的发现归结为7条定律。
而我在实际中的发现也包含在这七条定律中,总结起来就只有两点:沟通和反馈。
只要能够保证良好的沟通和即时的反馈,那么开发团队即使并没有采用先进的方法论,一样可以成功。
相反,那些"高质量"的团队却往往由于缺乏这两个因素而导致失败(我们这里指的失败是用户拒绝使用最终的软件)。
最有效,而成本也最低的沟通方法就是面对面(face to face)的沟通,而随着项目团队的变大,或是另外一些影响因素的加入(比如地理位置的隔绝),面对面的沟通越来越难实现,这导致沟通的的成本逐渐加大,质量也慢慢下降。
但这并不是说非面对面的沟通不可,重要的是我们需要知道不同的沟通方式的成本和质量并不相同。
XP方法尤为强调面对面的沟通,通过现场客户、站立会议、结对编程等方式来保证沟通的有效。
在我的经验中,一个开发团队其实是需要多种沟通方式的结合的。
完全的面对面的沟通对某些团队来说是很难实现的,那么问题的关键就在于你如何应用沟通的方式来达到你希望的效果。
在前不久结束的欧莱雅创业计划大赛上,有一支团队特别引人注目,他们彼此间素未谋面,仅仅凭借Internet和电话完成了高效的合作。
他们虽然没有使用面对面的沟通方式,但是仍然达成了既定的目标。
软件开发也是一样的,面对面的沟通是非常有必要的,但其它的沟通方式也是需要的。
再看反馈,不论是控制进度,还是保证客户的满意度,这些活动都需要管理成本。
软件开发中的管理成本的一个通性就是伴随有中间产出物(intermediate delivery)。
比如说我们的需求规约、分析文档、设计文档、测试计划,这些都属于中间产出物。
中间产出物的增加将会带来效率下降的问题,因为开发人员的时间都花在了完成中间产出物的工作上,花在给软件新功能上的时间就减少了。
而中间产出物的主要目的是两个,一个是为了保证软件如客户所愿,例如需求规约;另一个是为了作为团队中的其他成员工作的输入,例如开发计划、测试计划等。
因此,我们也可以针对这两点来商讨对策,一种是采用迭代的思想,提高软件发布的频率,以保证客户的需求被确实的满足,另一种就是缩小团队的沟通范围,保证成员能够从其他人那里得到新的思路,而不是撰写规范的内部文档(内部文档指那些仅为内部开发人员之间的沟通所需要的文档)。
因此,一个软件项目的成功和你采用的开发方法论并没有直接的关系。
重量我们根据把拥有大量artifact(RUP官方翻译为工件,意思是软件开发过程中的中间产物,如需求规约、设计模型等)和复杂控制的软件开发方法称为重型(Heavy Weight)方法,相对的,我们称artifact较少的方法为轻型(Light Weight)方法。
在传统的观念中,我们认为重型方法要比轻型安全许多。
因为我们之所以想出重型方法,就是由于在中大型的项目中,项目经理往往远离代码,他无法有效的了解目前的工程的进度、质量、成本等因素。
为了克服未知的恐惧感,项目经理制定了大量的中间管理方法,希望能够控制整个项目,最典型的莫过于要求开发人员频繁的递交各种表示项目目前状态的报告。
在Planning XP一书中有一段讨论轻重型方法论的精辟论述,它把重型方法论归结为一种防御性的姿态(defensive posture),而把轻型方法论归结为一种渴望成功(Plan to win)的心态。
如果你是采用了防御性姿态,那么你的工作就集中在防止和跟踪错误上,大量的工作流程的制定,是为了保证项目不犯错误,而不是项目成功。
而这种方法也不可谓不好,但前提是如果整个团队能够满足前面所提到的两个条件的话,项目也肯定会成功,但是重型方法论的一个弊端就在于,大家都在防止错误,都在惧怕错误,因此人和人之间的关系是很微妙的,要达到充分的沟通也是很难的。
最终,连对人的评价也变成是以避免错误的多寡作为考评的依据,而不是成就。
我们在做试验的时候,一位项目经理开玩笑说,"方法论源自项目经理的恐惧,这没错。
但最糟糕的是整个团队只有项目经理一个人恐惧,如果能够做到人人的恐惧,那大家也就没有什么好恐惧的了。
"这句话提醒了我们,如果一个团队的精神就是力求成功,那么这支团队的心态就和其它的团队不同了,尤其是对待错误的心态上。
根本就没有必要花费大量的精力来预防错误,错误犯了就犯了,即时改正就可以了。
这其实就是渴望成功的心态。
方法论的艺术管理,被称为科学和艺术的融合体,而管理的艺术性部分很大程度的体现为人的管理上。
我说,方法学,一样是科学和艺术的融合体。
这是有依据的,其实方法论和管理学是近亲关系,管理学中有一门分支是项目管理,而在软件组织中,项目管理是非常重要的,方法学就是一种针对软件开发的一种特定的项目管理(或是项目管理的一个子集)。
重型方法最大的一个问题就在于他不清楚或忽略了艺术这个层次,忽视了人的因素,把人做为一个计量单位,一种资源,一种线性元素。
而人的要素在软件开发中是非常重要的,软件开发实际上是一种知识、智力的转移过程,最终形成的产品是一种知识产品,它的成本取决于开发者的知识价值,因此,人是最重要的因素。
而人这个要素是很难衡量的,每个人都有不同的个性、想法、经验、经历,这么多复杂的因素加在一起,就导致了人的不可预见性。
因此,我们强调管人的艺术。
最简单的例子是,在重型方法中,我们的基本假设是对人的不信任。
项目经理要控制项目。
但不信任就会产生很多的问题,比如士气不高,计划赶不上变化,创新能力低下,跳槽率升高等等。
人都是希望被尊重的,技术人员更看重这一点,而很多公司也口口声声说自己多么多么以人为本,可是采用的却是以不信任人为前提的开发方法,言行不一。
我们说敏捷方法的出发点是相互信任,做到这一点是很难的,但是一旦做到了,那这个团队就是非常具有竞争力的。
因此,这就产生了一个问题,在没有做到完全的相互信任之前,我们到底相不相信他人呢,这就是我提到的艺术性的问题,什么时候你要相信人?什么时候你不相信人,这些都是需要权衡的问题,也都是表现你艺术性的问题。
敏捷敏捷代表着有效和灵活。
我们称那些轻型的、有效的方法为敏捷方法。
在重型方法中,我们在一些不必要、重复的中间环节上浪费了太多的精力,而敏捷则避免了这种浪费。
我们的文章将会重点的讨论敏捷(Agile)方法论的思想,敏捷这个名字的前身就是轻型。
目前已经有了一个敏捷联盟,他们制定了敏捷宣言:●Individuals and interactions over processes and tools.●Working software over comprehensive documentation.●Customer collaboration over contract negotiation.●Responding to change over following a plan.而我对敏捷的理解包括了几个方面:●较低的管理成本和高质量的产出。
软件开发存在两个极端:一个是没有任何的管理成本,所有的工作都是为了软件的产出,但是这种方式却往往导致软件开发过程的混沌,产品的低质量,团队士气的低落。
另一个是大量管理活动的加入,评审、变更管理,缺陷跟踪,虽然管理活动的加入能够在一定程度上提高开发过程的有序性,但是成本却因此提高,更糟糕的是,很容易导致团队的低效率,降低创新能力。