特征驅動開發

FDD 方法來自于一個大型的新加坡銀行項目。FDD 的創立者 Jeff De Luca 和 Peter Coad 分別是這個項目的項目經理和首席架構設計師。在 Jeff 和 Peter 接手項目時,客戶已經經歷了一次項目的失敗,從用戶到高層都對這個項目持懷疑的態度,項目組士氣低落。隨后, Jeff 和 Peter 采用了特征驅動、彩色建模等方法,最終獲得了巨大成功。
FDD 是也是一個迭代的開發模型。FDD的每一步都強調質量,不斷地交付可運行的軟件,并以很小的開發提供精確的項目進度報告和狀態信息。同敏捷方法一樣,FDD 弱化了過程在軟件開發中的地位。雖然 FDD 中也定義了開發的過程,不過一個幾頁紙就能完全描述的過程深受開發者的喜愛。
1.FDD 角色定義
FDD 認為,有效的軟件開發不可缺少的三個要素是:人、過程和技術。軟件開發不能沒有過程,也不能沒有技術,但軟件開發中最重要的是人。個人的生產率和人的技能將會決定項目的成敗。為了讓項目團隊能夠緊密地工作在一起,FDD 定義了 6 種關鍵的項目角色:
(1)項目經理。項目經理是開發的組織者,但項目經理不是開發的主宰。對于項目團隊來說,項目經理應該是團隊的保護屏障。他將同團隊外界(如高層領導、人事甚至寫字樓的物業管理員)進行溝通,努力為團隊提供一個適宜的開發環境。
(2)首席架構設計師。不難理解,首席架構設計師負責系統架構的設計。
(3)開發經理。開發經理負責團隊日常的開發,解決開發中出現的技術問題與資源沖突。
(4)主程序員。主程序員將帶領一個小組完成特征的詳細設計和構建的工作,一般要求主程序員具有一定的工作經驗,并能夠帶動小組的工作。
(5)程序員。若干個程序員在主程序員的帶領下形成一個開發小組,按照特征開發計劃完成開發。
(6)領域專家。領域專家是對業務領域精通的人,一般由客戶、系統分析員等擔當。領域專家作為關鍵的項目角色正是敏捷宣言中“業務人員同開發人員緊密合作”的體現。
根據項目規模的大小,有些角色是可以重復的。例如在一個小規模項目中,項目經理自身的能力很強,他就可以同時擔當項目經理、首席架構設計師和開發經理的角色。
2.核心過程
FDD 共有 5 個核心過程,如圖 6-6 所示。
在這里插入圖片描述
(1)開發整體對象模型。開發整體對象模型也就是業務建模的階段。不過 FDD 強調的是系統地完整地面向對象建模,這種做法有助于把握整個系統,而不僅僅關注系統中的若干個點。在這一階段,領域專家和首席架構設計師相互配合,完成整體對象模型。
(2)構造特征列表。完成系統建模后,需要構造一個完整的特征列表。所謂特征指的是一個小的、對客戶有價值的功能。采用動作、結果和目標來描述特征,特征的粒度最好可以在兩周之內實現。在這一階段中,可以整理出系統的需求。
(3)計劃特征開發。很少看到有哪個軟件在開發過程中明確包含計劃過程,其實任何一個軟件項目都必須有計劃——無論是重載方法還是敏捷方法。在這一階段中,項目經理根據構造出的特征列表、特征間的依賴關系進行計劃,安排開發任務。
(4)特征設計。在這一階段,主程序員將帶領特征小組對特征進行詳細設計,為后面的構建做準備。
(5)特征構建。特征構建和特征設計這兩個階段合并起來可以看做特征的實現階段,這兩個階段反復地迭代,直到完成全部的開發。
3.最佳實踐
組成 FDD 的最佳實踐包括:領域對象建模、根據特征進行開發、類的個體所有、組成特征小組、審查、定期構造、配置管理、結果的可見性。
其中,最有特色的莫過于類的個體所有。幾乎所有的開發模型都是代碼共有,程序員們負責開發系統中的全部代碼,并通過配置管理和變更控制來保持代碼的一致性。在 FDD 中,將類分配給特定的任何小組,分配給 A 成員的代碼將全部由 A 來維護,除 A 外的角色都不能修改它,只能使用它。這樣做當然有它的優點:個人對所分配的類很容易保持概念的完整性;開發類代碼的人肯定是最熟悉這個類的主人;而對這個類的支配感會促使開發人員產生自豪感,從而更出色地完成任務。不過 FDD 也提到了類個體所有的缺陷:項目中的依賴關系增強、當 A 需要 B 修改他自己的類時,必須等待 B 完成修改才能使用;類的個體所有增加了員工離職的損失。面對這些優點和缺陷,顯然 FDD 認為類的個體所有對系統開發更有幫助。
除類的個體所有外,審查也是 FDD 中很具特色的一項實踐。不少人都認為審查是非常嚴格的軟件過程所特有的,因為進行審查不但要花費不少的人力和時間,對審查者本身的素質也有要求。然而在 FDD 中,明確地將審查作為一項最佳實踐提出。審查是一種很有效的發現缺陷的手段,但經常被忽視,國內的軟件組織中很少有嚴格審查制度保證軟件質量。有效的審查可以發現很多潛在的問題,而這些問題往往是無法通過測試發現的,例如建模、需求和設計期的缺陷。這些潛在的缺陷大多要到系統測試甚至發布后才能發現,修正這些缺陷的代價是很大的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211164.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211164.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211164.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql面試題——日志

