【軟體工程理論與實踐】Homework(四.1)
1、閱讀和了解什麼是形式化方法
先了解一下形式化方法的定義:
形式化方法英文的名稱是formal methods。在邏輯科學中是指分析、研究思維形式結構的方法。它把各種具有不同內容的思維形式(主要是命題和推理)加以比較,找出其中各個部分相互聯結的方式,如命題中包含概念彼此間的聯結,推理中則是各個命題之間的聯結,抽取出它們共同的形式結構;再引入表達形式結構的符號語言,用符號與符號之間的聯絡表達命題或推理的形式結構。 ——百度百科
由定義和百度百科的一些例子看來,我認為形式化方法是通過藉助數學的一些方法(比如各個命題的真假)來解決一些軟體工程領域的問題,同時通過這些命題來進行推理和驗證。形式化方法的出發點就是數學邏輯方法,其目的是開發可靠的軟體產品。
同時閱讀了一些使用形式化方法開發軟體的一些例子,以下簡略的寫一寫:
形式化方法在系統軟體開發領域也取得了許多成果。這方面最重要的成果之一是CompCert編譯器。編譯器顯然是最重要的系統軟體,目前正在執行的絕大多數程式都是編譯器生成的。但是,常用編譯器都沒經過驗證,並不保證目的碼與原始碼語義一致。2012年法國研究者釋出了經過驗證的優化編譯器CompCert,後不斷增加功能。目前版本能處理ANSI C幾乎所有特徵和一些C99擴充,能生成PowerPC、ARM和X86程式碼,支援64位系統結構、分別編譯和連線,能生成DWARF除錯資訊和語法錯誤的解釋等。CompCert基於計算機輔助證明系統Coq開發,嚴格證明了目的碼與源程式的等價性。X. Yang等人的論文Finding and Understanding Bugs in C Compilers(PLDI 2011)報告了他們用6年時間檢查各種在用編譯器(包括VC、gcc等)錯誤的工作,只有當時版本的CompCert驗證過的部分沒發現錯誤,其他廣泛使用的編譯器都發現了錯誤。
近年的另一有趣工作是2015年MIT學者開發的經過驗證的檔案系統FSCQ(SOSP 2015),可以保證在使用中任何時候系統崩潰,系統重新boot都能正確恢復,不會丟失資料(稱為crash safety)。常規的檔案系統並沒有這種保證。
美國國防部的HACMS專案(High-AssuranceCyber Military Systems,高可信軍事網路系統)的目標是開發高可信、黑客無法入侵的軍用系統。該專案的一個成果是一個無人機控制系統,開發成功後組織白帽黑客攻擊,沒被攻破。該系統的基礎是經過形式化驗證的OS核心seL4,在該核心上用Isabelle形式化工具開發和驗證整個系統。HACMS專案的另一成果是邵中領導開發的經過驗證的支援多核CPU的作業系統核心CertiKOS(OSDI’16)。
顯然,上面這些例子中提到的軟體都是非常重要而且比較難完成的。這些工作通過形式化方法來完成,說明形式化方法確實能用於做軟體,而且能做出最高質量的重要軟體。
可以瞭解到,目前軟體形式化開發還處在起步階段,許多問題尚未研究。有人質疑它是否能夠嚴格保證由證明正確的部分構造出的系統仍然正確,即使這些部分是基於不同方法構造出來的。作為與常規方式不同的另一種軟體質量保證手段,形式化方法將怎樣與常規開發方法相互作用?雖然現在關於形式化方法的很多事情都還不清楚。但無論如何,使用形式化方法開發、驗證軟體這方面工作已經取得了實質性進展,並已開始在實際領域發揮作用。
形式化方法在軟體工程領域的應用現在雖然還比較少,但是這種形式化開發方法已經逐步地進入了軟體開發的領域。我們也應該及時學習一下這些新的方法,因為有的軟體規範標準提到,其最高階別的質量保證都要求形式化方法,雖然目前有些作為選擇性要求,但只是因為目前運用這種方法撰寫時還缺乏實踐基礎。但是相信這種方法的前途不可限量。相信以後我們還可以看到更多運用形式化方法開發、驗證的軟體。
相關文章
- 【軟體工程理論與實踐】Homework(一.2,3)軟體工程
- Gradle理論與實踐四:自定義Gradle外掛Gradle
- 軟體測試理論(1)基礎理論
- js正則理論與實踐JS
- 理解RESTful:理論與最佳實踐REST
- 軟體工程1軟體工程
- 軟體工程實踐專案學習與執行日誌軟體工程
- 軟體測試學習教程—軟體測試基礎理論四
- 深入解析Rivest Cipher 4:理論與實踐
- 密碼學與密碼安全:理論與實踐密碼學
- 下一代軟體工程的思考與點滴實踐軟體工程
- 軟體工程與管理實驗3軟體工程
- 理論+實踐解析“IT治理”之模式與原則模式
- 軟體工程-論文查重軟體工程
- 軟體工程 第一章 軟體與軟體工程軟體工程
- homework1
- 軟體工程日報1軟體工程
- 從Monolith到微服務:理論與實踐 - Kent BeckMono微服務
- Vue微前端架構與Qiankun實踐理論指南Vue前端架構
- 神經網路理論與工程實戰-知識積累神經網路
- Android 常見安全漏洞修復理論與實踐Android
- 讀《大道至簡:軟體工程實踐者的思想》有感軟體工程
- DevOps 從理論到實踐指南dev
- Flutter 自定義 Widget(理論+實踐)Flutter
- [程式設計]UML語言:理論之光與實踐之惑程式設計
- 嚴建兵 | 玉米基因組育種的理論與實踐
- 【智慧製造】首鋼智造的理論探索與實踐
- 論軟體工程師的自我修養:角色、重構與質量軟體工程工程師
- 概率論與數理統計(1)
- 軟體測試基礎理論
- 軟體工程的實踐專案課程的自我目標軟體工程
- 《大道至簡——軟體工程實踐者的思想》讀後感軟體工程
- 軟體過程與管理實驗1
- 【軟體工程】團隊作業1軟體工程
- [Docker]寫 Dockerfile 的最佳實踐理論Docker
- 《軟體工程導論》課後習題答案軟體工程
- 軟體工程概論18918第一節課軟體工程
- 軟體工程方法論對軟體開發有多大的用處?軟體工程