系统架构师---开发方法---敏捷开发

目录

前言

极限编程

四大价值观

沟通

简单

反馈

勇气

尊重:

十二个最佳实践

计划游戏

小型发布

隐喻

简单设计

测试先行

重构

结对编程

集体代码所所有制

持续集成

每周工作40小时

现场客户

编码标准


前言

2001年2月,在美国的犹他州,17位“无政府主义者”共同发表了《敏捷软件开发宣言》,在宣言中指出:

  1. 尽早地、持续地向客户交付有价值的软件对软件开发人员来说是最重要的。
  2. 拥抱变化,即使在开发的后期。敏捷过程能够驾驭变化,保持客户的竞争力。
  3. 经常交付可工作的软件,从几周到几个月,时间范围越小越好
  4. 在整个项目中,业务人员和开发者紧密合作
  5. 围绕士气高昂的团队进行开发,为团队成员提供适宜的环境,满足他们的需要,并给予足够的信任
  6. 在团队中,最有效率的、也是效果最好的沟通方式是面对面地交流
  7. 可以工作的软件是进度首要的度量方式
  8. 可持续地开发,投资人、开发团队和用户应该保持固定的节奏
  9. 不追求优秀的技术和良好的设计有助于提高敏捷性
  10. 要简单,尽可能减少工作量。减少工作量的艺术是非常重要的
  11. 最好的架构、需求和设计都来自于一个自我组织的团队
  12. 团队要定期地总结如何能够更有效率,然后相应的自我 调整

极限编程

XP方法可以说是敏捷联盟中最鲜艳的一面旗帜,也是相对来说最成熟的一种。XP方法的雏形最初形成于1996-1999年。

XP是一种轻量、敏捷、高效、低风险、柔性、可预测、可行而且充满乐趣的软件开发方式。与其他方法论相比,其最大的不同在于:

  1. 在更短的周期内,更早地提供具体、持续的反馈信息
  2. 迭代地进行计划编制,首先在最开始迅速生成一个总体计划,然后在整个项目开发过程中不断地发展它。
  3. 依赖于自动测试程序来监控开发进度,并及早地捕获缺陷
  4. 依赖于口头交流,测试和源程序进行沟通
  5. 倡导持续的,演化式的设计
  6. 依赖于开发团队内部的紧密协作
  7. 尽可能达到程序员短期利益和项目长期利益的平衡

XP由价值观、原则、实践和行为四个部分组成,他们彼此相互依赖,关联,并通过行为贯穿整个生命周期

四大价值观

XP的核心是其总结的沟通、简单、反馈、勇气四大价值观,它们是XP的基础,也是XP的灵魂。

沟通

通常,程序员给人留下的印象就是内向、不善言辞,项目中的许多问题就出在这些缺乏沟通的开发人员身上。由于某个程序员做出了一个设计决定,但是却不能够及时沟通团队中的其他成员,结果使得团队在协作与配合上出现很多麻烦。而在传统的开发方法中,并不在意这种口头沟通不畅的问题,而是希望借助于完善的流程和面面俱到的文档、报表、计划来替代,但是,这又引入了效率不高的新问题。

XP方法认为,如果小组成员之间无法做到持续的,无间断的交流,那么协作就无从谈起。从这个角度来看,通过文档、报表等人工 制品进行交流,具有很大的局限性。因此,XP组合了诸如结对编程这样的最佳实践,鼓励大家进行口头交流,通过交流解决问题,提供效率。

简单

XP方法在工作中秉承“够用即好”的思路,也就是尽量的简单化,只要今天够用就行,不考虑明天会出现的新问题。这一点看上去十分容易,但是要真正做到保持简单的工作其实是很难的,因为在传统的开发方法中,都要求开发人员对未来做一些预先规划,以便对今后可能发生的变化预留一些扩展空间。

沟通和简单之后还有一种相当微秒的互相支持的关系。一方面,团队成员之间的沟通得越多,就越容易明白那些工作需要做,那些工作不需要做;另一方面,系统越简单,需要沟通的内容也就越少,沟通也将更加全面。

反馈

