Git Product home page Git Product logo

mutapk's Introduction

The Software Design Lab WebPage Template

Dear maintainer, this webpage was made using a jekyll theme that can be found here.

The source code can be found in develop branch. In master branch its only the result of the compilation. We are using a gem that makes easier to add a new publication but it cannot be used in the ci pipelines of github.

You need to have ruby and jekyll installed in your computer. Then you have to clone the repository and change to develop branch.

Building the webpage

Once you are in the development folder use jekyll build and jekyll serve --host 127.0.0.1 --port 8080 see the result of the page. When all the changes have been done copy the content of the _site folder, change to master branch and replace all the content. I strongly recommend to run a local server to make sure all the changes are in the page. Then you can push your changes in both branches to the repo.

Maintaining this webpage


Home Page


Slider

The photos that appear in the slider can be modified in the index.html.

The images path are added in the file header.

...
image: /img/ICSME18LR.jpg
image2: /img/news/BluehackTSDLSlider.jpeg
image3: /img/DSC_0414_Original.jpg
image4: /img/grace.jpg
image5: /img/google18.jpg
image6: /img/peru18.jpg
...

and then you have to had a new carrousel item replacing <imageKey> and <imageCaption>:

<div class="carousel-item">
  <img class="d-block w-100" src="{{site.base}}{{ <imageKey> }}" alt="Team">
  <div class="carousel-caption d-none d-md-block">
    <h5> <imageCaption> </h5>
  </div>
</div>

News

News can be found in _posts folder. Everytime you create a news the file must be called like

<year>-<month>-<day>-<newsID>.md

And its content should be something like this:

---
layout: post
title: "ACM SIGSOFT Distinguished Paper Award"
icon: trophy
image: https://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Association_for_Computing_Machinery_%28ACM%29_logo.svg/300px-Association_for_Computing_Machinery_%28ACM%29_logo.svg.png
shortnews: true
---

