Bug 數量與軟體品質控制

我日前看了「那些 Bug 是怎麼找來的?」這篇文章,裡面提到用 Bug 數量作為軟體品質的管理指標。管理學有云「可量化者方能管理」,可量化者就是指標項目,諸如一小時的產品生產數量、一天完成的工作項目等等。然而,錯定指標的例子也比比皆是。在軟體工程上,最經典的採用不適當管理指標的案例,就是用「程式行數」來管理工作進度了。就我所知,在理論或實務上,都不是用 Bug 數量作軟體品質管理的指標。此處所說的軟體品質管理,指的是開發過程中的品質管理,交貨時,理論上是無 Bug 的。既然選擇了不適當的指標項目,自然就產生「Bug 多,品質好;Bug 少,還是品質好!」這種無助於管理的結論。

Watch "Sometimes in April"

上週某日早上 (近來閒賦在家,不知今日何日) ,無意中在 HBO 頻道上看到一部關於 1994 年廬安達種族屠殺事件的半紀錄式電影,片名為「Sometimes in April」。這部片不是日前獲得奧斯卡提名的「廬安達飯店 (Hotel Rwanda)」,但兩部電影都是在描寫廬安達種族屠殺事件,而「廬安達飯店」也確有其事其地。

RUP 概念入門參考文章

RUP (Rational Unified Process) 的內容又大又多,令人望而卻步。在「透過類比介紹 IBM Rational Unified Process 的要點」一文中,作者嘗試以電影製作過程為喻,說明 RUP 各項設計工作的概念,全文並不涉及 RUP 各項工具的使用。如果想了解更多關於 RUP 的內容,可以拜訪「Rational software developer resources」。瀏覽「The Rational Edge: Browse by category: Rational Unified Process (RUP)」中精選自至 Rational 社群的相關文章,亦甚有助益。

How to use Borland C/C++ 5.5 Complier

Borland C/C++ 5.5 Compiler 是由 Inspire (前身是 Borland) 免費提供下載與使用的 C/C++ compiler 和相關工具 (我記得大約在 2000 年時就已經發佈這項免費下載的資訊)。檔案不大,下載包約 8.7MB ,但已包含了完整的 ANSI/ISO C/C++ 的核心,包括 STL (Standard Template Library) ,對 ANSI C++ 的支援涵蓋到 C99 的規範內容。就 C/C++ language and programming 教學用途而言,已是非常完整的工具。 如果要開發應用軟體,其實也足夠,只是要自行下載與安裝各式 SDK (Software Development Kits) 罷了。

Borland C++ 5.5 Compiler with PSPad

雖然 Borland C++ 5.5 Compiler 是一套純命令列工具,但配合適當的程式編輯器,我們仍然可以建置出一個方便的視窗整合開發環境 (IDE) 。我慣用的輕量級程式編輯器是 PSPad ,就用它來說明吧。關於 PSPad 的一般性設定請參考它的說明或其他人寫的文章。此處直接說明關於 compiler 的設定。

AJAX 入門參考

在 IBM developerWorks 中,有一系列 AJAX 入門文章,短短五篇並附上詳細範例以及參考資料,抵得上坊間數百頁的書籍。我個人就是從這學 AJAX 。

JavaScript 的個體繼承之成員的配置工作

當衍生類別 (derived class) 繼承了基底類別 (base class) 的成員時,常常忘了要初始 (配置) 那些成員,亦即呼叫基底類別的建構函數。這是 OOP 初學者,也是 JavaScript programmer 在實作繼承關係時易犯的毛病。

Comment~~該不該用 while 檢查 readyState

在 AJAX 中,用 while 檢查 readyState 是同步模式的做法。這將使整個程式陷在 while 迴圈中,直到 readyState 的狀態符合脫離迴圈的條件為止。最明顯的缺點是頻繁地執行檢查動作,造成程式負載提高。而且這實際上就是同步模式,實作上,還不如明確指定以同步模式執行,即指定 XmlHttpRequest.open() 的第三個參數為 false ,反而較有效率。

