gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [taler-schemafuzz] branch master updated: Added all the dis


From: gnunet
Subject: [GNUnet-SVN] [taler-schemafuzz] branch master updated: Added all the discused diagrams. Need positionning.
Date: Wed, 22 Aug 2018 17:35:20 +0200

This is an automated email from the git hooks/post-receive script.

erwan-ulrich pushed a commit to branch master
in repository schemafuzz.

The following commit(s) were added to refs/heads/master by this push:
     new 4e863d1  Added all the discused diagrams. Need positionning.
4e863d1 is described below

commit 4e863d186d2abdb0d39669505a86fcec613ca7d3
Author: Feideus <address@hidden>
AuthorDate: Wed Aug 22 17:35:15 2018 +0200

    Added all the discused diagrams. Need positionning.
---
 Documentation.tex                     | 109 +++++++-
 docs/CommonAncestorDiagram.aux        |   1 +
 docs/CommonAncestorDiagram.mp         |  22 ++
 docs/CommonAncestorDiagram.pdf        | Bin 0 -> 16349 bytes
 docs/CommonAncestorDiagram.synctex.gz | Bin 0 -> 2135 bytes
 docs/CommonAncestorDiagram.tex        |  29 +++
 docs/ForeignKeyClassDiagram-1.pdf     | Bin 0 -> 14497 bytes
 docs/ForeignKeyClassDiagram.1         | 178 +++++++++++++
 docs/ForeignKeyClassDiagram.mp        |  14 +
 docs/ForeignKeyClassDiagram.tex       |  21 ++
 docs/MetaDataExtractionDiagram-1.pdf  | Bin 0 -> 16355 bytes
 docs/MetaDataExtractionDiagram.1      | 474 ++++++++++++++++++++++++++++++++++
 docs/MetaDataExtractionDiagram.mp     |  48 ++++
 docs/MutationClassDiagram-1.pdf       | Bin 0 -> 18772 bytes
 docs/MutationClassDiagram.1           | 420 ++++++++++++++++++++++++++++++
 docs/MutationClassDiagram.mp          |  25 ++
 docs/Scoring.png                      | Bin 0 -> 97638 bytes
 docs/codeOriginDiagram.aux            |   1 +
 docs/codeOriginDiagram.pdf            | Bin 0 -> 13658 bytes
 docs/codeOriginDiagram.synctex.gz     | Bin 0 -> 2186 bytes
 docs/codeOriginDiagram.tex            |  34 +++
 docs/pickingPaternDiagram.aux         |   1 +
 docs/pickingPaternDiagram.pdf         | Bin 0 -> 26228 bytes
 docs/pickingPaternDiagram.synctex.gz  | Bin 0 -> 3621 bytes
 docs/pickingPaternDiagram.tex         |  43 +++
 25 files changed, 1408 insertions(+), 12 deletions(-)

diff --git a/Documentation.tex b/Documentation.tex
old mode 100755
new mode 100644
index 00dbfa9..c184d64
--- a/Documentation.tex
+++ b/Documentation.tex
@@ -3,6 +3,10 @@
 \usepackage[document]{ragged2e}
 \usepackage{hyperref}
 \usepackage{tikz}
+\usepackage{pifont}
+\graphicspath{{/home/feideu/Work/Gnunet/schemafuzz/docs/}}
+\usepackage{graphicx}
+\usepackage{emp}
 \usetikzlibrary{shapes.arrows,chains}
 \usepackage[ngerman]{babel}
 
@@ -10,20 +14,40 @@
 \author{Ulrich "Feideus" Erwan}
 
 \begin{document}
-
+\begin{empfile}
        
 \maketitle Documentation For SchemaFuzz
        \section{Summary?}
                This document actually needs a front page.
        \section{Introduction}
        
-SchemaFuzz is a free software command line tool incorporated inside the 
GnuTaler package designed to properly fuzz databases.
+SchemaFuzz is a free software command line tool incorporated inside the Gnu 
Taler package 
+which is a free software electronic payment system providing anonymity for 
customers.
+The main goal of this project is to provide an effecient debbuging tool that 
uses a "fuzzing" strategy oriented on databases.  
 Traditionnal fuzzing is defined as "testing an automated software testing 
technique that involves providing invalid, unexpected, or random data as inputs 
to a computer program". SchemaFuzz uses this principle and applies it to the 
database field.
 Where a traditionnal fuzzer would send malformed input to a program, 
SchemaFuzz modifies the content of a database to test that program's behavior 
when stumbling on such unexpected data. \\*
 Obviously, this tool is meant to be used as a mean of debugging as the goal is 
to pop buggs or put into light the security breaches that the code may contain 
regarding the retrieving, usage and saving of a database's content.
 As this tool is being developped as a master's thesis project, its current 
state is far from being finished and there are many options and optimisations 
that deserve to be implemented that are not yet available.
 These future/missing features will be detailed and discussed in a dedicated 
section.
 
+       
+       \section{Context and Perimeter}
+SchemaFuzz's developpement enrolls in the global dynamic of the past decades 
regarding internet  that sustain great efforts to make it a more fluid, 
pleasant but more importantly a safer space. This tool is meant to help 
developpers, mainteners and more genericly anyone that makes use of database 
comming from a database under his influence in their task. A good way to 
summerise the effect of this tool is to compare it with an "cyber attack 
simulator".
+This means that the idea behind it is to emulate the damage that an attacker 
may cause subtly or not to a database he unlegitly gained privileges on. This 
might in theory go from a simple boolean flip (subtle modifications) to 
removing/adding content to purely and simply destroying or erasing all the 
content of the database.
+SchemaFuzz focuses on the first part : modification of the content of the 
database by single small modification that may or may not overlap. These 
modifications may be very aggressive of very subtle.
+It is intresting to point out that this last point also qualifies SchemaFuzz 
as a good "database structural flaw detector".
+That is to say that errors typically triggered by a poor management of a 
database (wrong data type usage, incoherence beetween database structure and 
use of the content etc ...) might also appear clearly during the execution.   
+               \subsection{Perimeter}
+               \begin{figure} [htbp]
+               \centering
+               \includegraphics[scale=1]{codeOriginDiagram.pdf}
+               \caption{Shows the nature of the code for every distinct 
component. The slice size is a rough estimation.}
+               \end{figure}
+               \subsection{When to use it}
+SchemaFuzz is a very usefull tool for anyone trying secure a piece of software 
that uses database ressources. The target software should be GDB compatible and 
the DBMS has to grant access to the target database through credentials passed 
as argument to this tool.
+
+---It is very strongly advice to use a copy of the target databas erather than 
on the production material. Doing so will very likely result in the database 
being corrupted and not usable for any usefull mean.--
+ 
        \section{Usage}
                \subsection{prerequisites}
                        SchemaFuzz requires the presence of a list of libraries 
to work properly which are :
@@ -86,7 +110,7 @@ Launch the "dbConfigure" script.
                        \begin{verbatim}
                                ./dbConfigure
                        \end{verbatim}           
-               
+       
        \section{Design}
                \subsection{Generic explanation}
 SchemaFuzz implementation is based on some bits of the SchemaSpy project 
source code.
@@ -99,8 +123,17 @@ The majority of this project is built on top of this 
already existing code and i
                 
 This organisation will be detailled and discussed in the following sections.
                \subsection{SchemaSpy legacy/metadata extraction}
-SchemaSpy source code has provided the metadata extraction routine. This 
routine retrieves all the relevant information about the target database. These 
informations include data types, table and table column names, views and 
foreign/primary key constraints. Having this pool of metadata allows the 
program to properly frame what the possibilities are in terms of modifications 
(called mutations) as well as dealing with the possible constraints on the 
different tables. 
-This part of the code also parses the arguments given as inputs and 
initialises the database connection.
+SchemaSpy source code has provided the metadata extraction routine. The only 
job of this routine is to initialise the connection to the database and 
retrieve its metadata at the very beginning of the execution (before any actual 
SchemaFuzz code is run). These metadata include data types, table and table 
column names, views and foreign/primary key constraints. Having this pool of 
metadata under the shape of java objects allows the main program to properly 
frame what the possibilities are  [...]
+
+Exemple of typical metadata Set 
+
+
+\begin{figure} [htbp]
+\centering
+\includegraphics[scale=1]{MetaDataExtractionDiagram-1.pdf}
+\caption{Objects returned by the metadata extraction routine.}
+\end{figure}
+
 In order to do that, the user shall provide this set of mandatory database 
