软件开发概述--敏捷模式
软件开发生命周期
SDLC--Software Development Life Cycle.
传统的软件开发生命周期有:
瀑布模型:顺序进行,只有完成上一个阶段才能开启下一个阶段,将软件生命周期分为:制定计划、需求分析、软件设计、编写程序、软件测试及运行维护六个基本活动。优点是为项目提供了按阶段划分的检查点及关注点,必须为其提供模板来使分析、设计、编码、测试、支持有一个共同的指导。缺点是各个阶段划分固定,其间产生大量文档,极大地增加了工作量,用户只有等到整个过程的末期才能看到开发成果,增加了开发风险,不适应用户需求的变化。
原型模型:建立样品,逐步求精,又称为样品模型,借用已有系统或构建样品作为原型模型,通过对样品的改进满足客户的需求。其优点是可以让开发和用户在原型上达成一致,减少设计中的错误和开发中的风险,缩短开发周期,降低成本。缺点是客户与开发者对原型的理解有差异不适合准确的原型设计,也限制了开发人员的创新。
螺旋模型:一般系统级应用使用螺旋模型,其引入了风险分析。它是一种演化软件开发过程模型,兼顾了原型模型的迭代和瀑布模型的系统化及严格监控。优点是设计上的灵活性更易于适应客户的需求变化,客户有效的交互保证了项目的正确方向及可控性。缺点是需要具备相当丰富的风险评估经验及专门的知识,而过多的迭代会增加开发成本,延迟交付时间。
敏捷开发
敏捷开发以用户的需求进化为核心,持续迭代的方式进行开发。软件项目在构建初期切分成多个子项目,各个子项目的成果经过测试均具备可视、可集成和可运行使用的特征。敏捷的目标是提高开发效率和响应能力。
敏捷开发模型:
敏捷宣言:
个体交互高于流程和工具
可工作软件高于理解文档
客户协作高于合同协商
响应变化高于遵循计划
敏捷原则:
通过早期和连续型的高价值工作交付满足“客户”。
大工作分成可以迅速完成的较小组成部门。
识别最好的工作是从自我组织的团队中出现的,
为积极员工提供他们需要的环境和支持,并相信他们可以完成工作。
创建可以改善可持续工作的流程。
维持完整工作的不变的步调。
欢迎改变的需求,即时是在项目后期。
在项目期间每天与项目团队和业务所有者开会。
在定期修正期,让团队反映如何能高效,然后进行相应地行为调整。
通过完车的工作量计量工作进度。
不断地追求完善。
利用调整获得竞争优势。
敏捷名词一览:
Scrum: 橄榄球运动的一个专业术语,表示"争球"的动作,把一个开发流程的名字取名为Scrum,意味着大家要像打橄榄球一样迅速、富有战斗激情、高效的工作。
Scrum Team: 开发团队,主要负责软件产品在Scrum规定流程下进行开发工作,人数控制在5~10人左右,每个成员可能负责不同的技术方面,但要求每个成员必须有很强的自我管理能力,同时具有一定的表达能力,成员可以采用任何工作方式,只要能达到Sprint目标。
Product Owner: 产品负责人,主要负责确定产品的功能和达到要求的标准,指定软件的发布日期和交付的内容,同时有权力接受或拒绝开发团队的工作成果
Scrum Master: 流程管理员,主要负责整个Scrum流程在项目中的顺利实施和进行,以及清除挡在客户和开发之间的沟通障碍,使得客户可以直接驱动开发
Sprint burn-down chart:Sprint燃尽图,它显示了Sprint中累积剩余的工作量,它是一个反映工作量完成状况的趋势图。
Product backlog list:产品待办列表,指一个产品或项目期望的、排列好优先级的功能列表。
Sprint backlog list:Sprint待办列表,Sprint任务清单,从Product backlog list中拉取出来的一部分。
Sprint:短距离赛跑的意思,这里指一次迭代,周期为2周到1个月时间,即,我们把一次迭代的开发内容以最快的速度完成的过程称为Sprint。
User story:用户故事,从用户的角度来描述用户渴望得到的功能。
敏捷实践
TDD--测试驱动开发:Test Drive Development,即从测试的角度来检验整个项目。其原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。其基本思路是通过测试来推动整个开发的进行,它是将需求分析、设计、质量控制量化的过程。TDD过程:明确需要完成的功能,针对该功能编写测试用例,编译不通过的测试代码,编写相应的功能代码,执行测试代码直到测试通过,对代码进行重构并保证测试通过,循环完成所有功能的开发。即 不可运行---可运行---重构。TDD原则:独立测试、测试列表、测试驱动、先写断言、可测试性、及时重构、小步前进。
BDD--行为驱动开发:Behavior Drive Development, 是对TDD的一种补充,或者说是TDD的一个分支,与测试概念相比,行为是一种更自然的开发驱动因素,考虑行为会自然而然地促使你先编写规范类,成为一个非常有效的实现驱动因素。测试驱动开发让我们明白测试先行的道理,但是并没有明确告诉我们测试什么,你写出一个测试,但它们不会告诉你应该发生什么也不会告诉你实际预期是什么,它不清楚需求到底是什么。而行为驱动开发旨在帮助开发人员确定应该测试什么。而且行为驱动开发提供了一种通用语言来避免客户与开发之间的不一致,从而实现设计与测试相结合来开发产品。
结对编程:两个程序员在一个计算机上共同工作,一个人输入代码,另一个人审查他输入的每一行代码。优点是程序员互帮互助,可以得到能力上的互补且让编程环境有效贯彻设计及增强代码和产品质量,并有效减少bug,在编程中互相讨论可能更快更有效地解决问题。缺点也很明显,编程人员习惯不同引起的麻烦,或对一个问题争吵不休,若交谈内容与工作无关,反而分散注意力导致效率低下等等。
代码重构:对软件代码做任何更动以增加可读性或简化结构而不影响输出结果。重构的目的是:持续性改进设计,帮助发现隐藏的代码缺陷,提高编程效率。一般重构方法有:封装成员变量,提取方法,一般化类型,方法重命名等。