是什么原因使得客户、管理层这么不理解开发团队?究其原因,就是开发的过程中缺乏必要的反馈。在很多项目中,当开发团队经历过需求分析之后,在一个相当长的时间段中,是没有任何反馈信息的。整个开发过程对于客户和管理层而言就像一个黑盒子,进度完全看不到。而且,在项目开发过程中,这样的现象不仅出现在开发团队与客户、管理层之间,还包括在开发团队内部。因此,开发团队需要更加注重反馈。反馈对应任何软件项目的成功都是至关重要的,而在XP方法论中则更进一步,通过持续、明确的反馈来暴露软件状态的问题。

反馈与沟通有着良好的配合,及时和良好的反馈有助于沟通。而简单的系统,更有利于测试和反馈。

勇气

在应用XP方法时,每时每刻都在应对变化;由于沟通良好,会有更多需求变更的机会;由于时刻保持系统的简单,新的变化会带来一些重新开发的需要;由于反馈及时,会有更多中间打断思路的新需求。总之,这一切使得开发团队处于变化之中,因此,这时就需要有勇气来面对快速开发,面对可能的重新开发。勇气可以来源与沟通,因为它使得高风险,高回报的试验称为可能;勇气可以来源于简单,因为面对简单的系统,更容易鼓起勇气;勇气可以来源与反馈,因为可以及时获得每一步前进的状态(自动测试),会让人更勇于重构代码。

尊重:

在XP的四大价值之下,隐藏着一种更加深刻的东西,就是尊重。因为这一切的准则都建立在团队成员之间相互关心,相互理解的基础之上。

十二个最佳实践

在XP中,集成了12个最佳实践,大多数概念和编程一样老。主要的创新点在于提供一种良好的思路将这些最佳实践结合在一起,并且确保尽可能彻底地执行,使得他们能够在最大程度上相互支持。

计划游戏

计划游戏的主要思想就是先快速地制定一份概要计划,然后,随着项目细节的不断清晰,再逐步完善这份计划。计划游戏产生的结果是一套用户故事及后续的一两次迭代的概要计划。

小型发布

XP方法秉承的是“持续集成,小步快走”的哲学思维,也就是说每一次发布的版本应该尽可能地小,当然前提条件是每个版本有足够的商业价值,值得发布。由于小型发布可以使的集成更频繁,客户获得的中间结果越频繁,反馈也就越频繁,客户就能够实时地了解项目的进展情况,从而提出更多的意见,以便在下一次迭代中计划进去,以实现更高的客户满意度。

隐喻

相对而言,隐喻比较令人费解。根据词典中的解释是,“一种语言的表达手段,它用来暗示字面意义不相似的事物之间的相似之处”。隐喻常用的四个方面,寻求共识,发明共享词汇、创新的武器、描述架构。

简单设计

强调简单的价值观,引出了简单性的假设原则,落实实处就是“简单设计”实践。这个实践看上哪去似乎很容易理解,但是却又经常被误解,许多批评者就指责XP忽略设计是不正确的。其实,XP的简单设计实践并不是要忽略设计,而是认为设计不应该在编码之前一次性完成,因为那样只能建立在“情况不会发生变化”或者,“我们可以预见所有的变化”之类的谎言的基础上。

测试先行

对于有些团队而言,有时候程序员会以“开发工作太紧张”为理由,继而忽略测试工作。这样,就导致了一个恶性循环,越是没空编写测试程序,代码的效率与质量越差,花在找缺陷,解决缺陷的时间也就越来越多,实际产能大大 降低。由于产能降低,因此时间更紧张,压力就更大。

重构

重构是一种对代码进行改进而不影响功能实现的技术,XP需要开发人员在“闻到代码的坏味道”时,就有重构代码的勇气。重构的目的是降低变化引发的风险、使得代码优化更加容易。

结对编程

从20世纪60年代开始,就有类似的 实践在进行,长年以来的研究结果给出的结论是,结对编程的效率反而比单独编程更高。一开始虽然会牺牲一些速度,但是慢慢的,开发的速度会逐渐加快。究其原因,主要是结对编程大大降低了沟通的成本,提供了工作的质量。结对编程技术被誉为XP保证工作质量、强调人文主义的一个最典型的 实践,应用得当还能够使开发团队协作更加顺畅、知识交流与共享更加频繁、团队稳定性也会更加牢固。

集体代码所所有制