Mario Linares-Vásquez received an ACM DPA for his paper "Automatically Assessing Code Understandability: How Far Are We?", in Proceedings of 32nd IEEE/ACM International Conference on Automated Software Engineering (ASE'17), Urbana-Champaign, Illinois, USA, October 30 - November 3, 2017

Depending on the type of news the icon can be:

Type of news icon key
New published paper newspaper-o
Award trophy
Talk slideshare

The amount of news that are shown in the index is defined in the _config.yml using the key front_page_news.


People


People is modified in the _data/people.yml. We have 5 posible roles in our research lab:

Role Who has this role
faculty Professors
grad Ph.D. and Ms. students
ugrad Undergraduate students
collab External Collaborators
alum Past students of TSDL

when a person is added to the people.yml file it must follow the following template:

<id>:
    display_name: "<fullName>"
    role: "<role>"
    image: "/img/people/<imageName>.jpg"
    webpage: "<personalPageURL>"
    bio: "<description Of Current position>"

Is important to see that if a person do not have a personal page that tag must be ommited. Also, alumni dont use either webpage or bio tag.


Research Projects


Research projects can be found in _rschprojects/. Each project has its own MarkDown file and usualy follow this template:

---
title: "Mutation Testing"
description: Mutation Testing is a type of software testing where we mutate (change) certain statements in the source code and check if the test cases are able to find the errors. It is a type of White Box Testing which is mainly used for Unit Testing. The changes in mutant program are kept extremely small, so it does not affect the overall objective of the program. In this moment, we have open projects in NodeJS and Android Framework


people:
  - marioLinares
  - camiloEscobar
  - diegoRodriguez
  - collGabrieleBavota
  - collMassimiliano
  - collDenysPosh

topic: Software Testing
layout: project
image: /img/project-images/mutation.png

---

Right now the topic tag defines how they are group in the web page, currently we have 3 possible values:

  • Automated Software Engineering
  • Quality Attributes in Mobile Apps
  • Software Testing

Software Development Projects


This projects follow this template:

---
title: "FIND: A Software Platform Against Human Trafficking"
description: Technological platform under development. This solution is being financed by the United Nations Office on Drugs and Crime. It includes an AI module based on IBM Watson, mobile applications and a dashboard.


people:
  - dianaSolano
  - lauraBello
  - camiloEscobar
  - santiagoLinan
  - sergioYodeb
  - marioLinares
link: https://thesoftwaredesignlab.github.io/blog/2018/09/01/bluehack.html
layout: project
image: /img/project-images/findBlueHack.jpg
---

Here there is no topic and projects are shown directly, but there is a link tag that is important to fill.


Publications


If you want to add a new publication to the page just copy the paper/journal bibtex content into bib/pubs.bib. Jekyll and Jekyll-scholar will do all the magic and will generate a new entry.

However, there are some important things to check before pushing your changes:

  1. New publications bibtex key must be meaninfull, we recommend to use:
<firstLastnameOfFirstAuthor><Year><toolName|confName|journalName|meaningfulWor>
---
linan2018rip
linares2017cel
rodriguez2018mutode
  1. If the bibtex has the keyworks tag and its content its to long its better to remove it because bibtex link in webpage generates a div whose height is based on the number of lines of the bibtex, if the keywords are too long the layout breaks.

The filter over the publications is done in the publications.html file. In case you want to change something.

mutapk's People

Contributors

caev03 avatar dfriveros11 avatar mlinarev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

mutapk's Issues

BuggyGUIListener

Los datos para este mutante se obtuvieron de la aplicación Man Man
Repositorio: https://github.com/Adonai/Man-Man
Clase en dónde se encontró el componente: com/adonai/manman/ManPageSearchFragment.java

Cambios en el código de la aplicación:

Las siguientes imágenes permiten ver los cambios realizados al código fuente de la aplicación.

  • Before:
    beforecodigo

  • After:
    aftercodigo

Las siguientes imágenes permiten ver las diferencias en el código smile que se ocasionaron por el cambio que se hizo en el código fuente.

  • Before:
    beforemetodo

  • After:
    aftermetodo

En las dos imágenes anteriores se puede ver cómo se desaparece un método completo.

  • Before:
    beforeinstrucciones

  • After:
    afterinstrucciones

En las imágenes anteriores se evidencian cambios desde la linea 1 hasta la 3 y en la 7.

Las imágenes anteriores hacen referencia a los cambios en código. A continuación se mostrarán los archivos faltantes cuando se realiza el cambio.

  • Before
    beforearchivos

*After:
afterarchivos

Se cree que el cambio en el número de archivos es debido a que el componente es utilizado dentro de una inner class.

No APK file geneated with the test apk

Hi, I am trying this tool, but can not generate mutants even with the included test app.

I moved ./test/apk/com.evancharlton.mileage_3110.apk to ./apk, and ./test/parameter.json to ./, and used parameter.json as follows:

{
    "apkPath": "./apk/com.evancharlton.mileage_3110.apk",
    "appName": "com.evancharlton.mileage",
    "mutantsFolder": "./mutants", 
    "operatorsDir": "./",
    "multithreadExec": "true",
    "ignoreDeadCode": "true",
    "extraPath": "./extra",
    "selectionStrategy": "amountMutants",
    "selectionParameters":{
        "amountMutants":"34",
        "perOperator":"false",
        "confidenceLevel":"85",
        "marginError":"10",
        "baseAPKPath":"./"
    }   
}

After executing java -jar target/MutAPK-2.0.0.jar ./parameters.json, mutant folders were generated at both the top level and under ./mutant, as follows:

junwei@pop-os:~/MutAPK$ tree -L 1
.
├── apk
├── commands.txt
├── dependency-reduced-pom.xml
├── docs
├── extra
├── LICENSE
├── mutants
├── mutantscom.evancharlton.mileage-mutant1
├── mutantscom.evancharlton.mileage-mutant10
├── mutantscom.evancharlton.mileage-mutant11
├── mutantscom.evancharlton.mileage-mutant12
├── mutantscom.evancharlton.mileage-mutant13
├── mutantscom.evancharlton.mileage-mutant14
├── mutantscom.evancharlton.mileage-mutant15
├── mutantscom.evancharlton.mileage-mutant16
├── mutantscom.evancharlton.mileage-mutant17
├── mutantscom.evancharlton.mileage-mutant18
├── mutantscom.evancharlton.mileage-mutant19
├── mutantscom.evancharlton.mileage-mutant2
├── mutantscom.evancharlton.mileage-mutant20
├── mutantscom.evancharlton.mileage-mutant21
├── mutantscom.evancharlton.mileage-mutant23
├── mutantscom.evancharlton.mileage-mutant24
├── mutantscom.evancharlton.mileage-mutant25
├── mutantscom.evancharlton.mileage-mutant26
├── mutantscom.evancharlton.mileage-mutant27
├── mutantscom.evancharlton.mileage-mutant28
├── mutantscom.evancharlton.mileage-mutant29
├── mutantscom.evancharlton.mileage-mutant3
├── mutantscom.evancharlton.mileage-mutant30
├── mutantscom.evancharlton.mileage-mutant31
├── mutantscom.evancharlton.mileage-mutant32
├── mutantscom.evancharlton.mileage-mutant33
├── mutantscom.evancharlton.mileage-mutant34
├── mutantscom.evancharlton.mileage-mutant4
├── mutantscom.evancharlton.mileage-mutant5
├── mutantscom.evancharlton.mileage-mutant6
├── mutantscom.evancharlton.mileage-mutant7
├── mutantscom.evancharlton.mileage-mutant8
├── mutantscom.evancharlton.mileage-mutant9
├── operators.properties
├── parameters.json
├── pom.xml
├── README.md
├── src
├── target
├── temp
└── test

junwei@pop-os:~/MutAPK$ tree -L 1 mutants

mutants
├── com.evancharlton.mileage-locations.json
├── com.evancharlton.mileage-mutant1
├── com.evancharlton.mileage-mutant10
├── com.evancharlton.mileage-mutant11
├── com.evancharlton.mileage-mutant12
├── com.evancharlton.mileage-mutant13
├── com.evancharlton.mileage-mutant14
├── com.evancharlton.mileage-mutant15
├── com.evancharlton.mileage-mutant16
├── com.evancharlton.mileage-mutant17
├── com.evancharlton.mileage-mutant18
├── com.evancharlton.mileage-mutant19
├── com.evancharlton.mileage-mutant2
├── com.evancharlton.mileage-mutant20
├── com.evancharlton.mileage-mutant21
├── com.evancharlton.mileage-mutant22
├── com.evancharlton.mileage-mutant23
├── com.evancharlton.mileage-mutant24
├── com.evancharlton.mileage-mutant25
├── com.evancharlton.mileage-mutant26
├── com.evancharlton.mileage-mutant27
├── com.evancharlton.mileage-mutant28
├── com.evancharlton.mileage-mutant29
├── com.evancharlton.mileage-mutant3
├── com.evancharlton.mileage-mutant30
├── com.evancharlton.mileage-mutant31
├── com.evancharlton.mileage-mutant32
├── com.evancharlton.mileage-mutant33
├── com.evancharlton.mileage-mutant34
├── com.evancharlton.mileage-mutant4
├── com.evancharlton.mileage-mutant5
├── com.evancharlton.mileage-mutant6
├── com.evancharlton.mileage-mutant7
├── com.evancharlton.mileage-mutant8
├── com.evancharlton.mileage-mutant9
├── com.evancharlton.mileage-mutants.log
└── com.evancharlton.mileage-times.csv

And no apk was found in these folders (all generation attempts failed).
Here is the execution log: https://drive.google.com/file/d/1dVWUQlVL33WJ_YnEJBvw6s1NLD723OmZ/view?usp=sharing
I am using Ubuntu 20.04 with openJDK 8

Any hint to make this tool work is appreciated.

Tool does not give mutation score

Hi

I'm trying to evaluate if I can use this tool during my development work. What I've found so far is that the tool generates mutant APKs but does not run the current set of tests on them to determine if tests are able to distinguish the mutants from the original. Or in other words it does not give the mutation score.
Have you tried using this tool during the development cycle, Do we need to use some scripts to run test apk on source apk outside the scope of this tool?
In my view we would not get much value without knowing the current mutation score in reasonable time.

Thanks
Virender

NullBackEndServiceReturn

Los datos para este mutante se obtuvieron de la aplicación K9Mail
Repositorio: https://github.com/k9mail/k-9
Clase en dónde se encontró el componente: com/fsck/k9/mail/store/webdav/WebDavStore.java

Cambios en el código de la aplicación:

  • Before:
    beforecodigo
  • After
    aftercodigo

Las siguientes imágenes permiten ver las diferencias en el código smile que se ocasionaron por el cambio que se hizo en el código fuente.

  • Before
    beforecambios

  • after
    aftercambios

update README

  • Usage of config file a.k.a JSon file
  • Mention that we strongly recommend to save console output as MarkDown file :D :D
  • posible values of selection strategy
  • explain all selection strategies with parameters
  • we are now using TCEL to remove equivalent and redundant mutants

posible values of "selectionStrategy": "all", "amountMutants" and "representativeSubset"

MutAPK not working

Hello, I am trying to use this tool, but when I run the command java -jar .\target\MutAPK-2.0.0.jar .\src\main\resources\parameters.json, it always shows the content of the following image.
image
I have already executed the mvn clean and mvn package commands.
Here is my java version

java version "17.0.10" 2024-01-16 LTS
Java(TM) SE Runtime Environment (build 17.0.10+11-LTS-240)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.10+11-LTS-240, mixed mode, sharing)

