<commit_before>\documentclass[paper=a4, fontsize=11pt]{scrartcl}
\usepackage[svgnames]{xcolor}
\usepackage[a4paper,pdftex]{geometry}

\usepackage[german]{babel}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}

\usepackage{fullpage}
\usepackage{fancyhdr}
\pagestyle{fancy}
	\fancyhead[L]{INSO - Industrial Software\\ \small{Institut für Rechnergestützte Automation | Fakultät für Informatik | Technische Universität Wien}}
	\fancyhead[C]{}
	\fancyhead[R]{}
	\fancyfoot[L]{JavaCard-Calculator}
	\fancyfoot[C]{}
	\fancyfoot[R]{Seite \thepage}
	\renewcommand{\headrulewidth}{1pt}
	\renewcommand{\footrulewidth}{1pt}
\setlength{\headheight}{0.5cm}
\setlength{\headsep}{0.75cm}

\usepackage{hyperref}
	\hypersetup{
		colorlinks,
		citecolor=black,
		filecolor=black,
		linkcolor=black,
		urlcolor=black
	}

\usepackage{pdfpages}

\usepackage[babel,german=quotes]{csquotes}

% ------------------------------------------------------------------------------
% Title Setup
% ------------------------------------------------------------------------------
\newcommand{\HRule}[1]{\rule{\linewidth}{#1}} % Horizontal rule

\makeatletter               % Title
\def\printtitle{%
	{\centering \@title\par}}
\makeatother

\makeatletter               % Author
\def\printauthor{%
	{\centering \normalsize \@author}}
\makeatother


\title{	\normalsize Erstellung eines JavaCard-Calculator-Aplets% Subtitle of the document
	\\[2.0cm] \HRule{0.5pt} \\
	\LARGE \textbf{\uppercase{Dokumentation Übung 2}} % Title
	\HRule{2pt} \\[1.5cm]
	\normalsize Wien am \today \\
	\normalsize Technische Universität Wien \\[1.0cm]
	\normalsize ausgeführt im Rahmen der Lehrveranstaltung \\
	\LARGE 183.286 – (Mobile) Network Service Applications
}


\author{
	Gruppe 7 \\[2.0cm]
	<NAME> \\
	0925915 \\
	E 033 534 \\
	Software and Information Engineering \\[2.0cm]
	<NAME> \\
	0925853 \\
	E 066 937 \\
	Software Engineering and Internet Computing \\[2.0cm]
}

\begin{document}
% ------------------------------------------------------------------------------
% Title Page
% ------------------------------------------------------------------------------
\thispagestyle{empty} % Remove page numbering on this page
\printtitle
	\vfill
\printauthor

% ------------------------------------------------------------------------------
% Table of Contents
% ------------------------------------------------------------------------------
\newpage
\tableofcontents

% ------------------------------------------------------------------------------
% Document
% ------------------------------------------------------------------------------
\newpage
\section{Kurzfassung}
Dieses Dokument stellt den Abschlussbericht der zweiten Übung der LVA \enquote{(Mobile) Network Service Applications} dar. Konkret handelt es sich um den Abgabebericht der Gruppe 7 (Falb und Borkowski).

Die Übung bestand in der Entwicklung eines Rechners auf Basis der JavaCard-Plattform, sowie das Erstellen von JUnit-Tests für dieses JavaCard-Applet.


\section{Einleitung}
Die Vorgabe der Lehrveranstaltungsleitung war das Entwickeln eines JavaCard-Applets, welches einfache Rechenoperationen durchführt.

\section{Problemstellung / Zielsetzung}
\subsection{Rechner-Applet}
Das Applet soll einfache Rechenoperationen (Addieren, Subtrahieren, Multiplizieren) und einfache logische Operationen (AND, OR, NOT) sowie deren Operanden (als Teil der APDU) entgegennehmen, das Resultat berechnen und daraufhin als Response-APDU zurückschicken. Für Fehlerfälle sollen geeignete Fehlercodes zurückgegeben werden.

\subsection{JUnit-Tests}
Das Applet soll mittels JUnit-Tests auf Korrektheit überprüft werden. Hierbei ist sicherzustellen, mögliche Ausnahme- und Randfälle abzudecken. Da auf der JavaCard-Plattform kein JUnit verfügbar ist, soll JCardSim als Ausführungsframework verwendet werden.

\subsection{Kodierung}
Die LVA-Leitung hat die Kodierung der Werte und den Umgang mit negativen Zahlen uns selbst überlassen\footnote{siehe auch \url{https://tuwel.tuwien.ac.at/mod/forum/discuss.php?d=46761\#p138561}}, weswegen wir uns auf eine Konvention festgesetzt haben, welche nachfolgend erklärt wird.


\section{Methodisches Vorgehen}
\subsection{JavaCard-Applet}
Das JavaCard-Applet wurde, wie in der zur Verfügung gestellten Anleitung, mittels NetBeans erstellt. NetBeans unterstützt hierbei als IDE stark das Erstellen und die Entwicklung von Applets, indem Schritte wie die Einrichtung der Umgebung, des Emulators, das Aussuchen einer AID usw. für den Entwickler (semi-)automatisch ausgeführt werden.
Nach dem Setup des Applets wurde das Beispiel-Applet der LVA-Leitung übernommen und einige Test-APDUs mithilfe der NetBeans-Konsole ausgeführt. Nach einigem Herantasten an die Vorgehensweise wurden die erwarteten Response-APDUs erhalten und das Applet wurde gemäß der vorgegebenen Anleitung mit den erforderten Rechenoperationen implementiert.

\subsection{Kodierung}
Die Eingabe- und Ausgabewerte sind alle \textit{signed} zu verstehen, für die Eingabe \textit{signed byte}, für die Ausgabe \textit{signed short}. Das heißt, dass für die Eingabeparameter Werte von \textit{-128} bis \textit{+127} und für die Ausgabewerte Werte von \textit{-32768} bis \textit{+32767} zugelassen sind. Für die logischen Operationen ist wichtig, dass die Eingabewerte zuerst in \textit{unsigned short} gecastet werden, welches insbesondere für die NOT-Operation wichtig ist.

NOT \texttt{0x01} wird somit zu NOT \texttt{0x0001} und liefert als Ergebnis somit \texttt{0xFFFE}, nicht, wie eventuell intuitiv zu erwarten wäre, zu \texttt{0x(00)FE}. Dies mag so ausgedrückt unnötig verkompliziert erscheinen, ist jedoch konsequent mit den arithmetischen Operationen, wo, um ein korrektes Ergebnis zu erzielen, ebenfalls zuerst auf \textit{unsigned short} gecastet werden muss.

\subsection{JUnit-Test}
Da die JavaCard-Umgebung für JUnit-Tests ungeeignet ist\footnote{dies ist vermutlich mit mangelnder Nachfrage unter der Entwickler-Community zu begründen, es existiert auch reltiv wenig Online-Dokumentation zu dem Thema.}, ergeben sich folgende zwei Möglichkeiten der Umsetzung:

Einerseits lässt sich das Testen realisieren, indem zwei Projekte erstellt werden: Ein JavaCard-Projekt mit Applet, und ein zweites (reguläres J2SE-)Projekt, welches mittels Maven-Plugin die Java-Datei des Applets einbindet und dann mittels JUnit testet.

Da jedoch die Vorgabe die Verwendung von JCardSim nahelegt, haben wir uns dazu entschlossen, das Projekt als reguläres J2SE-Projekt aufzusetzen, da JCardSim dies sowieso erfodert. Darin wird dann JCardSim in der JUnit-Umgebung angestartet und verwendet die Applet-Klasse als \enquote{System under Test}.

\section{Inbetriebnahme}

Da das Projekt als Maven-Projekt realisiert wurde, reicht der Aufruf \texttt{mvn}, um das Projekt zu kompillieren. Maven führt daraufhin auch die Unit-Tests aus.

\section{Resultat}
Das Endergebnis ist ein JavaCard-Applet, welches per APDU Rechen- und Logikbefehle entgegennehmen kann und das Ergebnis im Response-APDU zurückliefert.

\end{document}
<commit_msg>fixed typo<commit_after>\documentclass[paper=a4, fontsize=11pt]{scrartcl}
\usepackage[svgnames]{xcolor}
\usepackage[a4paper,pdftex]{geometry}

\usepackage[german]{babel}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}

\usepackage{fullpage}
\usepackage{fancyhdr}
\pagestyle{fancy}
	\fancyhead[L]{INSO - Industrial Software\\ \small{Institut für Rechnergestützte Automation | Fakultät für Informatik | Technische Universität Wien}}
	\fancyhead[C]{}
	\fancyhead[R]{}
	\fancyfoot[L]{JavaCard-Calculator}
	\fancyfoot[C]{}
	\fancyfoot[R]{Seite \thepage}
	\renewcommand{\headrulewidth}{1pt}
	\renewcommand{\footrulewidth}{1pt}
\setlength{\headheight}{0.5cm}
\setlength{\headsep}{0.75cm}

\usepackage{hyperref}
	\hypersetup{
		colorlinks,
		citecolor=black,
		filecolor=black,
		linkcolor=black,
		urlcolor=black
	}

\usepackage{pdfpages}

\usepackage[babel,german=quotes]{csquotes}

% ------------------------------------------------------------------------------
% Title Setup
% ------------------------------------------------------------------------------
\newcommand{\HRule}[1]{\rule{\linewidth}{#1}} % Horizontal rule

\makeatletter               % Title
\def\printtitle{%
	{\centering \@title\par}}
\makeatother

\makeatletter               % Author
\def\printauthor{%
	{\centering \normalsize \@author}}
\makeatother


\title{	\normalsize Erstellung eines JavaCard-Calculator-Aplets% Subtitle of the document
	\\[2.0cm] \HRule{0.5pt} \\
	\LARGE \textbf{\uppercase{Dokumentation Übung 2}} % Title
	\HRule{2pt} \\[1.5cm]
	\normalsize Wien am \today \\
	\normalsize Technische Universität Wien \\[1.0cm]
	\normalsize ausgeführt im Rahmen der Lehrveranstaltung \\
	\LARGE 183.286 – (Mobile) Network Service Applications
}


\author{
	Gruppe 7 \\[2.0cm]
	<NAME> \\
	0925915 \\
	E 033 534 \\
	Software and Information Engineering \\[2.0cm]
	<NAME> \\
	0925853 \\
	E 066 937 \\
	Software Engineering and Internet Computing \\[2.0cm]
}

\begin{document}
% ------------------------------------------------------------------------------
% Title Page
% ------------------------------------------------------------------------------
\thispagestyle{empty} % Remove page numbering on this page
\printtitle
	\vfill
\printauthor

% ------------------------------------------------------------------------------
% Table of Contents
% ------------------------------------------------------------------------------
\newpage
\tableofcontents

% ------------------------------------------------------------------------------
% Document
% ------------------------------------------------------------------------------
\newpage
\section{Kurzfassung}
Dieses Dokument stellt den Abschlussbericht der zweiten Übung der LVA \enquote{(Mobile) Network Service Applications} dar. Konkret handelt es sich um den Abgabebericht der Gruppe 7 (Falb und Borkowski).

Die Übung bestand in der Entwicklung eines Rechners auf Basis der JavaCard-Plattform, sowie das Erstellen von JUnit-Tests für dieses JavaCard-Applet.


\section{Einleitung}
Die Vorgabe der Lehrveranstaltungsleitung war das Entwickeln eines JavaCard-Applets, welches einfache Rechenoperationen durchführt.

\section{Problemstellung / Zielsetzung}
\subsection{Rechner-Applet}
Das Applet soll einfache Rechenoperationen (Addieren, Subtrahieren, Multiplizieren) und einfache logische Operationen (AND, OR, NOT) sowie deren Operanden (als Teil der APDU) entgegennehmen, das Resultat berechnen und daraufhin als Response-APDU zurückschicken. Für Fehlerfälle sollen geeignete Fehlercodes zurückgegeben werden.

\subsection{JUnit-Tests}
Das Applet soll mittels JUnit-Tests auf Korrektheit überprüft werden. Hierbei ist sicherzustellen, mögliche Ausnahme- und Randfälle abzudecken. Da auf der JavaCard-Plattform kein JUnit verfügbar ist, soll JCardSim als Ausführungsframework verwendet werden.

\subsection{Kodierung}
Die LVA-Leitung hat die Kodierung der Werte und den Umgang mit negativen Zahlen uns selbst überlassen\footnote{siehe auch \url{https://tuwel.tuwien.ac.at/mod/forum/discuss.php?d=46761\#p138561}}, weswegen wir uns auf eine Konvention festgesetzt haben, welche nachfolgend erklärt wird.


\section{Methodisches Vorgehen}
\subsection{JavaCard-Applet}
Das JavaCard-Applet wurde, wie in der zur Verfügung gestellten Anleitung, mittels NetBeans erstellt. NetBeans unterstützt hierbei als IDE stark das Erstellen und die Entwicklung von Applets, indem Schritte wie die Einrichtung der Umgebung, des Emulators, das Aussuchen einer AID usw. für den Entwickler (semi-)automatisch ausgeführt werden.
Nach dem Setup des Applets wurde das Beispiel-Applet der LVA-Leitung übernommen und einige Test-APDUs mithilfe der NetBeans-Konsole ausgeführt. Nach einigem Herantasten an die Vorgehensweise wurden die erwarteten Response-APDUs erhalten und das Applet wurde gemäß der vorgegebenen Anleitung mit den erforderten Rechenoperationen implementiert.

\subsection{Kodierung}
Die Eingabe- und Ausgabewerte sind alle \textit{signed} zu verstehen, für die Eingabe \textit{signed byte}, für die Ausgabe \textit{signed short}. Das heißt, dass für die Eingabeparameter Werte von \textit{-128} bis \textit{+127} und für die Ausgabewerte Werte von \textit{-32768} bis \textit{+32767} zugelassen sind. Für die logischen Operationen ist wichtig, dass die Eingabewerte zuerst in \textit{unsigned short} gecastet werden, welches insbesondere für die NOT-Operation wichtig ist.

NOT \texttt{0x01} wird somit zu NOT \texttt{0x0001} und liefert als Ergebnis somit \texttt{0xFFFE}, nicht, wie eventuell intuitiv zu erwarten wäre, zu \texttt{0x(00)FE}. Dies mag so ausgedrückt unnötig verkompliziert erscheinen, ist jedoch konsequent mit den arithmetischen Operationen, wo, um ein korrektes Ergebnis zu erzielen, ebenfalls zuerst auf \textit{unsigned short} gecastet werden muss.

\subsection{JUnit-Test}
Da die JavaCard-Umgebung für JUnit-Tests ungeeignet ist\footnote{dies ist vermutlich mit mangelnder Nachfrage unter der Entwickler-Community zu begründen, es existiert auch relativ wenig Online-Dokumentation zu dem Thema.}, ergeben sich folgende zwei Möglichkeiten der Umsetzung:

Einerseits lässt sich das Testen realisieren, indem zwei Projekte erstellt werden: Ein JavaCard-Projekt mit Applet, und ein zweites (reguläres J2SE-)Projekt, welches mittels Maven-Plugin die Java-Datei des Applets einbindet und dann mittels JUnit testet.

Da jedoch die Vorgabe die Verwendung von JCardSim nahelegt, haben wir uns dazu entschlossen, das Projekt als reguläres J2SE-Projekt aufzusetzen, da JCardSim dies sowieso erfodert. Darin wird dann JCardSim in der JUnit-Umgebung angestartet und verwendet die Applet-Klasse als \enquote{System under Test}.

\section{Inbetriebnahme}

Da das Projekt als Maven-Projekt realisiert wurde, reicht der Aufruf \texttt{mvn}, um das Projekt zu kompillieren. Maven führt daraufhin auch die Unit-Tests aus.

\section{Resultat}
Das Endergebnis ist ein JavaCard-Applet, welches per APDU Rechen- und Logikbefehle entgegennehmen kann und das Ergebnis im Response-APDU zurückliefert.

\end{document}

{'fraction_non_alphanumeric': 0.16364409181071124, 'fraction_numerical': 0.015018418815528478, 'mean_word_length': 3.246991576413959, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7166546', 'n_tokens_mistral': 4553, 'n_tokens_neox': 4534, 'n_words': 1345}