由于XP方法鼓励团队进行结对编程,而且认为结对编程的组合应该动态地搭配,根据任务的不同、专业技能的不同进行更优组合。因此,每一个人都会遇到不同的代码,代码的所有制就不再适合于私有,因为那样会给修改工作带来巨大的不便。所谓集体代码所有制,就是团队中每个成员都拥有对代码进行改进的权利,每个人都拥有全部代码,也都需要对全部代码负责。同时,XP强调代码是谁破坏的(修改后出现问题),就应该谁来进行修复处理。

集体代码所所有制是XP与其他敏捷方法的一个较大的不同,也是从另一个侧面体现了XP中蕴含的很深厚的编码情节。

持续集成

在前面谈到小型发布、重构、结对编程、集体代码所所有制等最佳的实践,多次提到持续集成,可以说持续集成是这些最佳实践的基本支撑的条件。

每周工作40小时

这是最让开发人员开心,管理者反对的一个最佳实践了,加班,再加班早已经成为开发人员的家常便饭,也是管理者最常使用的一种策略。而XP方法认为,加班最终会扼杀团队的积极性,最终导致项目的失败,这也充分体现了XP方法关注人的因素比关注过程的因素多一些。

现场客户

为了保证开发出来的结果与客户的预想接近,XP方法认为最重要的是需要将客户请到开发现场。就像计划游戏中提到一样,在XP项目中,应该时刻保证客户负责业务决策,开发团队负责技术决策。因此,在项目中有客户在现场明确用户故事,并作出相应的业务决策,对于XP项目而言有着十分重要的意义。

编码标准

拥有编码标准可以避免团队在一些与开发进度无关的细枝末节的问题上发生争论,而且会给重构,结对编程带来很大的麻烦。不过,XP方法的编码标准的目的不是创建一个事无巨细的规则列表,而是要能够提供一个明确代码清晰,便于交流的指导方针。

最后,有句话,1+1>2最适合表达XP的观点,XP方法的最大价值在于,在项目中融会贯通地运用这12个最佳实践,而非单独的使用。当然,可以使用其中的一些实践,但是这并不意味着就应用了XP方法。XP方法真正能够发挥其效能,就必须完整地运用12个实践。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/39160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Grafana展示k8s中pod的jvm监控面板/actuator/prometheus

场景 为保障java服务正常运行,对服务的jvm进行监控,通过使用actuator组件监控jvm情况,使用prometheus对数据进行采集,并在Grafana展现。 基于k8s场景 prometheus数据收集 配置service的lable,便于prometheus使用labl…

LVS负载均衡集群

