軟體品質指標系列(一):為什麼軟體開發者需要在意軟體品質指標
下個月受軟協的邀請,要跟國內發展雲端服務的廠商講一場演講,原本想講的是 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 我們能夠提供客戶一個預計的修正時間,並準時將補丁上線。
待續...