系統架構師---開發方法---敏捷開發

目錄

前言

極限編程

四大價值觀

溝通

簡單

反饋

勇氣

尊重:

十二個最佳實踐

計劃游戲

小型發布

隱喻

簡單設計

測試先行

重構

結對編程

集體代碼所所有制

持續集成

每周工作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.pswp.cn/news/39160.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39160.shtml
英文地址,請注明出處:http://en.pswp.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裝配到需要的類中,那么如何實現呢?這篇文章,將來闡述一下如何實…