對於《軟體工程》的總結

藝林發表於2016-06-15

軟體工程課程總結

 

一、對前期提出的問題的回答

      學了一個學期的《軟體工程》之後再回顧自己第一天的部落格,重新再看當初提出的問題,如今都在學習和實踐中找到了自己的答案。

 

   1.為什麼我們不能只精通一種語言?

     回答:

     我總結一下自己大學三年的經歷說一說吧。曾經大一的我以為精通C語言就夠了,直到後來學習了Java,後來我發現Java還能寫網站挺不錯,直到發現部署windows太麻煩大三上個學期後又學習了C#,於是乎我以為C#就夠了,結果發現網頁很醜,然後又要學習了HTML/CSS,後來發現這樣還不夠炫,這個學期又有了J2EE的學習。於是就這樣我跟著學校的課程學了一樣有一樣的技能,學的東西越多就會發現,好像自己會的東西越來越不夠用。 

      所以我覺得分階段來說:首先,要做的是,搞定一門語言,我們不說精通,因為沒有幾個人能精通一門語言,說自己精通XXX的,大多是吹噓的。首先要搞定一門語言,如果知道好多門語言,結果做起專案來,稍微深一點的東西就做不了了。其次,你的主要語言周邊的一些東西,開始接觸別的語言。但是,需要注意的是,永遠都是,學一個東西,就要讓這個東西能工作,不然就是浪費時間。  

      我以為我們應該掌握至少兩門語言(當然這只是個人意見,僅供參考):程式導向的和麵向物件的!(1)c語言是程式導向中最好的語言了,而且也比較好學,容易入手! (2)Java是物件導向中最好的語言了,而且現在大部分程式設計都用用的Java。但是這門語言比較難入門,要有耐心。對於專業課當然要學好,資料結構和資料庫當然要學好啦,學不好這些以後的課就很難看懂了!

  

  2.什麼是單元測試?

    回答:

      單元測試(unit testing),是指對軟體中的最小可測試單元進行檢查和驗證。對於單元測試中單元的含義,一般來說,要根據實際情況去判定其具體含義,如C語言中單元指一個函式,Java裡單元指一個類,圖形化的軟體中可以指一個視窗或一個選單等。總的來說,單元就是人為規定的最小的被測功能模組。單元測試是在軟體開發過程中要進行的最低階別的測試活動,軟體的獨立單元將在與程式的其他部分相隔離的情況下進行測試。

     經常與單元測試聯絡起來的另外一些開發活動包括程式碼走讀(Code review),靜態分析(Static analysis)和動態分析(Dynamic analysis)。靜態分析就是對軟體的原始碼進行研讀,查詢錯誤或收集一些度量資料,並不需要對程式碼進行編譯和執行。動態分析就是通過觀察軟體執行時的動作,來提供執行跟蹤,時間分析,以及測試覆蓋度方面的資訊。 

      我認為測試應該是一個挺招程式設計師嫌棄的一個過程。測試到底有什麼用呢?在我看來測試不可能保證一個程式是完全正確的,但是測試卻可以增強我們對程式完整的信心,測試可以讓我們相信程式做了我麼期望它做的事情。測試能夠使我們儘早的發現程式的 bug 和不足。一個 bug 被隱藏的時間越長,修復這個 bug 的代價就越大。在日常的開發中,程式碼的完工其實並不等於開發的完工。如果沒有單元測試,那麼如何保證程式碼能夠正常執行呢?測試人員做的只是業務上的整合測試,也就是黑盒測試,對單個的方法是沒有辦法測試的,而且,測試出的 bug 的範圍也會很廣,根本不能確定 bug 的範圍,還得去花時間來確定 bug 出在什麼地方。難道這就不浪費時間了嗎?甚至,這樣的方式,時間浪費的會更多。

    我的老師在上課的時候曾經警告我們:最後才修改一個 bug 的代過價是在 bug 產生時修改它的代價的10倍。我想正因為是這樣單元測試才顯的重要。它旨在強調在開發功能程式碼之前,先編寫測試程式碼。也就是說在明確要開發某個功能後,首先思考如何對這個功能進行測試,並完成測試程式碼的編寫,然後編寫相關的程式碼滿足這些測試用例。然後迴圈進行新增其他功能,直到完成全部功能的開發。

 

  3.如何讓自己的程式碼更簡潔?

    回答:

      我在之前的部落格上曾經明確的表達過自己觀點:自己的才華應該表現在設計良好的結構和模式,表現在乾淨易懂的程式碼,表現在對空間的尊重,對程式碼的尊重。這樣您才能贏得別人的尊重!程式碼不是一次性的,需要重複的修改和重構,所以我們很多時候是在為未來寫點程式碼。     

      我的總結了幾個步驟,依其重要順序:

       (1)能通過所有測試;(2)沒有重複程式碼;(3)體現系統中的全部設計理念;(4)包括儘量少的實體,比如類、方法、函式等。

        這裡我還有兩個小技巧可以分享:

       (1)空語句:清理垃圾程式碼的最後一步就是刪除空語句,空語句就是指標籤間不存在任何內容的空語句。

     (2)註釋語句:我們在新增註釋語句時,就會要儘量避免新增那些即使刪除後也不會影響網頁原始碼可讀性的註釋語句。 

 

 

  4.軟體開發領域都有那些思想?

     回答:

        對於軟體開發來說大致上可以分成兩種思想:(1)分層思想;(2)模組思想。

 

 

    5.如何開發出符合使用者需求的軟體?

     回答:

       在學習《軟體工程》的過程中我瞭解到,軟體開發是根據使用者要求建造出軟體系統或者系統中的軟體部分的過程。軟體開發是一項包括需求捕捉、需求分析、設計、實現和測試的系統工程。軟體一般是用某種程式設計語言來實現的。 軟體設計思路和方法的一般過程,包括設計軟體的功能和實現的演算法和方法、軟體的總體結構設計和模組設計、程式設計和除錯、程式聯調和測試以及編寫、提交程式。

        要製作出使用者符合客戶需求的軟體,其中需求捕捉和需求分析都顯得尤其重要。在軟體工程中,需求分析指的是在建立一個新的或改變一個現存的電腦系統時描寫新系統的目的、範圍、定義和功能時所要做的所有的工作。首先調查組織機構情況,包括瞭解該組織的部門組成情況,各部門的職能等,為分析資訊流程作準備。然後調查各部門的業務活動情況,包括瞭解各個部門輸入和使用什麼資料,如何加工處理這些資料,輸出什麼資訊,輸出到什麼部門,輸出結果的格式是什麼。協助使用者明確對新系統的各種要求,包括資訊要求、處理要求、完全性與完整性要求。確定新系統的邊界,確定哪些功能由計算機完成或將來準備讓計算機完成,哪些活動由人工完成。由計算機完成的功能就是新系統應該實現的功能。

        

 

