第13章 軟體測試
昔者韓昭候醉而寢,典冠者見君之寒也,故加衣於君之上,覺寢而說,問左右曰:“誰加衣者?”左右對曰:“典冠。”君因兼罪典衣與典冠。其罪典衣,以為失其事也;其罪典冠,以為越其職也。非不惡寒也,以為侵官之害甚於寒。
——《韓非子·二柄第七》
侵官之害甚於寒——我們不是不鼓勵開發人員主動幫助測試,而是我們是要避免導致職責不清的越界行為。我們在測試經驗交流的過程中,總會與其他同伴有不同的見解。在測試的過程中,可以選定一個典型使用者(Persona),然後按照典型人物的思路和看問題的角度,把整個系統的各項功能都經歷一遍。如果有什麼你覺得典型使用者不滿意的,那就可以考慮開一個Bug。我有時知道這個功能的設計想法,但是說真的,在測試的時候沒必要替別人考慮太多,要把自己當成使用者,而不是設計者,這樣我們才能更多地為使用者著想,做出更好的作品。
在軟體專案中,有這樣一個拐點存在——在這一點之前,新的Bug產生的數量大於Bug解決的數量;在這一點之後,Bug的解決數量大於新的Bug產生的數量。這樣Bug的曲線就向下移動。 這是在大型複雜專案中,測試人員和開發人員全部通過一個系統管理bug才會出現的現象。我們不能等待拐點的到來,對於我們這樣的日期驅動型的小專案,拐點必須在釋出日之前的若干時間發生,如果我們的Bug數量還是繼續向上攀升,則無法保證以後曲線會像懸崖一樣掉下來。
問題:我們應該如何讓這個拐點發生?
第14章 質量保證
• 在初始階段(新專案,團隊進入一個新領域,人員剛進入一個專案),每個團隊成員都要儘量打通各個環節,多負責,把所有事情都搞懂,培養通才。
• 當專案/產業發展到一定階段(進入陣地戰的時候),要大力提倡分工合作,培養專才。同時,要把好的工具和流程整合起來,從每日構建,到基本功能的自動化,都要儘快實現。
• 把自己專案的架構和流程做好,讓所有人都能比較容易地進行QA工作,這樣,團隊的“軟體工程質量”才會有提高。
• 培養“大家都要做QA,專人負責量化的Test,有條件多做測試自動化”的文化。
• 要明白自己專案的特點,避免照搬別人的做法。不要聽說某某偉大的專案的開發/測試比例是多少,因此就哭著喊著也要同樣的比例。
• 如果一個團隊是認真嚴肅地做軟體,那他們一定要考慮如何保證程式的質量/軟體工程的質量,以及達到這些質量,需要多少成本。
問題:分工之後,每人負責一小塊東西,怎麼才能體現出個人的獨特而巨大的價值呢?
第15章 穩定和釋出階段
兩個學生專案的例子,推斷出這些團隊的血型:
STG遊戲的跳票(為了完美,推遲了7天,但是7天之後也沒有釋出……)
英語學習軟體(說了“明早釋出”,但是明早一直沒到)
我們在最後穩定階段不同的團隊往往會有以下兩種不同的做法:
♠ 根據事情的輕重緩急,安排大部分事情在下一個版本做。正因為我們對專案、團隊、商業模式有信心,才會把很多事情安排在以後的版本中。
♣ 拼一下,把所有事情搞定,後果是大家都累得夠嗆,然後人也走了,沒有人有興趣做下一個版本。
問題:為什麼在專案的最開始的時候團隊們不拼一下,把所有事情在第一版搞定?這樣在最後的穩定階段就有更多的詩句衝刺了。
第16章 IT行業的創新
In the summer of 2003 while still working for my first startup I've got a "big idea": social news reader. Imagine something like Google Reader with Priority Inbox and social recommendations. I was thinking about it day and night. I couldn't sleep and was working through it in my head while lying awake in bed...
問題:在創業的過程中,市面上和你的朋友圈同時流傳更cool 的想法和創新,是應該堅持己見還是隨波逐流?
第17章 人,績效和職業道德
用專業知識教育人是不夠的。通過專業教育,他可以成為一種有用的機器,但是不能成為一個和諧發展的人。要使學生對價值有所理解並且產生熱烈的感情,那是最基本的。他必須獲得對美和道德上的善惡鮮明的辨別力。否則,他 —— 連同他的專業知識 —— 就更像一隻受過很好訓練的狗,而不像一個和諧發展的人。為了獲得對別人和對集體的適當關係,他必須學習去了解人們的動機、他們的幻想和他們的疾苦。
---- 愛因斯坦
筆者在這一章中用了三個角色——豬、雞和鸚鵡來說明了現代軟體工程開發團隊中的三種典型例子——全身投入、參與和圍觀。在與人交往的過程中,我發現還是有很多同學只是關注“自我”和“當下”,不善於跟別人合作,也不會估計別人會怎麼想,或者估計“我們的團隊將來會發生什麼,我要如何應對”。造成這種現象的一部分原因是,不少同學從小就被灌輸“搞好自己的學習就可以了”,“把眼下的考試考好,以後就好了”,另一部分原因是,同學們從來沒有練習如何與別人合作,估計別人會想什麼,估計團隊以後會發生什麼。科學家認為,人類有別於其他動物的最大特點是人類大腦裡有發達的部分在處理“別人在做什麼”和“未來會發生什麼”(Interpersonal Awareness & Social Awareness)這些事情。能擺脫[自我/當下]而考慮到[別人/將來],從而主動為群體和將來行動,這是人和其他動物不同的地方。在成功的大型企業中,人際交流能力和人際覺察(Interpersonal competence, and Interpersonal Awareness)是員工素質培訓的一個重要部分,它包括如何與別人建立平等而融洽的合作關係,如何處理矛盾與衝突,如何影響同事,如何給別人的工作做評價,如何能瞭解別人表面行動下的言外之意、隱含的動機等等。在前文提到的“黃金點遊戲”這個場景中,一位參賽者需要了解一屋子的同學大概的思路 ,如何影響他們,自己才能增加獲勝的希望。如果每個人獨自埋頭推導公式,而不管其他人在想什麼,是得不出獲勝的數字的。
問題:軟體工程師在企業中是勞動密集型的工人麼,還是有獨創性的專業人士? 他們對軟體企業的成敗負多大的責任?