`
clq9761
  • 浏览: 592678 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

敏捷开发(二)

 
阅读更多

一、计划
1、当你能够度量你所说的,并且能够用数字去表达它时,就表示你了解了它;若你不能度量它,不能用数字去表达它,
那么说明你的知识就是匮乏的,不能令人满意的。


2、过大或者过小的素材都是难以估算的。开发人员往往会低估那些大的素材而高估那些小的素材。任何过大的素材都
应该被分解成小一点的部分,任何过小素材都应该和其他小的素材合并。


3、迭代计划,项目的周期过程,如下图:

 

二、 重构
1、软件设计的腐化
当软件出现下面任何一种气味时,就表明软件正在腐化。
(1)僵化性(Rigidity)
僵化性是指难以对软件进行改动,即使是简单的改动。如果单一的改动会导致有依赖关系的模块中的连锁改动,
那么设计就是僵化的。必须要改动的模块越多,设计就越僵化。


(2)脆弱性(Fragility)
脆弱性是指,在进行一个改动时,程序的许多地方就可能出现问题。常常是,出现新问题的地方与改动的地方并没有概念
上的关联。要修正这些问题就又会引出新的问题,从而使软件开发团队就像一只不停追逐自己尾巴的狗一样。


(3)牢固性(Immobility)
牢固性指很难解开系统的纠结,使之成为一些可在其他系统中重用的组件。设计中包含了对其他系统有用的部分,
但是要把这些部分从系统中分离出来需要的努力和风险是巨大的。


(4)粘滞性(Viscosity)
做正确的事情比做错误的事情要困难。当面临一个改动时,开发人员常常会发现会有多种改动的方法。其中,
一些会保持设计;而另外一些会破坏设计(也就是生硬的手法)。当那些可以保持系统设计 的方法比那些
生硬手法更难应用时,就表明设计具有高的粘滞性。


(5)不必要的复杂性(Needless Complexity)
设计中包含有不具任何直接好处的基础结构。如果设计中包含当前没有用的组成部分,它就含有不必要的复杂性。
当开发人员预测需求的变化,并在软件中放置了处理潜在变化的代码时,常常会出现这种情况。


(6)不必要的重复(Needless Repetition)
设计中包含有重复的结构,而该重复的结构本可以使用单一的抽象进行统一。复制(Copy)和粘贴(paste)也许是有用的文本编辑(text-editing)操作,但是它们却是灾难性的代码编辑(code-editing)操作。当系统中有重复代码时,
对系统进行改动会变得困难。在一个重复的代码体中发现的错误必须要在每个重复体中一一修正。不过,由于每个重复体
之间都有细微的差别,所以修正的方式也不总是相同的。


(7)晦涩性(Opacity)
很难阅读、理解,没有很好地表现出意图。晦涩性是指,代码模块难以理解,当开发人员最初编写一个模块时,
代码对于他们来说看起来也许是清晰的。这是由于他们使自己专注于代码的编写,并且他们对 于代码非常熟识。
在熟识减退以后,他们或许会回过头来再去看那个模块,并想知道他们为什么会编写出如此糟糕的代码。
为了防止这种情况发生,开发人员必须要 站在代码阅读者的位置,共同努力对他们的代码进行重构。


2、每一个软件模块都具有三项职责
第一个职责是它运行起来所完成的功能。
第二个职责是它要应对变化,几乎所有的模块在生命周期中都要变化,开发者有责任保证这种改变应该尽可能地简单。
第三个职责是要和阅读它的人进行沟通,对该模块不熟悉的开发人员应该能够比较容易地阅读并理解它。


3、重构就好比用餐后对厨房的清理工作
第一次你没有清理它,你用餐是会快一点。但是由于没有对盘碟和用餐环境进行清洁,第二次做准备工作的时间就
要更长一些。这回再一次促使你放弃清洁工作。的确,如果跳过清洁工作,你今天总是能够很快用完餐,但是脏乱在
一天天的积累。最终,你的花费大量的时间去寻找合适的烹饪器具,凿去盘碟上已经干硬的食物残余,并把它们洗擦
干净以使他们适合于烹饪。饭是天天要吃的。忽略掉清洁工作并不能真正加快做饭速度。

4、重构的目的,是为了每天清洁你的代码
我们不想让脏乱积累,我们不想“凿去并洗擦掉”随着时间积累“干硬的”比特,我们想通过最小的努力就能够对我们的
系统进行扩展和修改。要想具有这种能力,最重要的就是保持代码的清洁。


三、测试
1、编写单元测试
是一种验证行为,更是一种设计行为,同样,它更是一种编写文档的行为。编写单元测试避免了相当数量的反馈循环,尤其是功能验证方面的反馈循环。


2、测试驱动开发,测试促使模块之间隔离,在编写产品代码之前,先编写测试常常会暴露程序中应该被解藕合的区域。


3、验收测试,作为验证工具来说,单元测试是必要的,但是不够充分。单元测试用来验证系统的小的组成单元应该按照
所期望的方式工作,但是它们没有验证系统作为一个整体时工作的正确性。单元测试是用来验证系统中个别机制的
白盒测试,验收测试是用来验证系统满足客户需求的黑盒测试。

 

  • 大小: 177.1 KB
分享到:
评论

相关推荐

    敏捷开发,敏捷开发,敏捷开发,敏捷开发

    ### 敏捷开发的核心理念与实践 #### 一、敏捷开发概述 敏捷开发是一种强调灵活性、快速响应变化的软件开发方法论。与传统的瀑布模型相比,敏捷开发更加注重团队之间的紧密协作、持续改进以及高质量的产品交付。...

    系统分析师-敏捷开发方法

    系统分析师-敏捷开发方法 本文将论述敏捷开发方法在系统分析师中的应用,通过实践证明,在项目的开发中采用合适的敏捷开发方法可以有效地缩短开发时间,提高产品质量。本文将从以下几个方面论述敏捷开发方法的应用...

    敏捷开发第二版ROR必看

    **敏捷开发第二版ROR必看** 在编程领域,Ruby on Rails(简称ROR)是一个深受开发者喜爱的开源Web应用程序框架,它基于Ruby语言,强调简洁、高效的代码编写。"敏捷开发第二版ROR必看"这个主题,指的是对敏捷开发...

    敏捷开发(原著)

    #### 二、敏捷开发的发展历程 - **20世纪80年代**:开始出现了一些关注快速反馈和迭代的开发思想。 - **20世纪90年代**:极限编程(XP)等方法开始流行,进一步推动了敏捷开发的发展。 - **21世纪初**:敏捷宣言发布...

    敏捷开发之通俗理解

    #### 二、敏捷开发如何确保产品质量 在传统开发模型中,如瀑布模型,往往需要大量的前期规划和文档编写,以确保需求的准确性和完整性。然而,在实际操作中,即便如此,仍然难以避免需求变更或遗漏。敏捷开发则通过...

    敏捷开发&敏捷开发&敏捷开发

    #### 二、敏捷开发的核心价值观与原则 - **价值观**:个体与交互胜过流程与工具;响应变化胜过遵循计划;可工作的软件胜过详尽的文档;客户合作胜过合同谈判。 - **原则**:通过持续交付有价值的软件来满足客户需求...

    敏捷开发 原理与实践

    **敏捷开发原理与实践** 敏捷开发是一种以人为核心、迭代、逐步交付的软件开发方法论。它强调在快速变化的需求环境中,通过灵活响应变化来提高软件项目的成功率。本章将深入探讨敏捷开发的核心理念,实践策略以及其...

    敏捷开发流程

    #### 二、敏捷开发的关键特征 **敏捷开发**并非一种具体的开发技术,而是一种开发理念或方法论。它强调以下几个关键特征: 1. **以人为核心**:强调开发团队成员之间的沟通与协作,而非过度依赖文档。 2. **迭代式...

    敏捷开发中国大会PPT

    ### 敏捷开发中国大会PPT:国内最高水平的敏捷技术盛宴 #### 一、大会概览 **标题解析**:“敏捷开发中国大会PPT”表明这是一个关于中国敏捷开发大会的演示文稿,旨在分享大会的主旨、议程、嘉宾等关键信息。 **...

    Mendix敏捷开发零基础学习.zip

    二、敏捷开发理念 敏捷开发是一种以人为核心、迭代、逐步交付的软件开发方法论。Mendix平台全面支持敏捷开发,提供灵活的工作流程,包括短周期的迭代、持续集成和持续交付,以及用户反馈的即时集成,使得项目能够...

    asp.net core敏捷开发框架c#源码

    这个"asp.net core敏捷开发框架c#源码"提供了完整的C#源代码,适用于那些希望深入理解ASP.NET Core工作原理或者需要快速构建自己的应用框架的开发者。 在ASP.NET Core中,C#是主要的编程语言,它是一种面向对象的、...

    敏捷开发的艺术.pdf.rar

    **二、敏捷开发的实践框架** 1. **Scrum**:Scrum是一种最流行的敏捷框架,它采用短期迭代(Sprints)的方式进行开发,通过每日站会、回顾会议和产品待办事项列表等工具来管理项目。 2. **Kanban**:Kanban强调...

    敏捷开发的实践与思考PPT课件.pptx

    二、敏捷开发实践解决了哪些问题? 1. Kick Off 会议:统一 PM、DEV、QA 的思想,确定本迭代的终极目标和story的优先级。 2. 迭代总结会议:统计迭代数据,讨论改进方案,提高组员的使命感和个人荣誉感。 3. 工作...

    敏捷开发 课件

    ### 敏捷开发核心知识点详解 #### 一、敏捷开发概览 **1.1 敏捷的概念** 敏捷开发是一种以人为本、迭代增量的软件开发方法论。它强调快速响应变化,通过简化的流程来提高软件开发效率和产品质量。相较于传统的...

Global site tag (gtag.js) - Google Analytics