軟件工程 實施

2021-10-28 10:50 更新

在本章中,我們將研究軟件視線中的編程方法、文檔和挑戰(zhàn)。

結構化編程

在編碼過程中,代碼行數(shù)不斷增加,從而使軟件的體積增大。漸漸地,幾乎不可能記住程序的流程。如果忘記了軟件及其底層程序、文件、程序是如何構建的,那么共享、調(diào)試和修改程序就會變得非常困難。對此的解決方案是結構化編程。它鼓勵開發(fā)人員在代碼中使用子例程和循環(huán),而不是使用簡單的跳轉(zhuǎn),從而使代碼更加清晰并提高其效率。結構化編程還有助于程序員減少編碼時間并正確組織代碼。

結構化程序設計告訴程序如何編碼。結構化程序設計采用三個主要概念:

  • 自頂向下分析:軟件總是被用來執(zhí)行一些合理的工作。這種合理的工作在軟件術語中被稱為問題。因此,了解如何解決問題非常重要。在自頂向下的分析中,問題都被分解為小塊,每個小塊都有一定的意義。每個問題都單獨解決,并明確說明了如何解決問題的步驟。
  • 模塊化編程:在編程時,代碼被分解成更小的指令組。這些組被稱為模塊、子程序或子例程?;趯ψ皂斚蛳路治龅睦斫獾哪K化編程。它不鼓勵在程序中使用goto語句進行跳轉(zhuǎn),這通常會使程序流程不可追蹤。在結構化編程中禁止跳轉(zhuǎn)并鼓勵模塊化格式。
  • 結構化編碼:參考自頂向下分析,結構化編碼將模塊按執(zhí)行順序細分為更小的代碼單元。結構化編程使用控制結構來控制程序流程,而結構化編碼使用控制結構以可定義的模式組織其指令。

函數(shù)式編程

函數(shù)式編程是編程語言的一種風格,它使用數(shù)學函數(shù)的概念。數(shù)學中的函數(shù)在接收相同的參數(shù)時應該總是產(chǎn)生相同的結果。在編程語言中,程序的流程貫穿整個程序,即程序的控制權轉(zhuǎn)移到被調(diào)用的程序中。當控制流從一個程序轉(zhuǎn)移到另一個程序時,那么程序改變了它的狀態(tài)。

在程序編程中,當使用相同的參數(shù)調(diào)用一個過程時,它可能會產(chǎn)生不同的結果,因為程序本身在調(diào)用它時可能處于不同的狀態(tài)。這是程序編程的一個屬性也是一個缺點,其中程序執(zhí)行的順序或時間變得很重要。

函數(shù)式編程提供了作為數(shù)學函數(shù)的計算手段,無論程序狀態(tài)如何,都會產(chǎn)生結果。這使得預測程序的行為成為可能。

函數(shù)式編程使用以下概念:

  • 初階和高階函數(shù)?- 這些函數(shù)有能力接受另一個函數(shù)作為參數(shù),或者它們返回其他函數(shù)作為結果。
  • 純函數(shù)?- 這些函數(shù)不包括破壞性更新,也就是說,它們不影響任何 I/O 或內(nèi)存,如果不使用它們,可以輕松刪除它們,而不會妨礙程序的其余部分。
  • 遞歸?- 遞歸是一種編程技術,其中函數(shù)調(diào)用自身并重復其中的程序代碼,除非某些預定義的條件匹配。遞歸是在函數(shù)式編程中創(chuàng)建循環(huán)的方式。
  • 嚴格評估?- 它是一種評估作為參數(shù)傳遞給函數(shù)的表達式的方法。函數(shù)式編程有兩種類型的評估方法,嚴格(eager)和非嚴格(lazy)。嚴格評估總是在調(diào)用函數(shù)之前評估表達式。除非需要,否則費嚴格評估不會評估表達。
  • λ-演算?- 大多數(shù)函數(shù)式編程語言使用 λ 演算作為它們的類型系統(tǒng)。 λ 表達式通過在它們出現(xiàn)時對其進行評估來執(zhí)行。

Common Lisp、Scala、Haskell、Erlang 和 F# 是函數(shù)式編程語言的一些示例。

編程風格

編程風格是所有程序員編寫代碼所遵循的一套編碼規(guī)則。當多個程序員在同一個軟件項目上工作時,他們經(jīng)常需要使用其他開發(fā)人員編寫的程序代碼。如果所有開發(fā)人員不遵循某種標準的編程風格來編寫程序,這將變得乏味或有些困難。

適當?shù)木幊田L格包括使用與預期任務相關的函數(shù)和變量名稱、使用適當?shù)目s進、注釋代碼以方便讀者以及代碼的整體呈現(xiàn)。這使得程序代碼可讀和易于理解,從而使調(diào)試和錯誤解決更容易。此外,適當?shù)木幋a風格有助于簡化文檔和更新。