And my parameters.json:

{
	"apkPath": "../Tasks/org.tasks_130907.apk",
	"appName": "org.tasks",
	"mutantsFolder": "./mutants_task",
	"operatorsDir": "./",
	"multithreadExec": "true",
	"extraPath": "./extra",
	"selectionStrategy": "all",
	"selectionParameters":{
		"amountMutants":"1",
		"perOperator":"false",
		"confidenceLevel":"85",
		"marginError":"10",
		"baseAPKPath":"./"
	}
}

Could someone give me some suggestions plz.

Nice to have features

Features that might be added soon

  • Save console log to a file
  • Web wrapper that shows current state of execution

Mutation Operators

Text

Activity/Intents

  • ActivityNotDefined
  • InvalidActivityName
  • InvalidLabel
  • WrongMainActivity

Android Programming

  • MissingPermissionManifest
  • SDKVersion
  • WrongStringResource

GUI

  • InvalidColor

AST

Activity/Intents

  • DifferentActivityIntentDefinition
  • InvalidKeyIntentPutExtra
  • NullIntent
  • NullValueIntentPutExtra

Android Programming

  • NotParcelable - NotImplementable
  • NullGPSLocation

BackEnd Service

  • NullBackEndServiceReturn

Connectivity

  • BluetoothAdapterAlwaysEnabled
  • NullBluetoothAdapter

