2008年9月17日 星期三

軟體工程

最近在決定要修什麼課~
因為,最近在要修改學長的程式~在使用Qt,也就是C++的延伸~
所以,本來預定要選修「物件導向軟體工程」的,但是,很可惜的是,
課程使用的課本是用java語言的,而C++與java又非常的像~
因為,我C++也不是很熟~很怕被同時搞混~
所以,目前決定先不要選「物件導向軟體工程」這一門課~

目前的決定是:
打算選「軟體品質管理」,然後,旁聽「英文」、「 電腦通訊網路」、「 模糊邏輯」。

在聽過我們成大資工軟體大老「朱治平教授」,上的這兩門課之後,對軟體有一些新的認識~

這裡把它整理出來吧~
物件導向出來之前,我們寫一個系統是用功能去細分的,像是一個提款機,它有很多功能,我們就一直把它細分成許多功能~細分成不能在細分之後,就由最小的功能慢慢的寫到整個系統~

而物件導向出來之後,我們就是把系統分成許多「元件」,而「元件」是由許多的物件所組合而成的~而「元件」和「功能」最大的差別在於re-use。
只要可以增加re-use的比率,我們就可以減少re-work的比率,就可以多花一點時間在增加軟體品質上,而什麼叫作軟體的品質,這又是一個大問題~在軟體分為「功能面」與「非功能面」,而非功能面要如何量化~像是如何去計算寫這一個程式要花多少成本,也是一個目前的問題~

而軟體主要的功能有兩個部分~
1. 是輔助的角色:像是嵌入式的系統,主要是focus在硬體上面,軟體只是去如何操作這一個硬體。
2. 是主要的角色:像是office,電腦上的應用程式;硬體只是讓軟體可以在上面操作的一個輔助角色。

而老師在上課也有提到一些重點,軟體有其獨特性:
1. 軟體修改容易:假設我們寫了一個系統,在其中一個output出現錯誤~這個時候我們可能知道大概哪裡出了問題,這個時候我們把它作部分修改之後,測試ok,output正常,那就完成了~問題是,會不會還有其它元件,會使用到這一個部分~但是,我們沒有針對它去測試,直到最後,一堆隱藏的問題本來不會浮現,一起出現時,就會出現問題~就像豆腐和波菜,分別吃不會有問題,一起吃就會出現問題~
2. 軟體複製容易:若與硬體廠商做比較,硬體廠商在完成一個成品之後,之後要量產時,仍然需要一堆硬體成本~而軟體的話,像是你幫一家公司設計了一個人事管理系統,當要替第二家公司也設計人事管理系統時,這個時候你所需要的成本就相對的非常的少了~
3. 軟體不容易測試:同樣的也是相對硬體來說,當你設計好一個洗衣機時,如果要測試是否合格,那麼最多只是加入不同量的衣服來測試它的極限~但是,依軟體來說~很難說要拿哪一些情況來測試這一個程式,因為,可能性是在太多了~老師上課說了一個例子,就像100個迴圈,用最簡單的情況來說~若只有false與true兩個情況,那麼就有2的100次方個情況~

軟體工程就是學如何做好專案管理:若文件寫的好,有照一定的規範走,就算公司新人來也可以馬上接下來~若管理的不好,設計師一走,整個專案馬上就掛點~

而在設計一個管理系統時,軟體就是一個工具,仍然需要domain knowledge;像是客運的管理,薪水的管理、進貨存貨管理~這一些都是需要domain knowledge的~

而我目前自己想了一下,寫程式的程序應該是這樣~
思考架構(若遇到不確定程式是否有支援我們的需求可以寫一個單元程式來試試看)-撰寫程式(最好每寫一個程式,然後,單元測式)-測試整體程式

但是,基本上,應該大部分的程式設計師都沒有做到那麼詳細吧~反正,先把程式趕出來再說~誰管你後面的人接的如何啊?

軟體工程絕對是有用的,最佳的實例就在印度。你只消看看印度的軟體產業,如此講究軟體工程,而且開發軟體的成績如此輝煌,你就應該知道:軟體工程除了可以拿來發表論文幫助學生取得學位或幫助教授升等之外,也確實是可以幫助軟體工業的。

可以參考這兩篇文章
軟體工程的弔詭沒人在乎軟體工程

另外一提:在成大要取得「軟體工程學程」要修過五門課~
三門必修:軟體工程物件導向軟體工程CMMI
選修(選兩門):(PSP)Person Software Process軟體品質軟體度量

就是因為軟體彈性很大,所以,才不易整合~倘若像硬體功能簡單化,就很容易管理了~
但是,彈性大就是軟體的特性,因為,我們必需要制定一些規範來統一文件的撰寫方式~

CMMI與大便風牛肉麵
成也 CMMI ,敗也 CMMI?

沒有留言: