《系統架構設計師教程(第2版)》第5章-軟件工程基礎知識-05-凈室軟件工程(CSE)

文章目錄

  • 1. 概述
  • 2. 理論基礎
    • 2.1 函數理論
    • 2.2 抽樣理論
  • 3. 技術手段
    • 3.1 增量式開發
    • 3.2 基于函數的規范與設計
    • 3.3 正確性驗證
    • 3.4 統計測試 (Statistically Based Testing) 和軟件認證
  • 4. 應用與缺點
    • 1)太理論化
    • 2)缺少傳統模塊測試
    • 3)帶有傳統軟件工程的弊端

1. 概述

  • 凈室軟件工程(Cleanroom Software Engineering):力圖通過嚴格的工程化的軟件過程達到開發中的零缺陷或接近零缺陷
  • 過程:要求在規約和設計中消除錯誤,然后以“凈”的方式制作

    它的過程模型是在代碼增量積聚到系統的過程的同時,進行代碼增量的統計質量驗證。它甚至提倡開發者不需要進行單元測試,而是進行正確性驗證和統計質量控制。

  • 作用:降低軟件開發中的風險,以合理的成本開發出高質量的軟件

2. 理論基礎

凈室軟件工程的理論基礎主要是函數理論和抽樣理論。

2.1 函數理論

  • 概述:
    • 函數:函數定義了從定義域到值域的映射
    • 程序:一個特定的程序定義了一個從定義域(所有可能的輸入序列的集合)到值域(所有對應于輸入的輸出集合)的映射。
    • 因此,一個程序的規范就是一個函數的規范
  • 函數應當具備的特性
    • 完備性:
      • 對函數:定義域中的每個元素,值域中至少有一個元素與之對應
      • 對程序:每種可能的輸入都必須定義,并有一個輸出與之對應。
    • 一致性
      • 對函數:在值域中最多有一個元素與定義域中的同一元素對應
      • 對程序:每個輸入只能對應一個輸出
    • 正確性:
      • 函數:的正確性可以由上述性質判斷
      • 對程序:由通過基于函數理論的推理來驗證

2.2 抽樣理論

  • 不可能對軟件的所有可能應用都進行測試
  • 把軟件的所有可能的使用情況看作總體,通過統計學手段對其進行抽樣,并對樣本進行測試
  • 根據測試結果分析軟件的性能和可靠性

3. 技術手段

凈室軟件工程中應用的技術手段主要有以下4種

3.1 增量式開發

  • 統計過程控制下的增量式開發 (Incremental Development )
  • 基于產品開發中受控迭代的工程原理——控制迭代
  • 概述:
    • 增量開發把開發過程劃分為一系列較小的累積增量
    • 小組成員在任何時刻只須把注意力集中于工作的一部分

3.2 基于函數的規范與設計

  • 3種抽象層次
    • 行為視圖(黑盒)
    • 狀態機視圖(狀態盒)
    • 過程視圖(明盒)
  • 過程:
    • 從一個外部行為視圖開始
    • 被轉化為一個狀態機視圖(
    • 最后由一個過程視圖來實現
  • 盒子結構是基于對象的

支持軟件工程的關鍵原則:信息隱藏和實現分離。

3.3 正確性驗證

正確性驗證被認為是CSE的核心,正是由于采用了這一技術,凈室項目的軟件質量才有了極大的提高。

3.4 統計測試 (Statistically Based Testing) 和軟件認證

凈室測試方法采用統計學的基本原理,即當總體太大時必須采取抽樣的方法。首先確定一
個使用模型 (Usage Model) 來代表系統所有可能使用的(一般是無限的)總體。然后由使用模
型產生測試用例。因為測試用例是總體的一個隨機樣本,所以可得到系統預期操作性能的有效
統計推導。
凈室軟件工程是軟件開發的一種形式化方法,它可以生成質量非常高的軟件。它使用盒子
結構規約進行分析和設計建模,并且強調將正確性驗證(而不是測試)作為發現和消除錯誤的
主要機制。

4. 應用與缺點

1)太理論化

  • 需要更多的數學知識
  • 正確性驗證的步驟困難、耗時
  • 開發成本較高

