\documentclass[hyperref={bookmarks=true}]{beamer}

\usepackage{beamerthemesplit}
\usepackage{ngerman}
\usepackage[latin1]{inputenc}
\usepackage{eurosym}
\usepackage{graphicx}
\useoutertheme{jhd}
\usecolortheme{jhd}

\title{Änderungsverwaltung mit DIFF und PATCH}
\author{Jan Hendrik Dithmar}
\date{27.10.2005}

\begin{document}

\newcommand{\bild}[2]{
	\begin{figure}[htpb]
		\centering
			\includegraphics[width=#1cm]{#2}
	\end{figure}
	}

\frame{\titlepage}

\section{Einführung}
\frame
{
	\frametitle{Einführung}
	
	\begin{itemize}
		\item<2->Bei der Softwareentwicklung ist es nötig, Änderungen oder Erweiterungen nachzuvollziehen.
		\item<3->\textit{Software-Konfigurationsmanagement} (kurz SKM, engl.: \textit{software configuration management}) hat zur Aufgabe, die Evolution von Softwaresystemen zu organisieren und zu kontrollieren.
	\end{itemize}
}

\section{DIFF}
\frame
{
	\frametitle{DIFF}
	
	\begin{itemize}
		\item<2->DIFF vergleicht verschiedene Versionen eines Dokuments und bestimmt die Unterschiede; DIFF kann nicht nur Änderungen an Dateien, sondern auch über ganze Verzeichnisse bestimmten ($\rightarrow$ rekursive Anwendung).
		\item<3->Die Unterschiede von 2 Texten $A$ und $B$ bestimmt DIFF als eine Folge von Kommandos, die $A$ in $B$ umwandeln. Kommandos sind das Einfügen und Löschen von Zeilen.
	\end{itemize}
}

\section{PATCH}
\frame
{
	\frametitle{PATCH}
	
	\begin{itemize}
		\item<2->PATCH wendet die Kommandos der Ausgabe von DIFF auf eine Datei oder mehrere Dateien an.
		\item<3->Das Nachvollziehen und Anwenden von Änderungen lässt sich dadurch automatisieren.
	\end{itemize}
}

\section{Manuelle und automatische Integration}
\frame
{
	\frametitle{Manuelle und automatische Integration}
	
	\begin{itemize}
		\item<2->Bei der \textbf{Zwei-Wege-Integration} wird aus zwei Dateien $A$ und $B$ eine neue Datei erzeugt, indem für jeden Unterschied interaktiv aus $A$ oder $B$ ausgewählt wird.
		\item<3->Bei der \textbf{Drei-Wege-Integration} wird eine gemeinsame Urfassung hinzugezogen: Ist ein Textstück nur in $A$ oder $B$ verändert worden, kann die Änderung automatisch übernommen werden. Ist das Textstück in $A$ und $B$ geändert worden, liegt ein Konflikt vor und der Benutzer muss aktiv werden, um die Änderungen selbst zu integrieren.
	\end{itemize}
}

\section{Probleme bei der Integration}
\frame
{
	\frametitle{Probleme bei der Integration}
	
	\begin{itemize}
		\item<2->Wird als Basis für die Änderung die Zeilennummer benutzt, so können Probleme bei der Ausführung der Änderungen auftreten. %Beispielsweise können die Zeilennummern für einen Append-Befehl einer DIFF-Ausgabe nicht mehr übereinstimmen, wenn die Datei manuell verändert wurde und PATCH fügt die Zeilen an einer falschen Stelle ein.
		\item<3->Diese Probleme lassen sich jedoch weitgehend entschärfen, indem als Ort für die Änderung nicht die Zeilennummer, sondern der Kontext betrachtet wird. Der Kontext ist ein Bereich von Zeilen, der vor und nach der jeweiligen Änderung auftreten muss.
		\item<4->Kennt PATCH den Kontext einer Änderung, kann es im Text nach den Kontextzeilen suchen, um den Ort der Änderungen zu bestimmen.
		\item<5->DIFF kennt ein spezielles Kontextformat, das mit einer Option aktiviert werden muss.
		\item<6->Eine exakte Übereinstimmung der Zeilen ist nicht erforderlich.
	\end{itemize}
}

\section{Syntaktische und semantische Integration}
\frame
{
	\frametitle{Syntaktische und semantische Integration}
	
	\begin{itemize}
		\item<2->DIFF und PATCH gehen rein textorientiert vor, was leicht Probleme bei der Integration hervorrufen kann.
		\item<3->Die Sicherheit automatischer Integration lässt sich weiter steigern, indem syntaktische und semantische Informationen des zugrunde liegenden Dokuments ausgenutzt werden.
		\item<4->Die syntaktische Integration und die semantische Integration berücksichtigen zusätzlich Syntax bzw. Semantik der Dokumente, auf die die Änderungen anzuwenden sind.
	\end{itemize}
}

\section{Wie DIFF arbeitet}
\frame
{
	\frametitle{Wie DIFF arbeitet}
	
	\begin{itemize}
		\item<2->Problem: Gegeben zwei Zeichenketten $A$ und $B$. Die Bearbeitungsdistanz (engl. \textit{edit distance}, kurz: Distanz) zweier Zeichenketten ist die Länge der kürzesten Folge von Einfüge- oder Löschkommandos, die $A$ nach $B$ umwandelt. Ziel ist es, eine kürzeste Kommandofolge zu finden.
		\item<3->Klassische Algorithmen für dieses Problem bestimmen die längste gemeinsame Teilfolge (engl. \textit{longest common susequence}, LCS) von $A$ und $B$; durch den Vergleich der LCS mit $A$ und $B$ ergeben sich Einfüge- und Löschkommandos.
		\item<4->Ein alternativer Ansatz ist der für DIFF entworfene Algorithmus von Miller und Myers. Grundlage für den Algorithmus ist eine Distanzmatrix, in der die kürzesten gefundenen Kommandofolgen für Präfixe von $A$ und $B$ eingetragen werden.
	\end{itemize}
}

\end{document}