《現代軟體工程——構建之法》第1~5章讀後感及問題

羅偉業發表於2015-04-16
開篇就講到一個概念即:軟體=程式+軟體工程。
 開始讀這本書,最大的感受的感受就是軟體工程原來是可以這麼學的,以前學習程式設計課程的時候,總是感覺這類課程及其枯燥無味,總是在說太多的理論,很少 會涉及到實踐,甚至根本就是沒有實踐這個環節,所以學習很無聊,但是讀到這本書,真的是全新的感受,首先,不僅僅只是在說理論了,加入了很多實 踐的東西。
       開篇作者就說了“軟體 = 程式 +軟體工程”,以前寫軟體或者說程式,就只是寫程式,最多會考慮到資料結構的知識,很少會用到軟體工程,但是隨著學習的深入,程式碼量的累積,如果還是和以 前一樣只是關心程式只要是可用的,實際可執行的,那麼就沒有意義了,這樣的程式寫出來也是沒有價值的,首先,軟體工程不僅僅就只是涉及到計算機或者軟體方 面的知識,相反,軟體工程涉及了很對其他學科的知識,比如:管理學、數學、工業設計等等學科,一個合格的軟體開發人員如果只是懂得怎樣去寫程式,那麼嗨僅 僅只是初級階段,更高階的應該是從一個更加高階的層面上去考慮更多的東西,如整個軟體的架構。
     如何深刻的認識軟體工程與其他程式設計課程的區別?
 
2.個人技術和流程
        現在的開發往往是很多人合作完成一款軟體應用,不同的開發人員之間就存在依賴關係。我需要呼叫你寫的程式碼模組,你也需要呼叫我寫的程式碼模組,但是因為不瞭解模組的變化,模組沒有達到高內聚低耦合造成了對其他模組的影響,往往會產生錯誤。在確定釋出這個模組的時候,要經過完整的單元測試,為了達到事半功倍的效果,我們可以把規格說明說寫得詳細一些,詳細到各項要求都可以表示為一個單元測試用例。
       卡耐基梅隆有一套個人開發流程,很適用於我們做個人開發。接到專案之後我們可以按照以下幾個步驟來進行,
       估算時間--->需求分析--->生成設計文件--->設計複審--->程式碼規範--->具體設計--->編寫程式碼--->程式碼複審--->程式碼測試--->記錄用時--->測試報告--->計算工作量--->總結--->討論改進。隨著工作年限的增長,編碼所佔的比例會越來越小,因為開發不再是一味地編碼,測試所佔的比重會越來越高,保證質量要求。
       如果個人技術薄弱,善於應用他人的模版並加入新的元素組成一個軟體。這條路可以走下去嗎?
 
3.軟體工程師的成長
       那麼,我們為什麼要用軟體工程呢?因為軟體工程把開發,運營,維護的過程中的技術,做法,習慣和思想結合到一起(軟體開發流程)提高了軟體開發,運營,維護的效率。同時,運用軟體工程,也減輕了我們的工作量,避免不必要的返工。
      怎麼提高技能?通過不斷的努力,把那些低層次的問題都解決了,變成不用經過大腦的自動操作,然後才有時間和腦力來解決較高層次的問題。我們要精通低層次問題(int[] arr還是int arr[],ArrayList 還是 Array<T>),中層次問題(使用何種架構),高層次問題(效能優化。。。。。。).
      軟體工程師所具備的基本素質,在課程中都能有提升嗎?
 
4.兩人合作
      現在的開發已經很少是單獨完成的,最少也是兩個人了。我們寫程式碼不僅僅要讓機器瞭解,更要讓別人看得懂,讓你的隊友看得懂。這就需要程式碼規範。程式碼規範分為程式碼風格規範和程式碼設計規範。程式碼風格規範包括:縮排,行寬,{}的位置,分行,命名,大小寫。其中我認為比較重要的有:每個語句只定義一個變數,做一個操作。即便IF和ELSE語句只有一句,也使用{}。在變數名中加入下劃線表示作用域,如m_iAge。
       程式碼設計規範不光是程式書寫的問題了,而且牽涉到程式設計,模組之間的關係,設計模式等等。
       一個函式只做一件事。
       按照public,protected,private順序來說明類中的成員。
       在小型軟體開發過程中,有一種模式叫做結對程式設計,在這種模式下,一對程式設計師一起完成設計,程式碼,測試,文件工作,由於每個工作都被兩雙眼睛看過,程式的初始質量取決於各方面水平較高的那一位程式設計師,在整個開發過程中不斷地進行著潛移默化的複審。
       兩人合作的基礎是強帶弱。優帶差模式,帶動差生學習的積極性,並幫助差生好。還是強強聯合 ,互補模式好?如何選取隊友?
 
5.團隊和流程
        什麼是團隊?團隊有一致的集體目標,團隊要一起完成這個目標。團隊成員有各自的分工,互相依賴合作,共同完成任務。剛開始創業時,一些程式設計師聚在一起想寫出好的程式,蜂擁而上一起解決問題,這是最簡單的模式(一窩蜂模式)。逐漸地,團隊就會過渡到以下模式。
        主治醫師模式:有一位首席程式設計師,負責處理主要模組的設計和編碼,其他成員從各種角度支援他的工作。
        社群模式:有一些志願者參與自己感興趣的專案,不拿報酬,如linux社群。
        業餘劇團模式:這樣的團隊在每一個專案中,不同的人會挑不同的角色。在下一個專案中,這些人也許會完成換成另外一個角色。團隊有個老大指揮一切。
        功能團隊模式:具備不同能力的同事們平等協作,共同完成一個功能。
        一起做軟體,總要有一些開發方法,比如:
        謝了再改模式:不需要太多的知識,直接上手寫程式碼,一直改,直到釋出。
        瀑布模型:單向不可逆,最終產品直到最後才出來。按照需求分析-編碼測試-釋出一步步走下來。力求一次完成。
        RUP統一過程:在大的尺度上像瀑布模型,在每個階段內像迭代模型。初始階段:分析系統大概的構成,和什麼樣的外部實體打交道,大致的成本和預算是多少。細化階段:編制專案計劃,確認主要的功能,效能。構造階段:把所有的功能集測試併發布為Beta版。交付階段:基於使用者的反饋,不斷進行修改。
一個團隊的核心應該是技術過硬的人員還是組織能力強,靈活,善於運用模版結合的人員?
      最後也希望能在老師的教導下學好這門課程

相關文章