應用組件
應用組件是 Android 應用的基本構建塊,每個組件都是一個入口點,系統或用戶可通過該入口點進入應用,有些組件會依賴于其他組件,Android主要有以下四大組件,
Activity
Activity就是用戶與應用程式互動的界面,Activity總共有6種狀態,Created, Started, Resumed, Paused, Stopped, Destroyed,與此同時,有以下7個回呼函式使得其狀態發生轉換,
onCreate()
該方法是在Activity第一次被創建的時候被呼叫,并且只會呼叫這一次,之后不會再呼叫,
呼叫前后:Created -> Started
onStart()
系統呼叫該方法時,Activity對用戶可見,應用會為 Activity 進入前臺并支持互動做準備,所以應用通過此方法來初始化維護界面的代碼,
呼叫前后:Started -> Resumed
onResume()
此時應用將一直處于于用戶互動狀態,直到某些事件發生,使得焦點離開應用,
呼叫前后:Resumed -> Paused
onPause()
此狀態意味著用戶離開了該應用,也就是此Activity不在前臺,
狀態:Paused
onStop()
Activity不再對用戶可見,應用應釋放所有不需要的資源以及可能會引發記憶體泄漏的資源,
狀態:Stopped
onDestroy()
系統呼叫此方法的原因:Activity 即將結束(由于用戶徹底關閉 Activity 或由于系統為 Activity 呼叫 finish()),或者由于配置變更(例如設備旋轉或多視窗模式),系統暫時銷毀 Activity,
狀態:Destroyed
onRestart()
呼叫前后:Stopped -> Started

Service
不同于Activity,Service沒有UI,但是當用戶需要讓應用長期處于后臺運行狀態時,Service也可以當做一個入口,
Started service 啟動服務,負責告訴系統長期保持應用處于運行狀態直到作業完成
Bound service 系結服務,也就是為另外的行程提供某種API

BroadcastReceiver
Android 應用與 Android 系統和其他 Android 應用之間可以相互收發廣播訊息,舉例來說,Android 系統會在發生各種系統事件時發送廣播,例如系統啟動或設備開始充電時,
ContentProvider
ContentProvider管理一組共享的應用資料,可以將這些資料存盤在檔案系統、SQLite 資料庫、網路中或者應用可訪問的任何其他持久化存盤位置,在ContentProvider允許的情況下,其他應用可通過內容提供程式查詢或修改資料,
變異測驗(Mutation Testing)
變異測驗概述
變異測驗是一種基于故障的軟體測驗技術,核心思想是:對程式注入故障,并以此來測驗 程式的測驗集 能否發現故障,以此評判測驗集的質量,
這種測驗策略之所以能夠成功,是因為程式員往往犯的錯誤都比較好定義,因此我們就可以用這些錯誤來代表程式員經常犯下的錯誤,來評估測驗集的質量,這些錯誤也被成為變異算子(Mutant Operator),
當然變異測驗也有一定的限制條件,一般有兩個原則或假設
- The Competent Programmer
假設源程式接近正確,只存在小的語法錯誤,- The Coupling Effect
假設可以檢測簡單故障的測驗用例也能夠檢測大多數更復雜的故障
變異測驗的程序
- 將測驗集運行源程式,并更改出現的錯誤,
- 向源程式注入變異算子,
- 再用測驗集運行已注入變異算子的程式,
- 比較1和3步驟的結果,如果結果不同則表明變異算子被殺死了,并且說明測驗集可以檢測出故障的注入;如果結果相同則說明測驗集不能檢測并殺死故障,
- 對于等價變異的故障注入,應該將其丟棄,

這里解釋一下什么是等價變異?
等價變異就是對源程式的修改沒有改變源程式原本的意思,舉個小例子就很好理解了,
源程式如下:
int t = 3;
while(true) {
t --;
if(t == 0)
break;
}
如果將while回圈中的跳出條件 t == 0 ,改為 t <= 0,源程式還是會在 t == 0的時候跳出回圈,所以這樣的修改并沒有改變源程式原本的意思,
這個程序之后便可以分析一下測驗集的質量,
對于每一個測驗集的質量都可以用一個指標,Mutation Adequacy Score(Mutation Score)
Mutation Score(MS) = 殺死的變異算子 / (總的變異算子 - 等價的變異算子)
通過這個公式我們可以清晰知道 MS 的取值范圍從0到1,取值越接近1的測驗集越好,
Android中的變異算子
主要可以分成以下四類,
Intent Mutation Operators
我們知道Android中,Intent物件經常被用來啟動Activity,或者用來Activity之間進行接識訓發送資料,主要有以下兩種變異算子:
Intent Pacload Replacement (IPR)
將Intent中發送的資料更改為默認值,以驗證Intent物件傳遞的值是否正確,Intent Target Replacement (ITR)
用來將同一個包中的所有類替換為每個Intent的目標,以驗證Intent執行后能否正常啟動目標Activity或Service,
Event Handler Mutation Operators
Android是基于事件,它使用事件處理程式來對事件進行回應,主要也有兩種變異算子:
OnClick Event Replacement (ECR)
將程式中的OnClick()更改為其他兼容的處理程式,想要殺死這個變異算子至少需要觸發一次OnClick事件,OnTouch Event Replacement (ETR)
將程式中的OnTouch()更改為其他兼容的處理程式,想要殺死這個變異算子至少需要觸發一次OnTouch事件,
Acticity Lifecycle Mutation Operators
Lifecycle Method Deletion (MDL)
將那些重寫了改變生命周期狀態的方法洗掉掉,以驗證應用是否處于正確的狀態,
XML Mutation Operators
XML在安卓中廣泛使用,不僅用于manifest檔案中,也用于定義用戶界面、定義啟動Activity等,主要有以下三種變異算子:
- Button Widget Deletion (BWD)
每次洗掉程式中的一個Button,想要殺死這個變異算子,需要檢查每一個Button是否正確,- EditText Widget Deletion (TWD)
每次洗掉程式中的一個EditText,想要殺死這個變異算子,需要檢查每一個EditText是否正確,- Activity Permission Deletion (APD)
每次洗掉manifest檔案中的一個permission,想要殺死這個變異算子,需要去測驗 需要該permission的函式 ,(檢測每一個permission是否有必要宣告)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/291333.html
標籤:其他
上一篇:[iOS開發]weak底層原理
下一篇:Android 畫中畫(視頻)
