您的萬物軟件開發綜合指南

已發表: 2020-08-13

工廠生產車間和軟件開發人員辦公室有多相似?

想像一個滿屋子的程序員在他們的電腦中輸入代碼。 如果您將他們的輸出視為工廠裝配線上的組裝小部件怎麼辦? 最大化生產的東西在這裡也能起作用嗎? 還是開發過程更像其他工程學科?

自軟件開發開始以來,項目經理一直在努力解決這個問題。 從這些問題中,出現了軟件開發生命週期的定義。

什麼是軟件開發?

這是從頭開始創建軟件的過程。 雖然編寫代碼是核心活動,但遠不止於此。

開發過程包括編寫任何代碼之前的構思和設計。 規劃很容易被忽視。 它不像編寫代碼那樣開發。 然而,首先回答關鍵問題可以增強成品。 這個項目還值得追求嗎? 如果是這樣,最好的方法是什麼? 哪些功能是必要的,哪些功能很不錯? 答案使該項目有更大的成功機會。

雖然這些步驟是恆定的,但它們的應用會有所不同。 軟件開發之所以是一門新學科。 工程學科成熟,已有數百年曆史。 軟件開發只能追溯到 1940 年代後期。 它仍然是一門新學科。 敏捷方法只有 20 年的歷史。 然而,它是軟件創造理論中發生的最有影響力的事情之一。 無論如何,六個軟件開發生命週期階段對所有系統都是通用的。

軟件開發生命週期 (SDLC) 的 6 個階段

開發團隊可以在整個項目或一個功能上使用軟件開發生命週期。 SDLC 使用的演變一直是通過縮短每個步驟的長度來降低風險。 稍後,我們將更多地研究不同的方法。 首先,讓我們檢查一下這些步驟本身。

此外,值得注意的是,您會看到步驟數或其名稱方面的變體。 有時會合併步驟,例如開發和測試。 其他時候,您會看到一個步驟一分為二,例如計劃變成計劃和分析。 在我們的例子中,我們將堅持使用這六個,因為它們清楚地定義了階段。

SDLC

1. 規劃

計劃階段是最重要的一步。 利益相關者需要考慮一切,包括項目本身的可行性。 在這裡殺掉整個項目也沒關係。 如果需要,一個健康的組織將授權利益相關者這樣做。 在此階段,程序員將較少參與企業環境。 產品所有者、業務分析師和其他利益相關者在此步驟中表達他們的需求。

2. 設計

計劃階段是最重要的一步。 利益相關者需要考慮一切,包括項目本身的可行性。 在這裡殺掉整個項目也沒關係。 如果需要,一個健康的組織將授權利益相關者這樣做。 在此階段,程序員將較少參與企業環境。 產品所有者、業務分析師和其他利益相關者在此步驟中表達他們的需求。

3. 發展

設計階段還包括用戶體驗(UX)設計。 如果應用程序有任何面向用戶的組件,那麼 UX 設計是必須的。 這包括通過觀察真人與產品模型交互來進行用戶研究。 這發生在設計階段而不是開發階段的原因是時間安排。 用戶會話需要時間。 通常,與業務利益相關者的更多來回討論也會從收集的數據中發生。

4. 測試

接下來,開發團隊測試代碼。 代碼編寫者和測試者應該是不同的人。 更好的是非開發人員的質量保證測試員。 開發人員傾向於只考慮快樂路徑場景。 專門的 QA 測試專業人員往往更善於思考如何破壞軟件。 他們更有可能在以這種方式部署之前發現錯誤。 結果是發佈時軟件更加穩定。

自動與手動測試

單元測試和集成測試通常是自動化的。 通常,DevOps 平台在將新代碼合併到主分支之前對新代碼運行這些測試。

手動測試遠未過時。 自動化測試一遍又一遍地做同樣的事情。 然而,進行手動測試的人可能會在測試過程中意外發現錯誤。 手動測試的可變性是它的優勢。

單元測試

單元測試僅驗證方法,僅此而已。 被測函數是邊界。 開發人員編寫單元測試,一些 SDLC 框架要求它們。 極限編程需要它們。 它還規定了測試驅動的開發。 這是先寫單元測試的做法。 然後編寫實際的程序代碼。

集成測試

集成測試檢查代碼庫的部分或功能。 它們通常由 DevOps 平台自動化並運行。 他們驗證的內容不止一種方法。 一個示例是驗證 API 調用是否在數據庫中保留了新記錄。 將此與驗證 API 方法的單元測試進行對比。 單元測試只能驗證對數據庫的調用是否應該發生。 集成測試可以證明數據按預期流過應用程序。

