CMMI-DEV簡介
CMMI-DEV是基於CMMI發展出來的開發專用規範指引,以下將分別介紹何謂CMMI、CMMI的目的,一直談到CMMI-DEV有哪些成熟度等級等等。
CMMI 指的是能力成熟度整合模式(Capability Maturity Model Integration : CMMI),是美國國防部委託卡內基美隆大學軟體工程學院
(Software Engineer Institute : SEI)所發展的,目前有以下版本問市
v1.1: 2002年問世,為CMMI的第一個版本
v1.2: 2006年問世
v1.3: 2010年問世,為最後一版免費版本,並包含DEV/SVC/ACQ等三個版本
v2.0: 2018年問世,但開始要收費了,所以我也拿不到相關細節,也因此大家大都還是以v1.3為主要參考內容
CMMI分為三個分部
CMMI-DEV: 軟體開發指引
CMMI-SVC: 服務提供引
CMMI-ACQ: 採購指引
大家主要說的CMMI還是以CMMI-DEV為主,以下也以CMMI-DEV v1.3為主要介紹內容,參考文件則為資策會翻譯的CMMI-DEV v1.3中文版,英文版的CMMI-DEV v1.3下載網頁在 https://resources.sei.cmu.edu/library/asset-view.cfm?assetID=9661 ,中文版則可以由 http://www.tisa.org.tw/uploads/file/CMMI-DEV_1-3_-Chinese-v7.pdf...
群組版規實務
社群媒體發達,生活中到處都有群組的影子,群組運作就了就會有越來越多光怪陸離的現象發生,為了解決這些問題,通常會進行管理團隊的推派與版規的建立,並不是所有的社群媒體都會有真正的群主(或稱之為群組管理者),例如Line群組就是個人人是版主、人人有權力的世界,所以第一個動作就是推派群主,雖然這個群主的操作權限不一定跟別人一樣,但是大家會約定成俗地由這些群主進行一些特殊的工作
警告
提出群組
制定群規
那群規有哪些東西要制定呢?
群組目的:至少要把當初建立群組的目的說清楚,這是接下來所有群規的依據
群規:
第一個群規大都是約束大家不要有情緒性字眼以及不尊重他人的字眼或指控
接下來會建議大家那些話題儘量避免,一般就是幾個:政治、宗教與違法議題
也會請大家避免進行借貸或者邀請大家投資等議題,如有需要就建立其他群組
如果真的要討論一些避免提及的議題,請詳細描述個人意見,不要只是轉貼
規定邀請機制,是要設定群組為公開或者封閉邀請制
不得任意修改群組名稱
懲罰規則制定:幾次違規要如何處理,幾次違規會踢出群組等等
群主權力的賦予,所有人約定成俗
尊重他人,所有人都有發言權,你沒有資格要求別人不要提出任何議題,除非版規有嚴格規定
是否禁止廣告或者限制發廣告的方法
是否允許早安圖、問候文等等
是否允許接龍
是否建立記事本收集成員資訊或者建立記事本提供成員分享資訊
以上是幾個比較常在板規中出現的資訊,但也可能因為實際狀況而增加相關資訊,大家就參考看看吧!
下載Youtube的各種方法
下載Youtube影片的工具很多,但很多工具都有限制,例如DVDVideoSoft的工具只能下載三分鐘內的檔案,因此有朋友問我怎麼辦,我自己是使用Synology的Downloader工具,他會自動更新軟體符合Youtube的相關變化,但不是每個人都有Synology的NAS,因此在網路上找了一下,發現"Youtube Downloader HD"應該就是最接近需求的軟體。
Youtube Downloader HD
Youtube Downloader HD的官網在https://www.youtubedownloaderhd.com/,大家可以到官網上下載,下載時請點選下圖紅框處下載
安裝過程就不贅述了。
軟體執行後會出現下面的視窗
這時候如果你到你要複製的Youtube網址複製,軟體就會自動取得網址並準備下載,當然,你也可以自己將網址貼到下圖的"Video URL"這個欄位,如下圖
這時候按Download就會下載,下載完檔案就會出現在上圖的"Save to:"這個目錄
這樣就下載完成了。
用法很簡單,但大家可能會有個疑問,就是Video Quality代表甚麼,下面我一一說明
FLV Video - Low Quality 240p <== 這是指 VCD 畫質
MP4 Video - Normal Quality 360p <== 介於DVD和VCD的畫質
MP4 Video -...
軟體工程與專案管理的不歸路
前一陣子有機會整理一下自己對於軟體工程的認知與了解,讓非程式設計師對於軟體工程有更多的了解,這邊將相關資訊更詳細地整理分享給更多的人了解,首先,何謂軟體工程?
軟體開發是運用既有的程式語言與相關技術基礎開發出想要的功能呈現,但他的結果不一定是好的,例如最終功能不符合最初期待、開發時程遠超過當初的預期、開發成本暴增造成團隊無法負荷、客戶提出的最原始需求並非客戶真正要的需求等等問題,因此軟體業界提出了各種理論來控制上述的問題,這就是軟體工程,大家可以Google軟體工程就可以找到很多軟體工程理論與方法,但這些方法不斷地被驗證與修改,至於哪一個方法是最好的方式可能跟你的團隊能力、成員多寡、團隊主要開發領域有關,沒有一個最好的方法,以下我提到的方法也不會是最好的方法,但可以給大家參考軟體工程師究竟在想甚麼。
首先,最標準的軟體工程定義了甚麼?他的內含主要是針對軟體專案管理需要做甚麼事情做出建議,例如ISO 9001與CMM-I等方法論,他們定義的內含很多,甚至不只是定義給軟體開發產業,ISO 9001是給所有產業的建議,這其中最重要的一環就是『專案管理』,沒有專案管理,團隊只是一盤散沙,但要當好一個專案經理可不是一朝一夕可及,他要懂得所有專案開發階段的相關細節,並且根據實際狀況調整這些流程的應對策略,那軟體開發階段包括哪些步驟,以下是我整理的簡易說明
上圖示一個軟體開發過程中主要會經歷到的階段,其中還有很多細節,例如CMM-I還定義到可行性評估以及風險管理等等(ISO 9001:2015也把風險管理納進流程),但主要還是以上幾個步驟,而軟體開發過程中,越前面的流程失控都會導致後續流程的更大失控,所以專案經理就要在這些流程中隨時反覆地將步調拉回主軸,而除了將一切拉回主軸外,專案經理也要意識到這整個專案的成敗是由專案經理一人所繫,沒有任何藉口。
專案管理的失控原因有哪些,下圖是我整理的大致原因
主要的問題就在於大家輕忽了軟體工程的複雜度,很多人會以以下的觀念
軟體開發不是很成熟的理論嗎?你的失敗一定是因為你沒有照著做
我都給你這麼多資源了,為何還無法如期如質如預算地完成
資訊相關科系畢業的人不是都應該懂這些嗎?為何我還要找你進到公司重新學習?
軟體開發不是軟體工程師的責任嗎?為何經常需要其他部門員工支援?
.....
上面提到的算是整個觀念落差的冰山一角,要將軟體工程做法有幾個主要關鍵
專案經理自我學能的充實要不斷精進,並且對於專案有百分之百的負責態度
軟體開發不是軟體開發部門的事情,是整個公司要緊密配合的工作,包括採購管理、銷售管理、售後服務、組織訓練、決策分析等等多個面向,從企業管理者到各個部門都要緊密配合才能成功完成整個任務
學校會教軟體工程,但不會教你怎麼實踐,實踐一定是畢業之後到企業之後才會開始學的
這是幾個我自己認為比較重要的點,如果要談CMM-I,這篇文章可能會超過10萬字,容我以後有時間再分享,不過CMM-I的實踐在台灣環境確實很難,幾年前台灣還有幾個公司到達ML5,最近一查通通降到ML3,原本ML3的都消失了,主要原因在於實踐CMM-I必須全公司配合完成許多文件的留存與追蹤,這需要很高的成本,大部分的公司都無法在台灣這種軟體無價的環境中執行CMM-I理論,頂多是抽取其中的內涵,適度使用。
這邊說到的無價是指沒有價值,或者說沒有該有的價值,舉個例子,如果你要設計一個形象網站,價格大概是多少,目前市面行情價大約是五萬以內,但很多人對於形象網站的認知有所誤差,所以他會發現自己的形象網站怎麼報價快接近百萬,其實五萬以內的形象網站大都是由一個已經開發好的公版套用出來的,不會有任何你想要的客製化功能。而回到現實面,一般公司可以負擔多少費用建立形象網站呢?就我所知,大家的認知大都是一、兩千塊,其實這連網頁空間都租不起,這就是大部分人對於軟體價值的認知,有時間再寫個專文說明。
接下來要談談這篇文章的主題,就是軟體工程這條不歸路的困難點在哪?最近在網路上看到有人介紹一篇文章,叫做『Why Learning to Code is So Damn Hard』,你可以點連結前往原文,這篇文章直翻就是『為何學習程式開發會如此該死的難』,我想這應該道出不少程式設計師的心聲,這篇文章的主要內容就是下面這張圖
這張圖的總軸是Confidence,就是對於程式開發的信心,橫軸是Competence,可以翻譯成能力或者勝任程度,上面的字是我對於這張圖的一些補充解說,軟體開發的學習包括四個階段:
第一階段是指你可以透過Google等等方式找到你要的資訊,所以你以為自己很適合做程式開發,因此信心增加,但你的能力進展有限
第二階段你就會發現,怎麼程式問題一堆,不斷在debug(除錯),這時候,你的信心降低了,但是能力還是有在提升,但很多人就在這個階段離開了軟體開發,而這個階段的最後會發現『You don't know what you don't know』,意思就是你知道你很多東西不懂,但是你根本不知道你不懂的東西是甚麼
第三階段應該是所有熬過第二階段的人停留的重要階段,這時候你的信心可能持續降低,但你願意去學前棉提到的所有未知知識,即使這些知識你可能完全無法由網路或者周遭資源獲得,也就是破除資訊焦慮症的過程,資訊焦慮症是很久以前就被提出的一個概念,他代表你很想學東西,但是發現永遠學不完,不過只要熬過這一段過程就可以進入第四階段
第四階段就是在信心與成熟度方面都持續增進,這需要不斷地累積經驗,讓自己漸入佳境,最需要的就是把這個工作當作興趣並且保持無悔的決心,你只要願意持續突破就可以漸漸走向高峰
補充說明:除錯為何叫做Debug,原因是因為過去的電腦主機都是很大一台,有一次工程師發現怎麼程式無法照著預期的方式執行,找了很就發現,機器裡有一隻飛蛾造成線路問題,所以從此之後,找程式問題就叫做DeBug-除蟲。(細節可以參考Wiki-https://en.wikipedia.org/wiki/Debugging)
這就是軟體開發的困難點,但即使你突破的這些,都還只是解決了軟體工程的一環,另外一環就是軟體工程的另一個主軸,也就是專案管理,好的專案經理最好是經歷過上面所說的階段,因為他可以真正了解問題的真正位置,並且根據自己的經驗協助團隊解決問題,如果專案經理沒有經歷過前面提到的過程,就很難與工程師進行有效溝通,何況是要完成工作。
專案經理在整個專案過程所要經歷的第一個問題是甚麼?一般就是需求確認,一個完整的團隊會有所謂的需求分析師(RA, Requirement Analyzer),但台灣大部分的專案中,專案經理就是需求分析師,最常遇到的就是一開始客戶要的需求無法被正確理解,不然就是客戶根本不知道自己要甚麼,以下舉個例子,假設我們在談的需求是『開發一個註冊介面,可以輸入姓名、Mail、帳號與密碼』,這時候我們可能會很單純地理解,不就是一個登入介面,應該不用花到一天的時間吧,但工程師有時候要花一到兩周才會使客戶滿意,原因在於大家沒有把這個需求好好的解釋與釐清清楚,以下列出這個單一需求需要注意的相關細節
...
網路概述
網路概述是個很大的主題,因為網路本身就是很廣泛的一門學問,這邊只是針對網路做一些比較粗略的說明,目的是讓大家可以很快了解一些基礎知識,未來看到網路相關問題可以先行判斷正確與否。
以下會看到許多專業術語,每個術語都只會簡單介紹,如有需要,每個術語都可以另外撰寫一篇專文介紹,所以後續可以寫很多網路術語的介紹文章^_^。
網路或者說網際網路的英文是Internet,他代表一個用來讓大家可以快速透過各種媒介以封包方式溝通的機制,他一開始只是美國軍方小範圍的資訊溝通機制(ARPA計畫),後來緩慢地加入溝通組織,但都還是封閉網路,大約在1990年代開始對外全面開放,最後發展成現在的Internet。
網際網路一開始都是有線網路,進入21世紀後,無線網路開始盛行,也就是我們所熟知的Wi-Fi,而他的規格定義在IEEE 802.11,而802.11也演變出很多新的版本,速度也越來越快更穩定,因此網路變成人們生活中的必需品。
網路主要分為WAN和LAN兩種,WAN就是網際網路,會與全世界各地進行溝通,而LAN就是區域網路,只能在內部進行溝通,例如公司內部,一般來說LAN和WAN會用一顆Router串在一起,LAN使用者可以存取WAN的開放資料,而WAN無法存取LAN的資訊,LAN的保護可能是透過防火牆或者NAT,而另外還有一個機制叫做DMZ,例如公司網站就可能放在DMZ,雖然設備放在LAN,但透過防火牆設定讓WAN使用者可以存取該設備。
網路的溝通方式有很多種,但最多人使用的就是現有的IP機制,IP環境並沒有服務品質(QoS)的概念,一般稱之為Ethernet(乙太網路),他的處理邏輯是Best Effort,也就是說一個封包丟進網路,他會自己設法傳遞到目的地,但不保證是否一定可以到達或者在多久之內到達,這就是傳統IPv4的基本設計,IPv4是指IP通訊協定定義的第4版,正因為這樣的問題存在,所以IPv6在設計時就有考慮某些QoS機制,但因為要跟IPv4相容,所以沒辦法百分之百達成QoS要求,但有朝這方向在邁進了,IPv4與IPv6的概念之後有需要可以再詳細說明。
傳統IP網路有一個很重要的階層機制,就是OSI的網路七層架構,這七層分別是
Layer 1 實體層 (Physical Layer):這一層定義到了網路實體線路,包括網路線的規格結構,以及設備之間的實體溝通方法,例如網路卡要怎麼傳送封包,無線網路要怎麼傳遞無線訊號
Layer 2 資料連結層 (Data-Link Layer):這一層開始將實體的概念虛擬化,定義好軟體怎麼指定要與誰溝通,在這一層,溝通用的是MAC Address,這個地址是LAN網路中唯一的代碼,可以很明確地指定封包要傳遞的目的地
Layer 3 網路層 (Network Layer):這一層開始定義網路網路(WAN)的溝通機制,每個設備都會有一個為一的IP地址,但因為IPv4定義的IP數量不夠多,所以開始有一些NAT技術產生,讓多個設備共用IP地址,這個問題在IPv6有進一步的解決
Layer 4 傳輸層 (Transport Layer):傳輸層在網路層之上加上一些保證可用性、循序性與可靠性等等特性,讓資料的傳輸可以透過這一層的控制更加穩定,一般最常用到的就是TCP和UDP這兩個協定
Layer 5 會議層(Session Layer):會議層主要是用來做Session管理,Session代表至少一來一回的溝通,可能用來做認證或者會議的建立等等
Layer 6 展現層...