2.總結本學期這門課程的體會

       我最初學習《軟體工程》的時候不知道什麼是軟體測試、程式碼管理、甚至連如何規範程式碼都不知道,更別提需求分析這些東西。可以說我對如何開發軟體一無所知。但是經過這個學期的學習和實踐我學到了許多東西。剛開始上課的時候,總是思考如何做好軟體專案。認為學校的課程和考核混亂,所以總是很鬱悶,認為自己學不到東西,尤其是每次到到要自己獨立做東西的時候就感到自己什麼也不會。

    但是《軟體工程》這門課,卻給了我一個很好的指引。這門課程的教學方法也與往常不大一樣,使用微博來反應作業,而不是直接像往常一樣上交作品專案+報告總結的方式。這樣一來我們學生的自主能動性就提高了很多,而且由於有大量的模擬實踐的作業,使得我們學生能夠將之前學過的內容學以致用,從而積累了不少解決問題的經驗。通過這次《軟體工程》的學習,我們拓寬了知識面,鍛鍊了能力,綜合素質得到較大提高。安排課程設計的基本目的,在於通過理論與實際的結合、人與人的溝通,進一步提高思想覺悟。尤其是觀察、分析和解決問題的實際工作能力,我個人覺得這應該算是一門培養成為能夠主動適應社會主義現代化建設需要的高素質的複合型人才的課程了。

 

    回顧我們這一學期的微博,就可以發現老師的用心良苦和自己的點點進步。它的一個重要功能,在於運用學習成果,檢驗學習成果。把課堂上學到的系統化的理論知識,嘗試性地應用於實際設計工作,並檢驗學習成果,看一看課堂學習與實際工作到底有多大距離,並通過綜合分析,找出學習中存在的不足,以便為完善學習計劃,改變學習內容與方法提供實踐依據。對我們來說,實際能力的培養至關重要,而這種實際能力的培養單靠課堂教學是遠遠不夠的,必須從課堂走向實踐。現在我從一開始對軟體開發的兩眼一抹黑,到手慢腳亂地完成四則運算程式,到兩人結對編寫四則運算的合作專案,再到小組的共同製作的耿丹師生基本資訊管理系統的專案,學會了將如何將大一和大二學到的知識都運用到實際來,並且用其來創造出有實用價值的東西來。但是我認為我們學到的還有遠遠比這個更有價值的東西,就是學會了如何和與他人合作共同創作作品,和對自己的自信心。

     軟體工程課程雖已結束,但我知道對於我來說《軟體工程》的學習才剛剛開始。我很感謝這個學期以來老師們對我的教導和幫助,謝謝你們!

 

 

3.對課程的建議

 

      我其實十分喜歡這種寫部落格的教學方法方法。這種方法既能從時間上保證學習進度和學習效率,並能有效的從習慣上調動每個學生的積極性,我個人覺得這種教學方法還是值得采用的。

 

相關文章