CSE要求采用增量式開發、盒子結構、統計測試方法,普通工程師必須經過加強訓練才能掌握,開發軟件的成本比較高昂。

2)缺少傳統模塊測試

CSE 開發小組不進行傳統的模塊測試,這是不現實的。工程師可能對編程語言和開發環境還不熟悉,而且編譯器或操作系統的bug也可能導致未預期的錯誤。

3)帶有傳統軟件工程的弊端

CSE畢竟脫胎于傳統軟件工程,不可避免地帶有傳統軟件工程的一些弊端。


在這里插入圖片描述

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

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

相關文章

UE學習筆記--解決滾輪無法放大藍圖、Panel等

我們發現有時候創建藍圖之后,右上角的縮放是1:1 但是有時候我們可能需要放的更大一點。 發現一直用鼠標滾輪像上滾動,都沒有效果。 好像最大只能 1:1. 那是因為 UE 做了限制。如果希望繼續放大,我們可以按住 Ctrl 再去…

StarRocks實戰——攜程酒店實時數倉

目錄 一、實時數倉 二、實時數倉架構介紹 2.1 Lambda架構 2.2 Kappa架構 三、攜程酒店實時數倉架構 3.1 架構選型 3.2 實時計算引擎選型 3.3 OLAP選型 四、攜程酒店實時訂單 4.1 數據源 4.2 ETL數據處理 4.3 應用效果 4.4 總結 原文大佬的這篇實時數倉建設案例有借…

【計算機網絡_應用層】TCP應用與相關API守護進程

需要云服務器等云產品來學習Linux的同學可以移步/–>騰訊云<–/官網&#xff0c;輕量型云服務器低至112元/年&#xff0c;優惠多多。&#xff08;聯系我有折扣哦&#xff09; 文章目錄 1. 相關使用接口2. 代碼實現2.1 日志組件2.2 Server端2.3 Client端2.3 bug解決 3. 守…

什么是依賴注入(Dependency Injection)?它在 C++ 中是如何實現的?

什么是依賴注入&#xff08;Dependency Injection&#xff09;&#xff1f;它在 C 中是如何實現的&#xff1f; 依賴注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;是一種設計模式&#xff0c;用于減少軟件組件之間的耦合度&#xff0c;提高代碼的可測試性、…

JVM類加載機制以及雙親委派模型的介紹

目錄 1.類加載介紹 2.具體步驟 2.1加載 2.2驗證 2.3準備 2.4解析 2.5初始化 3.加載過程中的策略-雙親委派模型 1.類加載介紹 類加載,指的是Java進程在運行的時候,把.class文件從硬盤讀取到內存,并進行一系列校驗解析的過程. .class文件>類對象.硬盤>內村 類加載…

spring-boot自定義網站頭像(favicon.ico文件)

一、將ico文件存放到resources目錄的static中的favicon下。 二、在application.properties文件中增加配置 spring.mvc.favicon.enabledfalse 三、如需頁面引用如下&#xff1a; <link rel"icon" type"image/x-icon" ref"${request.contextPat…

智能駕駛規劃控制理論學習03-基于采樣的規劃方法

目錄 一、基于采樣的規劃方法概述 二、概率路圖&#xff08;PRM&#xff09; 1、核心思想 2、實現流程 3、算法描述 4、節點連接處理 5、總結 三、快速搜索隨機樹&#xff08;RRT&#xff09; 1、核心思想 2、實現流程 3、總結 4、改進RRT算法 ①快速搜索隨機圖&a…

【計算機網絡實踐】在windows上配置Xshell和Xftp連接Ubuntu系統

hebut的課下作業&#xff0c;學習使用Xshell和Xftp連接Linux系統 1. 軟件需求 Windows10/11、已安裝VM虛擬機的ubuntu系統、Xshell、Xftp。 Xshell和Xftp在家庭/學校免費 - NetSarang Website (xshell.com)里面可以下載到&#xff0c;上面需要的兩個軟件都在&#xff0c;官網免…

運籌學_1.1.2 線性規劃問題-圖解法