系統測試

最終的測試形式是完整的系統測試。 回顧一下,單元測試只驗證一個功能。 集成測試驗證功能。 但是系統測試將整個應用程序視為一個單元。 冒煙測試是一種輕量級的系統測試。 在其中,測試人員像自然用戶一樣與系統交互,並確保其行為符合預期。 與更嚴格的完整端到端系統測試相比。 完整的系統測試將系統的所有部分作為單個實體進行檢查。 此外,一套集成測試可以作為一個完整的系統測試。

5. 部署

部署階段是將經過測試的代碼推送到生產環境中。 自動化部署使其更加可靠。 此外,練習生產部署也會增加順利部署的機率。 開發團隊使用稱為暫存環境的測試環境進行實踐。 它應該與生產的相同。 兩個環境越相似,實踐部署的價值就越大。

6. 維護

到目前為止,SDLC 中的所有內容僅佔總擁有成本的四分之一左右。 軟件的初始開發成本是企業支出的 25%。 維護階段將花費企業大約 75% 的總擁有成本。 對膨脹的維護成本的防禦更多地關注早期階段。 這意味著更好的技術設計、開發和更徹底的測試。 另一種選擇是技術債務。 就像真正的債務一樣,隨著時間的推移,它會變得更加昂貴。

5種主要的軟件開發方法

雖然 SDLC 的步驟是不變的,但它們的實現和執行順序會有所不同。 讓我們看看組織進行軟件開發過程的最流行的方式。

1.敏捷

敏捷的獨特之處在於對人的關注。 敏捷方法重新引起了業界的關注。 之前,重點是產品、軟件。 敏捷挑戰了這一點,並專注於執行該過程的個人。 此外,在敏捷宣言之前,極限編程(XP)和 Scrum 沒有任何联系。 然而,之後,他們的實踐者在敏捷的旗幟下團結起來。

敏捷本身並不是一個框架。 它是框架的框架。 它的核心是關注人和快速迭代。 顧名思義,敏捷。 做得好有實現結果的靈活性。 流程絕不會以犧牲人員為代價,而是從流程中獲取價值。

敏捷的另一個關鍵租戶是迭代方法。 這個想法是在更短的時間內完成工作塊。 這樣,企業可以更快地適應市場的變化。 快速改變開發方向的能力使它變得敏捷。 同時,開發團隊可以從每一次迭代中的經驗中學習並改進。 敏捷團隊在每次迭代後的回顧會議上這樣做。

2.極限編程

極限編程(通常縮寫為 XP)始於 1990 年代初期。 Martin Fowler 是敏捷宣言的最初簽署者之一。 他認為敏捷之所以受歡迎,是因為 XP 框架。 此外,他認為這是開始進行敏捷軟件開發的最佳方式。

XP 得名於它的方法。 它需要常見的良好軟件實踐並需要它們。 這就是它“極端”的原因。 XP 需要諸如單元測試、結對編程、更頻繁地發布之類的東西。

使 XP 成為一種獨特方法的原因是:

  • 迭代周期短(1 到 2 週很常見)
  • 在當前迭代中替換工作項的開放性(Scrum 不允許的)
  • 強調自動化測試和結對編程

3. 精益

精益在技術上不是敏捷,但在實踐中卻有類似的感覺。 現在它被大多數人接受為敏捷的一部分。 它的重點不同於傳統的敏捷。 根據敏捷宣言,“個人和互動優於流程和工具。” 精益比製造商更關注軟件。

它的根源是豐田的精益製造原則。 以下是定義它的七個部分。 如果您熟悉精益生產,這些聽起來很相似。 他們是:

  1. 消除浪費
  2. 擴大學習
  3. 盡可能晚做出決定
  4. 盡快交付
  5. 賦能團隊
  6. 建立誠信
  7. 優化整體

4. Scrum

Scrum 是最流行的敏捷方法。 根據第 14 次敏捷狀態報告,58% 的軟件公司使用 Scrum。 如果包括人渣混合體,則該百分比將躍升至 84%。 這就引出了一個問題,為什麼它最受歡迎?

答案是 Scrum 就是在更短的時間內完成更多的工作。 這對企業很有吸引力。 Scrum 中的每次迭代都是一個“衝刺”。 這個名字強化了速度的概念。 通常,衝刺的時間為 2 到 3 週。 一旦 Scrum 團隊計劃了一個 sprint,任何人都不應更改它。 新工作必須等到下一個 sprint 開始。 這需要業務利益相關者的紀律。 在實踐中,這個 Scrum 規則經常被違反。 這就是為什麼團隊報告經常使用 Scrum 混合。