Data

  • InvalidURI

Database

  • ClosingNullCursor
  • InvalidIndexQueryParameter
  • InvalidSQLQuery

General Programming

  • InvalidDate
  • InvalidMethodCallArgument* - NotImplementable
  • NotSerializable - NotImplementable
  • NullMethodCallArgument*

GUI

  • BuggyGUIListener
  • FindViewByIdReturnsNull
  • InvalidIDFindView
  • InvalidViewFocus*
  • ViewComponentNotVisible

I/O

  • InvalidFilePath
  • NullInputStream
  • NullOutputStream

Non-Functional Requirements

  • LengthyBackEndService
  • LengthyGUICreation
  • LengthyGUIListener
  • LongConnectionTimeOut
  • OOMLargeImage

Allow relative/full paths on both Windows/Unix

Allow the user to specify either relative or full paths in the inputs, dealing with both types of filesystem (Windows/Unix) and with any structure of the folders (e.g. apps, output and code in different levels).

If folders do not exists or not correctly specified, show a clear error message.

Avoid FileNotFoundException if the app does not have colors.xml specified

If an app does not specify particular colors, they usually don't need a colors.xml file.
Make sure to not assume the file exists.

The process continues even if there is this exception, but it would be better to manage this properly.

SEVERE: Error running detector: INVALID_COLOR
java.io.FileNotFoundException: /scratch/mtufano/MutAPK/temp/res/values/colors.xml (No such file or directory)
	at java.io.FileInputStream.open0(Native Method)
	at java.io.FileInputStream.open(FileInputStream.java:195)
	at java.io.FileInputStream.<init>(FileInputStream.java:138)
	at java.io.FileInputStream.<init>(FileInputStream.java:93)
	at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
	at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
	at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:623)
	at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:148)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:805)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:770)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
	at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
	at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
	at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:205)
	at uniandes.tsdl.mutapk.detectors.xml.InvalidColorDetector.analyzeApp(InvalidColorDetector.java:41)
	at uniandes.tsdl.mutapk.processors.TextBasedDetectionsProcessor.process(TextBasedDetectionsProcessor.java:19)
	at uniandes.tsdl.mutapk.MutAPK.runMutAPK(MutAPK.java:89)
	at uniandes.tsdl.mutapk.MutAPK.main(MutAPK.java:33)

