軟件工程 實(shí)施

2021-10-28 10:50 更新

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

結(jié)構(gòu)化編程

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

結(jié)構(gòu)化程序設(shè)計(jì)告訴程序如何編碼。結(jié)構(gòu)化程序設(shè)計(jì)采用三個(gè)主要概念:

  • 自頂向下分析:軟件總是被用來(lái)執(zhí)行一些合理的工作。這種合理的工作在軟件術(shù)語(yǔ)中被稱(chēng)為問(wèn)題。因此,了解如何解決問(wèn)題非常重要。在自頂向下的分析中,問(wèn)題都被分解為小塊,每個(gè)小塊都有一定的意義。每個(gè)問(wèn)題都單獨(dú)解決,并明確說(shuō)明了如何解決問(wèn)題的步驟。
  • 模塊化編程:在編程時(shí),代碼被分解成更小的指令組。這些組被稱(chēng)為模塊、子程序或子例程?;趯?duì)自頂向下分析的理解的模塊化編程。它不鼓勵(lì)在程序中使用goto語(yǔ)句進(jìn)行跳轉(zhuǎn),這通常會(huì)使程序流程不可追蹤。在結(jié)構(gòu)化編程中禁止跳轉(zhuǎn)并鼓勵(lì)模塊化格式。
  • 結(jié)構(gòu)化編碼:參考自頂向下分析,結(jié)構(gòu)化編碼將模塊按執(zhí)行順序細(xì)分為更小的代碼單元。結(jié)構(gòu)化編程使用控制結(jié)構(gòu)來(lái)控制程序流程,而結(jié)構(gòu)化編碼使用控制結(jié)構(gòu)以可定義的模式組織其指令。

函數(shù)式編程

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

在程序編程中,當(dāng)使用相同的參數(shù)調(diào)用一個(gè)過(guò)程時(shí),它可能會(huì)產(chǎn)生不同的結(jié)果,因?yàn)槌绦虮旧碓谡{(diào)用它時(shí)可能處于不同的狀態(tài)。這是程序編程的一個(gè)屬性也是一個(gè)缺點(diǎn),其中程序執(zhí)行的順序或時(shí)間變得很重要。

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

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

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

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

編程風(fēng)格

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

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

編碼規(guī)則

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

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

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

軟件文檔

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

維護(hù)良好的文件應(yīng)包括下列文檔:

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

軟件實(shí)施挑戰(zhàn)

開(kāi)發(fā)團(tuán)隊(duì)在實(shí)施軟件時(shí)面臨一些挑戰(zhàn)。其中一些如下所述:

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)