1.1 軟件質量定義
1)ISO關於質量的定義為:一個實體的所有特性,,基於這些特性可以滿足明顯的或隱含的需求。
質量就是實體基於這些特性滿足需求的程度。
2)質量的定義包含三個要素:實體、特性集合、需求。
對軟件測試來說,實體即測試的對象。
實體的特性集合:不同實體,其特性集合不同。
3)軟件質量評價的標准:需求,質量和需求對應,需求有三個層次:顯式需求、隱式需求、用戶的實際需求。
4)由以上可以引申出軟件質量的3個層次:符合需求規格、符合用戶顯式需求、符合用戶實際需求。
*1*符合需求規格:符合開發者明確定義的目標,是內部質量,即從軟件啟動到交付用戶之間產生的所有中間產品的質量。
*2*符合用戶顯式需求:符合用戶明確說明的目標,是驗收質量。即用戶在驗收時評價產品的質量。
*3*符合用戶實際需求:包括用戶明確說明的和隱含的需求,是使用質量,即用戶在實際使用過程中對產品的質量評價。
1.2 軟件質量大師
1)戴明
是世界著名的質量管理專家,提出戴明質量管理的十四項原則,簡介易明,稱為本世紀全面質量管理的重要理論基礎。
*戴明質量管理的十四項原則*
*1*創造產品與服務改善的恆久目的
最高管理層必須從短期目標的迷途中歸返,轉回到長遠建設的正確方向。也就是把改進產品和服務作為恆久的目的,堅持經營,這需要在所有領域加以改革和創新。
*2*采納新的哲學
必須絕對不容忍粗劣的原料,不良的操作,有瑕疵的產品和松散的服務。
*3*停止依靠大批量的檢驗來達到質量標准
檢驗其實是等於准備有次品,檢驗出來已經是太遲,且成本高而效益低。正確的做法,是改良生產過程。
*4*廢除"價低者得"的做法
價格本身並無意義,只是相對於質量才有意義。因此,只有管理當局重新界定原則,采購工作才會改變。公司一定要與供應商建立長遠的關系,並減少供應商的數目。采購部門必須采用統計工具來判斷供應商及其產品的質量。
*5*不斷地及永不間斷地改進生產及服務系統
在每一活動中,必須降低浪費和提高質量,無論是采購、運輸、工程、方法、維修、銷售、分銷、會計、人事、顧客服務及生產制造。
*6*建立現代的崗位培訓方法
培訓必須是有計划的,且必須是建立於可接受的工作標准上。必須使用統計方法來衡量培訓工作是否奏效。
*7*建立現代的督導方法
督導人員必須要讓高層管理知道需要改善的地方。當知道之后,管理當局必須采取行動。
*8*驅走恐懼心理
所有同事必須有膽量去發問,提出問題,表達意見。
*9*打破部門之間的圍牆
每一部門都不應只顧獨善其身,而需要發揮團隊精神。跨部門的質量圈活動有助於改善設計,服務,質量及成本。
*10*取消對員工發出計量化的目標
激發員工提高生產率的指標、口號、圖像、海報都必須廢除。很多配合的改變往往是在一般員工控制范圍之外,因此這些宣傳品只會導致反感。雖然無須為員工訂下可計量的目標,但公司本身卻要有這樣的一個目標:永不間歇地改進。
*11*取消工作標准及數量化的定額
定額把焦點放在數量,而非質量。計件工作制更不好,因為它鼓勵制造次品。
*12*消除妨礙基層員工工作暢順的因素
任何導致員工失去工作尊嚴的因素必須消除,包括不明何為好的工作表現。
*13*建立嚴謹的教育及培訓計划
由於質量和生產力的改善會導致部分工作崗位數目的改變,因此所有員工都要不斷接受訓練及再培訓。一切訓練都應包括基本統計技巧的運用。
*14*創造一個每天都推動以上13項的高層管理結構。
2)朱蘭
建立了朱蘭學院,目前已成為世界上領先的質量管理咨詢公司,他對實行組織內部質量策划的主要觀點包括:
*1*識別客戶和客戶需求
*2*制定最佳質量目標
*3*建立質量衡量方式
*4*設計策划在運作條件下滿足質量目標的過程
*5*持續增加市場份額
*6*優化價格,降低公司或工廠中的錯誤率
也提出了質量管理方法三部曲:質量策划、質量控制、質量改進。
3)克勞士比
引發全球質量活動由生產制造業擴大到工商企業領域。
4)石川馨
1.3質量鐵三角
流程(過程)、技術(工具)、組織(人)三個方面是影響軟件質量的鐵三角。
1)流程(Flow)
*1*流程指一個或一系列有規律的行動,這些行動以確定的方式發生或執行,導致特定結果的出現。
*2*流程的好處
a)使得不可見的軟件開發過程變得可見並可控;
b)流程驅動每一個研發人員的活動,減少了內耗,提高了效率。
2)技術
*1*技術的承載者是人
a)現有員工所承載的技術能力
b)公司發展過程中積累下來的技術能力
*2*技術從類型上分
a)開發技術
b)測試技術
d)結構工藝技術
3)組織
*1*通過技術和流程間接影響質量。
*2*組織對技術的影響
a)能確保具備相應技術能力的人去從事相應的活動
b)是否重視對技術的積累
4)流程、技術、組織三者之間的關系:
*1*組織是流程成功實施的保障,好的組織結構能夠有效的促進流程的實施;
*2*流程對於產品的成功有着關鍵作用,一個適合於組織特點和產品特點的流程能夠極大的提高產品開發的效率和產品質量。
*3*對企業來說,人是技術的載體,技術發展的方向應該與現在的開發流程和規范相結合,這樣有利於專業技能的提高。
2.1 軟件質量模型
ISO9126軟件質量模型有6個特性,27個子特性組成。測試工作需要依據該模型去測試、評價軟件。
涉及到軟件生命周期的幾種質量的含義。
1)過程質量
2)內部質量
3)外部質量
4)使用質量
2.2 軟件質量特性
1)功能性(Functionality)
功能性是指軟件是否滿足了客戶的需求,其子屬性有:
*1*合適性
提供的功能是用戶所需要的,及用戶所需要的功能軟件系統已提供。
*2*准確性
此特性容易理解,在實際的工程應用中也常遇到,例如財務類軟件系統提供給用戶的功能是否滿足用戶對該功能的精確度要求。軟件,如果不涉及特殊用戶的需求(如科研機構的特種應有),精度一般都容易滿足。
*3*互操作性
軟件系統與一個或多個周邊系統進行信息交互的能力。例如,運行在windows操作系統上的應用軟件,與運行在Linux系統上的軟件進行通信,如:Linux系統是數據的發送方,把數據發送到windows系統上,在windows系統上運行的應用軟件需能讀出特有數據格式的能力,然后在界面上顯示。
*4*安全性
指軟件系統保護信息和數據的能力。可以從以下兩方面理解:
#1#防止未得到授權的人或系統訪問相關的信息或數據;
#2#保證得到授權的人或系統能正常訪問相關的信息或數據。
常見的安全性測試:
#1#用戶驗證:登錄密碼驗證(如windows登錄驗證,郵箱驗證等)、IP地址訪問限制等;
#2#用戶權限管理:驗證低級別用戶是否具有了高級別用戶的權限,各級別用戶權限都得到了實現。例如windows 7操作系統,某些應用程序的運行必須以管理員身份才允許;
#3#系統數據的保護:例如對系統文件、用戶密碼文件等進行隱藏,機密文件內容進行加密、備份;
*5*功能性的依從性
遵循相關的標准(國際標准、國家標准、行業標准、企業內部規范等)約定或法規以及類似規定的能力。例如:在中國研發與生產的醫療設備如果要在美國上市銷售必須經過FDA(Food and Drug Administration美國食品及葯物管理局)的審核,並通過。
2)可靠性(Reliability)
可靠性是指軟件是否能夠一直在一個穩定的狀態上滿足可用性。
*1*成熟性
軟件系統防止內部錯誤擴散而導致失效的能力。測試過程中常遇到的例子如:模塊A更改了某參數,但沒考慮到某參數同時被模塊B調用,由於模塊B並未作相關更改,結果使得模塊B的相關功能失效。
*2*容錯性
軟件系統防止外部接口錯誤擴散而導致系統失效的能力。
例如:應用軟件在操作過程中需操作一個文件,但由於此文件已遭破壞,由於缺少容錯處理,結果執行文件操作時,軟件崩潰。
*3*易恢復性
系統失效后重新恢復原有功能、性能的能力,包括對原有能力恢復的程度與速度。
例如:我們經常使用的windows系統有時會遇到系統不響應的情況,只好按Reset或關掉電源重新開機。這種情況,當前未保存的數據當然是丟失了,系統重啟后能否正常進入系統便是易恢復性的一種體現。
3)可用性(Usability)
可用性,是衡量用戶使用軟件需要付出多大的努力的質量屬性。其中,我們經常提到的易用性就是可用性的一個重要方面,指產品易於學習和使用,可減輕記憶負擔等,具體可從以下幾方面進行理解。
*1*易理解性
易理解性指用戶在使用軟件系統的過程中,展示給用戶的信息是否准確、清晰、易懂,能幫助用戶准確理解系統當前真實的狀態,並指導其進一步的操作。
*2*易學性
易學性是指軟件提供相關的輔助手段,幫助用戶學習使用它的能力。例如:是否具有在線幫助。在線幫助常見的有兩種,一種是跟隨功能而變的幫助,如Word、Excel中的菜單項鼠標提示(tips);另一種是在線幫助手冊,如同windows程序按快捷鍵F1自動調出幫助手冊內容。
*3*易操作性
易操作性指用戶基本不用額外學習即能操作軟件,包括多方面的內容。例如:
#1#常用功能路徑不要太深,最好能提供快捷鍵,且這些快捷鍵具有普適性(用戶已廣泛接受),如前面提到的windows程序激活幫助功能的快捷鍵F1。目前有很多軟件采用這種已符合人們的使用習慣的操作。
#2#最好提供一鍵返回桌面的功能,這一點蘋果的Iphone手機做得比較好,無論用戶當前在什么位置,只要按下“返回桌面”主鍵,立即可退出。
#3#操作盡量簡單,例如軟件的安裝或升級,按提示點擊“下一步”且不要太長的時間或多個選擇路徑。
4)效率(Efficiency)
效率,這里指衡量軟件正常運行需要耗費多少時間及物理資源,是性能測試的重點內容。
*1*時間效率
時間效率主要指軟件系統在各業務場景下完成用戶指定的業務請求所需的響應時間。
例如:我們在互聯網上發表博文,點擊“提交”后,一般情況都需等待幾秒鍾,然后自動跳轉到博文顯示頁面,那么此等待時間,我們可以理解為系統響應的時間。
*2*資源效率
資源效率主要指軟件系統在完成用戶指定的業務請求所消耗的系統資源,如CPU占有率、內存占有率、通信帶寬占有率、軟件內部消息包資源占有率等。例如不同業務功能之間,不同GUI界面相互之間的切換,如果切換過程中有明顯的后影,或速度太慢,很可能資源占用方面沒有處理好。
5)可維護性(Maintainability)
可維護性,衡量對已經完成的軟件進行調整需要多大的努力,其又可分為下面四個子屬性。
*1*易分析性
指軟件系統提供輔助手段幫助開發人員分析識別缺陷、失效產生的原因,找出待修復部分的能力。這也是工程實踐中很重要的一方面,可以減少缺陷定位的時間,提高開發人員工作效率。采用系統日志記錄的方法,如同windows的事件查看器(eventvwr),把軟件執行代碼的軌跡或某些錯誤、狀態進行記錄,是一種常見的方法。
*2*易改變性
指軟件缺陷的修復容易被實施,這與軟件的設計有着密切關系。例如設計上封裝性好、高內聚(同層次設計時,一個實體只完成一個功能)、低耦合的代碼,為未來可能的變化留有擴充余地,它的易改性會更好。
*3*穩定性
指軟件系統在長時間連續工作環境下能否正常工作,不出錯,無異常情況等。測試人員常用長時間壓力測試的方式檢驗軟件的穩定性,穩定性與資源效率有緊密聯系,例如內存的慢泄漏,時間越長,系統穩定性越差,內存資源占用越多,最后可能導致系統癱瘓。
*4*易測試性
指從測試驗證角度,軟件存在可測試性的難易程度。例如:UI界面,提示框對話框,按鈕響應狀態變化等是很容易觀察到的,可測試性強;有明確的輸入輸出數據,盡管此數據對於用戶來說可能不容易被看到,但通過某種方法仍 可驗證到,可測試性次子。對鑒於系統設計原因,某種用戶場景難於驗證,測試的條件苛刻,需特定的實驗室條件,如高溫高壓等,這種情況需考慮改變軟件內部狀 態,通過發布特殊版本進行測試。易測試性作為可維護性的子屬性之一,與質量是否存在必然的正向關系呢,即能不能說越容易測試的軟件,其質量將越好。從工程 最佳實踐來看,這種必然的關系倒並不成立,但反過來是成立的,越難驗證的軟件,其存在問題的風險將可能成倍增大。
6)可移植性(Portability)
可移植性,是衡量軟件是否能夠方便地部署到不同的運行環境中的能力,它有下面幾個特性。
*1*適應性
指軟件系統無需做任何相應變動就能適應不同運行環境的能力,其中運行環境通常是指操作系統平台、數據庫平台、硬件平台等。例如我們在項目常遇到的情況,某系統軟件原來運行在windows XP操作系統上,但后來由於Microsoft推出了windows 7,windows 8,應用新系統的用戶比比皆是,新用戶需要某系統軟件能在新平台上正常運行。這種因平台的變化,系統應用軟件的適應性在設計之初是需考慮的。
*2*易安裝性
指平台變化后,成功安裝軟件的難易程度。有些軟件可不作任何變化即可成功部署,有些需作部分變化,如安裝過程增加用戶選項等。對於軟件的安裝過程,能盡量考慮用戶少參與,多一些自動安裝過程會讓用戶更放心。
*3*共存性
指軟件系統在公共環境與其共享資源的其他系統共存的能力。這個特性表明我們在測試時不僅需要關注自身軟件特性的實現,還要關注本軟件是否影響了其他軟件的正常功能。
關於共存性,筆者曾遇一個這樣的案例,在應用程序進行輸入中文時,只要打開紫光拼音,則軟件將自動退出。還有一種是人為的限制,在已知情況下,軟件A打開,限制軟件B不能運行,有意防患,適合某特殊應用場景。
*4*易替換性
指軟件系統的升級能力,包括在線升級、打補丁升級等。易替換性相對於嵌入式產品軟件系統來說,由於涉及硬件物料的更新換代,如某主控芯片、USB接口芯片的換代,還可能會觸發底層驅動的升級。