下個月受軟協的邀請,要跟國內發展雲端服務的廠商講一場演講,原本想講的是 Coda Hale 的 `metrics library`_ 的使用 不過跟軟協的詹副秘書長聊了一聊後,決定把主題改成 *軟體品質* ,畢竟,太偏實作的東西,拿來給 中高階主管聽,可能會睡著吧 XD .. _metrics library: http://metrics.codahale.com/ 軟體品質指標 =============================================================================== 一般我們在談軟體績效指標時,多講的是 *Lines Of Code*, *Number of Functions*, *Number of Classes* , *Cohesion and Coupling*, *Test Coverage* 等,但是,我今天想講的不是這些靜態分析所使 用的指標,而是在程式運行時的評量指標 Production/Runtime Quality Metrics。 這些執行階段的品質指標,讓我們了解程式在運行時的效率(performance),可靠度(reliability),可 用度(availability),維護性(maintainability)等重要問題。 為什麼我們要在意這些指標 =============================================================================== 在台灣的許多軟體公司可能會問,為什麼我們需要在意這些指標?這些指標又不能拿來賣,客戶在意的 是功能及價錢,開發客戶所需要的功能及尋找客戶,比做這些沒辦法拿來賣錢的東西重要多了。部份中小 企業主認為,找案子跟找錢,才是軟體公司生存之道,軟體品質,是可以在案子簽下來後甚至結案時在去 關心就好。 .. image:: /images/2012-05-17/busy_1.png .. image:: /images/2012-05-17/busy_2.png 但是,如果我們換一個角度來看,這些執行階段的指標,也可以是軟體功能的一環,可以當做銷售時期 的功能及策略性武器來看;試想,若是有兩家小公司來賣你雲端服務,一間滿口都是功能可以做到OOXX ,我們的服務是一條龍,什麼都做的到。另一間則是把功能的項目清楚的定意出來,同時也告訴你,他們 的服務同時可以服務多少客戶、過去的停機維修週期是多少、他們可以保障的可靠度是多少;身為專案採 購人員的你,會比較 **信任** 那一家的說法呢? 軟體賣的就是信任 =============================================================================== 軟體賣的就是信任,信任你的軟體,不會出問題把客戶的重要商業資料、商業流程、及客戶關係都一起毀掉。 在過去單機板的軟體環境下,軟體賣的是 - 信任軟體的功能有達到預期目標 - 信任軟體不管跑多少次,都有一致性的輸出 - 信任軟體的資料儲存是可靠的 - 信任軟體的資料可以轉換到另一個昇級版本或其它軟體 許多單機版或 2-Tier 的程式,經過時間的證明,他們的生命週期,甚至超過了開發者的生命週期,許多 國內百貨零售業用的進銷存系統,目前仍是在用20年前的 DOS 系統就是一例。對客戶來說,他們對這些DOS版 軟體的信任,超越了新科技所帶來的新功能需求。只要更新硬體,他們就可以繼續使用這些軟體,甚至是享受新 硬體所帶來的更高效能。 **信任** 在雲端服務上,更是重要;在享受雲端服務的便利的另一方面,雲端服務的使用者更是需要放更多 的信任在服務提供商上,除了上述的信任外,客戶還要信任你的服務可以隨著他的服務及你的服務一起增長。 Slashdot Effect ------------------------------------------------------------------------------- 在談服務的可靠度時,我常用 `slashdot effect`_ 來當例子,換成中文就是「爆紅效應」,slashdot 是 國外一個很大的科技網站,一登上 slashdot 的首頁,在短短的一天內,就可以帶來數十萬的訪問數及數萬的註 冊會員,然而,爆紅後帶來的往往是個災難,許多的軟體在設計、佈建(deployment)時,並沒有考量到會有這麼 大量的用戶,因此一爆紅後往往就是停機收場。 overnight success turns into overnight disaster. 爆紅後,留下的是一些不滿意的負面記錄, 讓客戶及潛在客戶,喪失了對服務的信任;在這個有 Google 等搜尋引擎的年代,過去的不良記錄將永久留 存在網路上,因此,服務的 `可延展性(Scalability & Elasticity)`_ 變的格外重要。 .. _slashdot effect: http://en.wikipedia.org/wiki/Slashdot_effect .. _可延展性(Scalability & Elasticity): http://horicky.blogspot.com/2009/07/between-elasticity-and-scalability.html 如何建立信任 =============================================================================== 信任是個很抽象的名詞,你摸不到看不到,但是卻在人與人的往來,無形中慢慢的形成;信任就如宗教信仰一樣, 你無法買到,無法強迫別人去接受、也無法一促即成,只能一步步的去建立。 但是,我們是軟體工程師,我們信仰的是科學、是工程技術、是數字管理,我們善長的是透過科學的研究手法, 一步步的去拆解問題,弄清楚什麼是已知的事實,什麼是未知的問題,面對問題,解決問題。 販賣口號,不是軟體工程師所善長及該做的。 .. image:: /images/2012-05-17/we-can-do-it.jpg 可量化的軟體品質就是信任的來源 =============================================================================== 對於中小企業及新進入雲端服務的公司,「可量化的軟體品質指標」就是可以最快取得客戶信任的方式;我希望 在未來的某一天,我可以聽見台灣的軟體公司是這麼介紹自己的產品 我們的網路服務,能夠同時服務兩百萬上線用戶,提供 50ms 以下的即時性的反應,我們的服務,整合了超過 40個內部及外部的開發商客戶,在過去的兩年內,我們提供了 99% availability ; Agile 的開發流程, 讓我們有一致的服務更新週期,面對軟體 Bug 我們能夠提供客戶一個預計的修正時間,並準時將補丁上線。 待續...