敏捷软件开发 Agile software Development
敏捷开发是一种软件开发方法,基于迭代和增量开发,通过自组织,跨团队,沟通协作完成开发工作。
敏捷宣言的诞生:
2001年2月11日到13日,17位软件开发领域的领军人物聚集在美国犹他州的滑雪胜地雪鸟(Snowbird)雪场。经过两天的讨论,“敏捷”(Agile)这个词为全体聚会者所接受,用以概括一套全新的软件开发价值观。这套价值观,通过一份简明扼要的《敏捷宣言》,传递给世界,宣告了敏捷开发运动的开始。
我们一直在实践中探寻更好的软件开发方法,身体力行的同时也帮助他人。由此我们建立了如下价值观:
个体和互动 高于 流程和工具
工作的软件 高于 详尽的文档
客户合作 高于 合同谈判
响应变化 高于 遵循计划
也就是说,尽管右项有其价值,我们更重视左项的价值。
We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
That is, while there is value in the items on the right, we value the items on the left more.
敏捷开发的12条准则:
准则1:Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
我们的最高目标是,通过尽早和持续地交付有价值的软件来满足客户。
准则2:Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.
欢迎对需求提出变更——即使是在项目开发后期。要善于利用需求变更,帮助客户获得竞争优势。
准则3:Deliver working software frequently, from a couple of weeks to a couple of mouths, with a preference for the shorter timescale.
要不断交付可用的软件,周期从几周到几个月不等,且越短越好。
准则4:Business people and developers must work together daily throughout the project.
项目过程中,业务人员与开发人员必须在一起工作。
准则5:Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
要善于激励项目人员,给他们以所需要的环境和支持,并相信他们能够完成任务。
准则6:The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
无论是团队内还是团队间,最有效的沟通方法是面对面的交谈。
准则7:Working software is the primary measure of progress.
可用的软件是衡量进度的主要指标。
准则8:Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
敏捷过程提倡可持续的开发。项目方、开发人员和用户应该能够保持恒久稳定的进展速度。
准则9:Continuous attention to technical excellence and good design enhances agility.
对技术的精益求精以及对设计的不断完善将提升敏捷性。
准则10:Simplicity -- the art of maximizing the amount of work not done -- is essential.
要做到简洁,即尽最大可能减少不必要的工作。这是一门艺术。
准则11:The best architectures, requirements, and designs emerge from self-organizing teams.
最佳的架构、需求和设计出自于自组织的团队。
准则12:At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
团队要定期反省如何能够做到更有效,并相应地调整团队的行为。
敏捷方法 Agile
Scrum:
流模式(Flow)——两个程序员共同从事一个有趣又有挑战性的问题。
指导模式(Coaching)——老练的程序员在解决问题方面有经验和知识,可以与其他不能有效地独自解决问题的程序员分享。
看板Kanban - 工作可视化,专注于当下
非常软的软广告:国产开源敏捷工具 - fKanban
ToDo, OnGoing, Done, Impediment
敏捷估算扑克 - 合理的任务分解
http://community.techexcel.com.cn/010DevSuite/070Agile_Scrum/010Posts/010Agile_Poker
http://www.csaipm.com/cost/201005101141211188.htm
敏捷方法中的估算应该是由团队成员共同进行,而不是由项目经理“闭门造车”式地得出。这样做的原因之一是因为开发团队是由不同经验的同事组成,对于同一个问题,经验不同的人往往会给出不一样的解决方案。如果可以将所有人的能力集中到一起,那么最后对问题的求解也就八九不离十了。
持续集成(Continuous Integration)- 团队协作的基础
http://blog.csdn.net/tony1130/article/details/1876819
http://www.hansky.com.cn/cn/dokuwiki/doku.php/corp/case/digitalchina
什么是持续集成(Continuous Integration)?
这个名词已经在软件开发领域持续了N年,一个比较简单的定义如下:
持续集成(CI)是一种实践,可以让团队在持续发布的基础上收到反馈并进行改进,不必等到开发周期后期才寻找和修复缺陷。
单元测试Unit Test - 重构的保障
http://www.hudong.com/wiki/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95
单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
敏捷测试 Agile Test
http://subject.csdn.net/agile-testing.htm
所谓敏捷测试,就是指测试遵循敏捷宣言进行,把开发作为顾客看待。与敏捷宣言中的“个体和交互比过程和工具更有价值”一样强调人的作用。
代码重构(Reconstruction)
Duplicated Code(重复代码)
Long Method(过长函数)
Large Class(过大的类)
Long Parameter List(过长参数列)
Divergent Change(发散式变化)
Shotgun Surgery(霰弹式修改)
Feature Envy(依恋情结)
Data Clumps(数据泥团)
Primitive Obsession(基本类型偏执)
Switch Statements(switch惊悚现身)
Parallel InheritanceHierarchies(平行继承体系)
Lazy Class(冗赘类)
Speculative Generality(夸夸其谈未来性)
Temporary Field(令人迷惑的暂时字段)
Message Chains(过度耦合的消息链)
Middle Man(中间人)
Inappropriate Intimacy(狎昵关系)
Alternative Classes with Different Interfaces(异曲同工的类)
Incomplete Library Class(不完美的库类)
Data Class(纯稚的数据类)
Refused Bequest(被拒绝的遗赠)
Comments(过多的注释)
Extract Method(提炼函数)
Inline Method(内联函数)
Inline Temp(内联临时变量)
Replace Temp with Query(以查询取代临时变量)
Introduce Explaining Variable(引入解释性变量)
Split Temporary Variable(分解临时变量)
Remove Assignments to Parameters(移除对参数的赋值)
Replace Method with Method Object(以函数对象取代函数)
Substitute Algorithm(替换算法)
Move Method(搬移函数)
Move Field(搬移字段)
Extract Class(提炼类)
Inline Class(将类内联化)
Hide Delegate(隐藏"委托关系")
Remove Middle Man(移除中间人)
Introduce Foreign Method(引入外加函数)
Introduce Local Extension(引入本地扩展)
Self Encapsulate Field(自封装字段)
Replace Data Value with Object(以对象取代数据值)
Change Value to Reference(将值对象改为引用对象)
Change Reference to Value(将引用对象改为值对象)
Replace Array with Object(以对象取代数组)
Duplicate Observed Data(复制"被监视数据")
Change Unidirectional Association to Bidirectional(将单向关联改为双向关联)
Change Bidirectional Association to Unidirectional(将双向关联改为单向关联)
Replace Magic Number with Symbolic Constant(以字面常量取代魔法数)
Encapsulate Field(封装字段)
Encapsulate Collection(封装集合)
Replace Record with Data Class(以数据类取代记录)
Replace Type Code with Class(以类取代类型码)
Replace Type Code with Subclasses(以子类取代类型码)
Replace Type Code with State/Strategy(以State/Strategy取代类型码)
Replace Subclass with Fields(以字段取代子类)
Decompose Conditional(分解条件表达式)
Consolidate Conditional Expression(合并条件表达式)
Consolidate Duplicate Conditional Fragments(合并重复的条件片段)
Remove Control Flag(移除控制标记)
Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式)
Replace Conditional with Polymorphism(以多态取代条件表达式)
Introduce Null Object(引入Null对象)
Introduce Assertion(引入断言)
Rename Method(函数改名)
Add Parameter(添加参数)
Remove Parameter(移除参数)
Separate Query from Modifier(将查询函数和修改函数分离)
Parameterize Method(令函数携带参数)
Replace Parameter with Explicit Methods(以明确函数取代参数)
Preserve Whole Object(保持对象完整)
Replace Parameter with Methods(以函数取代参数)
Introduce Parameter Object(引入参数对象)
Remove Setting Method(移除设值函数)
Hide Method(隐藏函数)
Replace Constructor with Factory Method(以工厂函数取代构造函数)
Encapsul沈阳网站建设ate Downcast(封装向下转型)
Replace Error Code with Exception(以异常取代错误码)
Replace Exception with Test(以测试取代异常)
Pull Up Field(字段上移)
Pull Up Method(函数上移)
Pull Up Constructor Body(构造函数本体上移)
Push Down Method(函数下移)
Push Down Field(字段下移)
Extract Subclass(提炼子类)
Extract Superclass(提炼超类)
Extrac微信小程序开发t Interface(提炼接口)
Collapse Hierarchy(折叠继承体系)
Form Tem Plate Method(塑造模板函数)
Replace Inheritance with Delegation(以委托取代继承)
Replace Delegation with Inheritance(以继承取代委托)
Tease Apart Inheritance(梳理并分解继承体系)
Convert Procedural Design to Objects(将过程化设计转化为对象设计)
Separate Domain from Presentation(将领域和表述/显示分离)
Extract Hierarchy(提炼继承体系)
代码Review
不想重复说了,同单元测试一样重要。
总结
以上是个人经过理论学习,实践检验后总结的一篇文章,其中大部分观点、素材皆来自网络和公司敏捷活动中所得。我想要说的是,我是支持这些观点的,我认为这些方法论可以很好的指导日常开发工作,能够解决实际问题,That's All。