目录 集群 什么是集群 (含义) 集群的分类 LVS 负载均衡器的集群架构 负载均衡器的群集工作模式 LVS负载均衡器的调度算法 LVS组成作用 组成 作用 LVS群集创建与管理 创建步骤 ipvsadm工具 LVS-NAT部署实战 1、部署共享存储 2、配置节点服务器(后端服…

JetPack Compose 学习笔记(持续整理中...)

1.为什么要学? 1.命令式和声明式 UI大战,个人认为命令式UI自定义程度较高,能更深入到性能,内存优化方面,而申明式UI 是现在主流的设计,比如React,React Native,Flutter,Swift UI等等,现在性能也逐渐在变得更好 2.还有一个原因compose 是KMM 是完整跨平台的UI基础 3.…

kafka使用心得(一)

kafka入门 一种分布式的、基于发布/订阅的消息系统,scala编写,具备快速、可扩展、可持久化的特点。 基本概念 topic 主题 partition 分区,一个topic下可以有多个partition,消息是分散到多个partition里存储的,part…

剑指Offer48.最长不含重复字符的子字符串 C++

1、题目描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字…

图像处理技巧形态学滤波之膨胀操作

1. 引言 欢迎回来,我的图像处理爱好者们!今天,让我们继续研究图像处理领域中的形态学计算。在本篇中,我们将重点介绍腐蚀操作的反向效果膨胀操作。 闲话少说,我们直接开始吧! 2. 膨胀操作原理 膨胀操作…

macOS CLion 使用 bits/stdc++.h

macOS 下 CLion 使用 bits/stdc.h 头文件 terminal运行 brew install gccCLion里配置 -D CMAKE_CXX_COMPILER/usr/local/bin/g-11

Visual Studio 2022 中解决使用scanf报错的方法(一劳永逸)

目录 【前言】 一、scanf报错示例 二、解决使用scanf报错的方法 解决方法1(不推荐) 解决方法2(不推荐) 解决方法3(强烈推荐) 第一步 第二步 第三步 三、效果演示(方法三) …

根据一棵树的两种遍历构造二叉树

题目 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,9,20,null,null,…

Unity-Linux部署WebGL项目MIME类型添加

在以往的文章中有提到过使用IIS部署WebGL添加MIME类型使WebGL项目在浏览器中能够正常加载,那么如果咱们做的是商业项目,往往是需要部署在学校或者云服务器上面的,大部分情况下如果项目有接口或者后台管理系统,后台基本都会使用Lin…

机器学习笔记:李宏毅ChatGPT Finetune VS Prompt

1 两种大语言模型:GPT VS BERT 2 对于大语言模型的两种不同期待 2.1 “专才” 2.1.1 成为专才的好处 Is ChatGPT A Good Translator? A Preliminary Study 2023 Arxiv 箭头方向指的是从哪个方向往哪个方向翻译 表格里面的数值越大表示翻译的越好 可以发现专门做翻…

Ceph入门到精通-Linux下Ceph源码编译和GDB调试

Ceph版本:14.2.22 Linux版本:ubuntu-server 18.04 第一部分 下载Ceph源码 1.1 配置Ceph源码镜像源 Ceph源码是托管在Github上,由于某些原因,国内访问Github网站很慢,所以需要从其他途径加速获取源码。Github官方给出…

【ubuntu18.04】01-network-manager-all.yaml和interfaces和resolv.conf各有什么区别和联系

文章目录 01-network-manager-all.yaml、interfaces 和 resolv.conf 是与网络配置相关的文件,它们在网络设置中有着不同的作用和使用方式。 01-network-manager-all.yaml: 这是一个配置文件,通常在 Ubuntu 系统上使用 NetworkManager 进行网络管理时使用…

ChatGPT​保密吗?它有哪些潜在风险?如何规避?

自2022年11月公开发布以来,ChatGPT已成为许多企业和个人的必备工具,但随着该技术越来越多地融入我们的日常生活,人们很自然地想知道:ChatGPT是否是保密的。 问:ChatGPT保密吗? 答:否&#xff0…

C++11并发与多线程笔记(3)线程传参详解,detach()大坑,成员函数做线程函数

C11并发与多线程笔记(3)线程传参详解,detach 大坑,成员函数做线程函数 1、传递临时对象作为线程参数1.1 要避免的陷阱11.2 要避免的陷阱21.3 总结 2、临时对象作为线程参数2.1 线程id概念2.2 临时对象构造时机抓捕 3、传递类对象…

VR时代真的到来了?

业界对苹果的期待是,打造一台真正颠覆性的,给头显设备奠定发展逻辑底座的产品,而实际上,苹果只是发布了一台更强大的头显。 大众希望苹果回答的问题是“我为什么需要一台AR或者VR产品?”,但苹果回答的是“…

从零开始学习 Java:简单易懂的入门指南之MAth、System(十二)

常见API,MAth、System 1 Math类1.1 概述1.2 常见方法1.3 算法小题(质数)1.4 算法小题(自幂数) 2 System类2.1 概述2.2 常见方法 1 Math类 1.1 概述 tips:了解内容 查看API文档,我们可以看到API文档中关于Math类的定义如下: Math类…

每天一道leetcode:300. 最长递增子序列(动态规划中等)

今日份题目: 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] …

【JavaEE进阶】SpringBoot项目的创建

文章目录 一. SpringBoot简介1. 什么是SpringBoot?2. SpringBoot的优点 二. SpringBoot项目创建1. 使用IDEA创建2. 使用网页创建SpringBoot项目 三. 运行SpringBoot项目 一. SpringBoot简介 1. 什么是SpringBoot? Spring Boot 是一个用于快速构建基于 Spring 框架的应用程序…

Spring对象装配

在spring中,Bean的执行流程为启动spring容器,实例化bean,将bean注册到spring容器中,将bean装配到需要的类中。 既然我们需要将bea装配到需要的类中,那么如何实现呢?这篇文章,将来阐述一下如何实…