related arguments
                        \begin{itemize}
                                \item The driver to the corresponding database 
RDBMS (only support PostGres at the moment)
@@ -110,7 +143,13 @@ In order to do that, the user shall provide this set of 
mandatory database relat
                \subsection{SchemaFuzz Core}            
                        \subsubsection{Constrains}
 The target database often contains contraints on one or several tables. These 
constraints have to be taken into account in the process of fabricating 
mutations as most of the time they restrict the possible values that the 
pointed field can take. This restriction can take the shape of a \underline 
{Not Null} constraint, \underline{Check} constraint, {Foreign key} constraint 
(value has to exist in some other table's field) or \underline{Primary key} 
constraint (no doublets of value allowe [...]
-%(add constraints class diagram here)
+
+\begin{figure} 
+\centering
+\includegraphics[scale=1]{ForeignKeyClassDiagram-1.pdf}
+\caption{Objects returned by the metadata extraction routine.}
+\end{figure}
+
 The last two ones are the problematic ones. They imply specific work before 
applying any mutations to make sure that the value respect all the 
restrictions. before doing anything else after the metadata extraction is done, 
SchemaFuzz performs an update of all the existing constraints on the database 
to add the CASCADE clause. This allows the values bonded by a foreign key 
constraints to take effect. This update reverts to take the constraints back to 
their initial state before the progra [...]
                                \paragraph{Primary key contraints (PKC)} :
 The primary key constraints require an extra DB query that checks the 
existence of the value in the column. If the value already exists (the query's 
result is not empty), the mutation will be dropped before being executed.
@@ -123,7 +162,15 @@ To do so, the software has a way to tranfert the mutation 
from a child to its pa
                        \subsubsection{Mutations}
                                \paragraph{What is a Mutation}
 A mutation is a Java object that bundles all the informations that are used to 
perform a modification in the database. Every is linked to its parent and 
inherits some of his parent's data. In the case of a follow up mutation the 
child inherits the the database row that was his parent's target.Therefore the 
initial state (state before the injection of the modification) of its target is 
exactly the final state (state after injection of the modification) of his 
parent's target. A mutation i [...]
-It also holds the informations concerning the result of the injection in the 
shape of a data vector. This data vector is then used to perform a clustering 
calculus to determine the "uniqueness" of the mutation. This value is also 
stored inside the mutation object and is used as the weight of this mutation in 
the tree.                                
+It also holds the informations concerning the result of the injection in the 
shape of a data vector. This data vector is then used to perform a clustering 
calculus to determine the "uniqueness" of the mutation. This value is also 
stored inside the mutation object and is used as the weight of this mutation in 
the tree.
+
+\begin{figure} 
+\centering
+\includegraphics[scale=1]{MutationClassDiagram-1.pdf}
+\caption{Structure of a Mutation}
+\end{figure}
+
+                               
                                \paragraph{Choosing patern}
 For each iteration of the main loop, a modification has to be picked up as the 
next step in the fuzzing proccess. This is done by concidering the current 
state of the tree.
 Three parallel code paths can be triggered from this point.
@@ -131,6 +178,13 @@ Three parallel code paths can be triggered from this point.
                                \item{Continue on the current branch of the 
tree (triggered if the last mutation scored better than its parent)}
                                \item{Pick an existing branch in the tree and 
grow it (triggered if the last mutation scored worse than its parent on a 50/50 
chance with the next bullet)}
                                \item{Start a new branch (triggered if the last 
mutation scored worse than its parent on a 50/50 chance with the previous 
bullet)}
+                               
+\begin{figure} 
+\centering
+\includegraphics[scale=1]{pickingPaternDiagram.pdf}
+\caption{picking Patern schema}
+\end{figure}                           
+                               
                                \end{itemize}
 A branch is a succession of mutation that share the same database row as their 
modification target.
 The heuristics determining the next mutation's modification are still very 
primitive and will be thinly ajusted in futures versions.                       
                                     
@@ -197,7 +251,12 @@ This value currently isn't biased by any other parameter, 
but this might change
                                \paragraph{Path}
 Since the weighting of the mutation allows to go back to previously more 
intresting mutations, 
 there is a need for a path finder mechanism. Concretly, this routines resolves 
the nodes that separate nodes A and B in the tree. A and B might be children 
and parent but can also belong to complitely different branches. This path is 
then given to the do/undo routine that processes back the modifications to set 
the database up in the required state for the upcomming mutation. 
- %% diagram here.
+
+\begin{figure} 
+\centering
+\includegraphics[scale=1]{CommonAncestorDiagram.pdf}
+\caption{Objects returned by the metadata extraction routine.}
+\end{figure}
                        \subsubsection{The analyzer}
 Analyzing the output of the target programm is another critical part of 
SchemaFuzz. The analyzer parses in the stack trace of the target software's 
execution to try measuring its interest. The main criteria that defines a 
mutation intrest is its proximity to previously parsed stack traces. The more 
distance between the new mutation and the old ones, the better the ranking. 
                                \paragraph{Stack Trace Parser}
@@ -215,14 +274,30 @@ This algorithm can roughly be explain by the following :
                                \begin{quotation}
 "The Levenshtein distance between two words is the minimum number of 
single-character edits (insertions, deletions or substitutions) required to 
change one word into the other."
                                \end{quotation}                          
-After hashing the file name and the function name into numerical values trough 
Levenshtein distance, we are creating a triplet the fully (but not fully 
accuratly yet) represents the stack trace that is being parsed. This triplet 
will be used in the clustering method. %%exemple of hash here.
+After hashing the file name and the function name into numerical values trough 
Levenshtein distance, we are creating a triplet the fully (but not fully 
accuratly yet) represents the stack trace that is being parsed. This triplet 
will be used in the clustering method. 
+
+\begin{figure} 
+\centering
+\begin{tabular}{ | l | l | l | l | l | l | c | r | }
+  \hline                       
+  E & X & E & M & P & L & E &  \\ \hline
+  \ding{51}  & \ding{51}  & \ding{56}  & \ding{51}  & \ding{51}  & \ding{51}  
& \ding{51} & \ding{56}  \\\hline
+  E & X & A & M & P & L & E & S \\
+  \hline  
+\end{tabular}
+\caption{Exemple of the levenshtein distance concept.}
+\end{figure}
+
+The Distance for this exemple is 2/8x100
 
                                \paragraph{The Scoring mechanism}
 The "score" (or rank) of a mutation is a numerical value that reflects its 
intrest. This value is calculated through a modified version of a clustering 
method that computes an n-uplet                        into a integer depending 
on the sum of the euclidian distances from the n-uplet to the existing 
centroids (groups of mutation's n-uplets that were already processed).
 This value is then set as the mutation's rank and used as a mean of chosing 
the upcomming mutation.
-%% exemple of clustering here          
+\begin{figure} 
+  \includegraphics[width=\textwidth]{Scoring.png}
+\end{figure}   
                \subsection{Known issues}               
-This tool is still far from being perfect. About one mutation out of 15 will 
fail for unvalid reaseons.
+About one mutation out of 15 will fail for unvalid reaseons.
                        \subsubsection{Context Cohorence}
 A significant amount of the failing mutations do so because of the transfer 
mechanism. As said in the dedicated section, this mechanism applies more than 
one change to the database (Potentially the whole database). In specific case, 
this property can become problematic. 
 More specificaly, when the main loop identifies a mutation's child as the 
upcomming mutation and its parent row has been splashed with the effect of a 
transfer. In this case, the data embedded in the schemaFuzz data structure may 
not match the data that are actually in the database, this delta will likely 
induce a wrongly designed SQL statement that will result in a SQL failure 
(meaning that 0 row were updated by the statement).
@@ -230,7 +305,16 @@ More specificaly, when the main loop identifies a 
mutation's child as the upcomm
 For a reason that is not yet clear, some of the implied FKC of the target 
database can't be properly set to CASCADE mode. This result in a FKC error 
(mutation fails but the program can carry on)                     
                        \subsubsection{Tests}
 Besides the test suit written by the SchemaSpy team for their own tool (still 
implemented in SchemaFuzz for the meta data extraction), the tests for this 
project are very poor. Their are only very few of them and their utility is 
debatable. This is due to the lack of experience in that regard of the main 
developper. Obviously, we are very well aware of this being a really severe 
flaw in this project and will be one of the main future improvements.
-This big lack of good maintenance equipment might also explain some of the 
silent and non silent buggs that still remain in the code to this day.          
            
+This big lack of good maintenance equipment might also explain some of the 
silent and non silent buggs that still remain in the code to this day.
+
+                       \subsubsection{Code Quality}
+We are well aware that this tool's source code is of debatable quality. This 
fact induces the  buggs and unexpected behaviors discussed earlier on some 
components of this program. 
+The following points constitute the main flaw of the source code:
+                       \begin{itemize}
+                       \item Hard to maintain. The code is not optimised 
either in term of size or                     efficency. Bad coding habits tend 
to make it rather weak and unstable to context changes.
+                       \item Structure is not intuitive. The main loop of the 
program lacks a good             structure.
+                       \end{itemize}
+                       
        \section{Upcomming features and changes}
 This section will provide more insights on the future features that 
might/may/will be implemented as well as the changes in the existing code.
 Any sugestion will be greatly appriciated as long as it is relevent and well 
argumented. All the relevent information regarding the contributions are 
detailled in the so called section.
@@ -251,4 +335,5 @@ You can send your ideas at  \\*
                address@hidden
 Or directly create a pull request on the official repository to edit this 
document and/or the code itself
        \section{Conclusion}
+\end{empfile}
 \end{document} 
diff --git a/docs/CommonAncestorDiagram.aux b/docs/CommonAncestorDiagram.aux
new file mode 100644
index 0000000..f23e546
--- /dev/null
+++ b/docs/CommonAncestorDiagram.aux
@@ -0,0 +1 @@
+\relax 
diff --git a/docs/CommonAncestorDiagram.mp b/docs/CommonAncestorDiagram.mp
new file mode 100644
index 0000000..e4b36cd
--- /dev/null
+++ b/docs/CommonAncestorDiagram.mp
@@ -0,0 +1,22 @@
+\documentclass[border=10pt]{standalone}
+\usepackage{tikz}
+\begin{document}
+\begin{tikzpicture}[sibling distance=10em,
+  every node/.style = {shape=rectangle, rounded corners,
+    draw, align=center,
+    top color=white, bottom color=blue!20}]]
+  \node {Root}
+    child { node {Mutation1} 
+         child { node {Mutation2}
+        child { node {Mutation3} }
+        child { node {Mutation4} }
+        child { node {Mutation5} } }
+      child { node {Mutation6} } };
+    child { node {Mutation7}
+      child { node {Mutation8}
+        child { node {Mutation9} }
+        child { node {Mutation10} }
+        child { node {Mutation11} } }
+      child { node {Mutation12} } };
+\end{tikzpicture}
+\end{document}
diff --git a/docs/CommonAncestorDiagram.pdf b/docs/CommonAncestorDiagram.pdf
new file mode 100644
index 0000000..edf937a
Binary files /dev/null and b/docs/CommonAncestorDiagram.pdf differ
diff --git a/docs/CommonAncestorDiagram.synctex.gz 
b/docs/CommonAncestorDiagram.synctex.gz
new file mode 100644
index 0000000..262638b
Binary files /dev/null and b/docs/CommonAncestorDiagram.synctex.gz differ
diff --git a/docs/CommonAncestorDiagram.tex b/docs/CommonAncestorDiagram.tex
new file mode 100644
index 0000000..56e6878
--- /dev/null
+++ b/docs/CommonAncestorDiagram.tex
@@ -0,0 +1,29 @@
+\documentclass[border=10pt]{standalone}
+\usepackage{tikz}
+\begin{document}
+\begin{tikzpicture}[sibling distance=10em,
+  every node/.style = {shape=rectangle, draw}]]
+       \node {Root}
+       child { node (Mutation1) {Mutation1} 
+                       child { node (Mutation2) {Mutation2}
+                       child { node (Mutation3) {Mutation3} }
+                       child { node {Mutation4} }
+                       child { node {Mutation5} } }
+               child { node {Mutation6} } 
+               child { node (Mutation7) {Mutation7}
+                       child { node (Mutation8) {Mutation8}
+                               child { node {Mutation9} }
+                               child { node {Mutation10} }
+                               child { node (Mutation11) {Mutation11} } } } };
+         
+       \node[text=red] at (-6.6,-5) {current position};
+       \node[text=red] at (6.6,-6.5) {target};  
+          
+       \draw[-latex,red] (Mutation3.north) -- (Mutation2.185);
+       \draw[-latex,red] (Mutation2.north) -- (Mutation1.185);
+       \draw[-latex,red] (Mutation7.north) -- (Mutation1.east);
+       \draw[-latex,red] (Mutation8.57) -- (Mutation7.300);
+       \draw[-latex,red] (Mutation11.north) -- (Mutation8.east);
+                                            
+\end{tikzpicture}
+\end{document}
diff --git a/docs/ForeignKeyClassDiagram-1.pdf 
b/docs/ForeignKeyClassDiagram-1.pdf
new file mode 100644
index 0000000..9b4e776
Binary files /dev/null and b/docs/ForeignKeyClassDiagram-1.pdf differ
diff --git a/docs/ForeignKeyClassDiagram.1 b/docs/ForeignKeyClassDiagram.1
new file mode 100644
index 0000000..e616427
--- /dev/null
+++ b/docs/ForeignKeyClassDiagram.1
@@ -0,0 +1,178 @@
+%!PS
+%%BoundingBox: -1 -96 200 1 
+%%HiResBoundingBox: -0.25 -95.26373 199.79659 0.25 
+%%Creator: MetaPost 1.999
+%%CreationDate: 2018.08.21:1620
+%%Pages: 1
+%*Font: ptmr8r 9.96265 9.96265 20:80c0002a321838007dcfbc4
+%%BeginProlog
+%%EndProlog
+%%Page: 1 1
+ 0.7 0.7 0.7 setrgbcolor
+newpath 1 -1 moveto
+199.79659 -1 lineto
+199.79659 -95.26373 lineto
+1 -95.26373 lineto
+ closepath fill
+ 0.9 0.9 0.9 setrgbcolor
+newpath 0 0 moveto
+198.79659 0 lineto
+198.79659 -94.26373 lineto
+0 -94.26373 lineto
+ closepath fill
+ 0 0 0 setrgbcolor 0 0.5 dtransform truncate idtransform setlinewidth pop
+ [] 0 setdash 1 setlinejoin 10 setmiterlimit
+newpath 0 0 moveto
+198.79659 0 lineto
+198.79659 -94.26373 lineto
+0 -94.26373 lineto
+ closepath stroke
+ 1 setlinecap
+newpath 0 -12.75458 moveto
+198.79659 -12.75458 lineto stroke
+newpath 0 -79.75916 moveto
+198.79659 -79.75916 lineto stroke
+54.84581 -9.75458 moveto
+(ForeignKeyConstraint) ptmr8r 9.96265 fshow
+13 -23.25916 moveto
+(name:\040String) ptmr8r 9.96265 fshow
+13 -33.75916 moveto
+(parent:\040Table) ptmr8r 9.96265 fshow
+13 -44.25916 moveto
+(parentColumns:\040List<TableColumns>) ptmr8r 9.96265 fshow
+13 -54.75916 moveto
+(childTable:\040Table) ptmr8r 9.96265 fshow
+13 -65.25916 moveto
+(deleteRule:\040int) ptmr8r 9.96265 fshow
+13 -75.75916 moveto
+(updateRule:\040int) ptmr8r 9.96265 fshow
+13 -90.26373 moveto
+(CompareTo\(ForeignKeyConstraint\):\040Boolean) ptmr8r 9.96265 fshow
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -20.5592 moveto
+7.95004 -20.5592 lineto
+7.95004 -23.25916 lineto
+2 -23.25916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -23.25916 moveto
+9 -22.2092 lineto
+9 -19.50925 lineto
+7.95004 -20.5592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -20.5592 moveto
+9 -19.50925 lineto
+3.04996 -19.50925 lineto
+2 -20.5592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -31.0592 moveto
+7.95004 -31.0592 lineto
+7.95004 -33.75916 lineto
+2 -33.75916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -33.75916 moveto
+9 -32.7092 lineto
+9 -30.00925 lineto
+7.95004 -31.0592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -31.0592 moveto
+9 -30.00925 lineto
+3.04996 -30.00925 lineto
+2 -31.0592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -41.5592 moveto
+7.95004 -41.5592 lineto
+7.95004 -44.25916 lineto
+2 -44.25916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -44.25916 moveto
+9 -43.2092 lineto
+9 -40.50925 lineto
+7.95004 -41.5592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -41.5592 moveto
+9 -40.50925 lineto
+3.04996 -40.50925 lineto
+2 -41.5592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -52.0592 moveto
+7.95004 -52.0592 lineto
+7.95004 -54.75916 lineto
+2 -54.75916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -54.75916 moveto
+9 -53.7092 lineto
+9 -51.00925 lineto
+7.95004 -52.0592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -52.0592 moveto
+9 -51.00925 lineto
+3.04996 -51.00925 lineto
+2 -52.0592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -62.5592 moveto
+7.95004 -62.5592 lineto
+7.95004 -65.25916 lineto
+2 -65.25916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -65.25916 moveto
+9 -64.2092 lineto
+9 -61.50925 lineto
+7.95004 -62.5592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -62.5592 moveto
+9 -61.50925 lineto
+3.04996 -61.50925 lineto
+2 -62.5592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -73.0592 moveto
+7.95004 -73.0592 lineto
+7.95004 -75.75916 lineto
+2 -75.75916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -75.75916 moveto
+9 -74.7092 lineto
+9 -72.00925 lineto
+7.95004 -73.0592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -73.0592 moveto
+9 -72.00925 lineto
+3.04996 -72.00925 lineto
+2 -73.0592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -87.56378 moveto
+7.95004 -87.56378 lineto
+7.95004 -90.26373 lineto
+2 -90.26373 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -90.26373 moveto
+9 -89.21378 lineto
+9 -86.51382 lineto
+7.95004 -87.56378 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -87.56378 moveto
+9 -86.51382 lineto
+3.04996 -86.51382 lineto
+2 -87.56378 lineto
+ closepath fill
+showpage
+%%EOF
diff --git a/docs/ForeignKeyClassDiagram.mp b/docs/ForeignKeyClassDiagram.mp
new file mode 100644
index 0000000..4bc3890
--- /dev/null
+++ b/docs/ForeignKeyClassDiagram.mp
@@ -0,0 +1,14 @@
+input metauml;
+beginfig(1);
+    Class.ForeignKeyConstraint("ForeignKeyConstraint")
+           ("+name: String",
+               "+parent: Table",
+               "+parentColumns: List<TableColumns>",
+               "+childTable: Table",
+               "+deleteRule: int",
+               "+updateRule: int")
+           ("+CompareTo(ForeignKeyConstraint): Boolean");
+
+    drawObjects(ForeignKeyConstraint);
+endfig;
+end
\ No newline at end of file
diff --git a/docs/ForeignKeyClassDiagram.tex b/docs/ForeignKeyClassDiagram.tex
new file mode 100644
index 0000000..b733ff3
--- /dev/null
+++ b/docs/ForeignKeyClassDiagram.tex
@@ -0,0 +1,21 @@
+input metauml;
+beginfig(1);
+    Class.World("World")
+           ("-age: int","#ressources: List") 
+           ("+sayHello(): void");
+
+    Class.NoHuman("Human")
+           ("-birthday: Date",
+            "-nickname: String",
+            "-secret: String") 
+           ("+code(language: Language): Program");
+
+    leftToRight(50)(World, NoHuman);
+    drawObjects(World, NoHuman);
+
+    link(aggregation)(NoHuman.w -- World.e);
+    item(iAssoc)("1")(obj.n     = .2[World.e,NoHuman.w]);
+    item(iAssoc)("n*")(obj.n  = .8[World.e,NoHuman.w]);
+
+endfig;
+end
\ No newline at end of file
diff --git a/docs/MetaDataExtractionDiagram-1.pdf 
b/docs/MetaDataExtractionDiagram-1.pdf
new file mode 100644
index 0000000..0acadd2
Binary files /dev/null and b/docs/MetaDataExtractionDiagram-1.pdf differ
diff --git a/docs/MetaDataExtractionDiagram.1 b/docs/MetaDataExtractionDiagram.1
new file mode 100644
index 0000000..d23020c
--- /dev/null
+++ b/docs/MetaDataExtractionDiagram.1
@@ -0,0 +1,474 @@
+%!PS
+%%BoundingBox: -1 -168 393 125 
+%%HiResBoundingBox: -0.25 -167.01831 392.89183 124.00916 
+%%Creator: MetaPost 1.999
+%%CreationDate: 2018.08.21:1614
+%%Pages: 1
+%*Font: ptmr8r 9.96265 9.96265 20:8000002a12193a007dffff4
+%*Font: ptmr8r 6.97382 9.96265 31:8000000000000004
+%%BeginProlog
+%%EndProlog
+%%Page: 1 1
+ 0.7 0.7 0.7 setrgbcolor
+newpath 1 -1 moveto
+160.50421 -1 lineto
+160.50421 -43.25916 lineto
+1 -43.25916 lineto
+ closepath fill
+ 0.9 0.9 0.9 setrgbcolor
+newpath 0 0 moveto
+159.50421 0 lineto
+159.50421 -42.25916 lineto
+0 -42.25916 lineto
+ closepath fill
+ 0 0 0 setrgbcolor 0 0.5 dtransform truncate idtransform setlinewidth pop
+ [] 0 setdash 1 setlinejoin 10 setmiterlimit
+newpath 0 0 moveto
+159.50421 0 lineto
+159.50421 -42.25916 lineto
+0 -42.25916 lineto
+ closepath stroke
+ 1 setlinecap
+newpath 0 -12.75458 moveto
+159.50421 -12.75458 lineto stroke
+newpath 0 -37.75916 moveto
+159.50421 -37.75916 lineto stroke
+68.40974 -9.75458 moveto
+(Table) ptmr8r 9.96265 fshow
+13 -23.25916 moveto
+(name:\040String) ptmr8r 9.96265 fshow
+13 -33.75916 moveto
+(primaryKey:\040ForeignKeyConstraint) ptmr8r 9.96265 fshow
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -20.5592 moveto
+7.95004 -20.5592 lineto
+7.95004 -23.25916 lineto
+2 -23.25916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -23.25916 moveto
+9 -22.2092 lineto
+9 -19.50925 lineto
+7.95004 -20.5592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -20.5592 moveto
+9 -19.50925 lineto
+3.04996 -19.50925 lineto
+2 -20.5592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -31.0592 moveto
+7.95004 -31.0592 lineto
+7.95004 -33.75916 lineto
+2 -33.75916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -33.75916 moveto
+9 -32.7092 lineto
+9 -30.00925 lineto
+7.95004 -31.0592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -31.0592 moveto
+9 -30.00925 lineto
+3.04996 -30.00925 lineto
+2 -31.0592 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 210.50421 9.5 moveto
+392.89183 9.5 lineto
+392.89183 -53.75916 lineto
+210.50421 -53.75916 lineto
+ closepath fill
+ 0.9 0.9 0.9 setrgbcolor
+newpath 209.50421 10.5 moveto
+391.89183 10.5 lineto
+391.89183 -52.75916 lineto
+209.50421 -52.75916 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 209.50421 10.5 moveto
+391.89183 10.5 lineto
+391.89183 -52.75916 lineto
+209.50421 -52.75916 lineto
+ closepath stroke
+newpath 209.50421 -2.25458 moveto
+391.89183 -2.25458 lineto stroke
+newpath 209.50421 -48.25916 moveto
+391.89183 -48.25916 lineto stroke
+256.14554 0.74542 moveto
+(ForeignKeyConstraint) ptmr8r 9.96265 fshow
+222.50421 -12.75916 moveto
+(name:\040String) ptmr8r 9.96265 fshow
+222.50421 -23.25916 moveto
+(parentField:\040ForeignKeyConstraint) ptmr8r 9.96265 fshow
+222.50421 -33.75916 moveto
+(childFields:\040List<ForeignKeyConstraint>) ptmr8r 9.96265 fshow
+222.50421 -44.25916 moveto
+(updateRule:\040int) ptmr8r 9.96265 fshow
+ 0.4 0.4 0.4 setrgbcolor
+newpath 211.50421 -10.0592 moveto
+217.45425 -10.0592 lineto
+217.45425 -12.75916 lineto
+211.50421 -12.75916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 217.45425 -12.75916 moveto
+218.50421 -11.7092 lineto
+218.50421 -9.00925 lineto
+217.45425 -10.0592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 217.45425 -10.0592 moveto
+218.50421 -9.00925 lineto
+212.55417 -9.00925 lineto
+211.50421 -10.0592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 211.50421 -20.5592 moveto
+217.45425 -20.5592 lineto
+217.45425 -23.25916 lineto
+211.50421 -23.25916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 217.45425 -23.25916 moveto
+218.50421 -22.2092 lineto
+218.50421 -19.50925 lineto
+217.45425 -20.5592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 217.45425 -20.5592 moveto
+218.50421 -19.50925 lineto
+212.55417 -19.50925 lineto
+211.50421 -20.5592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 211.50421 -31.0592 moveto
+217.45425 -31.0592 lineto
+217.45425 -33.75916 lineto
+211.50421 -33.75916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 217.45425 -33.75916 moveto
+218.50421 -32.7092 lineto
+218.50421 -30.00925 lineto
+217.45425 -31.0592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 217.45425 -31.0592 moveto
+218.50421 -30.00925 lineto
+212.55417 -30.00925 lineto
+211.50421 -31.0592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 211.50421 -41.5592 moveto
+217.45425 -41.5592 lineto
+217.45425 -44.25916 lineto
+211.50421 -44.25916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 217.45425 -44.25916 moveto
+218.50421 -43.2092 lineto
+218.50421 -40.50925 lineto
+217.45425 -41.5592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 217.45425 -41.5592 moveto
+218.50421 -40.50925 lineto
+212.55417 -40.50925 lineto
+211.50421 -41.5592 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 39.45566 -93.25916 moveto
+122.04855 -93.25916 lineto
+122.04855 -135.51831 lineto
+39.45566 -135.51831 lineto
+ closepath fill
+ 0.9 0.9 0.9 setrgbcolor
+newpath 38.45566 -92.25916 moveto
+121.04855 -92.25916 lineto
+121.04855 -134.51831 lineto
+38.45566 -134.51831 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 38.45566 -92.25916 moveto
+121.04855 -92.25916 lineto
+121.04855 -134.51831 lineto
+38.45566 -134.51831 lineto
+ closepath stroke
+newpath 38.45566 -105.01373 moveto
+121.04855 -105.01373 lineto stroke
+newpath 38.45566 -130.01831 moveto
+121.04855 -130.01831 lineto stroke
+68.96268 -102.01373 moveto
+(View) ptmr8r 9.96265 fshow
+51.45566 -115.51831 moveto
+(name:\040String) ptmr8r 9.96265 fshow
+51.45566 -126.01831 moveto
+(result:\040ResultSet) ptmr8r 9.96265 fshow
+ 0.4 0.4 0.4 setrgbcolor
+newpath 40.45566 -112.81836 moveto
+46.4057 -112.81836 lineto
+46.4057 -115.51831 lineto
+40.45566 -115.51831 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 46.4057 -115.51831 moveto
+47.45566 -114.46835 lineto
+47.45566 -111.7684 lineto
+46.4057 -112.81836 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 46.4057 -112.81836 moveto
+47.45566 -111.7684 lineto
+41.50562 -111.7684 lineto
+40.45566 -112.81836 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 40.45566 -123.31836 moveto
+46.4057 -123.31836 lineto
+46.4057 -126.01831 lineto
+40.45566 -126.01831 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 46.4057 -126.01831 moveto
+47.45566 -124.96835 lineto
+47.45566 -122.2684 lineto
+46.4057 -123.31836 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 46.4057 -123.31836 moveto
+47.45566 -122.2684 lineto
+41.50562 -122.2684 lineto
+40.45566 -123.31836 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 219.17136 -103.75916 moveto
+384.2247 -103.75916 lineto
+384.2247 -167.01831 lineto
+219.17136 -167.01831 lineto
+ closepath fill
+ 0.9 0.9 0.9 setrgbcolor
+newpath 218.17136 -102.75916 moveto
+383.2247 -102.75916 lineto
+383.2247 -166.01831 lineto
+218.17136 -166.01831 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 218.17136 -102.75916 moveto
+383.2247 -102.75916 lineto
+383.2247 -166.01831 lineto
+218.17136 -166.01831 lineto
+ closepath stroke
+newpath 218.17136 -115.51373 moveto
+383.2247 -115.51373 lineto stroke
+newpath 218.17136 -161.51831 moveto
+383.2247 -161.51831 lineto stroke
+267.21396 -112.51373 moveto
+(CheckConstraint) ptmr8r 9.96265 fshow
+231.17136 -126.01831 moveto
+(name:\040String) ptmr8r 9.96265 fshow
+231.17136 -136.51831 moveto
+(targetField:\040ForeignKeyConstraint) ptmr8r 9.96265 fshow
+231.17136 -147.01831 moveto
+(valueColumn:\040ForeignKeyConstraint) ptmr8r 9.96265 fshow
+231.17136 -157.51831 moveto
+(constantValue:\040Object) ptmr8r 9.96265 fshow
+ 0.4 0.4 0.4 setrgbcolor
+newpath 220.17136 -123.31836 moveto
+226.1214 -123.31836 lineto
+226.1214 -126.01831 lineto
+220.17136 -126.01831 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 226.1214 -126.01831 moveto
+227.17136 -124.96835 lineto
+227.17136 -122.2684 lineto
+226.1214 -123.31836 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 226.1214 -123.31836 moveto
+227.17136 -122.2684 lineto
+221.22131 -122.2684 lineto
+220.17136 -123.31836 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 220.17136 -133.81836 moveto
+226.1214 -133.81836 lineto
+226.1214 -136.51831 lineto
+220.17136 -136.51831 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 226.1214 -136.51831 moveto
+227.17136 -135.46835 lineto
+227.17136 -132.7684 lineto
+226.1214 -133.81836 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 226.1214 -133.81836 moveto
+227.17136 -132.7684 lineto
+221.22131 -132.7684 lineto
+220.17136 -133.81836 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 220.17136 -144.31836 moveto
+226.1214 -144.31836 lineto
+226.1214 -147.01831 lineto
+220.17136 -147.01831 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 226.1214 -147.01831 moveto
+227.17136 -145.96835 lineto
+227.17136 -143.2684 lineto
+226.1214 -144.31836 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 226.1214 -144.31836 moveto
+227.17136 -143.2684 lineto
+221.22131 -143.2684 lineto
+220.17136 -144.31836 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 220.17136 -154.81836 moveto
+226.1214 -154.81836 lineto
+226.1214 -157.51831 lineto
+220.17136 -157.51831 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 226.1214 -157.51831 moveto
+227.17136 -156.46835 lineto
+227.17136 -153.7684 lineto
+226.1214 -154.81836 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 226.1214 -154.81836 moveto
+227.17136 -153.7684 lineto
+221.22131 -153.7684 lineto
+220.17136 -154.81836 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 261.2381 122.75916 moveto
+342.15796 122.75916 lineto
+342.15796 59.5 lineto
+261.2381 59.5 lineto
+ closepath fill
+ 0.9 0.9 0.9 setrgbcolor
+newpath 260.2381 123.75916 moveto
+341.15796 123.75916 lineto
+341.15796 60.5 lineto
+260.2381 60.5 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 260.2381 123.75916 moveto
+341.15796 123.75916 lineto
+341.15796 60.5 lineto
+260.2381 60.5 lineto
+ closepath stroke
+newpath 260.2381 111.00458 moveto
+341.15796 111.00458 lineto stroke
+newpath 260.2381 65 moveto
+341.15796 65 lineto stroke
+284.64336 114.00458 moveto
+(Column) ptmr8r 9.96265 fshow
+273.2381 100.5 moveto
+(name:\040String) ptmr8r 9.96265 fshow
+273.2381 90 moveto
+(type:\040String) ptmr8r 9.96265 fshow
+273.2381 79.5 moveto
+(length:\040int) ptmr8r 9.96265 fshow
+273.2381 69 moveto
+(unique:\040boolean) ptmr8r 9.96265 fshow
+ 0.4 0.4 0.4 setrgbcolor
+newpath 262.2381 103.19995 moveto
+268.18814 103.19995 lineto
+268.18814 100.5 lineto
+262.2381 100.5 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 268.18814 100.5 moveto
+269.2381 101.54996 lineto
+269.2381 104.24991 lineto
+268.18814 103.19995 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 268.18814 103.19995 moveto
+269.2381 104.24991 lineto
+263.28806 104.24991 lineto
+262.2381 103.19995 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 262.2381 92.69995 moveto
+268.18814 92.69995 lineto
+268.18814 90 lineto
+262.2381 90 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 268.18814 90 moveto
+269.2381 91.04996 lineto
+269.2381 93.74991 lineto
+268.18814 92.69995 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 268.18814 92.69995 moveto
+269.2381 93.74991 lineto
+263.28806 93.74991 lineto
+262.2381 92.69995 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 262.2381 82.19995 moveto
+268.18814 82.19995 lineto
+268.18814 79.5 lineto
+262.2381 79.5 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 268.18814 79.5 moveto
+269.2381 80.54996 lineto
+269.2381 83.24991 lineto
+268.18814 82.19995 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 268.18814 82.19995 moveto
+269.2381 83.24991 lineto
+263.28806 83.24991 lineto
+262.2381 82.19995 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 262.2381 71.69995 moveto
+268.18814 71.69995 lineto
+268.18814 69 lineto
+262.2381 69 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 268.18814 69 moveto
+269.2381 70.04996 lineto
+269.2381 72.74991 lineto
+268.18814 71.69995 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 268.18814 71.69995 moveto
+269.2381 72.74991 lineto
+263.28806 72.74991 lineto
+262.2381 71.69995 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 159.50421 -21.12958 moveto
+209.50421 -21.12958 lineto stroke
+161.50421 -19.12958 moveto
+(1) ptmr8r 6.97382 fshow
+204.0173 -19.12958 moveto
+(n) ptmr8r 6.97382 fshow
+newpath 79.7521 0 moveto
+260.2381 92.12958 lineto stroke
+78.00865 2 moveto
+(1) ptmr8r 6.97382 fshow
+254.75119 90.53084 moveto
+(n) ptmr8r 6.97382 fshow
+newpath 79.7521 -42.25916 moveto
+218.17136 -134.38873 lineto stroke
+78.00865 -48.98734 moveto
+(1) ptmr8r 6.97382 fshow
+212.68445 -139.5862 moveto
+(n) ptmr8r 6.97382 fshow
+showpage
+%%EOF
diff --git a/docs/MetaDataExtractionDiagram.mp 
b/docs/MetaDataExtractionDiagram.mp
new file mode 100644
index 0000000..710cd81
--- /dev/null
+++ b/docs/MetaDataExtractionDiagram.mp
@@ -0,0 +1,48 @@
+input metauml;
+beginfig(1);
+       Class.Table("Table")
+               ("+name: String",
+               "+primaryKey: ForeignKeyConstraint")();
+       Class.ForeignKeyConstraint("ForeignKeyConstraint")
+               ("+name: String",
+               "+parentField: ForeignKeyConstraint",
+               "+childFields: List<ForeignKeyConstraint>",
+               "+updateRule: int")();
+       Class.Column("Column")
+               ("+name: String",
+               "+type: String",
+               "+length: int",
+               "+unique: boolean")();  
+       Class.View("View")
+               ("+name: String",
+               "+result: ResultSet")();
+       Class.CheckConstraint("CheckConstraint")
+       ("+name: String",
+       "+targetField: ForeignKeyConstraint",
+       "+valueColumn: ForeignKeyConstraint",
+       "+constantValue: Object")();    
+               
+       topToBottom(50)(Table,View);    
+       leftToRight(50)(Table, ForeignKeyConstraint);
+       topToBottom(50)(Column,ForeignKeyConstraint);
+       topToBottom(50)(ForeignKeyConstraint,CheckConstraint);  
+       drawObjects(Table,ForeignKeyConstraint,View,CheckConstraint,Column);
+
+               
+    link(association)(Table.e -- ForeignKeyConstraint.w);
+    item(iAssoc)("1")(obj.sw = Table.e);
+    item(iAssoc)("n")(obj.se = ForeignKeyConstraint.w);
+       
+       
+    link(association)(Table.n -- Column.w);
+    item(iAssoc)("1")(obj.s = Table.n);
+    item(iAssoc)("n")(obj.e = Column.w);       
+       
+    link(association)(Table.s -- CheckConstraint.w);
+    item(iAssoc)("1")(obj.n = Table.s);
+    item(iAssoc)("n")(obj.ne = CheckConstraint.w);
+
+               
+       
+endfig;
+end
\ No newline at end of file
diff --git a/docs/MutationClassDiagram-1.pdf b/docs/MutationClassDiagram-1.pdf
new file mode 100644
index 0000000..8496077
Binary files /dev/null and b/docs/MutationClassDiagram-1.pdf differ
diff --git a/docs/MutationClassDiagram.1 b/docs/MutationClassDiagram.1
new file mode 100644
index 0000000..94d7040
--- /dev/null
+++ b/docs/MutationClassDiagram.1
@@ -0,0 +1,420 @@
+%!PS
+%%BoundingBox: -1 -222 272 1 
+%%HiResBoundingBox: -0.25 -221.26373 271.3865 0.25 
+%%Creator: MetaPost 1.999
+%%CreationDate: 2018.08.22:1551
+%%Pages: 1
+%*Font: ptmr8r 9.96265 9.96265 20:80c8002a7a4dff017fffbf4
+%%BeginProlog
+%%EndProlog
+%%Page: 1 1
+ 0.7 0.7 0.7 setrgbcolor
+newpath 1 -1 moveto
+271.3865 -1 lineto
+271.3865 -221.26373 lineto
+1 -221.26373 lineto
+ closepath fill
+ 0.9 0.9 0.9 setrgbcolor
+newpath 0 0 moveto
+270.3865 0 lineto
+270.3865 -220.26373 lineto
+0 -220.26373 lineto
+ closepath fill
+ 0 0 0 setrgbcolor 0 0.5 dtransform truncate idtransform setlinewidth pop
+ [] 0 setdash 1 setlinejoin 10 setmiterlimit
+newpath 0 0 moveto
+270.3865 0 lineto
+270.3865 -220.26373 lineto
+0 -220.26373 lineto
+ closepath stroke
+ 1 setlinecap
+newpath 0 -12.75458 moveto
+270.3865 -12.75458 lineto stroke
+newpath 0 -142.75916 moveto
+270.3865 -142.75916 lineto stroke
+116.92697 -9.75458 moveto
+(Mutation) ptmr8r 9.96265 fshow
+13 -23.25916 moveto
+(ID:\040int) ptmr8r 9.96265 fshow
+13 -33.75916 moveto
+(score:\040int) ptmr8r 9.96265 fshow
+13 -44.25916 moveto
+(subTreeWeight:\040int) ptmr8r 9.96265 fshow
+13 -54.75916 moveto
+(depth:\040int) ptmr8r 9.96265 fshow
+13 -65.25916 moveto
+(initialStateRow:\040Row) ptmr8r 9.96265 fshow
+13 -75.75916 moveto
+(postChangeRow:\040Row) ptmr8r 9.96265 fshow
+13 -86.25916 moveto
+(potential_changes:\040List<SingleChange>) ptmr8r 9.96265 fshow
+13 -96.75916 moveto
+(parent:\040Mutation) ptmr8r 9.96265 fshow
+13 -107.25916 moveto
+(children:\040List<Mutation>) ptmr8r 9.96265 fshow
+13 -117.75916 moveto
+(chosenChange:\040SingleChange) ptmr8r 9.96265 fshow
+13 -128.25916 moveto
+(firstAppearance:\040boolean) ptmr8r 9.96265 fshow
+13 -138.75916 moveto
+(rpv:\040ReportVector) ptmr8r 9.96265 fshow
+13 -153.26373 moveto
+(pickPotentialChangeBasedOnWeight\(\):\040SingleChange) ptmr8r
+ 9.96265 fshow
+13 -163.76373 moveto
+(discoverFieldPossibilities\(column,\040value\):\040List<SingleChange>) ptmr8r
+ 9.96265 fshow
+13 -174.26373 moveto
+(inject\(mutation,\040doOrUndo\):\040int) ptmr8r 9.96265 fshow
+13 -184.76373 moveto
+(updateQueryBuilder\(\):\040String) ptmr8r 9.96265 fshow
+13 -195.26373 moveto
+(compare\(Mutation\):\040Boolean) ptmr8r 9.96265 fshow
+13 -205.76373 moveto
+(findPathTo\(Mutation\)\040:\040List<List<Mutation>>) ptmr8r 9.96265 fshow
+13 -216.26373 moveto
+(transferToParent\(\):\040void) ptmr8r 9.96265 fshow
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -20.5592 moveto
+7.95004 -20.5592 lineto
+7.95004 -23.25916 lineto
+2 -23.25916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -23.25916 moveto
+9 -22.2092 lineto
+9 -19.50925 lineto
+7.95004 -20.5592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -20.5592 moveto
+9 -19.50925 lineto
+3.04996 -19.50925 lineto
+2 -20.5592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -31.0592 moveto
+7.95004 -31.0592 lineto
+7.95004 -33.75916 lineto
+2 -33.75916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -33.75916 moveto
+9 -32.7092 lineto
+9 -30.00925 lineto
+7.95004 -31.0592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -31.0592 moveto
+9 -30.00925 lineto
+3.04996 -30.00925 lineto
+2 -31.0592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -41.5592 moveto
+7.95004 -41.5592 lineto
+7.95004 -44.25916 lineto
+2 -44.25916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -44.25916 moveto
+9 -43.2092 lineto
+9 -40.50925 lineto
+7.95004 -41.5592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -41.5592 moveto
+9 -40.50925 lineto
+3.04996 -40.50925 lineto
+2 -41.5592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -52.0592 moveto
+7.95004 -52.0592 lineto
+7.95004 -54.75916 lineto
+2 -54.75916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -54.75916 moveto
+9 -53.7092 lineto
+9 -51.00925 lineto
+7.95004 -52.0592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -52.0592 moveto
+9 -51.00925 lineto
+3.04996 -51.00925 lineto
+2 -52.0592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -62.5592 moveto
+7.95004 -62.5592 lineto
+7.95004 -65.25916 lineto
+2 -65.25916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -65.25916 moveto
+9 -64.2092 lineto
+9 -61.50925 lineto
+7.95004 -62.5592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -62.5592 moveto
+9 -61.50925 lineto
+3.04996 -61.50925 lineto
+2 -62.5592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -73.0592 moveto
+7.95004 -73.0592 lineto
+7.95004 -75.75916 lineto
+2 -75.75916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -75.75916 moveto
+9 -74.7092 lineto
+9 -72.00925 lineto
+7.95004 -73.0592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -73.0592 moveto
+9 -72.00925 lineto
+3.04996 -72.00925 lineto
+2 -73.0592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -83.5592 moveto
+7.95004 -83.5592 lineto
+7.95004 -86.25916 lineto
+2 -86.25916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -86.25916 moveto
+9 -85.2092 lineto
+9 -82.50925 lineto
+7.95004 -83.5592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -83.5592 moveto
+9 -82.50925 lineto
+3.04996 -82.50925 lineto
+2 -83.5592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -94.0592 moveto
+7.95004 -94.0592 lineto
+7.95004 -96.75916 lineto
+2 -96.75916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -96.75916 moveto
+9 -95.7092 lineto
+9 -93.00925 lineto
+7.95004 -94.0592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -94.0592 moveto
+9 -93.00925 lineto
+3.04996 -93.00925 lineto
+2 -94.0592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -104.5592 moveto
+7.95004 -104.5592 lineto
+7.95004 -107.25916 lineto
+2 -107.25916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -107.25916 moveto
+9 -106.2092 lineto
+9 -103.50925 lineto
+7.95004 -104.5592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -104.5592 moveto
+9 -103.50925 lineto
+3.04996 -103.50925 lineto
+2 -104.5592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -115.0592 moveto
+7.95004 -115.0592 lineto
+7.95004 -117.75916 lineto
+2 -117.75916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -117.75916 moveto
+9 -116.7092 lineto
+9 -114.00925 lineto
+7.95004 -115.0592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -115.0592 moveto
+9 -114.00925 lineto
+3.04996 -114.00925 lineto
+2 -115.0592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -125.5592 moveto
+7.95004 -125.5592 lineto
+7.95004 -128.25916 lineto
+2 -128.25916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -128.25916 moveto
+9 -127.2092 lineto
+9 -124.50925 lineto
+7.95004 -125.5592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -125.5592 moveto
+9 -124.50925 lineto
+3.04996 -124.50925 lineto
+2 -125.5592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -136.0592 moveto
+7.95004 -136.0592 lineto
+7.95004 -138.75916 lineto
+2 -138.75916 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -138.75916 moveto
+9 -137.7092 lineto
+9 -135.00925 lineto
+7.95004 -136.0592 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -136.0592 moveto
+9 -135.00925 lineto
+3.04996 -135.00925 lineto
+2 -136.0592 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -150.56378 moveto
+7.95004 -150.56378 lineto
+7.95004 -153.26373 lineto
+2 -153.26373 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -153.26373 moveto
+9 -152.21378 lineto
+9 -149.51382 lineto
+7.95004 -150.56378 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -150.56378 moveto
+9 -149.51382 lineto
+3.04996 -149.51382 lineto
+2 -150.56378 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -161.06378 moveto
+7.95004 -161.06378 lineto
+7.95004 -163.76373 lineto
+2 -163.76373 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -163.76373 moveto
+9 -162.71378 lineto
+9 -160.01382 lineto
+7.95004 -161.06378 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -161.06378 moveto
+9 -160.01382 lineto
+3.04996 -160.01382 lineto
+2 -161.06378 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -171.56378 moveto
+7.95004 -171.56378 lineto
+7.95004 -174.26373 lineto
+2 -174.26373 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -174.26373 moveto
+9 -173.21378 lineto
+9 -170.51382 lineto
+7.95004 -171.56378 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -171.56378 moveto
+9 -170.51382 lineto
+3.04996 -170.51382 lineto
+2 -171.56378 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -182.06378 moveto
+7.95004 -182.06378 lineto
+7.95004 -184.76373 lineto
+2 -184.76373 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -184.76373 moveto
+9 -183.71378 lineto
+9 -181.01382 lineto
+7.95004 -182.06378 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -182.06378 moveto
+9 -181.01382 lineto
+3.04996 -181.01382 lineto
+2 -182.06378 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -192.56378 moveto
+7.95004 -192.56378 lineto
+7.95004 -195.26373 lineto
+2 -195.26373 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -195.26373 moveto
+9 -194.21378 lineto
+9 -191.51382 lineto
+7.95004 -192.56378 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -192.56378 moveto
+9 -191.51382 lineto
+3.04996 -191.51382 lineto
+2 -192.56378 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -203.06378 moveto
+7.95004 -203.06378 lineto
+7.95004 -205.76373 lineto
+2 -205.76373 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -205.76373 moveto
+9 -204.71378 lineto
+9 -202.01382 lineto
+7.95004 -203.06378 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -203.06378 moveto
+9 -202.01382 lineto
+3.04996 -202.01382 lineto
+2 -203.06378 lineto
+ closepath fill
+ 0.4 0.4 0.4 setrgbcolor
+newpath 2 -213.56378 moveto
+7.95004 -213.56378 lineto
+7.95004 -216.26373 lineto
+2 -216.26373 lineto
+ closepath fill
+ 0.7 0.7 0.7 setrgbcolor
+newpath 7.95004 -216.26373 moveto
+9 -215.21378 lineto
+9 -212.51382 lineto
+7.95004 -213.56378 lineto
+ closepath fill
+ 0.6 0.6 0.6 setrgbcolor
+newpath 7.95004 -213.56378 moveto
+9 -212.51382 lineto
+3.04996 -212.51382 lineto
+2 -213.56378 lineto
+ closepath fill
+showpage
+%%EOF
diff --git a/docs/MutationClassDiagram.mp b/docs/MutationClassDiagram.mp
new file mode 100644
index 0000000..adc62c8
--- /dev/null
+++ b/docs/MutationClassDiagram.mp
@@ -0,0 +1,25 @@
+input metauml;
+beginfig(1);
+       Class.Mutation("Mutation")
+               ("+ID: int",
+               "+score: int",
+               "+subTreeWeight: int",
+               "+depth: int",
+               "+initialStateRow: Row",
+               "+postChangeRow: Row",
+               "+potential_changes: List<SingleChange>",
+               "+parent: Mutation",
+               "+children: List<Mutation>",
+               "+chosenChange: SingleChange",
+               "+firstAppearance: boolean",
+               "+rpv: ReportVector")
+               ("+pickPotentialChangeBasedOnWeight(): SingleChange",
+                "+discoverFieldPossibilities(column, value): 
List<SingleChange>",
+                "+inject(mutation, doOrUndo): int",
+                "+updateQueryBuilder(): String",
+                "+compare(Mutation): Boolean",
+                "+findPathTo(Mutation) : List<List<Mutation>>",
+                "+transferToParent(): void");
+       drawObjects(Mutation);  
+endfig;
+end
\ No newline at end of file
diff --git a/docs/Scoring.png b/docs/Scoring.png
new file mode 100644
index 0000000..876abaf
Binary files /dev/null and b/docs/Scoring.png differ
diff --git a/docs/codeOriginDiagram.aux b/docs/codeOriginDiagram.aux
new file mode 100644
index 0000000..f23e546
--- /dev/null
+++ b/docs/codeOriginDiagram.aux
@@ -0,0 +1 @@
+\relax 
diff --git a/docs/codeOriginDiagram.pdf b/docs/codeOriginDiagram.pdf
new file mode 100644
index 0000000..d3b72f9
Binary files /dev/null and b/docs/codeOriginDiagram.pdf differ
diff --git a/docs/codeOriginDiagram.synctex.gz 
b/docs/codeOriginDiagram.synctex.gz
new file mode 100644
index 0000000..c44993a
Binary files /dev/null and b/docs/codeOriginDiagram.synctex.gz differ
diff --git a/docs/codeOriginDiagram.tex b/docs/codeOriginDiagram.tex
new file mode 100644
index 0000000..6299b71
--- /dev/null
+++ b/docs/codeOriginDiagram.tex
@@ -0,0 +1,34 @@
+\documentclass[tikz,border=10pt]{standalone}
+\begin{document}
+\def\angle{0}
+\def\radius{3}
+\def\cyclelist{{"orange","blue","red","green"}}
+\newcount\cyclecount \cyclecount=-1
+\newcount\ind \ind=-1
+\begin{tikzpicture}[nodes = {font=\sffamily}]
+  \foreach \percent/\name in {
+      60/MainLoop + Hashing + Parsing (Code created from scratch),
+      20/Data Structure + Clustering (Modified pre-existing code),
+      20/MetaDataExtraction (Unmodified existing routines)
+    } {
+      \ifx\percent\empty\else               % If \percent is empty, do nothing
+        \global\advance\cyclecount by 1     % Advance cyclecount
+        \global\advance\ind by 1            % Advance list index
+        \ifnum3<\cyclecount                 % If cyclecount is larger than list
+          \global\cyclecount=0              %   reset cyclecount and
+          \global\ind=0                     %   reset list index
+        \fi
+        \pgfmathparse{\cyclelist[\the\ind]} % Get color from cycle list
+        \edef\color{\pgfmathresult}         %   and store as \color
+        % Draw angle and set labels
+        \draw[fill={\color!50},draw={\color}] (0,0) -- (\angle:\radius)
+          arc (\angle:\angle+\percent*3.6:\radius) -- cycle;
+        \node at (\angle+0.5*\percent*3.6:0.7*\radius) {\percent\,\%};
+        \node[pin=\angle+0.5*\percent*3.6:\name]
+          at (\angle+0.5*\percent*3.6:\radius) {};
+        \pgfmathparse{\angle+\percent*3.6}  % Advance angle
+        \xdef\angle{\pgfmathresult}         %   and store in \angle
+      \fi
+    };
+\end{tikzpicture}
+\end{document}
\ No newline at end of file
diff --git a/docs/pickingPaternDiagram.aux b/docs/pickingPaternDiagram.aux
new file mode 100644
index 0000000..f23e546
--- /dev/null
+++ b/docs/pickingPaternDiagram.aux
@@ -0,0 +1 @@
+\relax 
diff --git a/docs/pickingPaternDiagram.pdf b/docs/pickingPaternDiagram.pdf
new file mode 100644
index 0000000..1a32a62
Binary files /dev/null and b/docs/pickingPaternDiagram.pdf differ
diff --git a/docs/pickingPaternDiagram.synctex.gz 
b/docs/pickingPaternDiagram.synctex.gz
new file mode 100644
index 0000000..997a7e0
Binary files /dev/null and b/docs/pickingPaternDiagram.synctex.gz differ
diff --git a/docs/pickingPaternDiagram.tex b/docs/pickingPaternDiagram.tex
new file mode 100644
index 0000000..4eceed6
--- /dev/null
+++ b/docs/pickingPaternDiagram.tex
@@ -0,0 +1,43 @@
+\documentclass[border=10pt]{standalone}
+\usepackage{tikz}
+\usetikzlibrary{arrows.meta}
+\tikzset{%
+  >={Latex[width=2mm,length=2mm]},
+  % Specifications for style of nodes:
+            base/.style = {rectangle, rounded corners, draw=black,
+                           minimum width=4cm, minimum height=1cm,
+                           text centered, font=\sffamily},
+  activityStarts/.style = {base, fill=blue!30},
+       startstop/.style = {base, fill=red!30},
+    scoreDiff/.style = {base, fill=green!30},
+         process/.style = {base, minimum width=2.5cm, fill=orange!15,
+                           font=\ttfamily},
+}
+\begin{document}    
+% Drawing part, node distance is 1.5 cm and every node
+% is prefilled with white background
+\begin{tikzpicture}[node distance=1.5cm,
+    every node/.style={fill=white, font=\sffamily}, align=center]
+  % Specification of nodes (position, etc.)
+  \node (start) [activityStarts] {BEGIN};
+  \node (retriveLastMutationsBlock)  [process, below of=start]  {retrieve last 
two \\ mutations score marks};
+  \node (scoreDiff) [scoreDiff, below of=retriveLastMutationsBlock] {Last 
Mutation scored better \\ than its parent ?};
+  \node (pickLastMutationChildBlock) [startstop, right of=scoreDiff, below 
of=scoreDiff, xshift=2cm] {pick one of the last \\ Mutation's possibilites at 
\\ random};
+  \node (modifPerformedBlock) [scoreDiff, below of=scoreDiff, yshift=-1.5cm] 
{modification already applied \\ on this branch ?};
+  \node (pickExistingBlock) [startstop, left of=scoreDiff, below of=scoreDiff, 
xshift=-2cm] {pick existing  \\ Mutation's child  \\ modification [biased by 
weight]};
+  \node (pickNewRowBlock) [startstop, left of=pickExistingBlock,  xshift=-3cm] 
{pick a brand new \\ row in the database  \\ to fuzz on};
+  \node (end) [activityStarts, below of=modifPerformedBlock] {END};     
+  % Specification of lines between nodes specified above
+  % with aditional nodes for description 
+  \draw[->]     (start)        -- (retriveLastMutationsBlock);
+  \draw[->]     (retriveLastMutationsBlock) -- (scoreDiff);
+  \draw[->]     (scoreDiff)     -| node[yshift=0.2cm,xshift=20]{No} 
node[yshift=-0.4cm]{50\%} (pickExistingBlock);
+  \draw[->]     (scoreDiff)     -| node[yshift=-0.4cm]{50\%}(pickNewRowBlock);
+  \draw[->]     (scoreDiff)  -| node[xshift=0.7cm]{Yes} 
(pickLastMutationChildBlock);
+  \draw[->]            (pickNewRowBlock)        |- (end);
+  \draw[->]            (pickExistingBlock)      |- (modifPerformedBlock);
+  \draw[->]            (pickLastMutationChildBlock)     |-      
(modifPerformedBlock);
+  \draw[->]            (modifPerformedBlock)    -- 
node[yshift=-0.4cm]{Yes}(scoreDiff);
+  \draw[->]            (modifPerformedBlock)    -- node[xshift=0.7cm]{No} 
(end);
+  \end{tikzpicture}
+\end{document}
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]