嘛。。不知不覺這門課程要結束了,那麼就再說點啥以示慶祝唄。html
說到這個,相比不少人對此其實頗有疑惑,請讓我慢慢分析。安全
首先咱們來看看兩種方式各自的作法和流程是什麼樣的:多線程
在測試中,咱們是這樣的一個流程
併發
此外,爲了保證測試能覆蓋到工程代碼的每個區域,須要保證測試的覆蓋率。框架
在證實中,咱們是這樣的一個流程
性能
在這一過程當中單元測試
repOk
永真性證實依賴於JSF中的modifies
項effects
和requires
項基於以上的邏輯,咱們不難發現一個細節:學習
或者更具體地說,這裏多出了一個名爲假定的字眼。測試
這是什麼緣由的?其實說來也很是簡單——由於測試,只能證實程序有錯,而不能證實程序是對的。ui
雖然有大數定律的理論支撐(即只要測試集數量無限大,則一定能夠覆蓋一切狀況),但是實際上並不存在無限大的測試集,故測試上的死角總仍是會存在的。
設一個有限集 $ T $ ,爲測試集(單元測試中的測試集不可能作到無窮),而 $ S $爲全集。然而,在實際狀況下,可能遇到的狀況經常是無窮多的,故 $ S $ 是一個無窮集。
故,$ \complement^{S}{T} $ 即爲測試集沒有覆蓋到的地方。又 $ T $ 有窮, $ S $ 無窮,故 $ T \subset S $ 恆成立,$ \complement^{S}{T} \neq \emptyset $
故永遠有覆蓋不到的數據,且對於這部分沒法覆蓋到的區域,是沒法僅依靠測試來證實正確性的。
故基於測試的正確性驗證的嚴謹性問題是不可避免的。若要嚴格意義上地論證正確性,基於程序邏輯的正確性證實是惟一的選擇。
在上面的分析中,咱們論證了單元測試方法存在的硬傷。
然而,咱們爲啥還要保留這樣的方法呢?
由於,實際問題與應用大都不是一元線性的,而是時間、經濟、人力等多方面成本以及多方面效益指標所構成的高維量。
其實,在工業界各種應用中,經常有如下兩種模式能夠長久而穩定的存在:
實際上,不只在計算機行業,在其餘工業界乃至於商業中,也經常會造成這樣兩種模式並存的局面。
而反映在軟件質量保證領域,則分別是基於程序設計邏輯的正確性證實(正確性從原理層面上就有絕對的保障,但是成本嘛,各位都寫過一次論證,體驗過其成本之高昂)和面向數據指望的單元測試(操做很是簡便,方便大範圍部署,且能覆蓋絕大部分實際狀況)。
因此,在實際應用中
說到底,這二者其實很難去嚴格區分一個優劣。不少問題,根本上仍是一句話——具體問題具體分析,適合的就是對的。
OCL,英文全稱object constraint language
,翻譯過來就是對象約束語言。
顧名思義,其做用在於對設計的對象進行約束,且保證不存在二義性。且實際上,OCL和UML(統一建模語言,Unified Modeling Language
)捆綁使用。
從以上的一些基本概述中,咱們不難發現OCL實際上和JSF有着類似之處:
然而進一步研究與分析,其區別也是很大的:
而至於具體應用呢,則仍是老規矩——適合的就是最好的。在不一樣的工程項目,不一樣的場合下,天然會有不一樣的選擇。
首先,咱們來回顧下咱們這學期四章的各個標題:
其實這很明顯,是一個按部就班的過程,體如今兩個不一樣的層面上:
實際上,筆者在多年前,就已經接觸並使用了面向對象程序設計語言。
因此,實際上在這個學期,筆者的主要收穫以下:
關於工程化呢,其實說難也難,說簡單也簡單得很。
一些具體的好處呢,筆者在前三次博客做業中均有不一樣程度的論述(此處再也不贅述):
不過說到底呢,其實就幾件事:
關於這個問題,筆者在兩三個月前,就已經開始思考了。
衆所周知,面向對象課程的槽點仍是不算少的。
不過,據筆者看,這些問題看似龐雜,可是只要仔細去理一理背後的邏輯關係,其實也很簡單。
筆者根據自身瞭解的一些事實,和大半個學期以來的觀察與分析,粗略的獲得了下面的這張邏輯圖:
不過這樣一來,看似錯綜複雜的事情也就清楚了。
稍加觀察,即可以發現問題的根源——沒有一個相對公平合理的橫向比較機制。(稍微瞭解拓撲排序的概念,即可以得出這樣的結論,找到節點的上游)
其實,不少同窗(包括16級的和之前的學長學姐們)以前所吐槽過的問題,根源都在這邊。
假如,咱們有一個很靠譜的自動化橫向比較機制
實際上,想作出改變,也並不難,好比:
Special Judge
和提交答案題裏面的部分分機制相結合,讓程序只要不違背基本法(例如電梯不許瞬移不許分身)就能有分數,且各個水準的程序得分有梯度。codeforces
那樣的多對多大混戰hack模式(也能夠考慮待測程序不匿名,今後再也不有無效做業的坑),保證互測的運氣成分降到最低。固然以上只是一些初步構想,筆者對於這個(自認爲)靠譜的新制度,已經有了更深層次的計劃和構想,更具體的計劃等細節將在另外一篇文章中詳細闡述。
筆者寫到這裏以前,看過以前很多同窗的一些思考與建tu議cao。
不得不說,雖然大部分的所謂分析徹底流於表面,透過現象看本質的幾乎沒有(截至2018.6.25 6點整),可是,你們反映的問題,也很真實,或者說很真實地描繪了大衆水平同窗眼中的面向對象課程。
說這個,其實不是想吐槽各位(實際上,筆者更但願你們能繼續描述心裏的真實體驗)。
引用筆者以前說過不止一遍的一句話
無法帶來絲毫改變,甚至只會讓事情更壞的怒火,是毫無心義的。
因此呢,但願接下來看到筆者文章的各位,能在吐槽的基礎上和自身能力所及的狀況下,進行更深刻的思考,能夠的話也多想一想到底如何才能讓事情變得更好,而不是一味地抱怨與泄私憤。
抱怨沒有用,實幹才能解決問題。