srs源碼
⑴ 用SRS搭建WebRTC流媒體伺服器實戰
WebRTC經過這么多年的發展,目前已經比較成熟的協議之一,播放也比較穩定,協議也已經成為了RFC,相應的開源項目也越來越多,但是基於WebRTC協議的部署簡單,性能強悍,功能強大流媒體伺服器的項目還比較稀少。之前了解到的伺服器比如Mediasoup,Janus,Medooze ,要麼就是設計復雜,接入成本要,要麼就是性能較差,還就是多種語言結合,學習成本較高。 而SRS聚焦視頻相關,功能專一,語言使用了高性能的c++,並且支持Rtmp轉Webrtc等其他強大的功能的媒體伺服器。
使用這個命令開啟RTC支持
2.SRS常用命令
3.配置nginx代理
若不需要瀏覽器推流,可以不用設置nginx代理,使用localhost訪問
注意:your 代表需要配置你自己的域名信息,由於使用瀏覽器推流必須使用https協議,所以我這邊配置了證書
4.訪問配置的域名
訪問nginx配置的網址 https://webrtc.yourhost.com/
出現如下內容,則服務端架設成功
雖然整片文章看起來不復雜,流程很簡單。但是官網的文檔中的知識點比較分散,所以大家要想快速的搭建的話就參考我這篇文章
⑵ 白盒測試與黑盒測試的優缺點是什麼
白盒測試也稱結構測試或邏輯驅動測試,它是按照程序內部的結構測試程序,通過測試來檢測產品內部動作是否按照設計規格說明書的規定正常進行,檢驗程序中的每條通路是否都能按預定要求正確工作。
這一方法是把測試對象看作一個打開的盒子,測試人員依據程序內部邏輯結構相關信息,設計或選擇測試用例,對程序所有邏輯路徑進行測試,通過在不同點檢查程序的狀態,確定實際的狀態是否與預期的狀態一致。
採用什麼方法對軟體進行測試呢?常用的軟體測試方法有兩大類:靜態測試方法和動態測試方法。其中軟體的靜態測試不要求在計算機上實際執行所測程序,主要以一些人工的模擬技術對軟體進行分析和測試;而軟體的動態測試是通過輸入一組預先按照一定的測試准則構造的實例數據來動態運行程序,而達到發現程序錯誤的過程。
白盒測試的測試方法有代碼檢查法、靜態結構分析法、靜態質量度量法、邏輯覆蓋法、基本路徑測試法、域測試、符號測試、Z路徑覆蓋、程序變異。
白盒測試法的覆蓋標准有邏輯覆蓋、循環覆蓋和基本路徑測試。其中邏輯覆蓋包括語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋和路徑覆蓋。
六種覆蓋標准:語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋和路徑覆蓋發現錯誤的能力呈由弱至強的變化。語句覆蓋每條語句至少執行一次。判定覆蓋每個判定的每個分支至少執行一次。條件覆蓋每個判定的每個條件應取到各種可能的值。判定/條件覆蓋同時滿足判定覆蓋條件覆蓋。條件組合覆蓋每個判定中各條件的每一種組合至少出現一次。路徑覆蓋使程序中每一條可能的路徑至少執行一次。
"白盒"法全面了解程序內部邏輯結構、對所有邏輯路徑進行測試。"白盒"法是窮舉路徑測試。在使用這一方案時,測試者必須檢查程序的內部結構,從檢查程序的邏輯著手,得出測試數據。貫穿程序的獨立路徑數是天文數字。但即使每條路徑都測試了仍然可能有錯誤。第一,窮舉路徑測試決不能查出程序違反了設計規范,即程序本身是個錯誤的程序。第二,窮舉路徑測試不可能查出程序中因遺漏路徑而出錯。第三,窮舉路徑測試可能發現不了一些與數據相關的錯誤。
如何挑選白盒測試工具
白盒測試目前主要用在具有高可靠性要求的軟體領域,例如:軍工軟體、航天航空軟體、工業控制軟體等等。白盒測試工具在選購時應當主要是對開發語言的支持、代碼覆蓋的深度、嵌入式軟體的測試、測試的可視化等。
對開發語言的支持:白盒測試工具是對源代碼進行的測試,測試的主要內容包括詞法分析與語法分析、靜態錯誤分析、動態檢測等。但是對於不同的開發語言,測試工具實現的方式和內容差別是較大的。目前測試工具主要支持的開發語言包括:標准C、C++、Visual C++、Java、Visual J++等。
代碼的覆蓋深度:從覆蓋源程序語句的詳盡程度分析,邏輯覆蓋標准包括以下不同的覆蓋標准:語句覆蓋、判定覆蓋、條件覆蓋、條件判定組合覆蓋、多條件覆蓋和修正判定條件覆蓋。
·語句覆蓋 為了暴露程序中的錯誤,程序中的每條語句至少應該執行一次。因此語句覆蓋(Statement Coverage)的含義是:選擇足夠多的測試數據,使被測程序中每條語句至少執行一次。語句覆蓋是很弱的邏輯覆蓋。
·判定覆蓋 比語句覆蓋稍強的覆蓋標準是判定覆蓋(Decision Coverage)。判定覆蓋的含義是:設計足夠的測試用例,使得程序中的每個判定至少都獲得一次「真值」或「假值」,或者說使得程序中的每一個取「真」分支和取「假」分支至少經歷一次,因此判定覆蓋又稱為分支覆蓋。
·條件覆蓋 在設計程序中,一個判定語句是由多個條件組合而成的復合判定。為了更徹底地實現邏輯覆蓋,可以採用條件覆蓋(Condition Coverage)的標准。條件覆蓋的含義是:構造一組測試用例,使得每一判定語句中每個邏輯條件的可能值至少滿足一次。
·多條件覆蓋 多條件覆蓋也稱條件組合覆蓋,它的含義是:設計足夠的測試用例,使得每個判定中條件的各種可能組合都至少出現一次。顯然滿足多條件覆蓋的測試用例是一定滿足判定覆蓋、條件覆蓋和條件判定組合覆蓋的。
·修正條件判定覆蓋 修正條件判定覆蓋是由歐美的航空/航天製造廠商和使用單位聯合制定的「航空運輸和裝備系統軟體認證標准」,目前在國外的國防、航空航天領域應用廣泛。這個覆蓋度量需要足夠的測試用例來確定各個條件能夠影響到包含的判定的結果。它要求滿足兩個條件:首先,每一個程序模塊的入口和出口點都要考慮至少要被調用一次,每個程序的判定到所有可能的結果值要至少轉換一次;其次,程序的判定被分解為通過邏輯操作符(and、or)連接的布爾條件,每個條件對於判定的結果值是獨立的。
不同的測試工具對於代碼的覆蓋能力也是不同的,通常能夠支持修正條件判定覆蓋的測試工具價格是極其昂貴的。
嵌入式軟體的測試:對於嵌入式軟體的測試,我們還需要一方面進一步考慮測試工具對於嵌入式操作系統的支持能力,例如DOS、Vxworks、Neculeus、Linux和Windows CE等;另一方面還需要考慮測試工具對於硬體平台的支持能力,包括是否支持所有64/32/16位CPU 和 MCU,是否可以支持 PCI/VME/CPCI 匯流排。
測試的可視化:白盒測試是工作量巨大並且枯燥的工作,可視化的設計對於測試來說是十分重要的。在選購白盒測試工具時,應當考慮該款測試工具的可視化是否良好,例如:測試過程中是否可以顯示覆蓋率的函數分布圖和上升趨勢圖,是否使用不同的顏色區分已執行和未執行的代碼段顯示分配內存情況實時圖表等,這些對於測試效率和測試質量的提高是具有很大的作用的。
白盒測試之基本路徑測試法
白盒測試的測試方法有代碼檢查法、靜態結構分析法、靜態質量度量法、邏輯覆蓋法、基本路徑測試法、域測試、符號測試、Z路徑覆蓋、程序變異。
其中運用最為廣泛的是基本路徑測試法。
基本路徑測試法是在程序控制流圖的基礎上,通過分析控制構造的環路復雜性,導出基本可執行路徑集合,從而設計測試用例的方法。
設計出的測試用例要保證在測試中程序的每個可執行語句至少執行一次。
在程序控制流圖的基礎上,通過分析控制構造的環路復雜性,導出基本可執行路徑集合,從而設計測試用例。包括以下4個步驟和一個工具方法:
1. 程序的控制流圖:描述程序控制流的一種圖示方法。
2. 程序圈復雜度:McCabe復雜性度量。從程序的環路復雜性可導出程序基本路徑集合中的獨立路徑條數,這是確定程序中每個可執行語句至少執行一次所必須的測試用例數目的上界。
3. 導出測試用例:根據圈復雜度和程序結構設計用例數據輸入和預期結果。
4. 准備測試用例:確保基本路徑集中的每一條路徑的執行。
工具方法:
圖形矩陣:是在基本路徑測試中起輔助作用的軟體工具,利用它可以實現自動地確定一個基本路徑集。
程序的控制流圖:描述程序控制流的一種圖示方法。
圓圈稱為控制流圖的一個結點,表示一個或多個無分支的語句或源程序語句
流圖只有二種圖形符號:
圖中的每一個圓稱為流圖的結點,代表一條或多條語句。
流圖中的箭頭稱為邊或連接,代表控制流
任何過程設計都要被翻譯成控制流圖。
如何根據程序流程圖畫出控制流程圖?
在將程序流程圖簡化成控制流圖時,應注意:
在選擇或多分支結構中,分支的匯聚處應有一個匯聚結點。
邊和結點圈定的區域叫做區域,當對區域計數時,圖形外的區域也應記為一個區域。
基本路徑測試法的步驟:
第一步:畫出控制流圖
流程圖用來描述程序控制結構。可將流程圖映射到一個相應的流圖(假設流程圖的菱形決定框中不包含復合條件)。在流圖中,每一個圓,稱為流圖的結點,代表一個或多個語句。一個處理方框序列和一個菱形決測框可被映射為一個結點,流圖中的箭頭,稱為邊或連接,代表控制流,類似於流程圖中的箭頭。一條邊必須終止於一個結點,即使該結點並不代表任何語句(例如:if-else-then結構)。由邊和結點限定的范圍稱為區域。計算區域時應包括圖外部的范圍。
第二步:計算圈復雜度
圈復雜度是一種為程序邏輯復雜性提供定量測度的軟體度量,將該度量用於計算程序的基本的獨立路徑數目,為確保所有語句至少執行一次的測試數量的上界。獨立路徑必須包含一條在定義之前不曾用到的邊。
有以下三種方法計算圈復雜度:
流圖中區域的數量對應於環型的復雜性;
給定流圖G的圈復雜度V(G),定義為V(G)=E-N+2,E是流圖中邊的數量,N是流圖中結點的數量;
給定流圖G的圈復雜度V(G),定義為V(G)=P+1,P是流圖G中判定結點的數量。
第三步:導出測試用例 根據上面的計算方法,可得出四個獨立的路徑。(一條獨立路徑是指,和其他的獨立路徑相比,至少引入一個新處理語句或一個新判斷的程序通路。V(G)值正好等於該程序的獨立路徑的條數。)
路徑1:4-14
路徑2:4-6-7-14
路徑3:4-6-8-10-13-4-14
路徑4:4-6-8-11-13-4-14
根據上面的獨立路徑,去設計輸入數據,使程序分別執行到上面四條路徑。
白盒測試三步法
1) 根據代碼的功能,人工設計測試用例進行基本功能測試;
2) 統計白盒覆蓋率,為未覆蓋的白盒單位設計測試用例,實現完整的白盒覆蓋,比較理想的覆蓋率是實現100%語句、條件、分支、路徑覆蓋;
3) 自動生成大量的測試用例,捕捉"程序員未處理某些特殊輸入"形成的錯誤。
第1步的測試用例通常是現成的,因為詳細設計文檔會規定程序的基本功能,沒有文檔的,程序員在編程時也要想清楚程序的功能,這些基本功能就是基本測試用例;
第2步是在第1步的基礎上,檢查未覆蓋的白盒單位,由於未覆蓋的邏輯單位通常對應未測試的等價類,因此第2步可以找出第1步所遺漏的測試用例;
第3步用自動動態測試彌補第2步的固有缺陷。
"三步法"盡量避免重復工作,白盒方法和黑盒方法相結合,人工方法和自動方法相補充,如果第2步的覆蓋率比較理想,那麼基本上可以保證找出所有等價類。在開發過程允許的限度內,"三步法"已接近極限,當得起"徹底測試"四個字。
黑盒測試也稱功能測試,它是通過測試來檢測每個功能是否都能正常使用。在測試地,把程序看作一個不能打開的黑盒子,在完全不考慮程序內部結構和內部特性的情況下,在程序介面進行測試,它只檢查程序功能是否按照需求規格說明書的規定正常使用,程序是否能適當地接收輸入數據而產生正確的輸出信息。黑盒測試著眼於程序外部結構,不考慮內部邏輯結構,主要針對軟體界面和軟體功能進行測試。
黑盒測試是以用戶的角度,從輸入數據與輸出數據的對應關系出發進行測試的。很明顯,如果外部特性本身有問題或規格說明的規定有誤,用墨盒測試方法是發現不了的。
黑盒測試法注重於測試軟體的功能需求,主要試圖發現下列幾類錯誤。
功能不正確或遺漏;
界面錯誤;
資料庫訪問錯誤;
性能錯誤;
初始化和終止錯誤等。
從理論上講,黑盒測試只有採用窮舉輸入測試,把所有可能的輸入都作為測試情況考慮,才能查出程序中所有的錯誤。實際上測試情況有無窮多個,人們不僅要測試所有合法的輸入,而且還要對那些不合法但可能的輸入進行測試。這樣看來,完全測試是不可能的,所以我們要進行有針對性的測試,通過制定測試案例指導測試的實施,保證軟體測試有組織、按步驟,以及有計劃地進行。黑盒測試行為必須能夠加以量化,才能真正保證軟體質量,而測試用例就是將測試行為具體量化的方法之一。具體的黑盒測試用例設計方法包括等價類劃分法、邊界值分析法、錯誤推測法、因果圖法、判定表驅動法、正交試驗設計法、功能圖法等。
等價類劃分的辦法是把程序的輸入域劃分成若幹部分(子集),然後從每個部分中選取少數代表性數據作為測試用例。每一類的代表性數據在測試中的作用等價於這一類中的其他值。該方法是一種重要的,常用的黑盒測試用例設計方法。
1) 劃分等價類: 等價類是指某個輸入域的子集合。在該子集合中,各個輸入數據對於揭露程序中的錯誤都是等效的,並合理地假定:測試某等價類的代表值就等於對這一類其它值的測試.因此,可以把全部輸入數據合理劃分為若乾等價類,在每一個等價類中取一個數據作為測試的輸入條件,就可以用少量代表性的測試數據.取得較好的測試結果.等價類劃分可有兩種不同的情況:有效等價類和無效等價類.
有效等價類:是指對於程序的規格說明來說是合理的,有意義的輸入數據構成的集合.利用有效等價類可檢驗程序是否實現了規格說明中所規定的功能和性能.
無效等價類:與有效等價類的定義恰巧相反.
設計測試用例時,要同時考慮這兩種等價類.因為,軟體不僅要能接收合理的數據,也要能經受意外的考驗.這樣的測試才能確保軟體具有更高的可靠性.
2)劃分等價類的方法:下面給出六條確定等價類的原則.
①在輸入條件規定了取值范圍或值的個數的情況下,則可以確立一個有效等價類和兩個無效等價類.
②在輸入條件規定了輸入值的集合或者規定了「必須如何」的條件的情況下,可確立一個有效等價類和一個無效等價類.
③在輸入條件是一個布爾量的情況下,可確定一個有效等價類和一個無效等價類.
④在規定了輸入數據的一組值(假定n個),並且程序要對每一個輸入值分別處理的情況下,可確立n個有效等價類和一個無效等價類.
⑤在規定了輸入數據必須遵守的規則的情況下,可確立一個有效等價類(符合規則)和若干個無效等價類(從不同角度違反規則).
⑥在確知已劃分的等價類中各元素在程序處理中的方式不同的情況下,則應再將該等價類進一步的劃分為更小的等價類.
3)設計測試用例:在確立了等價類後,可建立等價類表,列出所有劃分出的等價類:
輸入條件 有效等價類 無效等價類
... ... ...
... ... ...
然後從劃分出的等價類中按以下三個原則設計測試用例:
①為每一個等價類規定一個唯一的編號.
②設計一個新的測試用例,使其盡可能多地覆蓋尚未被覆蓋地有效等價類,重復這一步.直到所有的有效等價類都被覆蓋為止.
③設計一個新的測試用例,使其僅覆蓋一個尚未被覆蓋的無效等價類,重復這一步.直到所有的無效等價類都被覆蓋為止.
邊界值分析是通過選擇等價類邊界的測試用例。邊界值分析法不僅重視輸入條件邊界,而且也必須考慮輸出域邊界。它是對等價類劃分方法的補充.
(1)邊界值分析方法的考慮:
長期的測試工作經驗告訴我們,大量的錯誤是發生在輸入或輸出范圍的邊界上,而不是發生在輸入輸出范圍的內部.因此針對各種邊界情況設計測試用例,可以查出更多的錯誤.
使用邊界值分析方法設計測試用例,首先應確定邊界情況.通常輸入和輸出等價類的邊界,就是應著重測試的邊界情況.應當選取正好等於,剛剛大於或剛剛小於邊界的值作為測試數據,而不是選取等價類中的典型值或任意值作為測試數據.
(2)基於邊界值分析方法選擇測試用例的原則:
1)如果輸入條件規定了值的范圍,則應取剛達到這個范圍的邊界的值,以及剛剛超越這個范圍邊界的值作為測試輸入數據.
2)如果輸入條件規定了值的個數,則用最大個數,最小個數,比最小個數少一,比最大個數多一的數作為測試數據.
3)根據規格說明的每個輸出條件,使用前面的原則1).
4)根據規格說明的每個輸出條件,應用前面的原則2).
5)如果程序的規格說明給出的輸入域或輸出域是有序集合,則應選取集合的第一個元素和最後一個元素作為測試用例.
6)如果程序中使用了一個內部數據結構,則應當選擇這個內部數據結構的邊界上的值作為測試用例.
7)分析規格說明,找出其它可能的邊界條件.
錯誤推測法是基於經驗和直覺推測程序中所有可能存在的各種錯誤, 從而有針對性的設計測試用例的方法.
錯誤推測方法的基本思想: 列舉出程序中所有可能有的錯誤和容易發生錯誤的特殊情況,根據他們選擇測試用例. 例如, 在單元測試時曾列出的許多在模塊中常見的錯誤. 以前產品測試中曾經發現的錯誤等, 這些就是經驗的總結. 還有, 輸入數據和輸出數據為0的情況. 輸入表格為空格或輸入表格只有一行. 這些都是容易發生錯誤的情況. 可選擇這些情況下的例子作為測試用例.
因果圖法:
前面介紹的等價類劃分方法和邊界值分析方法,都是著重考慮輸入條件,但未考慮輸入條件之間的聯系, 相互組合等. 考慮輸入條件之間的相互組合,可能會產生一些新的情況. 但要檢查輸入條件的組合不是一件容易的事情, 即使把所有輸入條件劃分成等價類,他們之間的組合情況也相當多. 因此必須考慮採用一種適合於描述對於多種條件的組合,相應產生多個動作的形式來考慮設計測試用例. 這就需要利用因果圖(邏輯模型).
因果圖方法最終生成的就是判定表. 它適合於檢查程序輸入條件的各種組合情況.
利用因果圖生成測試用例的基本步驟:
(1) 分析軟體規格說明描述中, 那些是原因(即輸入條件或輸入條件的等價類),那些是結果(即輸出條件), 並給每個原因和結果賦予一個標識符.
(2) 分析軟體規格說明描述中的語義.找出原因與結果之間, 原因與原因之間對應的關系. 根據這些關系,畫出因果圖.
(3) 由於語法或環境限制, 有些原因與原因之間,原因與結果之間的組合情況不不可能出現. 為表明這些特殊情況, 在因果圖上用一些記號表明約束或限制條件.
(4) 把因果圖轉換為判定表.
(5) 把判定表的每一列拿出來作為依據,設計測試用例.
從因果圖生成的測試用例(局部,組合關系下的)包括了所有輸入數據的取TRUE與取FALSE的情況,構成的測試用例數目達到最少,且測試用例數目隨輸入數據數目的增加而線性地增加.
前面因果圖方法中已經用到了判定表.判定表(Decision Table)是分析和表達多邏輯條件下執行不同操作的情況下的工具.在程序設計發展的初期,判定表就已被當作編寫程序的輔助工具了.由於它可以把復雜的邏輯關系和多種條件組合的情況表達得既具體又明確.
判定表通常由四個部分組成.
條件樁(Condition Stub):列出了問題得所有條件.通常認為列出得條件的次序無關緊要.
動作樁(Action Stub):列出了問題規定可能採取的操作.這些操作的排列順序沒有約束.
條件項(Condition Entry):列出針對它左列條件的取值.在所有可能情況下的真假值.
動作項(Action Entry):列出在條件項的各種取值情況下應該採取的動作.
規則:任何一個條件組合的特定取值及其相應要執行的操作.在判定表中貫穿條件項和動作項的一列就是一條規則.顯然,判定表中列出多少組條件取值,也就有多少條規則,既條件項和動作項有多少列.
判定表的建立步驟:(根據軟體規格說明)
①確定規則的個數.假如有n個條件.每個條件有兩個取值(0,1),故有 種規則.
②列出所有的條件樁和動作樁.
③填入條件項.
④填入動作項.等到初始判定表.
⑤簡化.合並相似規則(相同動作).
B. Beizer 指出了適合使用判定表設計測試用例的條件:
①規格說明以判定表形式給出,或很容易轉換成判定表.
②條件的排列順序不會也不影響執行哪些操作.
③規則的排列順序不會也不影響執行哪些操作.
④每當某一規則的條件已經滿足,並確定要執行的操作後,不必檢驗別的規則.
⑤如果某一規則得到滿足要執行多個操作,這些操作的執行順序無關緊要.
正交試驗設計法,就是使用已經造好了的正交表格來安排試驗並進行數據分析的一種方法,目的是用最少的測試用例達到最高的測試覆蓋率。
黑盒測試的優點
1. 基本上不用人管著,如果程序停止運行了一般就是被測試程序crash了
2. 設計完測試例之後,下來的工作就是爽了,當然更苦悶的是確定crash原因
黑盒測試的缺點
1. 結果取決於測試例的設計,測試例的設計部分來勢來源於經驗,OUSPG的東西很值得借鑒
2. 沒有狀態轉換的概念,目前一些成功的例子基本上都是針對PDU來做的,還做不到針對被測試程序的狀態轉換來作
3. 就沒有狀態概念的測試來說,尋找和確定造成程序crash的測試例是個麻煩事情,必須把周圍可能的測試例單獨確認一遍。而就有狀態的測試來說,就更麻煩了,尤其不是一個單獨的testcase造成的問題。這些在堆的問題中表現的更為突出。
黑盒測試(功能測試)工具的選擇
那麼,如何高效地完成功能測試?選擇一款合適的功能測試工具並培訓一支高素質的工具使用隊伍無疑是至關重要的。盡管現階段存在少數不採用任何功能測試工具,從事功能測試外包項目的軟體服務企業。短期來看,這類企業盈利狀況尚可,但長久來看,它們極有可能被自動化程度較高的軟體服務企業取代。
目前,用於功能測試的工具軟體有很多,針對不同架構軟體的工具也不斷推陳出新。這里重點介紹的是其中一個較為典型自動化測試工具,即Mercury公司的WinRunner。
WinRunner是一種用於檢驗應用程序能否如期運行的企業級軟體功能測試工具。通過自動捕獲、檢測和模擬用戶交互操作,WinRunner能識別出絕大多數軟體功能缺陷,從而確保那些跨越了多個功能點和資料庫的應用程序在發布時盡量不出現功能性故障。
WinRunner的特點在於: 與傳統的手工測試相比,它能快速、批量地完成功能點測試; 能針對相同測試腳本,執行相同的動作,從而消除人工測試所帶來的理解上的誤差; 此外,它還能重復執行相同動作,測試工作中最枯燥的部分可交由機器完成; 它支持程序風格的測試腳本,一個高素質的測試工程師能藉助它完成流程極為復雜的測試,通過使用通配符、宏、條件語句、循環語句等,還能較好地完成測試腳本的重用; 它針對於大多數編程語言和Windows技術,提供了較好的集成、支持環境,這對基於Windows平台的應用程序實施功能測試而言帶來了極大的便利。
WinRunner的工作流程大致可以分為以下六個步驟:
1.識別應用程序的GUI
在WinRunner中,我們可以使用GUI Spy來識別各種GUI對象,識別後,WinRunner會將其存儲到GUI Map File中。它提供兩種GUI Map File模式: Global GUI Map File和GUI Map File per Test。其最大區別是後者對每個測試腳本產生一個GUI文件,它能自動建立、存儲、載入,推薦初學者選用這種模式。但是,這種模式不易於描述對象的改變,其效率比較低,因此對於一個有經驗的測試人員來說前者不失為一種更好的選擇,它只產生一個共享的GUI文件,這使得測試腳本更容易維護,且效率更高。
2.建立測試腳本
在建立測試腳本時,一般先進行錄制,然後在錄制形成的腳本中手工加入需要的TSL(與C語言類似的測試腳本語言)。錄制腳本有兩種模式: Context Sensitive和Analog,選擇依據主要在於是否對滑鼠軌跡進行模擬,在需要回放時一般選用Analog。在錄制過程中這兩種模式可以通過F2鍵相互切換。
只要看看現代軟體的規模和功能點數就可以明白,功能測試早已跨越了單靠手工敲敲鍵盤、點點滑鼠就可以完成的階段。而性能測試則是控制系統性能的有效手段,在軟體的能力驗證、能力規劃、性能調優、缺陷修復等方面都發揮著重要作用。
3.對測試腳本除錯(debug)
在WinRunner中有專門一個Debug Toolbar用於測試腳本除錯。可以使用step、pause、breakpoint等來控制和跟蹤測試腳本和查看各種變數值。
4.在新版應用程序執行測試腳本
當應用程序有新版本發布時,我們會對應用程序的各種功能包括新增功能進行測試,這時當然不可能再來重新錄制和編寫所有的測試腳本。我們可以使用已有的腳本,批量運行這些測試腳本測試舊的功能點是否正常工作。可以使用一個call命令來載入各測試腳本。還可在call命令中加各種TSL腳本來增加批量能力。
5.分析測試結果
分析測試結果在整個測試過程中最重要,通過分析可以發現應用程序的各種功能性缺陷。當運行完某個測試腳本後,會產生一個測試報告,從這個測試報告中我們能發現應用程序的功能性缺陷,能看到實際結果和期望結果之間的差異,以及在測試過程中產生的各類對話框等。
6.回報缺陷(defect)
在分析完測試報告後,按照測試流程要回報應用程序的各種缺陷,然後將這些缺陷發給指定人,以便進行修改和維護。
常用的功能測試方法
功能測試就是對產品的各功能進行驗證,根據功能測試用例,逐項測試,檢查產品是否達到用戶要求的功能。
⑶ 代碼覆蓋率VS測試覆蓋率
測試覆蓋率和代碼覆蓋率是衡量代碼有效性的最流行方法。這些術語有時會同時出現,因為它們的基本原理相同。但是它們並不是那麼一致。很多時候,測試團隊和開發團隊對這兩個術語的使用感到困惑。下面詳細討論代碼覆蓋率和測試覆蓋率之間的區別的原因。
代碼覆蓋率:表示通過用Selenium或任何其他測試自動化框架進行的手動測試和自動化測試,測試用例覆蓋的代碼百分比。例如,如果源代碼具有一個簡單的if...else循環,則如果測試代碼可以覆蓋這兩種情況(即if&else),則代碼覆蓋率將為100%。
測試范圍:包括測試作為功能需求規范,軟體需求規范和其他必需文檔的一部分而實現的功能。例如,如果要對Web應用程序執行跨瀏覽器測試,以確保應用程序可以在其他瀏覽器流暢運行。測試覆蓋范圍是已驗證Web應用程序的瀏覽器兼容性的瀏覽器+操作系統組合的數量。
開發人員在單元測試期間執行代碼覆蓋,以驗證代碼實現,盡可能多執行代碼語句。大多數代碼覆蓋率工具都使用靜態工具,將監視執行的語句插入代碼中的必要位置。盡管添加檢測代碼會導致總體應用程序大小和執行時間增加,但與通過執行檢測代碼生成的信息相比,開銷卻很小。輸出包含一個詳細描述測試套件測試范圍的報告。
單元測試主要用於在單個單元級別上測試代碼。由於單元測試是由開發人員自己編寫的,因此他對應該作為單元測試的一部分包含的測試具有更好的可見性。單元測試有助於提高軟體的整體質量,但是關於構成單元測試的測試數量始終存在疑問。測試套件中是否有足夠數量的測試方案?我們應該添加更多測試嗎?代碼覆蓋率是所有這些問題的重要衡量標准。
隨著產品開發的進行,新功能以及BUG修復補丁將添加到發布周期中。這意味著測試代碼可能還需要進行更改,以使其與開發過程中所做的軟體更改保持一致。在項目開始時設定的測試標准必須與後續的發布周期保持一致,這一點很重要。代碼覆蓋率可用於確保測試過程符合這些標准,並且質量最好的代碼進入生產階段。
代碼覆蓋率越高,發生未檢測到的錯誤的概率越低。在某些組織中,質量團隊設置在將軟體推向生產階段之前需要實現的最小代碼覆蓋量。這樣做的主要原因是為了減少在產品開發的後期階段檢測到錯誤的可能性。
代碼覆蓋范圍有不同的級別,代碼覆蓋率的一些常見的類型為:
為了檢查代碼覆蓋率,使用了一種稱為檢測的方法。工具可用於監視性能,插入跟蹤信息以及診斷源代碼中的任何類型的錯誤。
儀器分為三種主要類型
根據測試要求,團隊應該選擇正確的代碼覆蓋率工具以及該工具支持的最佳檢測方法。
有許多支持不同編程語言的代碼覆蓋工具,其中許多還可以兼用作QA工具。許多工具可以與構建工具和項目管理工具集成在一起,從而使它們更加強大的作用。選擇開源代碼覆蓋率工具時,應檢查該工具支持的功能以及該工具是否正在積極開發迭代中。下面是一些流行的開源代碼覆蓋工具:
與代碼覆蓋率是白盒測試方法不同,測試覆蓋率是黑盒測試方法。以最大范圍覆蓋FRS(功能需求規范),SRS(軟體需求規范),URS(用戶需求規范)等中提到的需求的方式編寫測試用例。
像代碼覆蓋率一樣,也可以通過不同類型的測試來評估測試覆蓋率。但是,應遵循哪種測試完全取決於具體的業務。例如在以用戶為中心的Web應用程序中,可能存在UI/UX測試比功能測試具有更高優先順序的情況,而在其他類型的應用程序中(例如銀行,金融);可用性測試,安全性測試等可能更為重要。
以下是一些測試覆蓋率機制:
要注意的另一個重要點是,測試覆蓋范圍的目的和含義可能會有所不同,具體取決於執行測試的級別。它還取決於執行黑盒測試的產品類型。用於測試手機的測試覆蓋率指標將不同於用於網站測試的指標。一些分類如下:
在代碼覆蓋率的情況下,度量標準是通過測試用例/測試套件測試的代碼的百分比。因此,可以量化測試結果,即在100 LOC(代碼行)中,代碼覆蓋率為80行。這意味著代碼覆蓋率為80%。由於執行測試是為了驗證功能要求,因此無法量化測試覆蓋率的結果。還可以提出可以在單個測試中測試多個需求的黑匣子測試。 盡管在少數情況下必須編寫測試代碼來達到測試覆蓋率要求,但是在某些情況下,您可能仍需要使用一些流行的測試框架。兩種最受歡迎 的測試框架是:
衡量代碼覆蓋率和測試覆蓋率的影響的基礎完全不同。代碼覆蓋率是通過測試期間覆蓋的代碼百分比來衡量的,而測試覆蓋率是通過測試覆蓋的功能來衡量的。 重要的是「其中哪一項最適合項目」?這個問題沒有確切的答案,因為解決方案取決於項目的類型和復雜性。在大多數情況下,使用測試覆蓋率和代碼覆蓋率,因為它們在軟體項目中同等重要。
測試團隊應花費大量時間來了解總體要求並確定測試活動的優先順序。為了跟蹤進度,他們應該有一個清單,該清單應定期更新(至少在每次發行之後)。測試團隊還必須與質量保證(QA)團隊保持頻繁的溝通,這是很重要的,因為他們具有要發布給客戶/客戶的產品/項目必須達到的目標(測試/代碼)覆蓋范圍的詳細信息。沒有專門的經驗法則提到測試產品時需要達到的最小代碼覆蓋率或測試覆蓋率百分比。
追求覆蓋率只是手段而不是目的。測試同學的終極目的還是要在首先的資源情況下最大顯得保障產品質量。不能因為KPI就盲目追求手段的極致,反而本末倒置,最終陷入泥潭不能自拔。
⑷ 編程,輸入一個三位整數,將其分解出百位,十位,各位,並求出各位之和以及之積。
代碼:
#include<stdio.h>
#include<stdlib.h>
void GetResult(int iInput){
char a,c[3];
int i,t1,t2;
int d[3];
itoa(iInput,c,10);
t1=1;t2=0;
for(i=0;i<3;i++)
{
//將其分解出百位,十位,個位,並求出各位之和以及各位之積
a=c<i>;
t1=t1*atoi(&a);
t2=t2+atoi(&a);
}
printf("百位:%c十位:%c個位:%c積:%d和:%d",c[0],c[1],c[2],t1,t2);
}
int main(int argc,char**argv){
int input=0;
printf("請輸入三位的整數(100~999),如果輸入0則退出程序: ");
while(1){
if(scanf("%d",&input)==1){
if(input==0){
break;
}else
{
GetResult(input);
}
}else{
printf("無效的輸入,跳過返回... ");
}
}
return 0;
}
運行結果:
(4)srs源碼擴展閱讀:
include用法:
#include命令預處理命令的一種,預處理命令可以將別的源代碼內容插入到所指定的位置;可以標識出只有在特定條件下才會被編譯的某一段程序代碼;可以定義類似標識符功能的宏,在編譯時,預處理器會用別的文本取代該宏。
插入頭文件的內容
#include命令告訴預處理器將指定頭文件的內容插入到預處理器命令的相應位置。有兩種方式可以指定插入頭文件:
1、#include<文件名>
2、#include"文件名"