理解軟件開發的特色 - 軟件質量保證的第一步

     與軟件開發過程當中產品從無到有的創造所帶來的興奮與有趣相比,軟件質量保證更多地讓人以爲沉悶和枯燥。相比之下,軟件開發過程當中的需求分析、設計和編碼是一個相對容易作的事,由於在這些過程當中若是出現差錯,工程師都以爲有勁可以使以進行彌補,這些過程當中的錯誤更多地表現爲「明槍」。軟件質量保證則否則,每每很容易出現有勁使不出,乃至怎麼也作很差,其更多地表現爲「暗箭」。之因此會出現這種情況,是由於開發團隊沒有深入地理解到軟件質量保證是一個系統工程,高質量軟件的得到並非意味着只要作好軟件開發過程當中的某一個或幾個關鍵環節就好了,而是須要關注軟件生命週期內的全部環節,且很容易出現由於一個小小的細節沒有作好卻形成最終的軟件質量大打折扣。正是由於對於質量保證的系統性認識不夠,從而形成「暗箭難防」的局面。
     《 軟件質量是什麼》探討了軟件質量的第一層含義,即用戶層面來看高質量的軟件具備更少的缺陷,也指出從技術層面保證軟件質量的關鍵是提升軟件設計質量。除此以外,軟件質量還有其第二層含義,即儘量在第一時間將事情作對,也就是減小返工,其表現是軟件在被開發的過程當中(並非在用戶手中)所出現的缺陷更少。需求捕獲若是沒有在需求分析階段作好,那將形成很大的浪費,這一點衆所周知,而這正是由於沒有在第一時間將事情作對。另外,軟件質量還應當涵蓋高效地從事開發工做。一樣是作對一件事,花一天與花半天時間將其作對,或許對於軟件項目有着天壤之別。最後,軟件質量還包含它的第四層含義,這在《 軟件質量是什麼》也有所說起,那就是相關軟件工程師的生活質量。高質量的軟件應當包含軟件工程師的生活質量並無爲之而「打折」,反之應當有助於提升軟件工程師的生活質量。缺陷是軟件用戶能夠看到的,而開發過程當中的低返工率、開發效率和工程師的生活質量倒是用戶所看不到的,但對於開發團隊來說卻及其重要和真切。不管是低返工率或是開發效率,其最終都反映在項目開發的經濟性上。
     軟件質量保證是一個比較沉重的話題,由於在其後更關係到軟件工程師的生活質量,而不僅是表面上的產品質量那麼簡單。對於質量保證這一系統工程,它不能被簡單地理解爲「就是測試」。在進一步探討這一話題以前,須要先了解軟件開發的特色。軟件開發具備如下幾個特色,有些特色之間也表現爲相互影響,且這些特色最終致使軟件質量控制並非那麼的直觀和容易。
腦力密集型
     軟件開發是腦力密集型工做,其中的很多活動由於只存在於軟件工程師的大腦中,於是具備不可見性,天然也就沒法指出工程師在作開發時哪一步思考將有可能形成質量問題,進而沒法經過運用流程的方法將這些潛在的質量問題徹底消除,這與流水線生產下的質量保證方法徹底不一樣。
     另外,善變極可能是人的天性,因爲大腦在處理事務時並不能徹底保證其一致性。頗有可能股票漲了的話一高興就採用了這種處理方法,而心情很差時則採用了另外一種處理方式。善變有它的好處,好比讓咱們更具創造性,也爲咱們的生活帶來了更多的樂趣,使咱們從無聊的事情中經過變通找到樂趣,但這對於軟件質量的保證卻未必是一件好事。減少善變所帶來的負面影響,或許經過培養良好的工做習慣是一條不錯的途徑。
實現不具惟一性
     一個軟件功能,儘管從使用者的角度來看都同樣,但卻能夠有多種不一樣的實現方法,且不一樣的開發團隊或者不一樣能力的人所作出來的設計頗有可能徹底不一樣。若是軟件實現具備惟一性,那其質量就更好被評估,也更容易找到改善點,但軟件開發不屬於這一列。
     正由於軟件的實現不具惟一性,這使得很難從林林總總的實現中找到哪種更好,或者要找到這個「更好」所須要的成本(包括時間、金錢和能力)卻更高。
