Compare commits

..

10 Commits

Author SHA1 Message Date
Mujdrica
11a37dd86e remove unnecessary gitkeep files 2025-09-02 16:17:35 +02:00
Mujdrica
f17df3eaf8 update docs 2025-09-02 16:13:55 +02:00
Mujdrica
0e93df5ca8 rename expose 2025-09-02 14:21:54 +02:00
Mujdrica
db6bc3620a move expose to final folder 2025-09-02 14:16:09 +02:00
Mujdrica
d1fb52f321 finalize expose 2025-09-02 14:12:06 +02:00
Mujdrica
0d4a48b942 rewrite help command 2025-09-02 13:13:19 +02:00
Mujdrica
e700beb2f8 implement help command 2025-09-02 12:02:41 +02:00
Mujdrica
3ae107edf3 add expose 2025-09-02 11:57:39 +02:00
Mujdrica
4007c8d530 add latex files 2025-09-01 15:28:16 +02:00
Mujdrica
bda9c44668 add make commands to build latex 2025-09-01 15:27:11 +02:00
32 changed files with 1214 additions and 1 deletions

42
Makefile Normal file
View File

@@ -0,0 +1,42 @@
.PHONY: help build-thesis build-expose clean clean-paper
.DEFAULT_GOAL := help
# Variables
LATEX_DIR = paper
LATEX_CONTAINER = texlive/texlive:TL2024-historic
THESIS_SRC = dokumentation.tex
EXPOSE_SRC = expose.tex
# Colors
GREEN := \033[1;32m
WHITE := \033[0;37m
RESET := \033[0m
help: ## Show this help message
@echo "Available commands:"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) \
| awk 'BEGIN {FS = ":.*?## "}; {printf " $(GREEN)make %-12s$(RESET) $(WHITE)%s$(RESET)\n", $$1, $$2}' \
| sort
clean: clean-paper ## Remove all auxiliary files (calls clean-paper)
clean-paper: ## Remove LaTeX auxiliary files from the 'paper' directory
@rm -f $(LATEX_DIR)/*.aux \
$(LATEX_DIR)/*.log \
$(LATEX_DIR)/*.out \
$(LATEX_DIR)/*.toc \
$(LATEX_DIR)/*.bbl \
$(LATEX_DIR)/*.blg \
$(LATEX_DIR)/*.fls \
$(LATEX_DIR)/*.fdb_latexmk \
$(LATEX_DIR)/*.bcf \
$(LATEX_DIR)/*.run.xml
build-thesis: clean-paper ## Build the main thesis PDF (dokumentation.tex) using Docker and latexmk
@docker run --rm -v $(PWD)/$(LATEX_DIR):/data -w /data $(LATEX_CONTAINER) \
latexmk -pdf $(THESIS_SRC)
build-expose: clean-paper ## Build the expose PDF (expose.tex) using Docker and latexmk
@docker run --rm -v $(PWD)/$(LATEX_DIR):/data -w /data $(LATEX_CONTAINER) \
latexmk -pdf $(EXPOSE_SRC)

View File

@@ -1 +1,36 @@
# studienarbeit-transpiler
# COBOL-to-Java Interactive Transpiler (Study Project)
This repository is part of an academic study project.
Its primary goal is to design and implement an **interactive transpiler** that translates COBOL code into Java, while allowing user-guided customization and integration of modern design patterns.
## Requirements
Before using the provided commands, ensure you have the following installed on your system:
- [Docker](https://docs.docker.com/get-docker/)
Used to build LaTeX documents inside a containerized environment.
- [Make](https://www.gnu.org/software/make/)
Used to execute the predefined commands in the `Makefile`.
## Usage
The repository includes a `Makefile` with predefined commands.
To list all available commands, run:
```
make help
```
To build the pdf documents (thesis or exposé) from latex, run:
```
make build-thesis
make build-expose
```
## Project Structure
<pre>
.
├── paper/ LaTeX sources for thesis and exposé
├── implementation/ Source code of the interactive COBOL-to-Java transpiler
└── final/ Finalized documents for submission (thesis, exposé, reports)
</pre>

View File

BIN
final/Exposé.pdf Normal file

Binary file not shown.

View File

19
paper/ads/abstract.tex Normal file
View File

@@ -0,0 +1,19 @@
%!TEX root = ../dokumentation.tex
\pagestyle{empty}
\iflang{de}{%
% Dieser englische Teil wird nur angezeigt, wenn die Sprache auf Englisch eingestellt ist.
\renewcommand{\abstractname}{\langabstract} % Text für Überschrift
\begin{abstract}
%\textbf{[1]Motivation}:
%\textbf{[2]Problem statement}:
%\textbf{[3]Approach}:
%\textbf{[5]Conclusions}:
\end{abstract}
}

16
paper/ads/acronyms.tex Normal file
View File

@@ -0,0 +1,16 @@
%!TEX root = ../dokumentation.tex
\addchap{\langabkverz}
%nur verwendete Akronyme werden letztlich im Abkürzungsverzeichnis des Dokuments angezeigt
%Verwendung:
% \ac{Abk.} --> fügt die Abkürzung ein, beim ersten Aufruf wird zusätzlich automatisch die ausgeschriebene Version davor eingefügt bzw. in einer Fußnote (hierfür muss in header.tex \usepackage[printonlyused,footnote]{acronym} stehen) dargestellt
% \acs{Abk.} --> fügt die Abkürzung ein
% \acf{Abk.} --> fügt die Abkürzung UND die Erklärung ein
% \acl{Abk.} --> fügt nur die Erklärung ein
% \acp{Abk.} --> gibt Plural aus (angefügtes 's'); das zusätzliche 'p' funktioniert auch bei obigen Befehlen
% siehe auch: http://golatex.de/wiki/%5Cacronym
%
\begin{acronym}[YTMMM] %YTMMM
%\setlength{\itemsep}{-\parsep}
\acro{abk.}{Abkürzung}
\end{acronym}

4
paper/ads/appendix.tex Normal file
View File

@@ -0,0 +1,4 @@
% !TeX root = ../dokumentation.tex
\setcounter{chapter}{1}
\renewcommand\thechapter{\Alph{chapter}}
\addchap{\langanhang}

34
paper/ads/deckblatt.tex Normal file
View File

@@ -0,0 +1,34 @@
%!TEX root = ../dokumentation.tex
\begin{titlepage}
\begin{longtable}{p{8.2cm} p{5.4cm}}
%{\raisebox{\ht\strutbox-\totalheight}{\includegraphics[height=2.5cm]{images/hpe_logo.png}}} &
{\raisebox{\ht\strutbox-\totalheight}{\includegraphics[height=2.5cm]{images/dhbw.png}}}
\end{longtable}
\enlargethispage{20mm}
\begin{center}
\vspace*{12mm} {\LARGE\textbf \titel }\\
\vspace*{12mm} {\large\textbf \arbeit}\\
\vspace*{12mm} \langdeckblattabschlusshinleitung\\
\vspace*{3mm} {\textbf \abschluss}\\
\vspace*{12mm} \langartikelstudiengang{} \langstudiengang{} \studiengang\\
\vspace*{3mm} \langanderdh{}\\
\vspace*{12mm} \langvon\\
\vspace*{3mm} {\large\textbf \autor}\\
\vspace*{12mm} \datumAbgabe\\
\vspace*{12mm}
\end{center}
\vfill
\begin{spacing}{1.2}
\begin{tabbing}
mmmmmmmmmmmmmmmmmmmmmmmmmm \= \kill
\textbf{\langdbbearbeitungszeit} \> \zeitraum\\
\textbf{\langdbmatriknr} \> \martrikelnr\\
%\textbf{\langdbfirma} \> \firma, \firmenort\\
\textbf{\langdbbetreuer} \> \betreuer\\
\textbf{\langdbgutachter} \> \gutachter\\
%\textbf{\langdbzweitgutachter} \> \zweitgutachter
\end{tabbing}
\end{spacing}
\end{titlepage}

View File

@@ -0,0 +1,23 @@
\einstellung{martrikelnr}
\einstellung{titel}
\einstellung{kurs}
\einstellung{datumAbgabe}
\einstellung{firma}
\einstellung{firmenort}
\einstellung{abgabeort}
\einstellung{abschluss}
\einstellung{studiengang}
\einstellung{dhbw}
\einstellung{betreuer}
\einstellung{gutachter}
\einstellung{zweitgutachter}
\einstellung{zeitraum}
\einstellung{arbeit}
\einstellung{autor}
\einstellung{sprache}
\einstellung{schriftart}
\einstellung{seitenrand}
\einstellung{kapitelabstand}
\einstellung{spaltenabstand}
\einstellung{zeilenabstand}
\einstellung{zitierstil}

50
paper/ads/erklaerung.tex Normal file
View File

@@ -0,0 +1,50 @@
%!TEX root = ../dokumentation.tex
\thispagestyle{empty}
\section*{\langerklaerung}
% http://www.se.dhbw-mannheim.de/fileadmin/ms/wi/dl_swm/dhbw-ma-wi-organisation-bewertung-bachelorarbeit-v2-00.pdf
\vspace*{2em}
\iflang{de}{%
Ich versichere hiermit, dass ich meine {\arbeit} mit dem Thema: {\itshape \titel } selbstständig verfasst und keine anderen als die angegebenen Quellen und Hilfsmittel benutzt habe. Ich versichere zudem, dass die eingereichte elektronische Fassung mit der gedruckten Fassung übereinstimmt.
% https://www.dhbw-karlsruhe.de/fileadmin/user_upload/dokumente/T-Informatik/Prüfungsordnung-Technik-2015-09-29.pdf (S. 19)
% Ich erkläre hiermit ehrenwörtlich: \\
% \begin{enumerate}
% \item dass ich meine {\arbeit} mit dem Thema
% {\itshape \titel } ohne fremde Hilfe angefertigt habe;
% \item dass ich die Übernahme wörtlicher Zitate aus der Literatur sowie die Verwendung der Gedanken
% anderer Autoren an den entsprechenden Stellen innerhalb der Arbeit gekennzeichnet habe;
% \item dass ich meine {\arbeit} bei keiner anderen Prüfung vorgelegt habe;
% \item dass die eingereichte elektronische Fassung exakt mit der eingereichten schriftlichen Fassung
% übereinstimmt.
% \end{enumerate}
%
% Ich bin mir bewusst, dass eine falsche Erklärung rechtliche Folgen haben wird.
% % http://www.ib.dhbw-mannheim.de/fileadmin/ms/bwl-ib/Downloads_alt/Leitfaden_31.05.pdf (S. 52)
}
\iflang{en}{%
Hereby I solemnly declare:
\begin{enumerate}
\item that this {\arbeit}, titled {\itshape \titel } is entirely the product of my own scholarly work, unless otherwise indicated in the text or references, or acknowledged below;
\item I have indicated the thoughts adopted directly or indirectly from other sources at the appropriate places within the document;
\item this {\arbeit} has not been submitted either in whole or part, for a degree at this or any other university or institution;
\item I have not published this {\arbeit} in the past;
\item the printed version is equivalent to the submitted electronic one.
\end{enumerate}
I am aware that a dishonest declaration will entail legal consequences.
}
\vspace{3em}
\abgabeort, \datumAbgabe
\vspace{4em}
\rule{6cm}{0.4pt}\\
\autor

13
paper/ads/glossary.tex Normal file
View File

@@ -0,0 +1,13 @@
%!TEX root = ../dokumentation.tex
%
% vorher in Konsole folgendes aufrufen:
% makeglossaries makeglossaries dokumentation.acn && makeglossaries dokumentation.glo
%
%
% Glossareintraege --> referenz, name, beschreibung
% Aufruf mit \gls{...}
%
%\newglossaryentry{SVM}{name={Support Vector Machine}, description={\acf{SVM}} ist ein Modell.}

190
paper/ads/header.tex Normal file
View File

@@ -0,0 +1,190 @@
%!TEX root = ../dokumentation.tex
%
% Nahezu alle Einstellungen koennen hier getaetigt werden
%
\RequirePackage[l2tabu, orthodox]{nag} % weist in Commandozeile bzw. log auf veraltete LaTeX Syntax hin
\documentclass[%
pdftex,
oneside, % Einseitiger Druck.
12pt, % Schriftgroesse
parskip=half, % Halbe Zeile Abstand zwischen Absätzen.
% topmargin = 10pt, % Abstand Seitenrand (Std:1in) zu Kopfzeile [laut log: unused]
headheight = 12pt, % Höhe der Kopfzeile
% headsep = 30pt, % Abstand zwischen Kopfzeile und Text Body [laut log: unused]
headsepline, % Linie nach Kopfzeile.
footsepline, % Linie vor Fusszeile.
footheight = 16pt, % Höhe der Fusszeile
abstracton, % Abstract Überschriften
DIV=calc, % Satzspiegel berechnen
BCOR=8mm, % Bindekorrektur links: 8mm
headinclude=false, % Kopfzeile nicht in den Satzspiegel einbeziehen
footinclude=false, % Fußzeile nicht in den Satzspiegel einbeziehen
listof=totoc, % Abbildungs-/ Tabellenverzeichnis im Inhaltsverzeichnis darstellen
toc=bibliography, % Literaturverzeichnis im Inhaltsverzeichnis darstellen
]{scrreprt} % Koma-Script report-Klasse, fuer laengere Bachelorarbeiten alternativ auch: scrbook
% Einstellungen laden
\usepackage{xstring}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\newcommand{\einstellung}[1]{%
\expandafter\newcommand\csname #1\endcsname{}
\expandafter\newcommand\csname setze#1\endcsname[1]{\expandafter\renewcommand\csname#1\endcsname{##1}}
}
\newcommand{\langstr}[1]{\einstellung{lang#1}}
\input{ads/einstellungen_liste} % verfügbare Einstellungen
\input{einstellungen} % lese Einstellungen
\input{lang/strings} % verfügbare Strings
\input{lang/\sprache} % Übersetzung einlesen
% Einstellung der Sprache des Paketes Babel und der Verzeichnisüberschriften
\iflang{de}{\usepackage[english, ngerman]{babel}}
\iflang{en}{\usepackage[ngerman, american]{babel}}
%%%%%%% Package Includes %%%%%%%
\usepackage[margin=\seitenrand,foot=1cm]{geometry} % Seitenränder und Abstände
\usepackage[activate]{microtype} %Zeilenumbruch und mehr
\usepackage[onehalfspacing]{setspace}
\usepackage{makeidx}
\usepackage[autostyle=true,german=quotes]{csquotes}
\usepackage{longtable}
\usepackage{enumitem} % mehr Optionen bei Aufzählungen
\usepackage{graphicx}
\usepackage{pdfpages} % zum Einbinden von PDFs
\usepackage{xcolor} % für HTML-Notation
\usepackage{float}
\usepackage{array}
\usepackage{calc} % zum Rechnen (Bildtabelle in Deckblatt)
\usepackage[right]{eurosym}
\usepackage{wrapfig}
\usepackage{pgffor} % für automatische Kapiteldateieinbindung
\usepackage[perpage, hang, multiple, stable]{footmisc} % Fussnoten
\usepackage[printonlyused]{acronym} % falls gewünscht kann die Option footnote eingefügt werden, dann wird die Erklärung nicht inline sondern in einer Fußnote dargestellt
\usepackage{listings}
\usepackage{tabu}
\usepackage{tabu}
\usepackage{lscape}
\usepackage{listings}
\usepackage{rotating}
\usepackage{colortbl}
\definecolor{lightgray}{gray}{0.6}
\definecolor{red}{HTML}{FD2C2C}
\definecolor{yellow}{HTML}{F0F01B}
\definecolor{green}{HTML}{1BF04D}
\usepackage{amssymb}% http://ctan.org/pkg/amssymb
\usepackage{pifont}% http://ctan.org/pkg/pifont
\newcommand{\cmark}{\ding{51}}%
\newcommand{\xmark}{\ding{55}}%
% Notizen. Einsatz mit \todo{Notiz} oder \todo[inline]{Notiz}.
\usepackage[obeyFinal,backgroundcolor=yellow,linecolor=black]{todonotes}
% Alle Notizen ausblenden mit der Option "final" in \documentclass[...] oder durch das auskommentieren folgender Zeile
% \usepackage[disable]{todonotes}
% Kommentarumgebung. Einsatz mit \comment{}. Alle Kommentare ausblenden mit dem Auskommentieren der folgenden und dem aktivieren der nächsten Zeile.
\newcommand{\comment}[1]{\par {\bfseries \color{blue} #1 \par}} %Kommentar anzeigen
% \newcommand{\comment}[1]{} %Kommentar ausblenden
%%%%%% Configuration %%%%%
%% Anwenden der Einstellungen
\usepackage[scaled=.95]{\schriftart}
\renewcommand\familydefault{\sfdefault}
\ladefarben{}
% Titel, Autor und Datum
\title{\titel}
\author{\autor}
\date{\datum}
% PDF Einstellungen
\usepackage[%
pdftitle={\titel},
pdfauthor={\autor},
pdfsubject={\arbeit},
pdfcreator={pdflatex, LaTeX with KOMA-Script},
pdfpagemode=UseOutlines, % Beim Oeffnen Inhaltsverzeichnis anzeigen
pdfdisplaydoctitle=true, % Dokumenttitel statt Dateiname anzeigen.
pdflang={\sprache}, % Sprache des Dokuments.
]{hyperref}
% (Farb-)einstellungen für die Links im PDF
\hypersetup{%
colorlinks=true, % Aktivieren von farbigen Links im Dokument
linkcolor=LinkColor, % Farbe festlegen
citecolor=LinkColor,
filecolor=LinkColor,
menucolor=LinkColor,
urlcolor=LinkColor,
linktocpage=true, % Nicht der Text sondern die Seitenzahlen in Verzeichnissen klickbar
bookmarksnumbered=true % Überschriftsnummerierung im PDF Inhalt anzeigen.
}
% Workaround um Fehler in Hyperref, muss hier stehen bleiben
\usepackage{bookmark} %nur ein latex-Durchlauf für die Aktualisierung von Verzeichnissen nötig
% Schriftart in Captions etwas kleiner
\addtokomafont{caption}{\small}
% Literaturverweise (sowohl deutsch als auch englisch)
\iflang{de}{%
\usepackage[
backend=biber, % empfohlen. Falls biber Probleme macht: bibtex
bibwarn=true,
bibencoding=utf8, % wenn .bib in utf8, sonst ascii
sortlocale=de_DE,
style=\zitierstil,
]{biblatex}
}
\iflang{en}{%
\usepackage[backend=biber]{biblatex}
\DeclareLanguageMapping{american}{american-apa}
%\usepackage[
% backend=biber, % empfohlen. Falls biber Probleme macht: bibtex
% bibwarn=true,
% bibencoding=utf8, % wenn .bib in utf8, sonst ascii
% sortlocale=en_US,
% style=\zitierstil,
%]{biblatex}
}
\ladeliteratur{}
% Glossar
\usepackage[nonumberlist,toc]{glossaries}
%%%%%% Additional settings %%%%%%
% Hurenkinder und Schusterjungen verhindern
% http://projekte.dante.de/DanteFAQ/Silbentrennung
\clubpenalty = 10000 % schließt Schusterjungen aus (Seitenumbruch nach der ersten Zeile eines neuen Absatzes)
\widowpenalty = 10000 % schließt Hurenkinder aus (die letzte Zeile eines Absatzes steht auf einer neuen Seite)
\displaywidowpenalty=10000
% Bildpfad
\graphicspath{{images/}}
% Einige häufig verwendete Sprachen
\lstloadlanguages{PHP,Python,Java,C,C++,bash}
\listingsettings{}
% Umbennung des Listings
\renewcommand\lstlistingname{\langlistingname}
\renewcommand\lstlistlistingname{\langlistlistingname}
\def\lstlistingautorefname{\langlistingautorefname}
% Abstände in Tabellen
\setlength{\tabcolsep}{\spaltenabstand}
\renewcommand{\arraystretch}{\zeilenabstand}
\usepackage{subcaption}
\usepackage{cleveref}
\usepackage{pdfcomment}

View File

@@ -0,0 +1,39 @@
%!TEX root = ../dokumentation.tex
\thispagestyle{empty}
% Sperrvermerk direkt hinter Titelseite
\section*{\langsperrvermerk}
\vspace*{2em}
\iflang{de}{%
Die vorliegende {\arbeit} mit dem Titel {\itshape{} \titel{}\/} enthält unternehmensinterne bzw. vertrauliche Informationen der {\firma}, ist deshalb mit einem Sperrvermerk versehen und wird ausschließlich zu Prüfungszwecken am Studiengang {\studiengang} der Dualen Hochschule Baden-Württemberg {\dhbw} vorgelegt. Sie ist ausschließlich zur Einsicht durch den zugeteilten Gutachter, die Leitung des Studiengangs und ggf. den Prüfungsausschuss des Studiengangs bestimmt. Es ist untersagt,
\begin{itemize}
\item den Inhalt dieser Arbeit (einschließlich Daten, Abbildungen, Tabellen, Zeichnungen usw.) als Ganzes oder auszugsweise weiterzugeben,
\item Kopien oder Abschriften dieser Arbeit (einschließlich Daten, Abbildungen, Tabellen, Zeichnungen usw.) als Ganzes oder in Auszügen anzufertigen,
\item diese Arbeit zu veröffentlichen bzw. digital, elektronisch oder virtuell zur Verfügung zu stellen.
\end{itemize}
Jede anderweitige Einsichtnahme und Veröffentlichung auch von Teilen der Arbeit bedarf der vorherigen Zustimmung durch den Verfasser und {\firma}.
}
%http://www.ib.dhbw-mannheim.de/fileadmin/ms/bwl-ib/Downloads_alt/Leitfaden_31.05.pdf
\iflang{en}{%
The {\arbeit} on hand
\begin{center}{\itshape{} \titel{}\/}\end{center}
contains internal resp.\ confidential data of {\firma}. It is intended solely for inspection by the assigned examiner, the head of the {\studiengang} department and, if necessary, the Audit Committee \langanderdh{} {\dhbw}. It is strictly forbidden
\begin{itemize}
\item to distribute the content of this paper (including data, figures, tables, charts etc.) as a whole or in extracts,
\item to make copies or transcripts of this paper or of parts of it,
\item to display this paper or make it available in digital, electronic or virtual form.
\end{itemize}
Exceptional cases may be considered through permission granted in written form by the author and {\firma}.
}
\vspace{3em}
\abgabeort, \datumAbgabe
\vspace{4em}
\rule{6cm}{0.4pt}\\
\autor

176
paper/bib_expose.bib Normal file
View File

@@ -0,0 +1,176 @@
@incollection{escalona_open_2019,
address = {Cham},
title = {An {Open} {Source} {Approach} for {Modernizing} {Message}-{Processing} and {Transactional} {COBOL} {Applications} by {Integration} in {Java} {EE} {Application} {Servers}},
volume = {372},
isbn = {978-3-030-35329-2 978-3-030-35330-8},
url = {http://link.springer.com/10.1007/978-3-030-35330-8_12},
language = {en},
urldate = {2025-09-02},
booktitle = {Web {Information} {Systems} and {Technologies}},
publisher = {Springer International Publishing},
author = {Brune, Philipp},
editor = {Escalona, María José and Domínguez Mayo, Francisco and Majchrzak, Tim A. and Monfort, Valérie},
year = {2019},
doi = {10.1007/978-3-030-35330-8_12},
note = {Series Title: Lecture Notes in Business Information Processing},
pages = {244--261},
}
@book{wendt_cobol_1991,
address = {Wiesbaden},
title = {{COBOL}},
copyright = {http://www.springer.com/tdm},
isbn = {978-3-409-19726-7 978-3-322-87615-7},
url = {http://link.springer.com/10.1007/978-3-322-87615-7},
language = {de},
urldate = {2025-09-02},
publisher = {Gabler Verlag},
author = {Wendt, Joachim},
year = {1991},
doi = {10.1007/978-3-322-87615-7},
keywords = {Algorithmen, Betriebswirtschaft, COBOL, Compiler, Datenverarbeitung, Debugging, Funktionen, Graphen, Maschinensprache, Programmentwicklung, Programmiersprache, Programmierung, Selektion, Suche, Windows},
file = {Full Text PDF:C\:\\Users\\mujdrica\\Zotero\\storage\\NLKVU7AV\\Wendt - 1991 - COBOL.pdf:application/pdf},
}
@book{coughlan_beginning_2014,
address = {Berkeley, CA},
title = {Beginning {COBOL} for {Programmers}},
copyright = {http://www.springer.com/tdm},
isbn = {978-1-4302-6253-4 978-1-4302-6254-1},
url = {http://link.springer.com/10.1007/978-1-4302-6254-1},
language = {en},
urldate = {2025-09-02},
publisher = {Apress},
author = {Coughlan, Michael},
year = {2014},
doi = {10.1007/978-1-4302-6254-1},
file = {Full Text PDF:C\:\\Users\\mujdrica\\Zotero\\storage\\9J98MS66\\Coughlan - 2014 - Beginning COBOL for Programmers.pdf:application/pdf},
}
@article{lano_agile_2024,
title = {Agile model-driven re-engineering},
volume = {20},
issn = {1614-5046, 1614-5054},
url = {https://link.springer.com/10.1007/s11334-024-00568-z},
doi = {10.1007/s11334-024-00568-z},
abstract = {Abstract
In this paper we describe an Agile model-driven engineering (MDE) approach, AMDRE, for the re-engineering of legacy systems. The objective is to support the reuse of business-critical functionality from such systems and the porting of legacy code to modernised platforms, together with technical debt reduction to improve the system maintainability and extend its useful life. AMDRE uses a lightweight MDE process which involves the automated abstraction of software systems to UML specifications and the interactive application of refactoring and rearchitecting transformations to remove quality flaws and architectural flaws. We demonstrate the approach on Visual Basic, COBOL and Python legacy codes, including a finance industry case. Significant quality improvements are achieved, and translation accuracy over 80\% is demonstrated. In comparison to other MDE re-engineering approaches, AMDRE does not require high MDE skills and should be usable by mainstream software practitioners.},
language = {en},
number = {4},
urldate = {2025-09-02},
journal = {Innovations in Systems and Software Engineering},
author = {Lano, Kevin and Haughton, Howard and Yuan, Ziwen and Alfraihi, Hessa},
month = dec,
year = {2024},
pages = {559--584},
file = {Full Text:C\:\\Users\\mujdrica\\Zotero\\storage\\I9X9GXIA\\Lano et al. - 2024 - Agile model-driven re-engineering.pdf:application/pdf},
}
@article{petrulio_indolent_2021,
title = {The indolent lambdification of {Java}: {Understanding} the support for lambda expressions in the {Java} ecosystem},
volume = {26},
issn = {1382-3256, 1573-7616},
shorttitle = {The indolent lambdification of {Java}},
url = {https://link.springer.com/10.1007/s10664-021-10039-9},
doi = {10.1007/s10664-021-10039-9},
abstract = {Abstract
As Java 8 introduced functional interfaces and lambda expressions to the Java programming language, the JDK API was changed to introduce support for lambda expressions, thus allowing consumers to define lambda functions when using Javas collections. While the JDK API allows for a functional paradigm, for API consumers to be able to completely embrace Javas new functional features, third-party APIs must also support lambda expressions. To understand the current state of the Java ecosystem, we investigate (i) the extent to which third-party Java APIs have changed their interfaces, (ii) why or why not they introduce functional interface support and (iii) in the case the API has changed its interface how it does so. We also investigate the consumers perspective, particularly their ease in using lambda expressions in Java with APIs. We perform our investigation by manually analyzing the top 50 popular Java APIs, conducting in-person and email interviews with 23 API producers, and surveying 110 developers. We find that only a minority of the top 50 APIs support functional interfaces, the rest does not support them, predominantly in the interest of backward compatibility. Java 7 support is still greatly desirable due to enterprise projects not migrating to newer versions of Java. This suggests that the Java ecosystem is stagnant and that the introduction of new language features will not be enough to save it from the advent of new languages such as Kotlin (JVM based) and Rust (non-JVM based).},
language = {en},
number = {6},
urldate = {2025-09-02},
journal = {Empirical Software Engineering},
author = {Petrulio, Fernando and Sawant, Anand Ashok and Bacchelli, Alberto},
month = nov,
year = {2021},
pages = {134},
file = {Full Text:C\:\\Users\\mujdrica\\Zotero\\storage\\GGRBSV58\\Petrulio et al. - 2021 - The indolent lambdification of Java Understanding the support for lambda expressions in the Java ec.pdf:application/pdf},
}
@inproceedings{hans_automated_2025,
address = {Clarion Hotel Trondheim Trondheim Norway},
title = {Automated {Testing} of {COBOL} to {Java} {Transformation}},
isbn = {979-8-4007-1276-0},
url = {https://dl.acm.org/doi/10.1145/3696630.3728548},
doi = {10.1145/3696630.3728548},
language = {en},
urldate = {2025-09-02},
booktitle = {Proceedings of the 33rd {ACM} {International} {Conference} on the {Foundations} of {Software} {Engineering}},
publisher = {ACM},
author = {Hans, Sandeep and Kumar, Atul and Yasue, Toshiaki and Ono, Kouichi and Krishnan, Saravanan and Sondhi, Devika and Satoh, Fumiko and Mitchell, Gerald and Kumar, Sachin and Saha, Diptikalyan},
month = jun,
year = {2025},
pages = {227--237},
}
@inproceedings{gandhi_translation_2024,
title = {Translation of {Low}-{Resource} {COBOL} to {Logically} {Correct} and {Readable} {Java} leveraging {High}-{Resource} {Java} {Refinement}},
url = {https://ieeexplore.ieee.org/document/10734649},
abstract = {Automated translation of legacy code to modern programming languages is the need of the hour for modernizing enterprise systems. This work specifically addresses automated COBOL to Java translation. Traditional rule-based tools for this perform statement-wise translation, overlooking possible modularization and refactoring of the source COBOL code to translate to human-readable target Java code. Our investigation reveals that state-of-the-art Large Language Models (LLMs) in the domain of code encounter difficulties with regard to logical correctness and readability when directly translating low-resource COBOL code to Java. To address these challenges, we propose an LLM-based workflow, leveraging temperature sampling and refinement-based strategies, to not only ensure logical correctness of the translation but also maximize the readability of the target Java code. We exploit the fact that, due to their extensive exposure to human-written Java codes during pre-training, the LLMs are more equipped with profound comprehension and capability for refining translated Java codes than COBOL to Java translation. With a dataset sourced from CodeNet, we perform sequential refinement of the translated high-resource Java code with execution-guided logic feedback followed by LLM-based readability feedback. We demonstrate that this yields better performance in terms of logical correctness (81.99\% execution accuracy) and readability (0.610 score), than LLM based translation with test cases and readability guidance (60.25\% and 0.539) or refinement of the translation task itself (77.95\% and 0.572).CCS CONCEPTS• Computing methodologies → Machine translation; Neural networks; • Software and its engineering → Software evolution; Maintaining software.},
urldate = {2025-09-02},
booktitle = {2024 {IEEE}/{ACM} {International} {Workshop} on {Large} {Language} {Models} for {Code} ({LLM4Code})},
author = {Gandhi, Shubham and Patwardhan, Manasi and Khatri, Jyotsana and Vig, Lovekesh and Medicherla, Raveendra Kumar},
month = apr,
year = {2024},
keywords = {Accuracy, Code Readability, Code Translation, Codes, Java, Large language models, Large Language Models, Logic, Low Resource Programming Languages, Machine translation, Neural networks, Programming, Refining, Self-Refinement, Software},
pages = {46--53},
file = {Snapshot:C\:\\Users\\mujdrica\\Zotero\\storage\\HJVVTKWX\\10734649.html:text/html},
}
@inproceedings{suganuma_performance_2008,
address = {Nashville TN USA},
title = {Performance pitfalls in large-scale java applications translated from {COBOL}},
isbn = {978-1-60558-220-7},
url = {https://dl.acm.org/doi/10.1145/1449814.1449822},
doi = {10.1145/1449814.1449822},
language = {en},
urldate = {2025-09-02},
booktitle = {Companion to the 23rd {ACM} {SIGPLAN} conference on {Object}-oriented programming systems languages and applications},
publisher = {ACM},
author = {Suganuma, Toshio and Yasue, Toshiaki and Onodera, Tamiya and Nakatani, Toshio},
month = oct,
year = {2008},
pages = {685--696},
}
@misc{ali_x-cobol_2023,
title = {X-{COBOL}: {A} {Dataset} of {COBOL} {Repositories}},
copyright = {Creative Commons Attribution Non Commercial Share Alike 4.0 International},
shorttitle = {X-{COBOL}},
url = {https://arxiv.org/abs/2306.04892},
doi = {10.48550/ARXIV.2306.04892},
abstract = {Despite being proposed as early as 1959, COBOL (Common Business-Oriented Language) still predominantly acts as an integral part of the majority of operations of several financial, banking, and governmental organizations. To support the inevitable modernization and maintenance of legacy systems written in COBOL, it is essential for organizations, researchers, and developers to understand the nature and source code of COBOL programs. However, to the best of our knowledge, we are unaware of any dataset that provides data on COBOL software projects, motivating the need for the dataset. Thus, to aid empirical research on comprehending COBOL in open-source repositories, we constructed a dataset of 84 COBOL repositories mined from GitHub, containing rich metadata on the development cycle of the projects. We envision that researchers can utilize our dataset to study COBOL projects' evolution, code properties and develop tools to support their development. Our dataset also provides 1255 COBOL files present inside the mined repositories. The dataset and artifacts are available at https://doi.org/10.5281/zenodo.7968845.},
urldate = {2025-09-02},
publisher = {arXiv},
author = {Ali, Mir Sameed and Manjunath, Nikhil and Chimalakonda, Sridhar},
year = {2023},
note = {Version Number: 1},
keywords = {D.2.6; D.3, FOS: Computer and information sciences, Programming Languages (cs.PL), Software Engineering (cs.SE)},
annote = {Other
5 pages},
}
@inproceedings{erdmenger_translator_2011,
title = {Ein {Translator} für die {COBOL}-{Java}-{Migration}},
url = {https://dl.gi.de/handle/20.500.12116/40991},
abstract = {In [1] wurden von pro et con bereits erste Ansätze der Migration von COBOL nach Java dargestellt. Nach dem erfolgreichen Abschluss des Projektes SOAMIG1 sollen in diesem Beitrag die Ergebnisse im Bereich der COBOLMigration vorgestellt werden. Neben einem Überblick über das entstandene Werkzeug CoJaC (COBOL to Java Converter) sollen dabei die Migration der Schnittstellen eines COBOL-Programms und eine differenzierte Betrachtung des generierten Java-Codes bezüglich seiner Wartbarkeit und Qualität im Vordergrund stehen.},
language = {de},
urldate = {2025-09-02},
publisher = {Geselllschaft für Informatik e.V.},
author = {Erdmenger, Uwe and Uhlig, Denis},
year = {2011},
file = {Full Text PDF:C\:\\Users\\mujdrica\\Zotero\\storage\\HKNDUGFB\\Erdmenger and Uhlig - 2011 - Ein Translator für die COBOL-Java-Migration.pdf:application/pdf},
}
@book{tsui_essentials_2022,
title = {Essentials of {Software} {Engineering}},
isbn = {978-1-284-22899-1},
abstract = {Written for the undergraduate, 1-term course, Essentials of Software Engineering provides students with a systematic engineering approach to software engineering principles and methodologies. Comprehensive yet concise, the new edition covers some of the latest improvements in technology and tools, while reducing areas that are becoming less relevant. In-depth coverage of key issues, combined with a strong focus on software quality, makes Essentials of Software Engineering the perfect text for students entering the fast-growing and lucrative field of software development. The text includes thorough overviews of programming concepts, system analysis and design, principles of software engineering, development and support processes, methodologies, software testing, quality assurance, and product management, while incorporating real-world examples throughout. Presents a broad coverage of the software engineering field that lends itself well to an introductory course. Clearly differentiates and explains software engineering from the subtopics of software processes, software development, and software management. Expanded coverage of continuous integration and Agile methodologies. New coverage of contemporary design and development ideas, including SOA, microservices, virtualization, and containerization. © 2023 {\textbar} 332 pages},
language = {en},
publisher = {Jones \& Bartlett Learning},
author = {Tsui, Frank and Karam, Orlando and Bernal, Barbara},
month = jan,
year = {2022},
note = {Google-Books-ID: lN9XEAAAQBAJ},
keywords = {Computers / Programming / General, Computers / Security / Network Security, Computers / Software Development \& Engineering / General, Mathematics / General},
}

47
paper/bibliographie.bib Normal file
View File

@@ -0,0 +1,47 @@
@book{example.book,
author = {Mitchell, Tom Michael},
year = {1997},
title = {Machine Learning},
keywords = {Buch;Entscheidungsb{\"a}ume},
address = {New York},
edition = {International ed.},
publisher = {McGraw-Hill},
isbn = {0071154671 },
series = {McGraw-Hill international editions. Computer science series}
}
@article{example.article,
abstract = {The technology for building knowledge-based systems by inductive inference from examples has been demonstrated successfully in several practical applications. This paper summarizes an approach to synthesizing decision trees that has been used in a variety of systems, and it describes one such system, ID3, in detail. Results from recent studies show ways in which the methodology can be modified to deal with information that is noisy and/or incomplete. A reported shortcoming of the basic algorithm is discussed and two means of overcoming it are compared. The paper concludes with illustrations of current research directions.},
author = {Quinlan, J. R.},
year = {1986},
title = {Induction of decision trees},
url = {https://link.springer.com/article/10.1007/BF00116251 },
keywords = {Entscheidungsb{\"a}ume},
pages = {81--106},
volume = {1},
number = {1},
issn = {1573-0565},
journal = {Machine Learning},
doi = {10.1007/BF00116251 },
file = {31146d1f-a5a1-42b8-bf8d-c1994fd774dc:C\:\\Users\\mujdrica\\AppData\\Local\\Swiss Academic Software\\Citavi 6\\ProjectCache\\dzg95emdx4uirv928vw5rt5frpkg46ghw8vr21834ibg6\\Citavi Attachments\\31146d1f-a5a1-42b8-bf8d-c1994fd774dc.pdf:pdf}
}
@inproceedings{example.inproceeding,
abstract = {In this paper, the effect of overfitting displayed by a decision tree classifier model is studied and the method of resampling technique to eliminate the overfitting is implemented in the pre-pruning stage of the algorithm. The classifier is built for fault classification function subjected to a synthetically generated dataset of the benchmark DAMADICS process which represents a pneumatic actuator system. The overfitting problem for both multiclass classification and binary class classification using maximum depth as the optimized hyper parameter is analyzed. The results before and after eradicating the overfit are tabulated. The performance of the model is plotted between hyper parameter chosen and the testing, training accuracy. The best fit tree model is also graphically visualized.},
author = {{P. Mahalingam} and {D. Kalpana} and {T. Thyagarajan}},
title = {Overfit Analysis on Decision Tree Classifier for Fault Classification in DAMADICS},
keywords = {Entscheidungsb{\"a}ume;Paper},
pages = {1--4},
booktitle = {2021 IEEE Madras Section Conference (MASCON)},
year = {2021},
doi = {10.1109/MASCON51689.2021.9563557 }
}
@misc{example.misc,
abstract = {When we discuss prediction models, prediction errors can be decomposed into two main subcomponents we care about: error due to bias and error due to variance. There is a tradeoff between a model's ability to minimize bias and variance. Understanding these two types of error can help us diagnose model results and avoid the mistake of over- or under-fitting.},
year = {01.06.2012},
author = {Scott Fortmann-Roe},
title = {Understanding the Bias-Variance Tradeoff},
url = {https://scott.fortmann-roe.com/docs/BiasVariance.html},
urldate = {13.07.2023}
}

View File

@@ -0,0 +1,7 @@
%!TEX root = ../dokumentation.tex
\chapter{Einleitung} \label{kap:einleitung}
\section{Ziel der wissenschaftlichen Arbeit} \label{kap:einleitung_ziel}
\section{Vorgehensweise}
\label{kap:einleitung_vorgehensweise}
\section{Wirtschaftlicher Wert}
\label{kap:einleitung_wirtschaft}

View File

@@ -0,0 +1,2 @@
\chapter{Ein einf\"uhrendes Beispiel}
\label{kap:beispiel}

View File

@@ -0,0 +1,8 @@
\chapter{Theoretische Grundlagen}
\label{kap:theorie}
\section{COBOL}
\label{kap:theorie_cobol}
\section{Compiler und Transpiler}
\label{kap:theorie_compiler}
\section{State of the Art: heutiger Umgang mit COBOL}
\label{kap:theorie_state_of_the_art}

View File

@@ -0,0 +1,2 @@
\chapter{Methodik}
\label{kap:methodik}

View File

@@ -0,0 +1,2 @@
\chapter{Praktischer Teil}
\label{kap:praxis}

View File

@@ -0,0 +1,12 @@
\chapter{Diskussion}
\label{kap:diskussion}
\section{Zusammenfassung der Ergebnisse}
\label{kap:diskussion_zusammenfassung}
\section{Bewertung der Ergebnisse}
\label{kap:bewertung_ergebnisse}
\section{Bewertung der Durchführung}
\label{kap:diskussion_bewertung_durchfuehrung}
\section{Einordnung in aktuellen Stand der Wissenschaft}
\label{kap:Diskussion_einordnung}
\section{Limitationen der Arbeit}
\label{kap:diskussion_limitation}

View File

@@ -0,0 +1,2 @@
\chapter{Fazit und Ausblick}
\label{kap:fazit}

View File

@@ -0,0 +1,48 @@
%!TEX root = ../dokumentation.tex
\chapter{Beispiel Code-schnipsel einbinden}
%title wird unter dem Bsp. abgedruckt
%caption wird im Verzeichnis abgedruckt
%label wird zum referenzieren benutzt, muss einzigartig sein.
\begin{lstlisting}[caption=Code-Beispiel, label=Bsp.1]
public class HelloWorld {
public static void main (String[] args) {
// Ausgabe Hello World!
System.out.println("Hello World!");
}
}
\end{lstlisting}
%\begin{lstlisting}[caption=HTML-Code, label=HTML-Code, title=Erstellen %eines %Video-Element, language=HTML]
%<video id="videoAnimation1" className="mx-60 hidden" %src="file/videoname.mp4"></video>
%\end{lstlisting}
%language ändert die Sprache. (Wenn nur eine Sprache verwendet wird, kann diese Sprache in einstellungen.tex geändert werden. Standardmäßig Java.)
\begin{lstlisting}[caption=Python-Code, label=Python-Code, title=Titel des Python-Codes,language=Python]
def quicksort(liste):
if len(liste) <= 1:
return liste
pivotelement = liste.pop()
links = [element for element in liste if element < pivotelement]
rechts = [element for element in liste if element >= pivotelement]
return quicksort(links) + [pivotelement] + quicksort(rechts)
# Quelle: http://de.wikipedia.org/wiki/Python_(Programmiersprache)
\end{lstlisting}
\section{lorem ipsum}
Looking for the one superhero comic you just have to read. Following the antics and adventures of May Mayday Parker, this Spider-book has everything you could want in a comic--action, laughs, mystery and someone in a Spidey suit. Collects Alias \#1-28, What If. Jessica Jones had Joined the Avengers. In her inaugural arc, Jessicas life immediately becomes expendable when she uncovers the potentially explosive secret of one heros true identity.
Once upon a time, Jessica Jones was a costumed super-hero, just not a very good one. First, a story where Wolverine and Hulk come together, and then Captain America and Cable meet up. In a city of Marvels, Jessica Jones never found her niche. The classic adventures of Spider-Man from the early days up until the 90s. Looking for the one superhero comic you just have to read.
Meet all of Spideys deadly enemies, from the Green Goblin and Doctor Octopus to Venom and Carnage, plus see Peter Parker fall in love, face tragedy and triumph, and learn that with great power comes great responsibility. In a city of Marvels, Jessica Jones never found her niche. Bitten by a radioactive spider, high school student Peter Parker gained the speed, strength and powers of a spider. Looking for the one superhero comic you just have to read. What do you get when you ask the question, What if Spider-Man had a daughter.
The classic adventures of Spider-Man from the early days up until the 90s. Amazing Spider-Man is the cornerstone of the Marvel Universe. But will each partners combined strength be enough. Adopting the name Spider-Man, Peter hoped to start a career using his new abilities. Youve found it.
\section{Verweis auf Code}
Verweis auf den Code \autoref{Bsp.1}.\\
und der Python-Code \autoref{Python-Code}.
Zweite Erwähnung einer Abkürzung \ac{AGPL} (Erlärung wird nicht mehr angezeigt)

102
paper/dokumentation.tex Normal file
View File

@@ -0,0 +1,102 @@
%%**************************************************************
%% Vorlage fuer Bachelorarbeiten (o.ä.) der DHBW
%%
%% Autor: Tobias Dreher, Yves Fischer
%% Datum: 06.07.2011
%%
%% Autor: Michael Gruben
%% Datum: 15.05.2013
%%
%% Autor: Markus Barthel
%% Datum: 22.08.2014
%%**************************************************************
\input{ads/header}
\makeglossaries
\input{ads/glossary}
\begin{document}
% Deckblatt
\begin{spacing}{1}
\input{ads/deckblatt}
\end{spacing}
\newpage
\pagenumbering{Roman}
% Sperrvermerk
%\input{ads/sperrvermerk}
%\newpage
% Erklärung
\input{ads/erklaerung}
\newpage
% Abstract
\input{ads/abstract}
\newpage
\pagestyle{plain} % nur Seitenzahlen im Fuß
\RedeclareSectionCommand[beforeskip=\kapitelabstand ]{chapter} % stellt Abstand vor Kapitelüberschriften ein
% Inhaltsverzeichnis
\begin{spacing}{1.1}
\begingroup
% auskommentieren für Seitenzahlen unter Inhaltsverzeichnis
\renewcommand*{\chapterpagestyle}{empty}
\pagestyle{empty}
\setcounter{tocdepth}{2}
%für die Anzeige von Unterkapiteln im Inhaltsverzeichnis
%\setcounter{tocdepth}{2}
\tableofcontents
\clearpage
\endgroup
\end{spacing}
\newpage
% Abkürzungsverzeichnis
\cleardoublepage
\input{ads/acronyms}
% Abbildungsverzeichnis
\listoffigures
\newpage
\cleardoublepage
\pagestyle{headings} % Kolumnentitel im Kopf, Seitenzahlen im Fuß
\pagenumbering{arabic}
% Inhalt
\foreach \i in {01,02,03,04,05,06,07,08,09,...,99} {%
\edef\FileName{content/\i kapitel}%
\IfFileExists{\FileName}{%
\input{\FileName}
}
{%
%file does not exist
}
}
\clearpage
% Literaturverzeichnis
\cleardoublepage
\printbibliography
% Glossar
\printglossary[style=altlist,title=\langglossar]
% sonstiger Anhang
%\clearpage
%\appendix
%\input{ads/appendix}
\end{document}

120
paper/einstellungen.tex Normal file
View File

@@ -0,0 +1,120 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Einstellungen
%
% Hier können alle relevanten Einstellungen für diese Arbeit gesetzt werden.
% Dazu gehören Angaben u.a. über den Autor sowie Formatierungen.
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Sprache %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Aktuell sind Deutsch und Englisch unterstützt.
%% Es werden nicht nur alle vom Dokument erzeugten Texte in
%% der entsprechenden Sprache angezeigt, sondern auch weitere
%% Aspekte angepasst, wie z.B. die Anführungszeichen und
%% Datumsformate.
\setzesprache{de} % oder en
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Angaben %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Die meisten der folgenden Daten werden auf dem
%% Deckblatt angezeigt, einige auch im weiteren Verlauf
%% des Dokuments.
\setzemartrikelnr{8603858}
\setzekurs{CAS-TMINF24-W}
\setzetitel{Proof of Concept eines interaktiven Transpilers zur teilautomatisierten Übersetzung von COBOL in eine moderne Hochsprache}
\setzedatumAbgabe{Abgabedatum}
\setzefirma{Firmenname}
\setzefirmenort{Firmenort}
\setzeabgabeort{Abgabeort}
\setzeabschluss{Master of Science}
\setzestudiengang{Informatik}
\setzedhbw{DHBW Ort}
\setzebetreuer{Betreuer}
\setzegutachter{Gutachter}
\setzezweitgutachter{Zweitgutachter}
\setzezeitraum{Zeitraum}
\setzearbeit{Studienarbeit}
\setzeautor{Fabian Mujdrica}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%% Literaturverzeichnis %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Bei Fehlern während der Verarbeitung bitte in ads/header.tex bei der
%% Einbindung des Pakets biblatex (ungefähr ab Zeile 110,
%% einmal für jede Sprache), biber in bibtex ändern.
\newcommand{\ladeliteratur}{%
\addbibresource{bibliographie.bib}
%\addbibresource{weitereDatei.bib}
}
%% Zitierstil
%% siehe: http://ctan.mirrorcatalogs.com/macros/latex/contrib/biblatex/doc/biblatex.pdf (3.3.1 Citation Styles)
%% mögliche Werte z.B numeric-comp, alphabetic, authoryear
\setzezitierstil{ieee}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Verschiedene Schriftarten
% laut nag Warnung: palatino obsolete, use mathpazo, helvet (option scaled=.95), courier instead
\setzeschriftart{helvet} % palatino oder goudysans, lmodern, libertine
%% Paket um Textteile drehen gzu können
\usepackage{rotating}
%% Paket um Seite im Querformat anzuzeigen
%\usepackage{lscape}
%% Seitenränder
\setzeseitenrand{2.5cm}
%% Abstand vor Kapitelüberschriften zum oberen Seitenrand
\setzekapitelabstand{20pt}
%% Spaltenabstand
\setzespaltenabstand{10pt}
%%Zeilenabstand innerhalb einer Tabelle
\setzezeilenabstand{1.5}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Verschiedenes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Farben (Angabe in HTML-Notation mit großen Buchstaben)
\newcommand{\ladefarben}{%
\definecolor{LinkColor}{HTML}{00007A}
\definecolor{ListingBackground}{HTML}{FCF7DE}
}
%% Mathematikpakete benutzen (Pakete aktivieren)
%\usepackage{amsmath}
%\usepackage{amssymb}
%% Programmiersprachen Highlighting (Listings)
\newcommand{\listingsettings}{%
\lstset{%
language=C++, % Standardsprache des Quellcodes
numbers=left, % Zeilennummern links
stepnumber=1, % Jede Zeile nummerieren.
numbersep=5pt, % 5pt Abstand zum Quellcode
numberstyle=\tiny, % Zeichengrösse 'tiny' für die Nummern.
breaklines=true, % Zeilen umbrechen wenn notwendig.
breakautoindent=true, % Nach dem Zeilenumbruch Zeile einrücken.
postbreak=\space, % Bei Leerzeichen umbrechen.
tabsize=2, % Tabulatorgrösse 2
basicstyle=\ttfamily\footnotesize, % Nichtproportionale Schrift, klein für den Quellcode
showspaces=false, % Leerzeichen nicht anzeigen.
showstringspaces=false, % Leerzeichen auch in Strings ('') nicht anzeigen.
extendedchars=true, % Alle Zeichen vom Latin1 Zeichensatz anzeigen.
captionpos=b, % sets the caption-position to bottom
backgroundcolor=\color{ListingBackground}, % Hintergrundfarbe des Quellcodes setzen.
xleftmargin=0pt, % Rand links
xrightmargin=0pt, % Rand rechts
frame=single, % Rahmen an
frameround=ffff,
rulecolor=\color{darkgray}, % Rahmenfarbe
fillcolor=\color{ListingBackground},
keywordstyle=\color[rgb]{0.133,0.133,0.6},
commentstyle=\color[rgb]{0.133,0.545,0.133},
stringstyle=\color[rgb]{0.627,0.126,0.941}
}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Eigenes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Hier können Ergänzungen zur Präambel vorgenommen werden (eigene Pakete, Einstellungen)

153
paper/expose.tex Normal file
View File

@@ -0,0 +1,153 @@
\documentclass[12pt,a4paper]{article}
% Pakete
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[scaled=.95]{helvet}\renewcommand\familydefault{\sfdefault}
\usepackage{geometry}
\usepackage{setspace}
\usepackage{csquotes} % für korrekte Zitate
\usepackage[backend=biber,style=ieee]{biblatex}
% Seitenränder und Format
\geometry{left=3cm,right=2.5cm,top=3cm,bottom=3cm}
\onehalfspacing
\setlength{\parindent}{0pt}
\setlength{\parskip}{1em}
% Bibliographie-Datei einbinden
\addbibresource{bib_expose.bib}
% Titel
\title{
Exposé zur Studienarbeit \\[1cm]
\large Arbeitstitel: \\[0.5cm]
\LARGE \textbf{Proof of Concept eines interaktiven Transpilers
zur teilautomatisierten Übersetzung von COBOL
in eine moderne Hochsprache}
}
\author{Fabian Mujdrica \\
Matrikelnummer: 8603858 \\
Studiengang: Informatik \\
Duale Hochschule Baden-Württemberg Center of Advanced Studies}
\date{\today}
\begin{document}
\maketitle
\thispagestyle{empty}
\newpage
\tableofcontents
\newpage
\section{Einleitung}
Die Studienarbeit befasst sich mit der Entwicklung eines interaktiven Transpilers
zur teilautomatisierten Übersetzung von COBOL-Programmen in Java-Code. Dabei liegt
der Fokus des Compilers auf einen interaktiven Aspekt, sodass der Benutzer
Merkmale des Codes angeben kann. Dies soll dazu dienen, dass der Code aktuelle Standards
der Software-Entwicklung ertfüllt und einfacher wartbar ist.
\section{Problemstellung}
In einer Zeit, in der zwischen 70-80\% der weltweiten Geschäftstransaktionen
noch immer von COBOL-Systemen verarbeitet werden, stehen Unternehmen vor der Herausforderung,
ihre kritischen Legacy-Systeme zu modernisieren, ohne die Betriebsstabilität zu gefährden.
Die immernoch bestehende Abhängigkeit von veralteten Technologien bringt zunehmende Risiken mit sich
wie eine schrumpfende Anzahl an COBOL-Entwicklern, steigende Wartungskosten und Schwierigkeiten bei der
Integration moderner Technologien. Die Migration von COBOL zu modernen Programmiersprachen ist durch verschiedene technische und organisatorische Herausforderungen
charakterisiert. COBOL basiert auf festen Datentypen und starren Datenstrukturen, während moderne
(objektorientierte) Programmiersprachen wie Java flexiblere Paradigmen und Architekturmuster bieten.
Diese paradigmatischen Unterschiede erschweren eine direkte Transformation. Bestehende automatisierte Transpiler verwenden primär statische Regelwerke ohne Möglichkeit
zur benutzerdefinierten Anpassung der Code-Struktur.
Dies führt häufig zu starren Ergebnissen, die nicht den idiomatischen Strukturen der Zielsprache entsprechen.
Neuere Ansätze mit neuronalen Übersetzungsmodellen zeigen zwar Verbesserungen bei der
Codequalität, haben jedoch Schwächen bei der semantischen Äquivalenz und der Einhaltung von Zielsprachen-Idiomen.
Auch die technologischen Abhängigkeiten verschärfen die Problematik zusätzlich, da COBOL-Anwendungen häufig auf spezifischen
Mainframe-Umgebungen und Datenbanksystemen läuft.
\section{Zielsetzung}
Das Ziel der Studienarbeit ist die Entwicklung und systematische Evaluation eines Proof of Concept für einen
interaktiven COBOL-zu-Java Transpiler. Der Transpiler soll ein beispielhaftes
(möglichst realitätsnahes) COBOL-Programm vollständig transpilieren.
Der generierte Java-Code soll dabei möglichst den aktuellen Standards der Softwareentwicklung entsprechen
und moderne Java-Idiome befolgen. Dabei muss der Transpiler semantische Äquivalenz zwischen Quell- und Zielcode
gewährleisten. Der wesentliche Fokus des Transpilers liegt auf der Möglichkeit der
Integration moderner Java-Frameworks und Libraries. Der Transpiler soll die automatische Nutzung
sowie Ersetzung etablierter Java-Komponenten ermöglichen. Beispielseweise können für Datenbankzugriffe automatisch
hierfür standardisierte Libraries verwendet werden. Oder es können Framworks für eine automatische Bereitstellung verwendet werden.
Der Fokus auf dem Transpiler soll nicht liegen, dass dieser ohne weitere Inputs/Entschiedungen des Benutzers Code generiert,
sondern dass der entstehende Code in Betracht auf Metriken der Softwareengineering- und Codequalität besser ist als
der Code von anderen Transpilern. So soll neben der Modernität des generierten Codes auch dessen Wartbarkeit und Erweiterbarkeit
gewährleistet werden.
Die Evaluation des Transpilers ist eine systematische Bewertung der generierten Codequalität nach etablierten Metriken
der Softwareentwicklung, diese werden im Rahmen der Arbeit erarbeitet und definiert. Dies umfasst Aspekte wie Lesbarkeit,
Wartbarkeit, Einhaltung von Coding-Standards und Modularität. Auch eine Bewewrtung der Performance (Geschwindigkeit) des Codes
ist denkbar, wobei im Rahmen dieser Studienarbeit nicht der Fokus auf performanten Code liegt. Wenn es der Umfang und die Bearbeitungszeit
der Studienarbeit erlaubt, wird die Evaluation des Transpilers mit der Evaulation von anderen Transpilern verglichen.
Die Studienarbeit orientiert sich dabei an folgender Leitfrage: \textbf{Wie kann durch einen
interaktiven Transpiler bei der teilautomatisierten Übersetzung von COBOL nach Java die
Codequalität im Hinblick auf moderne Softwareengineering-Standards gegenüber bestehenden Transpilern verbessert werden?}.
\section{Geplantes Vorgehen}
Die methodische Herangehensweise der Studienarbeit gliedert sich in eine theoretiche Forschungsphase und eine
praktische Implementierung. Die theoretische Forschungsphase umfasst drei zentrale Untersuchungsfelder.
Zunächst erfolgt eine systematische Analyse der Sprachparadigmen von COBOL und Java, wobei sowohl syntaktische als auch semantische Unterschiede
detailliert erfasst werden. Diese Analyse identifiziert Konstrukte, die direkt transformiert werden können, sowie kritische Bereiche, in denen paradigmatische
Unterschiede komplexere Transformationsstrategien erfordern. Dabei liegt ein besonderer Fokus auf der Behandlung von COBOL-spezifischen Konzepten wie
PICTURE-Klauseln, hierarchischen Datenstrukturen und prozeduralen Verarbeitungsmustern im Kontext objektorientierter Java-Paradigmen.
Der zweite Forschungsbereich untersucht den aktuellen Stand der COBOL-Nutzung in der Industrie und die bestehende Migrationserfahrungen.
Diese Analyse erfasst dokumentierte Herausforderungen, Erfolgsstrategien und Limitationen
existierender Ansätze, um daraus Anforderungen für die Transpiler-Entwicklung abzuleiten. Dies soll auch als Grundlage dienen,
um zu schauen, inwiefern der Ansatz eines interaktiven Transpilers eine bestehende Lücke in diesem Themengebiet
darstellt. Der dritte Forschungsbereich erarbeitet die fundierten Bewertungskriterien für modernes Software Engineering, um daraus eine objektive
Evaluation der generierten Code-Qualität durchführen zu können.
Der erste Schritt der praktischen Implementierung umfasst
die Definition einer COBOL-Grammatik für die lexikalische Analyse unter Verwendung von ANTLR.
Existierende COBOL-Grammatiken können als Ausgangsbasis dienen und entsprechend den spezifischen Anforderungen erweitert werden.
Nach der Definition der kontextfreien Grammatik wird ein Parser in Java implementiert, der COBOL-Quellcode in eine
abstrakte Syntaxstruktur überführt. Der AST fungiert als zentrale Datenstruktur für alle
nachfolgenden Analyse- und Transformationsschritte. Eine semantische Analysephase überprüft Typ-Konsistenz, Variablen-Scopes und andere
semantische Eigenschaften des COBOL-Codes, um eine fundierte Basis für die Transformation zu schaffen. Die eigentliche Codeerzeugung ensteht
durch ein flexibles Mapping-System zur regel-basierten Transformation von COBOL-Konstrukten in Java-Code. Dieses System wird
Interface-basiert implementiert, um verschiedene Transformationsstrategien zu ermöglichen und zwischen
Implementierungen von Standard-Java und spezialisierten Library-Integrationen zu unterscheiden. Ein intelligentes Variablen-Management-System behandelt
die Umbenennung von COBOL-Varaiblen entsprechend Java-Namenskonventionen sowie die Auflösung
von Unterschieden des Scopes zwischen den Sprachen.
Die Evaluation erfolgt neben der aufgestellten Kriterien an Softwareengineering zuerst auf funktionaler Korrektheit.
Hierfür sollen systematische Tests mit vordefinierten COBOL-Programmen erzeugt, indem Input-Daten generiert und die Outputs
zwischen Original- und transformierter Version verglichen werden.
\section{Vorläufige Gliederung}
\begin{tabular}{ll}
\textbf{1.} & \textbf{Einleitung} \\
1.1 & Ziel der wissenschaftlichen Arbeit \\
1.2 & Vorgehensweise \\
1.3 & Wirtschaftlicher Wert \\
\\
\textbf{2.} & \textbf{Theoretische Grundlagen} \\
2.1 & COBOL, Java und ihre Paradigmen \\
2.2 & Compiler und Transpiler \\
2.3 & State of the Art: heutiger Umgang mit COBOL \\
2.4 & Best Practices des Softwareengineering \\
\\
\\
\textbf{3.} & \textbf{Praktischer Teil} \\
\\
\textbf{4.} & \textbf{Diskussion} \\
4.1 & Zusammenfassung der Ergebnisse \\
4.2 & Bewertung der Ergebnisse \\
4.3 & Bewertung der Durchführung \\
4.4 & Einordnung in aktuellen Stand der Wissenschaft \\
4.5 & Limitationen der Arbeit \\
\\
\textbf{5.} & \textbf{Fazit und Ausblick} \\
\end{tabular}
\newpage
\section{Relevante Literatur}
% Bibliographie anzeigen
\nocite{*}
\printbibliography[heading=none]
\end{document}

BIN
paper/images/dhbw.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
paper/images/hpe_logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

21
paper/lang/de.tex Normal file
View File

@@ -0,0 +1,21 @@
\setzelangdeckblattabschlusshinleitung{für die Prüfung zum}
\setzelangartikelstudiengang{des}
\setzelangstudiengang{Studiengangs}
\setzelanganderdh{an der DHBW CAS - Duale Hochschule Baden-Württemberg}
\setzelangvon{von}
\setzelangdbbearbeitungszeit{Bearbeitungszeitraum}
\setzelangdbmatriknr{Matrikelnummer}
\setzelangdbkurs{Kurs}
\setzelangdbfirma{Ausbildungsfirma}
\setzelangdbbetreuer{Betreuer}
\setzelangdbgutachter{Gutachter}
\setzelangdbzweitgutachter{Zweitgutachter}
\setzelangsperrvermerk{Sperrvermerk}
\setzelangerklaerung{Erklärung}
\setzelangabkverz{Abkürzungsverzeichnis}
\setzelangglossar{Glossar}
\setzelanganhang{Anhang}
\setzelangabstract{Abstract}
\setzelanglistingname{Listing}
\setzelanglistlistingname{Listings}
\setzelanglistingautorefname{Listing}

21
paper/lang/en.tex Normal file
View File

@@ -0,0 +1,21 @@
\setzelangdeckblattabschlusshinleitung{for the}
\setzelangartikelstudiengang{from}
\setzelangstudiengang{the Course of Studies}
\setzelanganderdh{at the Cooperative State University Baden-Württemberg}
\setzelangvon{by}
\setzelangdbbearbeitungszeit{Due Date}
\setzelangdbmatriknr{Student ID}
\setzelangdbkurs{Course}
\setzelangdbfirma{Company}
\setzelangdbbetreuer{Supervisor in the Company}
\setzelangdbgutachter{Reviewer}
\setzelangdbzweitgutachter{Second Reviewer}
\setzelangsperrvermerk{Confidentiality Statement} %Restriction Notice}
\setzelangerklaerung{Author's declaration}
\setzelangglossar{Glossary}
\setzelangabkverz{Acronyms}
\setzelangabstract{Abstract}
\setzelanganhang{Appendix}
\setzelanglistingname{Listing}
\setzelanglistlistingname{Listings}
\setzelanglistingautorefname{Listing}

25
paper/lang/strings.tex Normal file
View File

@@ -0,0 +1,25 @@
\newcommand{\iflang}[2]{%
\IfStrEq{\sprache}{#1}{#2}{}
}
\langstr{abkverz}
\langstr{anhang}
\langstr{glossar}
\langstr{deckblattabschlusshinleitung}
\langstr{artikelstudiengang}
\langstr{studiengang}
\langstr{anderdh}
\langstr{von}
\langstr{dbbearbeitungszeit}
\langstr{dbmatriknr}
\langstr{dbkurs}
\langstr{dbfirma}
\langstr{dbbetreuer}
\langstr{dbgutachter}
\langstr{dbzweitgutachter}
\langstr{sperrvermerk}
\langstr{erklaerung}
\langstr{abstract}
\langstr{listingname}
\langstr{listlistingname}
\langstr{listingautorefname}