編碼規(guī)則

編碼風格的實踐因組織、操作系統(tǒng)和編碼本身的語言而異。

組織的編碼規(guī)則可以定義以下編碼元素:

  • 命名約定?- 定義如何命名函數(shù)、變量、常量和全局變量。
  • 縮進?- 行首留下的空間,通常是 2-8 個空格或單個制表符。
  • 空白?- 通常在行尾省略。
  • 運算符?- 定義編寫數(shù)學、賦值和邏輯運算符的規(guī)則。例如,賦值運算符=前后應該有空格,如x = 2。
  • 控制結構?- 單獨以嵌套方式編寫if-elsecase-switch、while-util 和控制流語句的規(guī)則。
  • 字符長度和換行?- 定義一行中應該有多少個字符,大多數(shù)情況下一行是 80 個字符長。換行定義了一條線如果太長的話,應該如何換行。
  • 函數(shù)?- 定義函數(shù)應該如何聲明和調(diào)用,帶參數(shù)和不帶參數(shù)。
  • 變量?- 這提到了如何聲明和定義不同數(shù)據(jù)類型的變量。
  • 注釋?- 這是重要的編碼組件之一,因為代碼中包含的注釋描述了代碼的實際作用以及所有其他相關的描述。這部分還有助于其他開發(fā)人員創(chuàng)建幫助文檔。

軟件文檔

軟件文檔是軟件過程的一個重要組成部分。一份寫得很好的文檔提供了一個很好的工具和方法,它是了解軟件過程所必需的信息存儲庫。軟件文檔還提供有關如何使用該產(chǎn)品的信息。

維護良好的文件應包括下列文檔:

  • 需求文檔?- 本文檔是軟件設計人員。開發(fā)人員和測試團隊執(zhí)行各自任務的關鍵工具。本文檔包含預期軟件的所有功能、非功能和行為描述。
    該文檔的來源可以是之前存儲的有關軟件的數(shù)據(jù)、已經(jīng)在客戶端運行的軟件、客戶的訪談、問卷和研究。一般以電子表格或文字處理文檔的形式存儲在高端軟件管理團隊中。
    該文檔是要開發(fā)的軟件的基礎,主要用于驗證和驗證階段。大多數(shù)測試用例是直接從需求文檔構建的。
  • 軟件設計文檔?- 這些文檔包含構建軟件所需的所有必要信息。它包括:
    • 高級軟件架構
    • 軟件的設計細節(jié)
    • 數(shù)據(jù)流圖
    • 數(shù)據(jù)庫設計
      這些文檔作為開發(fā)人員實施軟件的存儲庫。盡管這些文檔沒有提供有關如何編碼程序的任何詳細信息,但它們提供了編碼和實施所需的所有必要信息。
  • 技術文件?- 這些文檔由開發(fā)人員和實際編碼人員維護。這些文檔作為一個整體代表了有關代碼的信息。在編碼代碼時,程序員還會提到代碼的目標、誰編寫的、在哪里需要它、它做什么以及它是如何做的、代碼使用了哪些其他資源等。
    技術文檔增加了處理相同代碼的不同程序員之間的立節(jié)。它增強了代碼的重用能力。它使調(diào)試變得容易和可追溯。
    有各種可用的自動化工具,其中一些帶有編程語言本身。例如 Java 自帶 JavaDoc 工具來生成代碼的技術文檔。
  • 用戶文檔?- 本文檔不同于上述所有說明。保留所有以前的文檔,以提供有關軟件及其開發(fā)過程的信息。但是用戶文檔解釋了軟件產(chǎn)品應該如何工作以及如何使用它來獲得所需的結果。
    這些文檔可能包括軟件安裝過程、操作指南、用戶指南、卸載方法和特殊參考,以獲得更多信息,如許可證更新等。

軟件實施挑戰(zhàn)

開發(fā)團隊在實施軟件時面臨一些挑戰(zhàn)。其中一些如下所述:

  • 代碼重用?- 當前語言的編程接口非常復雜,并配備了龐大的庫函數(shù)。盡管如此,為了降低最終產(chǎn)品的成本,組織管理層更愿意重復使用之前為其他軟件創(chuàng)建的代碼。這是程序員在兼容性檢查和決定要重用多少代碼時面臨的巨大問題。
  • 版本管理?- 每次向客戶發(fā)布新軟件時,開發(fā)人員都必須維護與版本和配置相關的文檔。該文單更需要高度精確并按時提供。
  • 目標主機 - 組織中正在開發(fā)的軟件程序需要為客戶端的主機設計。但有時,不可能設計出在目標機器上運行的軟件。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號