Added phase 05 project template
This commit is contained in:
parent
56d0a7df53
commit
7c93ab7f20
306
project_task_sheets/phase_05/project_phase05_tasks/.gitignore
vendored
Normal file
306
project_task_sheets/phase_05/project_phase05_tasks/.gitignore
vendored
Normal file
@ -0,0 +1,306 @@
|
||||
Solution_Phase*_*.pdf
|
||||
Solution_Phase*_*.zip
|
||||
*.result.txt
|
||||
output.txt
|
||||
|
||||
## Core latex/pdflatex auxiliary files:
|
||||
*.aux
|
||||
*.lof
|
||||
*.log
|
||||
*.lot
|
||||
*.fls
|
||||
*.out
|
||||
*.toc
|
||||
*.fmt
|
||||
*.fot
|
||||
*.cb
|
||||
*.cb2
|
||||
.*.lb
|
||||
|
||||
## Intermediate documents:
|
||||
*.dvi
|
||||
*.xdv
|
||||
*-converted-to.*
|
||||
# these rules might exclude image files for figures etc.
|
||||
# *.ps
|
||||
# *.eps
|
||||
# *.pdf
|
||||
|
||||
## Generated if empty string is given at "Please type another file name for output:"
|
||||
.pdf
|
||||
|
||||
## Bibliography auxiliary files (bibtex/biblatex/biber):
|
||||
*.bbl
|
||||
*.bcf
|
||||
*.blg
|
||||
*-blx.aux
|
||||
*-blx.bib
|
||||
*.run.xml
|
||||
|
||||
## Build tool auxiliary files:
|
||||
*.fdb_latexmk
|
||||
*.synctex
|
||||
*.synctex(busy)
|
||||
*.synctex.gz
|
||||
*.synctex.gz(busy)
|
||||
*.pdfsync
|
||||
|
||||
## Build tool directories for auxiliary files
|
||||
# latexrun
|
||||
latex.out/
|
||||
|
||||
## Auxiliary and intermediate files from other packages:
|
||||
# algorithms
|
||||
*.alg
|
||||
*.loa
|
||||
|
||||
# achemso
|
||||
acs-*.bib
|
||||
|
||||
# amsthm
|
||||
*.thm
|
||||
|
||||
# beamer
|
||||
*.nav
|
||||
*.pre
|
||||
*.snm
|
||||
*.vrb
|
||||
|
||||
# changes
|
||||
*.soc
|
||||
|
||||
# comment
|
||||
*.cut
|
||||
|
||||
# cprotect
|
||||
*.cpt
|
||||
|
||||
# elsarticle (documentclass of Elsevier journals)
|
||||
*.spl
|
||||
|
||||
# endnotes
|
||||
*.ent
|
||||
|
||||
# fixme
|
||||
*.lox
|
||||
|
||||
# feynmf/feynmp
|
||||
*.mf
|
||||
*.mp
|
||||
*.t[1-9]
|
||||
*.t[1-9][0-9]
|
||||
*.tfm
|
||||
|
||||
#(r)(e)ledmac/(r)(e)ledpar
|
||||
*.end
|
||||
*.?end
|
||||
*.[1-9]
|
||||
*.[1-9][0-9]
|
||||
*.[1-9][0-9][0-9]
|
||||
*.[1-9]R
|
||||
*.[1-9][0-9]R
|
||||
*.[1-9][0-9][0-9]R
|
||||
*.eledsec[1-9]
|
||||
*.eledsec[1-9]R
|
||||
*.eledsec[1-9][0-9]
|
||||
*.eledsec[1-9][0-9]R
|
||||
*.eledsec[1-9][0-9][0-9]
|
||||
*.eledsec[1-9][0-9][0-9]R
|
||||
|
||||
# glossaries
|
||||
*.acn
|
||||
*.acr
|
||||
*.glg
|
||||
*.glo
|
||||
*.gls
|
||||
*.glsdefs
|
||||
*.lzo
|
||||
*.lzs
|
||||
*.slg
|
||||
*.slo
|
||||
*.sls
|
||||
|
||||
# uncomment this for glossaries-extra (will ignore makeindex's style files!)
|
||||
# *.ist
|
||||
|
||||
# gnuplot
|
||||
*.gnuplot
|
||||
*.table
|
||||
|
||||
# gnuplottex
|
||||
*-gnuplottex-*
|
||||
|
||||
# gregoriotex
|
||||
*.gaux
|
||||
*.glog
|
||||
*.gtex
|
||||
|
||||
# htlatex
|
||||
*.4ct
|
||||
*.4tc
|
||||
*.idv
|
||||
*.lg
|
||||
*.trc
|
||||
*.xref
|
||||
|
||||
# hyperref
|
||||
*.brf
|
||||
|
||||
# knitr
|
||||
*-concordance.tex
|
||||
# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files
|
||||
# *.tikz
|
||||
*-tikzDictionary
|
||||
|
||||
# listings
|
||||
*.lol
|
||||
|
||||
# luatexja-ruby
|
||||
*.ltjruby
|
||||
|
||||
# makeidx
|
||||
*.idx
|
||||
*.ilg
|
||||
*.ind
|
||||
|
||||
# minitoc
|
||||
*.maf
|
||||
*.mlf
|
||||
*.mlt
|
||||
*.mtc[0-9]*
|
||||
*.slf[0-9]*
|
||||
*.slt[0-9]*
|
||||
*.stc[0-9]*
|
||||
|
||||
# minted
|
||||
_minted*
|
||||
*.pyg
|
||||
|
||||
# morewrites
|
||||
*.mw
|
||||
|
||||
# newpax
|
||||
*.newpax
|
||||
|
||||
# nomencl
|
||||
*.nlg
|
||||
*.nlo
|
||||
*.nls
|
||||
|
||||
# pax
|
||||
*.pax
|
||||
|
||||
# pdfpcnotes
|
||||
*.pdfpc
|
||||
|
||||
# sagetex
|
||||
*.sagetex.sage
|
||||
*.sagetex.py
|
||||
*.sagetex.scmd
|
||||
|
||||
# scrwfile
|
||||
*.wrt
|
||||
|
||||
# svg
|
||||
svg-inkscape/
|
||||
|
||||
# sympy
|
||||
*.sout
|
||||
*.sympy
|
||||
sympy-plots-for-*.tex/
|
||||
|
||||
# pdfcomment
|
||||
*.upa
|
||||
*.upb
|
||||
|
||||
# pythontex
|
||||
*.pytxcode
|
||||
pythontex-files-*/
|
||||
|
||||
# tcolorbox
|
||||
*.listing
|
||||
|
||||
# thmtools
|
||||
*.loe
|
||||
|
||||
# TikZ & PGF
|
||||
*.dpth
|
||||
*.md5
|
||||
*.auxlock
|
||||
|
||||
# titletoc
|
||||
*.ptc
|
||||
|
||||
# todonotes
|
||||
*.tdo
|
||||
|
||||
# vhistory
|
||||
*.hst
|
||||
*.ver
|
||||
|
||||
# easy-todo
|
||||
*.lod
|
||||
|
||||
# xcolor
|
||||
*.xcp
|
||||
|
||||
# xmpincl
|
||||
*.xmpi
|
||||
|
||||
# xindy
|
||||
*.xdy
|
||||
|
||||
# xypic precompiled matrices and outlines
|
||||
*.xyc
|
||||
*.xyd
|
||||
|
||||
# endfloat
|
||||
*.ttt
|
||||
*.fff
|
||||
|
||||
# Latexian
|
||||
TSWLatexianTemp*
|
||||
|
||||
## Editors:
|
||||
# WinEdt
|
||||
*.bak
|
||||
*.sav
|
||||
|
||||
# Texpad
|
||||
.texpadtmp
|
||||
|
||||
# LyX
|
||||
*.lyx~
|
||||
|
||||
# Kile
|
||||
*.backup
|
||||
|
||||
# gummi
|
||||
.*.swp
|
||||
|
||||
# KBibTeX
|
||||
*~[0-9]*
|
||||
|
||||
# TeXnicCenter
|
||||
*.tps
|
||||
|
||||
# auto folder when using emacs and auctex
|
||||
./auto/*
|
||||
*.el
|
||||
|
||||
# expex forward references with \gathertags
|
||||
*-tags.tex
|
||||
|
||||
# standalone packages
|
||||
*.sta
|
||||
|
||||
# Makeindex log files
|
||||
*.lpz
|
||||
|
||||
# xwatermark package
|
||||
*.xwm
|
||||
|
||||
# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib
|
||||
# option is specified. Footnotes are the stored in a file with suffix Notes.bib.
|
||||
# Uncomment the next line to have this generated file ignored.
|
||||
#*Notes.bib
|
@ -0,0 +1,59 @@
|
||||
public final class Duration {
|
||||
public static final Duration ZERO = new Duration(0, 0);
|
||||
static final int MINUTES_PER_HOUR = 60;
|
||||
static final int SECONDS_PER_MINUTE = 60;
|
||||
static final int SECONDS_PER_HOUR = SECONDS_PER_MINUTE * MINUTES_PER_HOUR;
|
||||
static final long NANOS_PER_SECOND = 1000_000_000L;
|
||||
|
||||
private final long seconds;
|
||||
private final int nanos;
|
||||
|
||||
public Duration(long seconds, int nanos) {
|
||||
this.seconds = seconds;
|
||||
this.nanos = nanos;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
if (this == ZERO) {
|
||||
return "PT0S";
|
||||
}
|
||||
long hours = seconds / SECONDS_PER_HOUR;
|
||||
int minutes = (int) ((seconds % SECONDS_PER_HOUR) / SECONDS_PER_MINUTE);
|
||||
int secs = (int) (seconds % SECONDS_PER_MINUTE);
|
||||
StringBuilder buf = new StringBuilder(24);
|
||||
buf.append("PT");
|
||||
if (hours != 0) {
|
||||
buf.append(hours).append('H');
|
||||
}
|
||||
if (minutes != 0) {
|
||||
buf.append(minutes).append('M');
|
||||
}
|
||||
if (secs == 0 && nanos == 0 && buf.length() > 2) {
|
||||
return buf.toString();
|
||||
}
|
||||
if (secs < 0 && nanos > 0) {
|
||||
if (secs == -1) {
|
||||
buf.append("-0");
|
||||
} else {
|
||||
buf.append(secs + 1);
|
||||
}
|
||||
} else {
|
||||
buf.append(secs);
|
||||
}
|
||||
if (nanos > 0) {
|
||||
int pos = buf.length();
|
||||
if (secs < 0) {
|
||||
buf.append(2 * NANOS_PER_SECOND - nanos);
|
||||
} else {
|
||||
buf.append(nanos + NANOS_PER_SECOND);
|
||||
}
|
||||
while (buf.charAt(buf.length() - 1) == '0') {
|
||||
buf.setLength(buf.length() - 1);
|
||||
}
|
||||
buf.setCharAt(pos, '.');
|
||||
}
|
||||
buf.append('S');
|
||||
return buf.toString();
|
||||
}
|
||||
}
|
21
project_task_sheets/phase_05/project_phase05_tasks/Makefile
Normal file
21
project_task_sheets/phase_05/project_phase05_tasks/Makefile
Normal file
@ -0,0 +1,21 @@
|
||||
phase = 05
|
||||
version = 1
|
||||
name = MichaelChen
|
||||
|
||||
solutionname = Solution_Phase$(phase)_$(name)
|
||||
target = $(solutionname)_V$(version).zip
|
||||
package = $(solutionname).pdf Duration.java Mutation_Testing_Sample_Model.xml
|
||||
latexmkflags =
|
||||
|
||||
.PHONY : all dev
|
||||
|
||||
all : $(target)
|
||||
|
||||
dev : latexmkflags = -pvc
|
||||
dev : all
|
||||
|
||||
$(target) : $(package)
|
||||
zip -FSr $(target) $(package)
|
||||
|
||||
%.pdf : %.tex
|
||||
latexmk -jobname="$*" $(latexmkflags) -pdf $<
|
@ -0,0 +1,228 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE nta PUBLIC '-//Uppaal Team//DTD Flat System 1.1//EN' 'http://www.it.uu.se/research/group/darts/uppaal/flat-1_2.dtd'>
|
||||
<nta>
|
||||
<declaration>// Place global declarations here.
|
||||
|
||||
// As input to your method / class model, you can use either...
|
||||
typedef int[-25,25] cust_t; // ... a custom integer type which is restricted to a certain value range...
|
||||
|
||||
const int list_size = 4; // ...or a fixed number of given values...
|
||||
int values[list_size] = {-1, 0, 1, 300}; // ... which are defined in this array ...
|
||||
typedef int[0,list_size-1] index_t; // ... and are indexed inside the model via this index type.
|
||||
|
||||
broadcast chan initialized; // The broadcast channel assures that the initial variable assignment in the method / class model is synchronized
|
||||
// with the completion of the value generation (e.g. of InputFromRange or InputFromList)
|
||||
|
||||
int x_in = 0; // These variables globally hold the initial input values to the method / class model
|
||||
int y_in = 0;</declaration>
|
||||
<template>
|
||||
<name>InputFromRange</name>
|
||||
<location id="id0" x="-238" y="-204">
|
||||
</location>
|
||||
<location id="id1" x="-671" y="-204">
|
||||
<urgent/>
|
||||
</location>
|
||||
<location id="id2" x="-434" y="-205">
|
||||
<urgent/>
|
||||
</location>
|
||||
<init ref="id1"/>
|
||||
<transition>
|
||||
<source ref="id2"/>
|
||||
<target ref="id0"/>
|
||||
<label kind="synchronisation" x="-382" y="-229">initialized!</label>
|
||||
</transition>
|
||||
<transition>
|
||||
<source ref="id1"/>
|
||||
<target ref="id2"/>
|
||||
<label kind="select" x="-637" y="-238">xi : cust_t, yi : cust_t</label>
|
||||
<label kind="assignment" x="-620" y="-187">x_in = xi, y_in = yi</label>
|
||||
</transition>
|
||||
</template>
|
||||
<template>
|
||||
<name>InputFromList</name>
|
||||
<location id="id3" x="42" y="8">
|
||||
<urgent/>
|
||||
</location>
|
||||
<location id="id4" x="238" y="9">
|
||||
</location>
|
||||
<location id="id5" x="-195" y="8">
|
||||
<urgent/>
|
||||
</location>
|
||||
<init ref="id5"/>
|
||||
<transition>
|
||||
<source ref="id3"/>
|
||||
<target ref="id4"/>
|
||||
<label kind="synchronisation" x="94" y="-16">initialized!</label>
|
||||
</transition>
|
||||
<transition>
|
||||
<source ref="id5"/>
|
||||
<target ref="id3"/>
|
||||
<label kind="select" x="-178" y="-25">ind_x : index_t, ind_y : index_t</label>
|
||||
<label kind="assignment" x="-204" y="26">x_in = values[ind_x], y_in = values[ind_y]</label>
|
||||
</transition>
|
||||
</template>
|
||||
<template>
|
||||
<name x="5" y="5">SetEqual</name>
|
||||
<declaration>// Place local declarations here.
|
||||
int x = 0;
|
||||
int y = 0;</declaration>
|
||||
<location id="id6" x="297" y="-34">
|
||||
<name x="287" y="-68">End</name>
|
||||
</location>
|
||||
<location id="id7" x="178" y="25">
|
||||
<name x="168" y="-9">B</name>
|
||||
</location>
|
||||
<location id="id8" x="178" y="-102">
|
||||
<name x="170" y="-85">A</name>
|
||||
</location>
|
||||
<location id="id9" x="51" y="-34">
|
||||
</location>
|
||||
<location id="id10" x="-161" y="-33">
|
||||
<name x="-171" y="-67">Init</name>
|
||||
<urgent/>
|
||||
</location>
|
||||
<init ref="id10"/>
|
||||
<transition>
|
||||
<source ref="id7"/>
|
||||
<target ref="id6"/>
|
||||
<label kind="guard" x="221" y="8">!(x<y)</label>
|
||||
</transition>
|
||||
<transition>
|
||||
<source ref="id7"/>
|
||||
<target ref="id7"/>
|
||||
<label kind="guard" x="161" y="68">x<y</label>
|
||||
<label kind="assignment" x="161" y="102">x=x+1</label>
|
||||
<nail x="238" y="93"/>
|
||||
<nail x="102" y="93"/>
|
||||
</transition>
|
||||
<transition>
|
||||
<source ref="id8"/>
|
||||
<target ref="id8"/>
|
||||
<label kind="guard" x="161" y="-204">x>y</label>
|
||||
<label kind="assignment" x="153" y="-170">x=x-1</label>
|
||||
<nail x="246" y="-178"/>
|
||||
<nail x="93" y="-178"/>
|
||||
</transition>
|
||||
<transition>
|
||||
<source ref="id8"/>
|
||||
<target ref="id6"/>
|
||||
<label kind="guard" x="221" y="-93">!(x>y)</label>
|
||||
</transition>
|
||||
<transition>
|
||||
<source ref="id9"/>
|
||||
<target ref="id7"/>
|
||||
<label kind="guard" x="76" y="0">x<y</label>
|
||||
</transition>
|
||||
<transition>
|
||||
<source ref="id9"/>
|
||||
<target ref="id8"/>
|
||||
<label kind="guard" x="76" y="-93">x>=y</label>
|
||||
</transition>
|
||||
<transition>
|
||||
<source ref="id10"/>
|
||||
<target ref="id9"/>
|
||||
<label kind="synchronisation" x="-102" y="-59">initialized?</label>
|
||||
<label kind="assignment" x="-119" y="-25">x = x_in, y = y_in</label>
|
||||
</transition>
|
||||
</template>
|
||||
<template>
|
||||
<name>SetEqualMutant</name>
|
||||
<declaration>// Place local declarations here.
|
||||
int x = 0;
|
||||
int y = 0;</declaration>
|
||||
<location id="id11" x="144" y="51">
|
||||
<name x="134" y="17">B</name>
|
||||
</location>
|
||||
<location id="id12" x="263" y="-8">
|
||||
<name x="253" y="-42">End</name>
|
||||
</location>
|
||||
<location id="id13" x="144" y="-76">
|
||||
<name x="136" y="-59">A</name>
|
||||
</location>
|
||||
<location id="id14" x="17" y="-8">
|
||||
</location>
|
||||
<location id="id15" x="-195" y="-7">
|
||||
<name x="-205" y="-41">Init</name>
|
||||
<urgent/>
|
||||
</location>
|
||||
<init ref="id15"/>
|
||||
<transition>
|
||||
<source ref="id14"/>
|
||||
<target ref="id12"/>
|
||||
<label kind="guard" x="119" y="-34">x>=y</label>
|
||||
</transition>
|
||||
<transition>
|
||||
<source ref="id11"/>
|
||||
<target ref="id12"/>
|
||||
<label kind="guard" x="187" y="34">!(x<y)</label>
|
||||
</transition>
|
||||
<transition>
|
||||
<source ref="id11"/>
|
||||
<target ref="id11"/>
|
||||
<label kind="guard" x="127" y="94">x<y</label>
|
||||
<label kind="assignment" x="127" y="128">x=x+1</label>
|
||||
<nail x="204" y="119"/>
|
||||
<nail x="68" y="119"/>
|
||||
</transition>
|
||||
<transition>
|
||||
<source ref="id13"/>
|
||||
<target ref="id13"/>
|
||||
<label kind="guard" x="127" y="-178">x>y</label>
|
||||
<label kind="assignment" x="119" y="-144">x=x-1</label>
|
||||
<nail x="212" y="-152"/>
|
||||
<nail x="59" y="-152"/>
|
||||
</transition>
|
||||
<transition>
|
||||
<source ref="id13"/>
|
||||
<target ref="id12"/>
|
||||
<label kind="guard" x="187" y="-67">!(x>y)</label>
|
||||
</transition>
|
||||
<transition>
|
||||
<source ref="id14"/>
|
||||
<target ref="id11"/>
|
||||
<label kind="guard" x="42" y="26">x<y</label>
|
||||
</transition>
|
||||
<transition>
|
||||
<source ref="id15"/>
|
||||
<target ref="id14"/>
|
||||
<label kind="synchronisation" x="-136" y="-34">initialized?</label>
|
||||
<label kind="assignment" x="-153" y="0">x = x_in, y = y_in</label>
|
||||
</transition>
|
||||
</template>
|
||||
<system>// Place template instantiations here.
|
||||
|
||||
SE = SetEqual(); // The instance of the original model
|
||||
SE_MUT = SetEqualMutant(); // The instance of the mutated model
|
||||
IN_RANGE = InputFromRange(); // Use this template in the system definition below if you want take input values from an integer range...
|
||||
IN_LIST = InputFromList(); // ...or this if you want to provide a predefined list of possible / probable / common input values
|
||||
|
||||
// List one or more processes to be composed into a system.
|
||||
|
||||
system IN_RANGE, SE, SE_MUT;</system>
|
||||
<queries>
|
||||
<query>
|
||||
<formula>A[] (SE.End && SE_MUT.End) imply (SE.x == SE_MUT.x && SE.y == SE_MUT.y)
|
||||
</formula>
|
||||
<comment>This formula can be used to compare the results and/or states of the original and the mutated template.
|
||||
In this example, it covers the requirement that for all paths (A), all states on that individual path ([]) should satisfy that if the locations "SE.End" and "SE_MUT.End" are active (meaning that both instances reached the final state),
|
||||
the x and y values of the original model template should be equal to the corresponding values of the mutated template.
|
||||
(Note: "SE.End" represents the "End" location of the template instance for the method / class as named in the "System declarations" section)
|
||||
</comment>
|
||||
</query>
|
||||
<query>
|
||||
<formula>A[] SE.End imply (SE.x == SE.y)
|
||||
</formula>
|
||||
<comment>This formula covers the requirement that for all paths (A), all states on that individual path ([]) should satisfy that if the location "SE.End" is active, the x and y values of that template instance (SE.x, SE.y) must be equal.
|
||||
(Note: "SE.End" represents the "End" location of the template instance for the method / class as named in the "System declarations" section)
|
||||
</comment>
|
||||
</query>
|
||||
<query>
|
||||
<formula>A[] SE.End imply (SE.y == y_in)
|
||||
</formula>
|
||||
<comment>This formula covers the requirement that for all paths (A), all states on that individual path ([]) should satisfy that if the location "SE.End" is active, the y value of the template instance (SE.y) must still be equal to the input value y_in.
|
||||
Of course, you can even be more strict with this property, and adapt it so that "SE.y" should remain unchanged in every single state along the algorithm execution.
|
||||
(Note: "SE.End" represents the "End" location of the template instance for the method / class as named in the "System declarations" section)
|
||||
</comment>
|
||||
</query>
|
||||
</queries>
|
||||
</nta>
|
@ -0,0 +1,228 @@
|
||||
\documentclass[a4paper]{scrreprt}
|
||||
\usepackage[left=4cm,bottom=3cm,top=3cm,right=4cm,nohead,nofoot]{geometry}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{tabularx}
|
||||
\usepackage{listings}
|
||||
\usepackage{enumitem}
|
||||
\usepackage{subcaption}
|
||||
|
||||
\usepackage{pgf}
|
||||
\usepackage{tikz}
|
||||
\usetikzlibrary{arrows,automata}
|
||||
|
||||
\usepackage{xparse}
|
||||
\usepackage{multirow}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\setlength{\textfloatsep}{16pt}
|
||||
|
||||
\renewcommand{\labelenumi}{\alph{enumi})}
|
||||
\renewcommand{\labelenumii}{\arabic{enumii}) }
|
||||
|
||||
\newcommand{\baseinfo}[5]{
|
||||
\begin{center}
|
||||
\begin{tabular}{p{15cm}r}
|
||||
\vspace{-4.5pt}{ \Large \bfseries #1} & \multirow{2}{*}{} \\[0.4cm]
|
||||
#2 & \\[0.5cm]
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
\vspace{-18pt}\hrule\vspace{6pt}
|
||||
\begin{tabular}{ll}
|
||||
\textbf{Name:} & #4\\
|
||||
\textbf{Group:} & #5\\
|
||||
\end{tabular}
|
||||
\vspace{4pt}\hrule\vspace{2pt}
|
||||
\footnotesize \textbf{Software Testing} \hfil - \hfil Summer 2022 \hfil - \hfil #3 \hfil - \hfil Sibylle Schupp / Sascha Lehmann \hfil \\
|
||||
}
|
||||
|
||||
\newcounter{question}
|
||||
\NewDocumentEnvironment{question}{m o}{%
|
||||
\addtocounter{question}{1}%
|
||||
\paragraph{\textcolor{red}{Task~\arabic{question}} - #1\hfill\IfNoValueTF{#2}{}{[#2 P]}}
|
||||
\leavevmode\\%
|
||||
}{%
|
||||
\vskip 1em%
|
||||
}
|
||||
|
||||
\NewDocumentEnvironment{answer}{}{%
|
||||
\vspace{6pt}
|
||||
\leavevmode\\
|
||||
\textit{Answer:}\\[-0.25cm]
|
||||
{\color{red}\rule{\textwidth}{0.4mm}}
|
||||
}{%
|
||||
\leavevmode\\
|
||||
{\color{red}\rule{\textwidth}{0.4mm}}
|
||||
}
|
||||
|
||||
\newcommand{\projectinfo}[5]{
|
||||
\baseinfo{Project Phase #1 - Submission Sheet}{#2}{#3}{#4}{#5}
|
||||
}
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
\def\name{[Add name here]}
|
||||
\def\group{[Add group here]}
|
||||
|
||||
\begin{document}
|
||||
\projectinfo{5}{Software Testing - Syntax Coverage\small}{\today}{\name}{\group}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%% Task 1 %%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{question}{Answer basic questions on Syntax Coverage}[3]
|
||||
\begin{enumerate}[topsep=0pt, leftmargin=*]
|
||||
|
||||
\item Define the following terms in your own words:
|
||||
\begin{enumerate}
|
||||
\item \textit{Production Rule}, \textit{Generator}, and \textit{Terminal}
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item \textit{Mutant}, \textit{Ground String}, and \textit{Mutation Operator}
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item \textit{RIP Model}
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
\end{enumerate}
|
||||
\item Name and describe \textit{2 syntax-based coverage criteria}. Does one of these two criteria subsume the other? Explain why, or provide a counterexample.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item What does it mean to \textit{"kill a mutant"}? Explain the concept with an own code example.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item Name and describe the \textit{4 different classified types} of mutants in the context of mutant killing.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\end{enumerate}
|
||||
\end{question}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%% Task 2 %%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{question}{Apply Syntax Coverage criteria to a sample program}[5]
|
||||
\begin{enumerate}[topsep=0pt, leftmargin=*]
|
||||
|
||||
\item Select \textit{one} mutation operator from Table~\ref{table:operators} (the operators are taken from \textit{Introduction to Software Testing} by Ammann and Offutt), and apply it \textit{once} to every occurrence of a target expression, statement or instruction inside the given \texttt{toString()} method (e.g., choose the \textit{SOR} operator, and for each \verb|<<|, \verb|>>|, or \verb|>>>| that occurs in the method, replace it with \textit{one} other shift operator). The operator has to be applicable to at least two parts of the code. For each mutation, document the line, original epression, and mutated expression.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item Select \textit{one} other mutation operator, and apply all of its concrete mutations to \textit{one} target expression, statement or instruction inside the given \texttt{toString()} method (e.g., choose the \textit{SOR} operator, and replace one occurring \verb|<<| with the other shift operators \verb|>>| and \verb|>>>|). Document the line, original epression, and mutated expressions.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item Pick one set of method mutations (either the mutations of task 2a or 2b), and provide a minimum set of tests that kill all introduced mutants \textit{strongly} (\textit{Strong Mutation Coverage (SMC)}). If that is not possible for a concrete mutant, explain why, and kill that mutant \textit{weakly} (\textit{Weak Mutation Coverage (WMC)}) instead. If neither of that is possible, explain it as well.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
|
||||
\begin{lstlisting}[language=Java,belowskip=-0.8\baselineskip]
|
||||
/* Add code here */
|
||||
\end{lstlisting}
|
||||
% or: \lstinputlisting[language=Java,belowskip=-0.8\baselineskip]{file_name.java}
|
||||
\end{answer}
|
||||
|
||||
\item For the \textit{other} set of method mutations, provide a minimum set of tests that kill the mutants only \textit{weakly}, but \textbf{not} \textit{strongly}. If that is not possible for a concrete mutant, explain why, and kill the mutants \textit{strongly} instead. If that is not possible as well, explain it.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
|
||||
\begin{lstlisting}[language=Java,belowskip=-0.8\baselineskip]
|
||||
/* Add code here */
|
||||
\end{lstlisting}
|
||||
% or: \lstinputlisting[language=Java,belowskip=-0.8\baselineskip]{file_name.java}
|
||||
\end{answer}
|
||||
|
||||
\item For both applied operators, select one concrete mutation and describe the conditions that need to hold for the \textit{Reachability}, \textit{Infection}, and \textit{Propagation} of the induced change.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\begin{table}[t]
|
||||
\footnotesize
|
||||
\hspace*{-1cm}\begin{tabular}{|c|c|l|}
|
||||
\hline
|
||||
\textbf{Abbr.} & \textbf{Mutation Operator Name} & \textbf{Mutation (\textit{a} is a constant or expression)} \\ \cline{1-3}
|
||||
ABS & Absolute Value Insertion & $a \rightarrow abs(a), -abs(a), failOnZero(a)$ \\ \cline{1-3}
|
||||
UOI & Unary Operator Insertion & $a \rightarrow \{!,-,+,\sim\}a$\\ \cline{1-3}
|
||||
UOD & Unary Operator Deletion & $\{!,-,+,\sim\}a \rightarrow a$\\ \cline{1-3}
|
||||
AOR & Arithmetic Operator Replacement & $a+b \rightarrow a \{-,*,/,**,\%\} b, a, b$\\ \cline{1-3}
|
||||
ROR & Relational Operator Replacement & $a>b \rightarrow a \{>=,<,<=,==,!=\} b, true, false$\\ \cline{1-3}
|
||||
COR & Conditional Operator Replacement & $a\&\&b \rightarrow a \{||,\&,|,\hat{}\} b, true, false, a, b$\\ \cline{1-3}
|
||||
SOR & Shift Operator Replacement & $a<<b \rightarrow a \{>>,>>>\} b, a$\\ \cline{1-3}
|
||||
LOR & Logical Operator Replacement & $a\&b \rightarrow a \{|,\hat{}\} b, a, b$\\ \cline{1-3}
|
||||
ASR & Assignment Operator Replacement & $a+=b \rightarrow a \{-=,*=,/=,\%=,\&=,|=,\hat{}=,<<=,>>=,>>>=\} b$\\ \cline{1-3}
|
||||
SVR & Scalar Variable Replacement & $a=b*c \rightarrow a=b*b,a=b*a,a=a*c,a=c*c,b=b*c,c=b*c$\\ \cline{1-3}
|
||||
BSR & Bomb Statement Replacement & instruction $\rightarrow$ Bomb() (throws exception when reached)\\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\caption{Exemplary mutation operators with their introduced changes for an expression / instruction}
|
||||
\label{table:operators}
|
||||
\end{table}
|
||||
|
||||
\end{enumerate}
|
||||
\end{question}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%% Task 3 %%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{question}{Application to software project}[8]
|
||||
\begin{enumerate}[topsep=0pt, leftmargin=*]
|
||||
|
||||
\item As a group, decide on \textbf{one test suite} (original + own tests) that you want to use for this task
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item In consultation with your group, pick a unique mutation tool for Java code (i.e., no two members of one group should use the same tool).
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item Depending on the capabilities of the selected mutation testing tool, determine the amount of \textit{killed mutants} for at least \textbf{3 different mutation operators} (handle the results individually as long as your tool returns the results for each individual operator, or supports the application of single selected operators).
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item For each of the applied mutation operators, pick a distinct method of your project that was affected by that operator, and highlight / describe the instructions that are changed. Explain how the test suite does or does not satisfy the criteria of \textit{Reachability}, \textit{Infection}, and \textit{Propagation} for that part.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item Pick one suitable method (restricted to int values) or class from your project, and derive an automaton expressing its behaviour. For the creation of your automaton, use the \textit{Uppaal} model checker environment.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item Formulate at least 2 formal requirements that your model / method needs to satisfy, create corresponding \textit{queries} in Uppaal, and execute them to assure that your base model satisfies them. Enable \texttt{Options $\rightarrow$ Diagnostic Trace $\rightarrow$ Some} to get a counterexample trace in case that a queried formula is not satisfied. This trace can be inspected in the \texttt{Simulator} tab.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item Apply \textit{one} mutation operator from Table~\ref{table:operators} to \textit{one} single expression in your model, and re-evaluate your queries. Explain why the verification results of the model changed or remained the same. If a counterexample is created, note the test vector that kills the mutant.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item Reroute one transition in your model (i.e., connect the edge to a different destination node), and re-evaluate your queries. Explain why the verification results of the model changed or remained the same. If a counterexample is created, note the test vector that kills the mutant.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\end{enumerate}
|
||||
\end{question}
|
||||
|
||||
\end{document}
|
BIN
project_task_sheets/phase_05/project_phase05_tasks/project_phase05_tasks.pdf
(Stored with Git LFS)
Normal file
BIN
project_task_sheets/phase_05/project_phase05_tasks/project_phase05_tasks.pdf
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -0,0 +1,228 @@
|
||||
\documentclass[a4paper]{scrreprt}
|
||||
\usepackage[left=4cm,bottom=3cm,top=3cm,right=4cm,nohead,nofoot]{geometry}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{tabularx}
|
||||
\usepackage{listings}
|
||||
\usepackage{enumitem}
|
||||
\usepackage{subcaption}
|
||||
|
||||
\usepackage{pgf}
|
||||
\usepackage{tikz}
|
||||
\usetikzlibrary{arrows,automata}
|
||||
|
||||
\usepackage{xparse}
|
||||
\usepackage{multirow}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\setlength{\textfloatsep}{16pt}
|
||||
|
||||
\renewcommand{\labelenumi}{\alph{enumi})}
|
||||
\renewcommand{\labelenumii}{\arabic{enumii}) }
|
||||
|
||||
\newcommand{\baseinfo}[5]{
|
||||
\begin{center}
|
||||
\begin{tabular}{p{15cm}r}
|
||||
\vspace{-4.5pt}{ \Large \bfseries #1} & \multirow{2}{*}{} \\[0.4cm]
|
||||
#2 & \\[0.5cm]
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
\vspace{-18pt}\hrule\vspace{6pt}
|
||||
\begin{tabular}{ll}
|
||||
\textbf{Name:} & #4\\
|
||||
\textbf{Group:} & #5\\
|
||||
\end{tabular}
|
||||
\vspace{4pt}\hrule\vspace{2pt}
|
||||
\footnotesize \textbf{Software Testing} \hfil - \hfil Summer 2022 \hfil - \hfil #3 \hfil - \hfil Sibylle Schupp / Sascha Lehmann \hfil \\
|
||||
}
|
||||
|
||||
\newcounter{question}
|
||||
\NewDocumentEnvironment{question}{m o}{%
|
||||
\addtocounter{question}{1}%
|
||||
\paragraph{\textcolor{red}{Task~\arabic{question}} - #1\hfill\IfNoValueTF{#2}{}{[#2 P]}}
|
||||
\leavevmode\\%
|
||||
}{%
|
||||
\vskip 1em%
|
||||
}
|
||||
|
||||
\NewDocumentEnvironment{answer}{}{%
|
||||
\vspace{6pt}
|
||||
\leavevmode\\
|
||||
\textit{Answer:}\\[-0.25cm]
|
||||
{\color{red}\rule{\textwidth}{0.4mm}}
|
||||
}{%
|
||||
\leavevmode\\
|
||||
{\color{red}\rule{\textwidth}{0.4mm}}
|
||||
}
|
||||
|
||||
\newcommand{\projectinfo}[5]{
|
||||
\baseinfo{Project Phase #1 - Submission Sheet}{#2}{#3}{#4}{#5}
|
||||
}
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
\def\name{[Add name here]}
|
||||
\def\group{[Add group here]}
|
||||
|
||||
\begin{document}
|
||||
\projectinfo{5}{Software Testing - Syntax Coverage\small}{\today}{\name}{\group}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%% Task 1 %%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{question}{Answer basic questions on Syntax Coverage}[3]
|
||||
\begin{enumerate}[topsep=0pt, leftmargin=*]
|
||||
|
||||
\item Define the following terms in your own words:
|
||||
\begin{enumerate}
|
||||
\item \textit{Production Rule}, \textit{Generator}, and \textit{Terminal}
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item \textit{Mutant}, \textit{Ground String}, and \textit{Mutation Operator}
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item \textit{RIP Model}
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
\end{enumerate}
|
||||
\item Name and describe \textit{2 syntax-based coverage criteria}. Does one of these two criteria subsume the other? Explain why, or provide a counterexample.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item What does it mean to \textit{"kill a mutant"}? Explain the concept with an own code example.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item Name and describe the \textit{4 different classified types} of mutants in the context of mutant killing.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\end{enumerate}
|
||||
\end{question}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%% Task 2 %%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{question}{Apply Syntax Coverage criteria to a sample program}[5]
|
||||
\begin{enumerate}[topsep=0pt, leftmargin=*]
|
||||
|
||||
\item Select \textit{one} mutation operator from Table~\ref{table:operators} (the operators are taken from \textit{Introduction to Software Testing} by Ammann and Offutt), and apply it \textit{once} to every occurrence of a target expression, statement or instruction inside the given \texttt{toString()} method (e.g., choose the \textit{SOR} operator, and for each \verb|<<|, \verb|>>|, or \verb|>>>| that occurs in the method, replace it with \textit{one} other shift operator). The operator has to be applicable to at least two parts of the code. For each mutation, document the line, original epression, and mutated expression.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item Select \textit{one} other mutation operator, and apply all of its concrete mutations to \textit{one} target expression, statement or instruction inside the given \texttt{toString()} method (e.g., choose the \textit{SOR} operator, and replace one occurring \verb|<<| with the other shift operators \verb|>>| and \verb|>>>|). Document the line, original epression, and mutated expressions.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item Pick one set of method mutations (either the mutations of task 2a or 2b), and provide a minimum set of tests that kill all introduced mutants \textit{strongly} (\textit{Strong Mutation Coverage (SMC)}). If that is not possible for a concrete mutant, explain why, and kill that mutant \textit{weakly} (\textit{Weak Mutation Coverage (WMC)}) instead. If neither of that is possible, explain it as well.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
|
||||
\begin{lstlisting}[language=Java,belowskip=-0.8\baselineskip]
|
||||
/* Add code here */
|
||||
\end{lstlisting}
|
||||
% or: \lstinputlisting[language=Java,belowskip=-0.8\baselineskip]{file_name.java}
|
||||
\end{answer}
|
||||
|
||||
\item For the \textit{other} set of method mutations, provide a minimum set of tests that kill the mutants only \textit{weakly}, but \textbf{not} \textit{strongly}. If that is not possible for a concrete mutant, explain why, and kill the mutants \textit{strongly} instead. If that is not possible as well, explain it.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
|
||||
\begin{lstlisting}[language=Java,belowskip=-0.8\baselineskip]
|
||||
/* Add code here */
|
||||
\end{lstlisting}
|
||||
% or: \lstinputlisting[language=Java,belowskip=-0.8\baselineskip]{file_name.java}
|
||||
\end{answer}
|
||||
|
||||
\item For both applied operators, select one concrete mutation and describe the conditions that need to hold for the \textit{Reachability}, \textit{Infection}, and \textit{Propagation} of the induced change.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\begin{table}[t]
|
||||
\footnotesize
|
||||
\hspace*{-1cm}\begin{tabular}{|c|c|l|}
|
||||
\hline
|
||||
\textbf{Abbr.} & \textbf{Mutation Operator Name} & \textbf{Mutation (\textit{a} is a constant or expression)} \\ \cline{1-3}
|
||||
ABS & Absolute Value Insertion & $a \rightarrow abs(a), -abs(a), failOnZero(a)$ \\ \cline{1-3}
|
||||
UOI & Unary Operator Insertion & $a \rightarrow \{!,-,+,\sim\}a$\\ \cline{1-3}
|
||||
UOD & Unary Operator Deletion & $\{!,-,+,\sim\}a \rightarrow a$\\ \cline{1-3}
|
||||
AOR & Arithmetic Operator Replacement & $a+b \rightarrow a \{-,*,/,**,\%\} b, a, b$\\ \cline{1-3}
|
||||
ROR & Relational Operator Replacement & $a>b \rightarrow a \{>=,<,<=,==,!=\} b, true, false$\\ \cline{1-3}
|
||||
COR & Conditional Operator Replacement & $a\&\&b \rightarrow a \{||,\&,|,\hat{}\} b, true, false, a, b$\\ \cline{1-3}
|
||||
SOR & Shift Operator Replacement & $a<<b \rightarrow a \{>>,>>>\} b, a$\\ \cline{1-3}
|
||||
LOR & Logical Operator Replacement & $a\&b \rightarrow a \{|,\hat{}\} b, a, b$\\ \cline{1-3}
|
||||
ASR & Assignment Operator Replacement & $a+=b \rightarrow a \{-=,*=,/=,\%=,\&=,|=,\hat{}=,<<=,>>=,>>>=\} b$\\ \cline{1-3}
|
||||
SVR & Scalar Variable Replacement & $a=b*c \rightarrow a=b*b,a=b*a,a=a*c,a=c*c,b=b*c,c=b*c$\\ \cline{1-3}
|
||||
BSR & Bomb Statement Replacement & instruction $\rightarrow$ Bomb() (throws exception when reached)\\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\caption{Exemplary mutation operators with their introduced changes for an expression / instruction}
|
||||
\label{table:operators}
|
||||
\end{table}
|
||||
|
||||
\end{enumerate}
|
||||
\end{question}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%% Task 3 %%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{question}{Application to software project}[8]
|
||||
\begin{enumerate}[topsep=0pt, leftmargin=*]
|
||||
|
||||
\item As a group, decide on \textbf{one test suite} (original + own tests) that you want to use for this task
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item In consultation with your group, pick a unique mutation tool for Java code (i.e., no two members of one group should use the same tool).
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item Depending on the capabilities of the selected mutation testing tool, determine the amount of \textit{killed mutants} for at least \textbf{3 different mutation operators} (handle the results individually as long as your tool returns the results for each individual operator, or supports the application of single selected operators).
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item For each of the applied mutation operators, pick a distinct method of your project that was affected by that operator, and highlight / describe the instructions that are changed. Explain how the test suite does or does not satisfy the criteria of \textit{Reachability}, \textit{Infection}, and \textit{Propagation} for that part.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item Pick one suitable method (restricted to int values) or class from your project, and derive an automaton expressing its behaviour. For the creation of your automaton, use the \textit{Uppaal} model checker environment.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item Formulate at least 2 formal requirements that your model / method needs to satisfy, create corresponding \textit{queries} in Uppaal, and execute them to assure that your base model satisfies them. Enable \texttt{Options $\rightarrow$ Diagnostic Trace $\rightarrow$ Some} to get a counterexample trace in case that a queried formula is not satisfied. This trace can be inspected in the \texttt{Simulator} tab.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item Apply \textit{one} mutation operator from Table~\ref{table:operators} to \textit{one} single expression in your model, and re-evaluate your queries. Explain why the verification results of the model changed or remained the same. If a counterexample is created, note the test vector that kills the mutant.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\item Reroute one transition in your model (i.e., connect the edge to a different destination node), and re-evaluate your queries. Explain why the verification results of the model changed or remained the same. If a counterexample is created, note the test vector that kills the mutant.
|
||||
\begin{answer}
|
||||
[TODO: Add answer here]
|
||||
\end{answer}
|
||||
|
||||
\end{enumerate}
|
||||
\end{question}
|
||||
|
||||
\end{document}
|
Loading…
Reference in New Issue
Block a user