\documentclass[../dissertation.tex]{subfiles}

\begin{document}
\section{Abstraction}
\begin{figure}[!h]
\centering
  \begin{tikzpicture} [align=center, node distance=4cm]
    \node (connector) [box] {Checklist Tester Interface};
    \node (server) [box, below of=connector] {Checklist Tester Server};
    \node (plugin) [box, right of=server] {Simulator Connector Plugin};
    \node (formal) [box, left of=server] {Formal Method};
    \node (simulator) [box, below of=plugin] {Flight Simulator};
  
    \draw [arrow] (server) -- (connector);
    \draw [arrow] (formal) -- (server);
    \draw [arrow] (plugin) -- (server);
    \draw [arrow] (plugin) -- (simulator);
  \end{tikzpicture}
  \caption{Abstract layout of components}
\end{figure}

\section{Model}
\begin{itemize}
  \item Formal modelling is the heart of the logic for testing checklists
  \item Formal model created using VDM-SL
  \item It allows to test that the checklists have been completed in a proper manner
    - and that it is provable
  \item Model keeps track of
    \begin{itemize}
      \item Aircraft state
      \item Checklist state
    \end{itemize}
  \item If an error were to occur in the model, this can be relayed that there was
    something wrong with running the test for the checklist, such as:
    \begin{itemize}
      \item Procedure compromises integrity of aircraft
      \item There is not enough time to complete the procedure
      \item There is a contradiction with the steps of the checklist
    \end{itemize}
\end{itemize}

\section{Scenarios}
\begin{itemize}
  \item Use a Quick Reference Handbook (QRH) to find potential list of checklists to test
  % TODO find these accident reports
  \item Look at previous accident reports that had an incident related to checklists
    and test it with my tool to see if it will pick it up
  \item These previous accident reports can be good metrics to know what statistics to
    look out for
\end{itemize}

\section{Decisions}
\begin{itemize}
  \item There would be around 3 main components to this tester
    \begin{itemize}
      \item Formal Model
      \item Flight Simulator plugin
      \item Checklist Tester (to connect the formal model and flight simulator)
    \end{itemize}
  \item As VDM-SL is being used, it uses VDMJ to parse the model~\cite{vdmj}. This was a starting
    point for the tech stack, as VDMJ is also open source.
  \item VDMJ uses Java, therefore my language of choice was a language related to Java.
\end{itemize}

\subsection{Formal Model}
\begin{itemize}
  \item There were a few ways of implementing the formal model into another application
  \item Some of these methods were provided by Overture~\cite{overture-remote}
    \begin{itemize}
      \item RemoteControl interface
      \item VDMTools API~\cite{vdmtoolbox-api}
    \end{itemize}
  \item However, both of these methods did not suit what was required as most of the
    documentation for RemoteControl was designed for the Overture Tool IDE. VDMTools
    may have handled the formal model differently
  \item The choice was to create a VDMJ wrapper, as the modules are available on Maven
\end{itemize}

\subsection{Checklist Tester}
\begin{itemize}
  \item VDMJ uses Java, meaning the logical choice would be to use something with Java
  \item As the tester is going to include a UI, the language choice was still important
  \item Kotlin~\cite{kotlin} was the choice in the end as Google has been putting Kotlin first
    compared to Java, it includes less boilerplate code (e.g. getters and setters)~\cite{android-kotlin}
  \item There are a variety of GUI libraries to consider using
    \begin{itemize}
      \item JavaFX~\cite{javafx}
      \item Swing~\cite{flatlaf}
      \item Compose Multiplatform~\cite{compose}
    \end{itemize}
  \item The decision was to use Compose Multiplatform in the end, due to time limitations and
    having prior experience in using Flutter~\cite{flutter}
  \item Compose Multiplatform has the ability to create a desktop application and a server,
    which would allow for leeway if a server would be needed
\end{itemize}

\end{document}