1.1.2 線性規劃問題-圖解法 一、圖解法求解步驟&#xff08;只適用于兩個決策變量問題&#xff09;二、圖解法作圖實例三、圖解法分析線性規劃幾種解的情況1、唯一最優解2、無窮多最優解3、無界解4、無解或無可行解 四、圖解法的幾點啟示 一、圖解法求解步驟&#xff08;只適用…

C++sort排序

前言&#xff1a; C語言的sort函數是一類用于數組排序的函數以下是其簡單的使用&#xff1a; 1.頭文件&#xff1a; #include<algorithm> 2.使用命名空間&#xff1a; using namespace std; 3.函數形式&#xff1a; sort(數組名,數組名元素個數,排序函數); 默認排…

深入淺出Redis(一):對象與數據結構

引言 Redis是一款基于鍵值對的數據結構存儲系統&#xff0c;它的特點是基于內存操作、單線程處理命令、IO多路復用模型處理網絡請求、鍵值對存儲與簡單豐富的數據結構等等 這篇文章主要圍繞Redis中的對象與數據結構來詳細說明鍵值對存儲與簡單豐富的數據結構這兩大特點 Redi…

運籌學_1.1.4 線性規劃問題-解的概念

1.1.4 線性規劃問題-解的概念 一、可行解與最優解二、基的概念三、基變量、基向量&#xff1b;非基變量、非基向量&#xff1b;基解、基可行解&#xff1b;四、最優解與可行解、基可行解的關系五、用例題&#xff08;枚舉法&#xff09;鞏固基解、基可行解、最優解三個概念1、例…

flyway實戰

flyway是一款用來管理數據庫版本的工具框架 一, 添加依賴 <dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId> </dependency> <dependency><groupId>org.springframework</groupId>&l…

第十一屆藍橋杯省賽第一場C++ A組 / B組《網絡分析》(c++)

1.題目說明 小明正在做一個網絡實驗。 他設置了 n 臺電腦&#xff0c;稱為節點&#xff0c;用于收發和存儲數據。 初始時&#xff0c;所有節點都是獨立的&#xff0c;不存在任何連接。 小明可以通過網線將兩個節點連接起來&#xff0c;連接后兩個節點就可以互相通信了。 兩…

代碼隨想錄算法訓練營第二十五天 | 216.組合總和III 17.電話號碼的字母組合

216.組合總和III https://programmercarl.com/0216.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8CIII.html#%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E7%89%88%E6%9C%AC class Solution:def combinationSum3(self, k: int, n: int) -> List[List[int]]:result [] # 存放結果集sel…

實現一個移動端焦點輪播圖

HTML結構&#xff1a; 創建一個輪播圖的容器&#xff0c;并在其中放置輪播圖片。 <div id"carousel"> <div class"carousel-item active"> <img src"image1.jpg" alt"Image 1"> </div> <div class&q…

Docker部署ZooKeeper

在分布式系統中,ZooKeeper是一個關鍵的組件,用于協調和管理多個節點之間的狀態。本文將詳細介紹如何使用Docker安裝和部署ZooKeeper,包括非集群部署和集群部署兩種情況。 非集群部署 前期準備 在開始之前,請確保你已經安裝了Docker,并且擁有sudo權限。 關閉防火墻和SEL…

5、DVWA代碼審計(2)

一、csrf 1、csrf(low) 限制 復現 GET /vulnerabilities/csrf/?password_new123456&password_conf123456&ChangeChange HTTP/1.1 Host: ddd.com Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,…

電子電器架構 —— DoIP協議相關的介紹

電子電器架構 —— DoIP協議相關的介紹 我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 沒有人關注你。也無需有人關注你。你必須承認自己的價值,你不能站在他人的角度來反對自己。人生在世,最怕…

監聽者的力量:探索觀察者模式和spring使用

觀察者模式是一種對象行為型設計模式&#xff0c;它定義了對象之間的一對多依賴關系。 觀察者模式通常用于實現分布式事件處理系統、新聞代理或MVC框架的一部分。在這種模式中&#xff0c;一個對象&#xff08;稱為“主題”或“可觀察對象”&#xff09;維護一系列依賴于它的對…