一:為什么需要REDO日志 緩沖池可以幫助我們消除CPU和磁盤之間的鴻溝,checkpoint機制可以保證數據的最終落盤,然而由于checkpoint 并不是每次變更的時候就觸發 的,而是master線程隔一段時間去處理的。所以最壞的情況就是事務提交后…

持續集成交付CICD:Jenkins配置Nexus制品發布

目錄 一、實驗 1.Jenkins配置Nexus制品發布 一、實驗 1.Jenkins配置Nexus制品發布 (1)策略 發布其實就是下載制品,然后將制品發送到目標主機,最后通過腳本或者指令啟動程序。 (2)安裝Maven Artifact …

前端知識(十一)———js判斷上傳的文件是GBK編碼還是UTF-8

1、獲取文件二進制數據,這里只做示例,例如element-ui中文件上傳的beforeUpload方法,返回的file對象,然后使用FileReader對其進行轉換,再進行后續判斷 function beforeUpload(file: File) { const reader new FileRe…

uniapp圖片預覽

用的是Uview組件庫里面的 直接在頁面寫上&#xff1a; <u-album singleSize"100" :urls"[https://lxt.jingyi.icu/item.img]"></u-album> 這圖片路徑是我自己的 你們可以按照組件庫里面的方法去實現

DataFrame的使用

查看數據類型及屬性 # 查看df類型 type(df) # 查看df的shape屬性&#xff0c;可以獲取DataFrame的行數&#xff0c;列數 df.shape # 查看df的columns屬性&#xff0c;獲取DataFrame中的列名 df.columns # 查看df的dtypes屬性&#xff0c;獲取每一列的數據類型 df.dtypes df.i…

標準成本核算基礎知識 – 了解間接費用成本流程 - Part4

原文地址&#xff1a;Basics of Standard Costing – Understanding overhead cost flow-Part 4 | SAP Blogs 這是我理解標準成本計算及其流程的另一篇文檔的延續。 標準成本核算基礎知識 - 了解成本構成結構 - 第 3 部分 管理費用是只能間接歸因于產品的成本&#xff0c;例如…

react中使用react-konva實現畫板框選內容

文章目錄 一、前言1.1、API文檔1.2、Github倉庫 二、圖形2.1、拖拽draggable2.2、圖片Image2.3、變形Transformer 三、實現3.1、依賴3.2、源碼3.2.1、KonvaContainer組件3.2.2、use-key-press文件 3.3、效果圖 四、最后 一、前言 本文用到的react-konva是基于react封裝的圖形繪…

基礎課20——從0-1客服機器人生命周期

溫馨提示&#xff1a;篇幅較長&#xff0c;可點擊目錄查看對應節點。 1.機器人搭建期 搭建機器人包含&#xff1a;素材整理、問題提煉、相似問題補充、答案編輯、問題分配引擎等等步驟&#xff0c;不同廠商可能有所區別&#xff0c;但關鍵功能的實現離不開以下步驟。 1.1素材…

Flutter路由的幾種用法

Flutter路由跳轉 基本路由跳轉 ElevatedButton(onPressed: () {//基本路由跳轉Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context) {return const SearchPage();}),);},child: const Text("基本路由跳轉"), ), search.dart頁面 impo…

說說react的事件機制?

React的事件機制是一種用于處理用戶界面事件的方式&#xff0c;它建立在原生DOM事件的基礎上&#xff0c;提供了一種更高級、更一致的方式來處理事件。 1. 合成事件&#xff08;Synthetic Events&#xff09;&#xff1a;React引入了合成事件的概念&#xff0c;它是一種React自…

K8S學習指南(3)-minikube的安裝

這里寫自定義目錄標題 簡介Windows 系統安裝步驟 1&#xff1a;安裝 Hypervisor步驟 2&#xff1a;安裝 kubectl步驟 3&#xff1a;安裝 Minikube步驟 4&#xff1a;啟動 Minikube CentOS 系統安裝步驟 1&#xff1a;安裝 Hypervisor步驟 2&#xff1a;安裝 kubectl步驟 3&…

《形式語言與自動機理論(第4版)》筆記(三)

文章目錄 [toc]前導《形式語言與自動機理論&#xff08;第4版&#xff09;》筆記&#xff08;一&#xff09;《形式語言與自動機理論&#xff08;第4版&#xff09;》筆記&#xff08;二&#xff09; 第四章&#xff1a;正則表達式4.1|啟示4.2|正則表達式的形式定義正則表達式性…

排序算法之四:直接選擇排序

1.基本思想 每一次從待排序的數據元素中選出最小&#xff08;或最大&#xff09;的一個元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的數據元素排完 。 2.直接選擇排序 在元素集合array[i]--array[n-1]中選擇關鍵碼最大(小)的數據元素 若它不是這組元素中的…

練習:最大公約數

1.什么是公約數 公約數&#xff0c;亦稱“公因數”。 它是指能同時整除幾個整數的數 。 如果一個整數同時是幾個整數的 約數 &#xff0c;稱這個整數為它們的“公約數”&#xff1b;公約數中最大的稱為最大公約數。 2.輾轉相除法 輾轉相除法之所以有效是因為其基于一個核心原…

給定有n個結點的樹和長度為n的排列,q次詢問:l, r, x, 若p[l, r]中存在至少一個結點是x的后代,輸出yes,否則輸出no

題目 #include<bits/stdc.h> using namespace std; const int maxn 1e6 5; int n, q; vector<int> G[maxn]; int L[maxn], R[maxn];//L[i]表示結點i的時間戳&#xff0c;R[i]表示結點i的后代中時間戳的最大值 int p[maxn]; int t[maxn]; struct Node{int id, fl…

MapReduce

1. 請解釋MapReduce的工作原理。 MapReduce是一種編程模型&#xff0c;主要用于大規模數據集&#xff08;特別是非結構化數據&#xff09;的并行處理。這個模型的核心思想是將大數據處理任務分解為兩個主要步驟&#xff1a;Map和Reduce。 在Map階段&#xff0c;輸入數據被分解…

ssm的健身房預約系統(有報告)。Javaee項目。ssm項目。

演示視頻&#xff1a; ssm的健身房預約系統&#xff08;有報告&#xff09;。Javaee項目。ssm項目。 項目介紹&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三層體系結構&#xff0c;通過Spring Spring…

AI模型平臺Hugging Face存在API令牌漏洞;大型語言模型與任務模型

&#x1f989; AI新聞 &#x1f680; AI模型平臺Hugging Face存在API令牌漏洞&#xff0c;黑客可竊取、修改模型 摘要&#xff1a;安全公司Lasso Security發現AI模型平臺Hugging Face上存在API令牌漏洞&#xff0c;黑客可獲取微軟、谷歌等公司的令牌&#xff0c;并能夠訪問模…

c++中的內聯函數和編譯器

內聯函數和編譯器&#xff1a; 內聯函數并不是何時何地都有效&#xff0c;為了理解內聯函數何時有效&#xff0c;應該要知道編譯器碰到內聯 函數會怎么處理&#xff1f; 對于任何類型的函數&#xff0c;編譯器會將函數類型(包括函數名字&#xff0c;參數類型&#xff0c;返回值…

Unknown parameter in InstanceGroups[0]: “Configurations“, must be ... 解決方法

使用 aws emr modify-instance-groups 更新集群配置時可能會遇到如下錯誤信息&#xff1a; Unknown parameter in InstanceGroups[0]: “Configurations”, must be one of: InstanceGroupId, InstanceCount, EC2InstanceIdsToTerminate, ShrinkPolicy 這一報錯其實和提供的j…