Comment~~「自由不一定多元」

在從事經濟學研究的過程中,最讓我困擾的問題在於,通俗著作中充斥了太多錯誤觀念和偏見。在這篇「自由不一定多元」文章中,作者對自由、多元、經濟理性和人的選擇等等內涵之理解皆非正確。經濟學的通識教育顯然出了問題。

軟體工程三大陣營, RUP, CMMI, Agile Method

日前我參加了 2006 IBM 開發者大會,有幸聽聞尖端軟體工程團隊成員介紹最新的軟體開發趨勢「議程:大師看未來-軟體開發趨勢展望」。原本安排由 Dr. Ivar Jacobson (UML 創始人之一) 主講,可惜因颱風作梗,改由陳博士 (從 Rational 時代就跟隨 Dr. Jacobson 的團隊成員) 主講。這樣也好,陳博士以中文講說,省去了現場翻譯的語言隔閡。

JavaScript~~DOM~~A bug about radio input and createElement in M$IE

根據 W3C 關於 HTML DOM 的建議,我使用下例的 ECMAScript 建立 Radio input element 。使用新版瀏覽器,如 Firefox 也得到了我需要的效果。但在舊版瀏覽器,即 M$IE6 中,卻出現了錯誤。 M$IE 會建立 Radio input element ,但是卻無法選取...

SQL~~Encoding-Based SQL Injection Exploit part 2

繼續第一部份內容。除了單引號 (') 外,允許使用反斜線 (\) 的字元編碼,也屬於遭受此 SQL injection 攻擊的高危險群。而且,由於部份 programmer 的不良習慣,提高了危險程度。這個不良習慣,就是不用標準的方法做 escaping ,而抄捷徑地直接使用字串替代函數。例如 PHP 的使用者,常常用 addslashes() 做 escaping 。前文中我提到的那位客戶,我在檢查他們的程式碼時,就發現到他們的 PHP 程式碼,全部都是用 addslashes() 做 escaping ,而不是用 PHP 建議的 pg_escape_string() 。該客戶的 CMS 系統是 Xoops 再加上額外的修訂以支援 PostgreSQL 。不過,當我進一步追查下去時,很驚訝地發現 Xoops 中,連 MySQL 部份的程式碼,也是用 addslashes() ,而不是用 mysql_escape_string() [Xoops 在 2006/6/26 發佈的最新版本中的 class/mysqldatabase.php 還是用 addslashes()。]。很久以前, PHP 就提供了 mysql_escape_string() 函數,甚至可能比 Xoops 的發展時間還早。儘管如此, Xoops 中仍然沒有使用 mysql_escape_string() ,真是令我無言。

SQL~~Encoding-Based SQL Injection Exploit

最近公司客戶網站的內容管理系統被惡意入侵,因為客戶是用 Linux + PostgreSQL 系統,而我恰好是公司中較熟悉這兩套系統的,公司就派我去處理。我查了一下,答案就在不遠處,我就在 PostgreSQL 的網站上找到了答案,這是一個新型態的 SQL injection 。

ASP.Net~~SqlParameter 和 Ad-Hoc 該用哪種方法?

回應「對SqlParameter的不求甚解」一文。SqlParameter 和 Ad-Hoc 這兩種用法的選擇,嚴格來說是 programmer 的態度與技術問題,而不是安全性問題。我的習慣是 Ad-Hoc ,但我同時強調,資料的驗證與查核是 programmer 的份內工作,所以我的程式風格如下。試問這種 Ad-Hoc 寫法的安全性,會比 SqlParameter 差嗎?

ASP.Net~~ 產生 XML Schema

基於工作需要,我翻了一下 .Net Framework 中對 XML Schema (XSD) 的支援,想找在程式中維護 XML Schema 的方法。找到了兩種方法,一種是使用 System.Xml.Schema 類別,另一種是透過 DataSet 。以下是分別用這兩種方法產生同一份 XML Schema 的程式。