Scrum 的另一個特點是 Scrum Master。 這是一名被提名負責將衝刺保持在目標上的團隊成員。 通常,Scrum Master 是來自開發團隊的開發人員。

Scrum 最常見的變體是 ScrumBan,它是 Scrum 和看板的混搭。 看板起源於日本豐田製造過程,如精益。 這是一個準時制工作系統。

每一項工作都像是一次迭代。 開發人員一次只做一件事。 該規則是每個開發人員一個“進行中”項目。 這種嚴格的在製品限制可以揭示任何瓶頸。 開發人員通過看板跟踪正在進行的工作項目。 作為旁注,這就是名稱的來源。 在日語中,看板的意思是“招牌”。

5. 瀑布

瀑布方法是所有軟件開發實踐中最早的。 它至少比敏捷早了幾十年。 這種方法也比它的名字更古老。

這是公司一直以來的自然工作方式。 這是一個線性過程,你從頭開始。 首先,利益相關者編譯需求。 他們這樣做不是為了一兩個功能。 不,業務利益相關者立即確定整個項目。 之後,工作開始。 開發人員無需任何迭代即可完成所有工作。

瀑布方式在概念上是最容易理解的。 人們一次只做一件事。 也就是說,這是商業成功的最大風險。 如果某些事情偏離目標,利益相關者在項目完成之前無法糾正它。 原因是在項目完成之前它甚至不會被注意到。

軟件的 3 個核心子類型

成品軟件是三種類型之一。 這些類型是系統、編程和應用軟件。 為了說明,這裡有一個蛋糕烘焙的類比。 攪拌機或抹刀是編程軟件。 在這個類比中,它使您能夠製作更多蛋糕或更多軟件應用程序。 組裝蛋糕時,最底層是系統軟件。 這是基礎。 沒有它,你就不可能有分層蛋糕。 頂層將是應用軟件。 這是大多數不經意的觀察者都能看到的。

系統軟件

計算機的操作系統是系統軟件。 這對它的有用性至關重要。 想像一台沒有操作系統的計算機。 您只能通過機器語言與之交互。 那是純二進制——只有一和零。 你會發現不可能在任何規模上工作。 系統軟件開啟了計算機的實用性。

Windows、macOS 和 Linux 是最流行的系統軟件示例。 設備驅動程序也是系統軟件。 它們擴展了操作系統的基本功能。 沒有操作系統的智能設備使用固件來啟用它們的功能。 它也是系統軟件。

編程軟件

編程軟件是應用軟件的一個子集。 開發人員用來創建新程序的任何程序都會進行分類。 它們的範圍從簡單的文本編輯器到復雜的集成開發環境 (IDE)。 大多數開發人員喜歡更複雜的編程軟件工具。 Microsoft 的 Visual Studio 等程序有助於加快開發速度。

編程軟件

應用程序軟件

應用軟件是最常見的類型。 它是讓你用電腦做事的軟件。 它使計算機變得有用。 流行的例子是 Microsoft Word 和 Excel 等程序。

雲軟件也屬於這一類。 Google Docs、Dropbox 甚至 Instagram 都是應用軟件。 如果您對某個東西是否是應用軟件感到困惑,這裡有一個簡單的測試。 程序是否需要其他東西才能運行? Windows 或 Android 沒有。 它們是系統軟件。 PowerPoint,甚至像《使命召喚》這樣的遊戲確實需要其他東西才能運行,這意味著它們是應用軟件。 沒有設備驅動程序和操作系統,它們就無法執行。

結論

軟件開發的方法仍在成熟中。 然而,無論使用哪種方法,步驟都保持不變。 敏捷團隊可能會更快地迭代它們,而瀑布實踐者會慢慢地從一個轉移到另一個。 然而,要構建更好的軟件,您必須加強每一步的流程。 他們建立在彼此之上。 沒有一個步驟,軟件開發生命週期就不是一回事。 零件構成整體。

想想如果你離開了任何一步會發生什麼。 沒有計劃你在做什麼? 沒有設計,開發過程將是雜亂無章的。 省略開發步驟是不可能的。 缺乏測試可確保產品無法按預期運行。 如果沒有部署,則沒有人可以使用該產品。 未維護的應用程序將被廢棄。 每個步驟對於軟件產品的成功都至關重要。