应用组件

应用组件是 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是否有必要声明)

Android四大组件及变异测试相关推荐

  1. 使用Drozer对Android四大组件进行测试

    使用Drozer对Android四大组件进行测试 一.介绍 Drozer是一款安卓的安全测试框架,可以用来对安卓应用进行渗透测试,工作方式为交互式,有点类似于MSF,可以选择模块和payload对风险 ...

  2. Android 四大组件通信核心

    前言 系列文章: Android Activity创建到View的显示过程 Android 四大组件通信核心 Android 系统启动到App 界面完全展示终于明白(图文版) 我们知道Android ...

  3. Android四大组件之BroadCastReceiver

    1. 基本概念 在Android 中,Broadcast 是一种广泛运用的在应用程序之间传输信息的机制.而BroadcastReceiver 是对发送出来的Broadcast 进行过滤接受并响应的一类 ...

  4. Android 四大组件之——Service(一)

    一.什么是服务 服务,是Android四大组件之一, 属于 计算型组件.   长期后台运行的没有界面的组件 ,特点是无用户界面.在后台运行.生命周期长 二,什么时候使用服务? 天气预报:后台的连接服务 ...

  5. Android 四大组件之——Acitivity(一)

    一,什么是Activity activity是Android组件中最基本也是最为常见用的四大组件之一.Android四大组件有Activity,Service服务,Content Provider内容 ...

  6. Android——四大组件、六大布局、五大存储

    一.android四大组件 (一)android四大组件详解 Android四大组件分别为activity.service.content provider.broadcast receiver. 1 ...

  7. 重温Android四大组件(一)—Activity的生命周期

    前言 四大组件对于Android开发者是老生常谈的知识了,相信每个Android开发者对四大组件都已经很熟悉了.但是四大组件作为Android应用的基础,作为开发者不仅要熟悉而且要烂熟于心. 这里以& ...

  8. Android四大组件之——Activity的生命周期(图文详解)

        转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com       [Andro ...

  9. Android 四大组件 —— 服务

    一.服务是什么 服务(Service)是Android 中实现程序后台运行的解决方案,它非常适合用于去执行那些不需要和用户交互而且还要求长期运行的任务.服务的运行不依赖于任何用户界面,即使当程序被切换 ...

最新文章

  1. 教育安全认证体系建设项目容灾备份体系建设项目
  2. 包(package)
  3. 关于后端java项目使用SpringBoot框架的报错总结
  4. 多线程编程3 - NSOperationQueue
  5. 简单QT应用到通过手写布局实现QT应用
  6. 利用 async amp; await 的异步编程
  7. oracle如何自定义类型,Oracle 自定义类型
  8. windows服务器上安装的有mysql环境怎么创建数据库_Windows环境MySQL数据库安装方法...
  9. Xshell7免费版申请无需破解
  10. 2018年易语言FPS骨骼方框透视辅助开发
  11. can test 接收报文_电动汽车国标充电报文解析及应用
  12. 精品免费软件更新下载
  13. 显卡XP驱动 Win7驱动 NVIDIA GT520M GT525M GT540M
  14. 微软苏州校招1月3日在线编程题2——Disk Storage
  15. VOB文件用什么软件打开,VOB文件如何转换成MP4格式
  16. 微信的API到底是什么?
  17. 常见PCIE X1/X4/X8/X16插槽作用与区别
  18. JAVA常见类(十二)Calendar类
  19. ChinaSoft 论坛巡礼 | CCF-华为胡杨林基金-形式化方法专项论坛
  20. 移动端区分安卓系统和ios系统

热门文章

  1. Pod控制器之hpa
  2. PH测定仪、电导率测定仪、叶绿素荧光测定仪使用
  3. 大数据学习的关键技术知识体系及学习建议
  4. 中星9号接收机各厂家芯片资料大全和升级接口针脚定义
  5. javascript事件循环Event Loop,宏任务与微任务
  6. 【免费】Java商城网店软件 TurboShop
  7. 北京pm2.5R 语言分析代码
  8. 御用飞场之惊险炸鸡寻根溯源
  9. 复旦首推慕课《大数据与信息传播》向全球开放
  10. 如何将百度地图API获取经纬度写成公有方法?