Add diffs in output log

In the log that is created in the mutant output folder the specific difference for each mutantion must be shown. In this moment, it only says the line that has benn mutated but no how it was mutated.

Can't run MutAPK

Command used:
java -jar /scratch/mtufano/MutAPK/MutAPK/target/MutAPK-*.jar /scratch/mtufano/MutAPK/apps/ART_AND_DESIGN/com.canva.editor.apk com.canva.editor /scratch/mtufano/MutAPK/out/ /scratch/mtufano/MutAPK/MutAPK/extra/ /scratch/mtufano/MutAPK/MutAPK/ false

I also tried relative paths, multithread ON, different APK.

It seems that it doesn't like one of the directory I specify, but they all exists:

java.lang.IllegalArgumentException: Parameter 'directory' is not a directory
	at org.apache.commons.io.FileUtils.validateListFilesParameters(FileUtils.java:545)
	at org.apache.commons.io.FileUtils.listFiles(FileUtils.java:521)
	at uniandes.tsdl.mutapk.processors.SourceCodeProcessor.processFolder(SourceCodeProcessor.java:138)
	at uniandes.tsdl.mutapk.MutAPK.runMutAPK(MutAPK.java:96)
	at uniandes.tsdl.mutapk.MutAPK.main(MutAPK.java:33)

Did I make some mistake in the parameters?

Log:
MutAPK.log

java.lang.IndexOutOfBoundsException

I am running the main command in this way, using the flag amountOfMutants with a value of 50:

java -jar target\MutAPK-0.0.1.jar .\wikipedia.apk org.wikipedia.alpha mutants\ extra\ .\ true 50

But i am getting the next exception:

image

I found out that this happens when the flag amountOfMutants is bigger than the numbers of mutants that will be created with the process, in this case, that number is 8 while the flag is 50.

In other execution, I chose more operators in the operators.properties file and I got more than 50 possible mutants and the error did not happen.

Compilation Errors

Mutation Operator Amount of Non-Compilable Mutants Amount after review Current State
6 62 0 Solved
7 22 0 Solved
17 1 0 Solved
20 9 NotReviewed
27 110 27 Partially solved Id1
28 2 0 Solved
Review ID Review Result
1 there is a problem with the domain of variables that are used inside the smali representation, therefore there is a v21 that can no be assigned because only v0..v15 can be assigned. Requires further analysis

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.