隱性成本高
     只要是產品開發則老是存在開發成本的概念,也須要對項目進行預算,這一點軟件產品的開發也不例外。與其它產品開發不一樣的是,軟件開發的隱性成本很高。所謂的隱性成本,是指在項目預算時並無將其考慮在內,但它確實在未來的開發活動中會致使額外的成本開銷。
     一個軟件項目的階段性完成並不意味着它不會帶來後續的成本,由於不一樣的實現(實現不具惟一性)所帶來的軟件穩定性和可維護性都將不一樣,而不良實現所帶來的隱性成本每每在預算時沒法合理地被考慮,這進一步又意味着什麼呢?第一,它將致使對項目進行計劃更困難。這是顯然的,由於看不到隱性成本的存在,天然在計劃時不會將其列入其中。第二則更爲嚴重,因爲隱性成本的不可見性,每每很容易形成被忽視,進而不能掌握軟件開發的特色,對軟件開發中的困難也表現得不理解。甚至一味地認爲只要投入時間和人力就必定能開發出高質量的軟件產品,孰不知頗有可能由於更多的投入而造就更大的隱性成本。
     隱性成本的存在每每很容易致使工程師由於工做而影響生活,而進一步帶來更大的隱性成本。試想一想,有沒有某個項目在預算時將工程師的生活質量真正地考慮在內呢?若是有,這種考慮是考慮到了點子上嗎?仍是隻是表面?
細節很容易被放大
     軟件開發過程當中的一個很小的細節很容易被放大。對於一個模塊在設計時所留下來的小窟窿,哪怕認爲微不足道,可是這個「微不足道」最後頗有可能演變成項目組的沉重負擔。對於大型項目,若是你們隨意地包含頭文件,最後頗有可能形成每一次項目編譯都浪費很多時間去等待;修補一個缺陷時,因爲以爲沒有必要去除其中的一處冗餘設計卻有可能最後落得難以維護;由於不當心將「==」錯寫成了「=」而形成一個嚴重的軟件缺陷,等等。
     在軟件行業,彷佛存在這種必然,只要某種事情有可能變壞那就必定會變壞(莫非定律),用「如履薄冰」來形容軟件開發一點都不誇張。軟件行業能很好地體現「蝴蝶效應」,也就是說一個細節最終對項目所形成的負面影響並不是是按它應有的比例,而是遠遠大於這一比例。
     能夠說軟件開發無小事,可能一開始認爲很小的事,到最後明白其重要性時卻已讓團隊背上了沉重的負擔,進而可能壓跨團隊。對於「小事」的把握,須要對軟件行業有較爲全面和深入的認識,以及豐富的經驗和良好的洞察力。
質量評估很需專業的高水平
     一個表面上好的軟件其設計未必就好,而設計很差則遲早會出問題,從而帶來隱性成本。要真正地評估軟件的質量須要經過評估其設計質量着手,而這很需專業的高水平。這裏所說的專業水平不能簡單地理解爲評估人具備什麼樣的學歷,或經過了什麼樣的認證,而是須要他對軟件行業有深入的理解和豐富的經驗,以及擁有本身的軟件設計思想。一般這類評估人也應當對於軟件設計有着精神上的追求(不然他的水平也不會高到哪),很顯然這種人是一種稀缺資源!
    設計質量評估所需的專業性也正是由於實現不具惟一性這一特色所形成的,合格質量評估者的缺少使得質量評估變得更加困難。一個開發團隊,若是不具有勝任的質量評估者,則頗有可能整個團隊在開發過程當中不知道軟件質量的真實情況,而只是停留在關注被發現的缺陷之上,進而沒法涉及質量問題的核心 —— 不良設計。
    真正高水平軟件工程師的缺少也加重了軟件行業的困難,因爲缺少這些「領頭羊」,項目組在開發過程當中沒法有目的地朝着高質量設計的方向前進,而只能是以完成工做爲目標。結果頗有多是項目組多走彎路,以及項目面臨更高的隱性成本。
相關文章
相關標籤/搜索