IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android四大组件及变异测试 -> 正文阅读

[移动开发]Android四大组件及变异测试

应用组件

应用组件是 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)

当然变异测试也有一定的限制条件,一般有两个原则或假设

  1. The Competent Programmer
    假设源程序接近正确,只存在小的语法错误。
  2. The Coupling Effect
    假设可以检测简单故障的测试用例也能够检测大多数更复杂的故障

变异测试的过程

  1. 将测试集运行源程序,并更改出现的错误。
  2. 向源程序注入变异算子。
  3. 再用测试集运行已注入变异算子的程序。
  4. 比较1和3步骤的结果,如果结果不同则表明变异算子被杀死了,并且说明测试集可以检测出故障的注入;如果结果相同则说明测试集不能检测并杀死故障。
  5. 对于等价变异的故障注入,应该将其丢弃。

在这里插入图片描述

这里解释一下什么是等价变异?

等价变异就是对源程序的修改没有改变源程序原本的意思。举个小例子就很好理解了。

源程序如下:

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之间进行接收或发送数据。主要有以下两种变异算子:

  1. Intent Pacload Replacement (IPR)
    将Intent中发送的数据更改为默认值,以验证Intent对象传递的值是否正确。

  2. Intent Target Replacement (ITR)
    用来将同一个包中的所有类替换为每个Intent的目标,以验证Intent执行后能否正常启动目标Activity或Service。

Event Handler Mutation Operators

Android是基于事件,它使用事件处理程序来对事件进行响应,主要也有两种变异算子:

  1. OnClick Event Replacement (ECR)
    将程序中的OnClick()更改为其他兼容的处理程序,想要杀死这个变异算子至少需要触发一次OnClick事件。

  2. OnTouch Event Replacement (ETR)
    将程序中的OnTouch()更改为其他兼容的处理程序,想要杀死这个变异算子至少需要触发一次OnTouch事件。

Acticity Lifecycle Mutation Operators

Lifecycle Method Deletion (MDL)
将那些重写了改变生命周期状态的方法删除掉,以验证应用是否处于正确的状态。

XML Mutation Operators

XML在安卓中广泛使用,不仅用于manifest文件中,也用于定义用户界面、定义启动Activity等。主要有以下三种变异算子:

  1. Button Widget Deletion (BWD)
    每次删除程序中的一个Button,想要杀死这个变异算子,需要检查每一个Button是否正确。
  2. EditText Widget Deletion (TWD)
    每次删除程序中的一个EditText,想要杀死这个变异算子,需要检查每一个EditText是否正确。
  3. Activity Permission Deletion (APD)
    每次删除manifest文件中的一个permission,想要杀死这个变异算子,需要去测试 需要该permission的函数 。(检测每一个permission是否有必要声明)
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-02 10:55:55  更:2021-08-02 10:57:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/22 23:44:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码