Skip to content
Browse files

tidy up, syntax hl

  • Loading branch information...
1 parent 4adba1e commit 43aa440550e464f2774deda0b5f88f8c3f530717 @zealot128 committed Aug 8, 2012
View
4 .gitignore
@@ -26,3 +26,7 @@ main.ist
*.out
*.synctex.gz
*.backup
+*.swp
+*.swo
+main.pyg
+pdf/*.pdf
View
11 Makefile
@@ -1,19 +1,22 @@
latex:
- - pdflatex -synctex=1 -interaction=nonstopmode 'main.tex' | egrep "(Warning|Error)" -i | grep -v "Incompatible color definition"
+ - pdflatex -synctex=1 -shell-escape -interaction=nonstopmode 'main.tex'
- bibtex main
- makeindex -l -s styles/index.ist main
- makeglossaries main
- - pdflatex -synctex=1 -interaction=nonstopmode 'main.tex' | grep -i error
- - pdflatex -synctex=1 -interaction=nonstopmode 'main.tex' | egrep "(Warning|Error)" -i | grep -v "Incompatible color definition"
+ - pdflatex -synctex=1 -shell-escape -interaction=nonstopmode 'main.tex' > /dev/null
+ - pdflatex -synctex=1 -shell-escape -interaction=nonstopmode 'main.tex' > /dev/null
- cp main.pdf pdf/current.pdf
- cp pdf/current.pdf pdf/`date +%F`.pdf
-
todo:
ack-grep TODO
clean:
rm *.aux -f
rm */**/*.aux -f
ls *.backup */**/*backup | xargs rm -f
ls *~ */**/*~ | xargs rm -f
+ find | grep swp$$ | xargs rm -f
+
+show:
+ evince main.pdf
View
30 README.md
@@ -0,0 +1,30 @@
+# Latex Template
+
+for thesis, mostly German.
+
+
+Basierend auf meiner eigenen Diplomarbeit, weiteren Abschlussarbeiten und unzähligen Skriptem, mein Standardtemplate für neue, Abgabewürdige Dokumente
+
+
+## Features
+
+* Sinnvoller Natbib Style
+* awesome Syntaxhighlighting von Source Code mittels Pygments
+* Glossar, Stichwortvz, etc alles konfiguriert
+* Konfigurierter Druck für beidseitigen Druck
+* makefile fuer gedankenlosen Build
+
+## Requirements
+
+pygments
+
+```bash
+apt-get install python-pygments
+```
+
+ordentliche Latexversion, z.B.
+
+```bash
+apt-get install textlive texlive-lang-german texlive-latex-extra
+```
+
View
55 custom_commands.tex
@@ -1,55 +0,0 @@
-% FullRef: siehe \ref{sec:bla} -> siehe 7 - "Kapitelname"
-
-%%%%%%%%%%%%%%%%%
-% Makros fuer den Einsatz von Dingens am Rand
-%%%%%%%%%%%%%%%%%
-\newcommand{\randbem}[1]{
- \marginpar[\fontsize{9}{10}\selectfont \raggedleft{#1}]
- {\fontsize{9}{10}\selectfont \raggedright{#1}}
-}
-
-\newcommand{\bordergraphic}[1]{
- \marginline{\includegraphics[width=0.8\marginparwidth]{#1}}}
-
-\newcommand{\borderquote}[2]{
-\setlength{\epigraphwidth}{\marginparwidth}
-\marginpar{\fontsize{9}{10} \epigraph{#1}{#2}}
-\setlength{\epigraphwidth}{0.8\textwidth}
-}
-
-
-% Einheitliche Bildquelle als zusaetzliches Label
-\newcommand{\imgsource}[1]{\captionsetup{font={footnotesize,bf,it}} \caption*{#1}}
-
-% %%% Tiefe des Inhaltsverzeichnis beschraenken
-% \setcounter{tocdepth}{2} %kleineres TOC
-
-% Langer Pfeil fuer den Fließtext
-\newcommand{\arr}{$ \Longrightarrow$}
-
-
-% Standard-Listings fuer Ruby laden
-\lstloadlanguages{Ruby}
-\lstset{%
- basicstyle=\ttfamily\footnotesize\color{black},
- commentstyle = \ttfamily\color{gray},
- keywordstyle=\ttfamily\color{blue},
- stringstyle=\color{red},
- showspaces=false, % show spaces adding particular underscores
- showstringspaces=false,
- frame=single,
- breaklines=true
-}
-% Umlaute in Listings ermoeglichen
-\lstset{literate=%
-{Ö}{{\"O}}1
-{Ä}{{\"A}}1
-{Ü}{{\"U}}1
-{ß}{{\ss}}2
-{ü}{{\"u}}1
-{ä}{{\"a}}1
-{ö}{{\"o}}1
-}
-
-\newcommand{\glossar}[1]{$^\uparrow$\gls{#1}}
-\newcommand{\glossarpl}[1]{$^\uparrow$\glspl{#1}}
View
183 main.tex
@@ -1,171 +1,46 @@
-\documentclass[
- a4paper,
- 12pt,
- twoside,
- openany, % Chapter beginnen auf rechter Seite
- parskip,
- % tocbasic,
- final, % DEBUG modus
- 11pt,
- % draft, # DEBUG MOUS
- appendixprefix,
- % headsepline, % Linie nach Kopfzeile.
- % footsepline, % Linie vor Fusszeile.
- % bibtotocnumbered, % Literaturverzeichnis im Inhaltsverzeichnis nummeriert einfügen.
- chapterprefix, % Kapitel anschreiben als Kapitel
-]{scrreprt}
-\usepackage[twoside,width=14cm, height=24cm,right=3.25cm, left=2.5cm]{geometry}
-\setlength{\marginparwidth}{2.25cm}
-\clubpenalty = 10000
-\widowpenalty = 10000 \displaywidowpenalty = 10000
-
-\usepackage[ngerman]{babel}
-
-\usepackage[utf8]{inputenc} %Damit kann man auch Umlaute direkt eintippen \o/
-\usepackage{textcomp}
-\usepackage{amsmath}
-\usepackage{amssymb}
-\usepackage{amsbsy}
-\usepackage{amsfonts}
-\usepackage{amsthm}
-\usepackage{graphicx} %including images
-\usepackage{fancyhdr} %for editiable headers and footers
-\usepackage{setspace} %for 1,5times row space
-\usepackage{color}
-\definecolor{darkblue}{rgb}{0,0,.5}
-\usepackage[colorlinks,
- pdfpagelabels,pdfstartview=FitH,bookmarksopen=true,bookmarksnumbered=true,
- linkcolor= black,
- plainpages=false,
- hypertexnames=false,
- citecolor=black,linkcolor=black,menucolor=black,urlcolor=darkblue]
- {hyperref}
- %clickable TOC
-\usepackage{multirow} %linebreak in Table
-\usepackage{enumerate} % \begin{enumerate}[a.] Custom Nummerierung
-\usepackage{float} % Images mit Float
-\usepackage{colortbl} %colorTables
-\usepackage{framed} %begin{framed}
-\usepackage{longtable} %begin{longtable}
-\usepackage{makeidx}
-\usepackage[square,sort&compress,comma,numbers]{natbib} % natbib, aber Zitiert mit [..] anstatt (..)
-\usepackage{epigraph} % Epigraph = stylische Zitatte
-\usepackage{listings} % Quellcode Listings und List of Listings
-\usepackage{caption} % Modifizierung und setzen von custom captions
-\usepackage[dvipsnames,table]{xcolor}
-\usepackage[nottoc]{tocbibind} % TOC Plugin -> ??
-\usepackage{relsize}
-\usepackage[toc]{glossaries}
-%\usepackage{marginnote}
-%\usepackage{minted} % TODO Pygments wrapper... ohje :)
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
-%% Metainfos
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
\newcommand{\ownTitle}{Diplomarbeit}
-\newcommand{\ownTitleZ}{Testgetriebene Entwicklung von Web-Serveranwendungen auf der Basis von Ruby on Rails}
+\newcommand{\ownTitleZ}{Untertitel der Arbeit}
\newcommand{\ownAutor}{Stefan Wienert, HTW Dresden}
+\include{parts/partials/includes}
+\include{parts/partials/style}
+\include{parts/partials/custom_commands}
-\title{\ownTitle}
-\author{\ownAutor}
-\pdfinfo{
- /Title (\ownTitle)
- /Author (\ownAutor)
- /Subject (\ownTitleZ)
- /Keywords()
-}
-\date{\today}
-\setlength{\epigraphwidth}{.8\textwidth}
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% HEAD AND FOOTLINES
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\pagestyle{headings}
-\definecolor{Gray}{rgb}{0.85,0.85,0.90}
-
-\makeindex %start Aufzeichnung eines Stichwortverzeichnisses
-\makeglossary %start Aufzeichnung eines Glossars
-
-%%%%%%%%%%%%%%%%%%%%%% STYLINGS & FONTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\renewcommand{\footrulewidth}{0.5pt}
-%\let\cleardoublepage\clearpage
-\parskip 5pt % sets spacing between paragraphs
-\parindent 0pt
-
-
-\usepackage{bookman} % 118 pages, sehr sauber
-% \usepackage{newcent} % 116 pages, nice aber etwas zu kraeftig
-% \usepackage{lmodern} % 109 pages, standardmaessig
-% \usepackage{boisik} % 113 pages, gewagt aber sehr detailiert, etwas ungerade
-% \usepackage{palatino} % 111 pages, Arial'y sehr langweilig in den Ueberschriften
-% \usepackage{cmbright} % 111 pages, Wie ein modernes Buch. Gut fuer ne Doku oder so
- \usepackage{charter} % 109 pages, Wie ein modernes Buch. Gut fuer ne Doku oder so
-%\fontsize{12}{15}
-
-\usepackage{hyphenat}
-\usepackage[T1]{fontenc}
-
-
+% Custom hyphenation rules
\hyphenation{
-Com-mu-ni-ty
-Soft-ware-Ent-wick-lung
-Soft-ware
-Aus-für-lich
-Um-for-mu-lie-rung
-Test-fall-ab-deck-ung
-Test-Unit
-Test/Unit
-Da-ten-bank-an-bin-dung
-Tes-ten
-Grob-ent-wurf
-Pro-gram-ming
-Active-Record
-Ini-ti-ali-sie-rung
-Sys-tem
-be-schreibt
-De-ckungs-gleich-heit
-Ba-sis-at-tri-bu-te
-Ar-gu-ment-Er-ror
+ Com-mu-ni-ty
+ Soft-ware-Ent-wick-lung
}
-\usepackage{setspace}
-\setstretch{1,15} % Mein TOC ist zu lang!!
-\newcommand{\fullref}[1]{\ref{#1} -- \glqq\,\textit{\nameref{#1}}\grqq}
-\include{custom_commands}
%\include{parts/partials/glossar} % Glossar definitions
\begin{document}
- \include{parts/partials/frontpage}
- \cleardoublepage
+ \setstretch{1,25} % is equal to \onehalfspacing
+ %\setstretch{1,15} % can be made smaller
+ \include{parts/partials/frontpage}
+ \cleardoublepage
- \pagenumbering{Roman}
- \tableofcontents %Inhaltsverzeichnis
- \newpage
- \setstretch{1,25} % Entspricht \onehalfspacing
- \include{parts/intro/preambel}
+ \pagenumbering{Roman} % Roman page numbers for intro
+ \tableofcontents
+ \newpage
+ %\setstretch{1,25} % Entspricht \onehalfspacing
- % Table -- Zebrastreifen und 1.25 Row Abstand
- \rowcolors{1}{lightgray!50!white}{white}
- \colorlet{tableheadcolor}{gray!40}
- \renewcommand\arraystretch{1.25}% (MyValue=1.0 is for standard spacing)
+ % Thx, preface etcpp
+ \include{parts/intro/preambel}
+ \fancytables
- \thispagestyle{empty} \mbox{}
- %\newpage
- %\setcounter{page}{-1}
- %\clearpage
+ %\thispagestyle{empty} \mbox{}
+ %\setcounter{page}{-1} % Counter can be reset
\cleardoublepage
- \pagenumbering{arabic}
- \input{parts/gliederung}
- \include{parts/99-appendix}
- \newpage
- \printglossary[toctitle=Glossar]
- \input{parts/partials/listen}
- \input{parts/partials/erklaerung.tex}
+ \pagenumbering{arabic} % normale page numbering 1 2 3
+ \input{parts/main_part} % MAIN PART
+ \pagenumbering{Roman}
+ \include{parts/appendix} % stuff that doesnt fit in main part
+ \newpage
+ % index, lof, lot, lot
+ \input{parts/partials/listen}
+ % Selbststaendigkeitserklaerung
+ \input{parts/partials/erklaerung.tex}
\end{document}
View
239 minted.sty
@@ -0,0 +1,239 @@
+%%
+%% This is file `minted.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% minted.dtx (with options: `package')
+%% Copyright 2010--2011 Konrad Rudolph
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% Additionally, the project may be distributed under the terms of the new BSD
+%% license.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Konrad Rudolph.
+%%
+%% This work consists of the files minted.dtx and minted.ins
+%% and the derived file minted.sty.
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{minted}[2011/09/17 v1.7 Yet another Pygments shim for LaTeX]
+\RequirePackage{keyval}
+\RequirePackage{fancyvrb}
+\RequirePackage{xcolor}
+\RequirePackage{float}
+\RequirePackage{ifthen}
+\RequirePackage{calc}
+\RequirePackage{ifplatform}
+\DeclareOption{chapter}{\def\minted@float@within{chapter}}
+\DeclareOption{section}{\def\minted@float@within{section}}
+\ProcessOptions\relax
+\ifwindows
+ \providecommand\DeleteFile[1]{\immediate\write18{del #1}}
+\else
+ \providecommand\DeleteFile[1]{\immediate\write18{rm #1}}
+\fi
+\newboolean{AppExists}
+\newcommand\TestAppExists[1]{
+ \ifwindows
+ \DeleteFile{\jobname.aex}
+ \immediate\write18{for \string^\@percentchar i in (#1.exe #1.bat #1.cmd)
+ do set >\jobname.aex <nul: /p x=\string^\@percentchar \string~$PATH:i>>\jobname.aex} %$
+ \newread\@appexistsfile
+ \immediate\openin\@appexistsfile\jobname.aex
+ \expandafter\def\expandafter\@tmp@cr\expandafter{\the\endlinechar}
+ \endlinechar=-1\relax
+ \readline\@appexistsfile to \@apppathifexists
+ \endlinechar=\@tmp@cr
+ \ifthenelse{\equal{\@apppathifexists}{}}
+ {\AppExistsfalse}
+ {\AppExiststrue}
+ \immediate\closein\@appexistsfile
+ \DeleteFile{\jobname.aex}
+\immediate\typeout{file deleted}
+ \else
+ \immediate\write18{which #1 && touch \jobname.aex}
+ \IfFileExists{\jobname.aex}
+ {\AppExiststrue
+ \DeleteFile{\jobname.aex}}
+ {\AppExistsfalse}
+ \fi}
+\newcommand\minted@resetoptions{}
+\newcommand\minted@defopt[1]{
+ \expandafter\def\expandafter\minted@resetoptions\expandafter{%
+ \minted@resetoptions
+ \@namedef{minted@opt@#1}{}}}
+\newcommand\minted@opt[1]{
+ \expandafter\detokenize%
+ \expandafter\expandafter\expandafter{\csname minted@opt@#1\endcsname}}
+\newcommand\minted@define@opt[3][]{
+ \minted@defopt{#2}
+ \ifthenelse{\equal{#1}{}}{
+ \define@key{minted@opt}{#2}{\@namedef{minted@opt@#2}{#3}}}
+ {\define@key{minted@opt}{#2}[#1]{\@namedef{minted@opt@#2}{#3}}}}
+\newcommand\minted@define@switch[3][]{
+ \minted@defopt{#2}
+ \define@booleankey{minted@opt}{#2}
+ {\@namedef{minted@opt@#2}{#3}}
+ {\@namedef{minted@opt@#2}{#1}}}
+\minted@defopt{extra}
+\newcommand\minted@define@extra[1]{
+ \define@key{minted@opt}{#1}{
+ \expandafter\def\expandafter\minted@opt@extra\expandafter{%
+ \minted@opt@extra,#1=##1}}}
+\newcommand\minted@define@extra@switch[1]{
+ \define@booleankey{minted@opt}{#1}
+ {\expandafter\def\expandafter\minted@opt@extra\expandafter{%
+ \minted@opt@extra,#1}}
+ {\expandafter\def\expandafter\minted@opt@extra\expandafter{%
+ \minted@opt@extra,#1=false}}}
+\minted@define@switch{texcl}{-P texcomments}
+\minted@define@switch{mathescape}{-P mathescape}
+\minted@define@switch{linenos}{-P linenos}
+\minted@define@switch{startinline}{-P startinline}
+\minted@define@switch[-P funcnamehighlighting=False]%
+ {funcnamehighlighting}{-P funcnamehighlighting}
+\minted@define@opt{gobble}{-F gobble:n=#1}
+\minted@define@opt{bgcolor}{#1}
+\minted@define@extra{frame}
+\minted@define@extra{framesep}
+\minted@define@extra{framerule}
+\minted@define@extra{rulecolor}
+\minted@define@extra{numbersep}
+\minted@define@extra{firstnumber}
+\minted@define@extra{stepnumber}
+\minted@define@extra{firstline}
+\minted@define@extra{lastline}
+\minted@define@extra{baselinestretch}
+\minted@define@extra{xleftmargin}
+\minted@define@extra{xrightmargin}
+\minted@define@extra{fillcolor}
+\minted@define@extra{tabsize}
+\minted@define@extra{fontfamily}
+\minted@define@extra{fontsize}
+\minted@define@extra{fontshape}
+\minted@define@extra{fontseries}
+\minted@define@extra{formatcom}
+\minted@define@extra{label}
+\minted@define@extra@switch{numberblanklines}
+\minted@define@extra@switch{showspaces}
+\minted@define@extra@switch{resetmargins}
+\minted@define@extra@switch{samepage}
+\minted@define@extra@switch{showtabs}
+\minted@define@extra@switch{obeytabs}
+\newsavebox{\minted@bgbox}
+\newenvironment{minted@colorbg}[1]{
+ \def\minted@bgcol{#1}
+ \noindent
+ \begin{lrbox}{\minted@bgbox}
+ \begin{minipage}{\linewidth-2\fboxsep}}
+ {\end{minipage}
+ \end{lrbox}%
+ \colorbox{\minted@bgcol}{\usebox{\minted@bgbox}}}
+\newwrite\minted@code
+\newcommand\minted@savecode[1]{
+ \immediate\openout\minted@code\jobname.pyg
+ \immediate\write\minted@code{#1}
+ \immediate\closeout\minted@code}
+\newcommand\minted@pygmentize[2][\jobname.pyg]{
+ \def\minted@cmd{pygmentize -l #2 -f latex -F tokenmerge
+ \minted@opt{gobble} \minted@opt{texcl} \minted@opt{mathescape}
+ \minted@opt{startinline} \minted@opt{funcnamehighlighting}
+ \minted@opt{linenos} -P "verboptions=\minted@opt{extra}"
+ -o \jobname.out.pyg #1}
+ \immediate\write18{\minted@cmd}
+ % For debugging, uncomment:
+ %\immediate\typeout{\minted@cmd}
+ \ifthenelse{\equal{\minted@opt@bgcolor}{}}
+ {}
+ {\begin{minted@colorbg}{\minted@opt@bgcolor}}
+ \input{\jobname.out.pyg}
+ \ifthenelse{\equal{\minted@opt@bgcolor}{}}
+ {}
+ {\end{minted@colorbg}}
+ \DeleteFile{\jobname.out.pyg}}
+\newcommand\minted@usedefaultstyle{\usemintedstyle{default}}
+\newcommand\usemintedstyle[1]{
+ \renewcommand\minted@usedefaultstyle{}
+ \immediate\write18{pygmentize -S #1 -f latex > \jobname.pyg}
+ \input{\jobname.pyg}}
+\newcommand\mint[3][]{
+ \DefineShortVerb{#3}
+ \minted@resetoptions
+ \setkeys{minted@opt}{#1}
+ \SaveVerb[aftersave={
+ \UndefineShortVerb{#3}
+ \minted@savecode{\FV@SV@minted@verb}
+ \minted@pygmentize{#2}
+ \DeleteFile{\jobname.pyg}}]{minted@verb}#3}
+\newcommand\minted@proglang[1]{}
+\newenvironment{minted}[2][]
+ {\VerbatimEnvironment
+ \renewcommand{\minted@proglang}[1]{#2}
+ \minted@resetoptions
+ \setkeys{minted@opt}{#1}
+ \begin{VerbatimOut}[codes={\catcode`\^^I=12}]{\jobname.pyg}}%
+ {\end{VerbatimOut}
+ \minted@pygmentize{\minted@proglang{}}
+ \DeleteFile{\jobname.pyg}}
+\newcommand\inputminted[3][]{
+ \minted@resetoptions
+ \setkeys{minted@opt}{#1}
+ \minted@pygmentize[#3]{#2}}
+\newcommand\newminted[3][]{
+ \ifthenelse{\equal{#1}{}}
+ {\def\minted@envname{#2code}}
+ {\def\minted@envname{#1}}
+ \newenvironment{\minted@envname}
+ {\VerbatimEnvironment\begin{minted}[#3]{#2}}
+ {\end{minted}}
+ \newenvironment{\minted@envname *}[1]
+ {\VerbatimEnvironment\begin{minted}[#3,##1]{#2}}
+ {\end{minted}}}
+\newcommand\newmint[3][]{
+ \ifthenelse{\equal{#1}{}}
+ {\def\minted@shortname{#2}}
+ {\def\minted@shortname{#1}}
+ \expandafter\newcommand\csname\minted@shortname\endcsname[2][]{
+ \mint[#3,##1]{#2}##2}}
+\newcommand\newmintedfile[3][]{
+ \ifthenelse{\equal{#1}{}}
+ {\def\minted@shortname{#2file}}
+ {\def\minted@shortname{#1}}
+ \expandafter\newcommand\csname\minted@shortname\endcsname[2][]{
+ \inputminted[#3,##1]{#2}{##2}}}
+\@ifundefined{minted@float@within}
+ {\newfloat{listing}{h}{lol}}
+ {\newfloat{listing}{h}{lol}[\minted@float@within]}
+\newcommand\listingscaption{Listing}
+\floatname{listing}{\listingscaption}
+\newcommand\listoflistingscaption{List of listings}
+\providecommand\listoflistings{\listof{listing}{\listoflistingscaption}}
+\AtBeginDocument{
+ \minted@usedefaultstyle}
+\AtEndOfPackage{
+ \ifnum\pdf@shellescape=1\relax\else
+ \PackageError{minted}
+ {You must invoke LaTeX with the
+ -shell-escape flag}
+ {Pass the -shell-escape flag to LaTeX. Refer to the minted.sty
+ documentation for more information.}\fi
+ \TestAppExists{pygmentize}
+ \ifAppExists\else
+ \PackageError{minted}
+ {You must have `pygmentize' installed
+ to use this package}
+ {Refer to the installation instructions in the minted
+ documentation for more information.}
+ \fi}
+\endinput
+%%
+%% End of file `minted.sty'.
View
176 parts/99-appendix.tex
@@ -1,176 +0,0 @@
-\appendix
-
-\chapter{Eigenschaften erfolgreicher Tests}
-
-Das Vorhandensein von zahlreichen Tests reicht nicht aus, um die \glossar{quality} der Tests zu beuteilen. Stattdessen existieren einige Qualitätskriterien, um Tests auf ihre Sinnhaftigkeit und Wartbarkeit zu untersuchen:
-
-\begin{description}
- \item[Unabhängigkeit (Independence) und Isolation] Ein Test \index{Test}ist unabhängig, falls er nicht durch andere Tests beeinflusst wird. Auch die Reihenfolge, in der die Tests ausgeführt werden, darf auf das Ergebnis keinen Einfluss üben. Siehe auch \citep{beck_test_2002}, \citep{palermo_guidelines_2006} sowie \citep[Karte 45]{langr_agile_2011}.
- \item[Wiederholbarkeit (Repeatability] Ein Test \index{Test}wird als wiederholbar bezeichnet, wenn er mehrmals hintereinander ausgeführt werden kann und dabei jedes Mal dasselbe Ergebnis liefert \citep[Karte 45]{langr_agile_2011} \citep{rappin_rails_2011}. Problematisch sind dabei z.B. Datum und Zeit sowie Zufallsfunktionen.
- \item[Klarheit (Clarity)] Ein Test \index{Test}ist klar, wenn sein Zweck sofort verständlich wird \citep{rappin_rails_2011}, \citep{palermo_guidelines_2006}. Damit wird einerseits die Lesbarkeit gemeint, anderseits schließt dies auch ein, ob der Test genau eine Eigenschaft testet und nicht redundant zu anderen Tests ist. Dies hat zur Folge, dass die Tests wartbarer werden und als Codedokumentation dienen können.
- \item[Präzise (Conciseness)] Ein Test \index{Test}ist präzise, wenn er so wenig Code und so wenige Objekte wie möglich benötigt, um sein Ziel zu erreichen \citep{palermo_guidelines_2006} \citep{rappin_rails_2011}. Eine Auswirkung ist, dass der Test schneller wird.
- \item[Robustheit (Robustness)] Ein Test \index{Test}ist robust, wenn es eine direkte Korrelation zum zu testenden Code gibt: Ist der Code korrekt, so ist der Test erfolgreich. Ist der Code falsch, so schlägt der Test fehl. Nicht-robuste Tests werden auch "`zerbrechlich"' (brittle) genannt. Dazu zählen auch sogenannte tautologische Tests, die immer erfolgreich verlaufen und keine Aussage über den zugrunde liegenden Programmcode geben.
- \item[Schnelligkeit] Gute Tests sollten schnell sein, da die Test-Suite\index{Test!Test-Suite} ansonsten deutlich seltener ausgeführt würd \citep{langr_agile_2011} \citep{palermo_guidelines_2006} \citep{nagappan_realizing_2008}. Siehe auch Präzision.
- \item[Zeitliche Nähe] Gute Tests entstehen in zeitlicher Nähe zu dem zugrunde liegenden Programmstück \citep{langr_agile_2011}. Innerhalb von TDD\index{TDD} ist dieses Kriterium immer erfüllt.
- \end{description}
-
-% Microsoft Vorgehensweise:
-%
-% Start TDD from the beginning of projects. Do not stop in the middle and claim it
-% doesn’t work. Do not start TDD late in the project cycle when the design has already
-% been decided and majority of the code has been written. TDD is best done
-% incrementally and continuously.
-% For a team new to TDD, introduce automated build test integration towards the second
-% third of the development phase—not too early but not too late. If this is a “Greenfield”
-% project, adding the automated build test towards the second third of the development
-% schedule allows the team to adjust to and become familiar with TDD. Prior to the
-% automated build test integration, each developer should run all the test cases on their
-% own machine.
-% Convince the development team to add new tests every time a problem is found, no
-% matter when the problem is found. By doing so, the unit test suites improve during the
-% development and test phases.
-% Get the test team involved and knowledgeable about the TDD approach. The test team
-% should not accept new development release if the unit tests are failing.
-% Hold a thorough review of an initial unit test plan, setting an ambitious goal of having
-% the highest possible (agreed upon) code coverage targets.
-% Constantly running the unit tests cases in a daily automatic build (or continuous
-% integration); tests run should become the heartbeat of the system as well as a means to
-% track progress of the development. This also gives a level of confidence to the team
-% when new features are added.
-
-% Encourage fast unit test execution and efficient unit test design. Test \index{Test}execution speed is
-% very important since when all the tests are integrated, the complete execution can
-% become quite long for a reasonably-sized project and when using constant test
-% executions. Tests results are important early and often; they provide feedback on the
-% current state of the system. Further, the faster the execution of the tests the more likely
-% developers themselves will run the tests without waiting for the automated build tests
-% results. Such constant execution of tests by developers may also result in faster unit
-% tests additions and fixes.
-
-% Share unit tests. Developers’ sharing their unit tests, as an essential practice of TDD,
-% helps identify integration issues early on.
-
-% Track the project using measurements. Count the number of test cases, code coverage,
-% bugs found and fixed, source code count, test code count, and trend across time, to
-% identify problems and to determine if TDD is working for you.
-
-% Check morale of the team at the beginning and end of the project. Conduct periodical
-% and informal surveys to gauge developers’ opinions on the TDD process and on their
-% willingness to apply it in the future.
-
-%
-% % Einige dieser Punkte können durch Metriken überprüft werden. Dazu mehr im Abschnitt \ref{sec:metrics}.
-% % Code Craft S 144
-
-\chapter{Nutzung von Cucumber in Verbindung mit Selenium für Firefox und Guard ohne X-Server}
-Für ein effektives Test-Setup wurden folgende Testtools benutzt:
-\begin{description}
- \item[Guard] automatische Testausführung bei Änderungen der Dateien.
- \item[Xvfb] Ein X-Server, der ohne Grafikausgabe arbeitet. Er eignet sich also für die Ausführung von GUI-Programmen wie Mozilla Firefox auf Remote-Servern.
- \item[Selenium\index{Selenium}] Interface zur Fernsteuerung von Browsern.
- \item[Spork] Erhöht die Testausführungsgeschwindigkeit, da Teile von Rails\index{Ruby-on-Rails} im Hintergrund gehalten werden und zwischen den Tests nicht neu geladen werden müssen.
-\end{description}
-
-\subsection*{Installation}
-Es muss bereits installiert sein: firefox, xvfb, Rails > 3.0
-\begin{enumerate}
- \item In das Gemfile folgendes eintragen:
- \begin{lstlisting}[caption=RAILS\_ROOT/Gemfile]
-group :test, :cucumber do
- gem "capybara"
- gem 'cucumber'
- gem "cucumber-rails"
- gem 'database_cleaner'
- gem "launchy"
- gem "guard"
- gem 'guard-cucumber'
- gem 'guard-spork'
- gem "rb-inotify" # Für Linux
- gem "spork", :git => "git://github.com/timcharper/spork.git"
-end
-
- \end{lstlisting}
- Danach folgendes ausführen:
-
- \begin{verbatim}
-bundle install
-rails g cucumber:install
- \end{verbatim}
-
-
- \item Eine Datei Guardfile anlegen. Hier kommen alle Anweisungen zur Steuerung von guard hinein.
- \begin{lstlisting}[caption=RAILS\_ROOT/Guardfile]
-group "cucumber" do
- guard 'spork' do
- watch('config/application.rb')
- watch('config/environment.rb')
- watch('features/support/env.rb')
- watch(%r{^config/environments/.+\.rb$})
- watch(%r{^config/initializers/.+\.rb$})
- watch('spec/spec_helper.rb')
- end
- guard 'cucumber', :cli => '--no-profile --color --format pretty --strict RAILS_ENV=test' do
- watch(%r{^features/.+\.feature$})
- watch(%r{^features/support/.+$}) { 'features' }
- watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
- end
-end
-\end{lstlisting}
-\item In der Datei \texttt{config/cucumber.yml} die Option \texttt{--drb} für "`default"' und "`wip"' setzen.
-
-
-\item Die Datei \texttt{features/support/env.rb} anpassen, um sie mit Spork kompatibel zu machen:
-\begin{lstlisting}[caption=features/support/env.rb]
-require 'cucumber/rails'
-require "spork"
-require 'test/unit/testresult'
-Test::Unit.run = true
-
-Spork.prefork do
- ENV["RAILS_ENV"] ||= "test"
- require File.expand_path(File.dirname(__FILE__) + '/../../config/environment')
- require 'cucumber/formatter/unicode'
- require 'cucumber/rails'
- require 'test/unit/testresult'
- ActionController::Base.allow_rescue = false
- begin
- DatabaseCleaner.strategy = :truncation
- rescue NameError
- raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it."
- end
-end
-
-Spork.each_run do
- require 'cucumber/rails/world'
-end
-
-\end{lstlisting}
-
-\end{enumerate}
-
-
-\subsection*{Nutzung}
-
-\begin{enumerate}
- \item Aktivierung von Xvfb auf Displayport 99
- \begin{verbatim}
- Xvfb :99 -ac
- \end{verbatim}
-
- \item Aktuelle Shell auf diesen Displayport einstellen
- \begin{verbatim}
- export DISPLAY=:99
- \end{verbatim}
-
- \item Guard starten
- \begin{verbatim}
- guard -g cucumber
- \end{verbatim}
-\end{enumerate}
-
-Nun werden automatisch alle Cucumber\index{Cucumber}-Features getestet. Falls Selenium\index{Selenium} verwendet wird, dann wird Firefox im Hintergrund gestartet, ohne dass dies sichtbar wird.
-
-
-
-
-
View
5 parts/appendix.tex
@@ -0,0 +1,5 @@
+\appendix
+
+\chapter{Bla}
+
+
View
17 parts/gliederung.tex
@@ -1,17 +0,0 @@
-\chapter{Einleitung}
-\input{parts/intro/motivation}
-
-%\input{parts/intro/projektbeschreibung}
-\input{parts/intro/aufbau}
-
-\newpage\input{parts/outro/fazit}
-
-\newpage
- %\include{parts/01}
- %\input{parts/projektbeschreibung}
- %\include{parts/02}
- %\include{parts/03}
-
- %\input{parts/tools}
- %\input{parts/implementation}
- %\include{parts/04}
View
27 parts/include-syntax-php.tex
@@ -1,27 +0,0 @@
-\usepackage{listings}
-\lstset{
-language=php, % choose the language of the code
-basicstyle=\footnotesize, % the size of the fonts that are used for the code
-numbers=left, % where to put the line-numbers
-numberstyle=\footnotesize, % the size of the fonts that are used for the line-numbers
-stepnumber=1, % the step between two line-numbers. If it's 1 each line will be numbered
-numbersep=5pt, % how far the line-numbers are from the code
-backgroundcolor=\color{white},
-showspaces=false,
-showstringspaces=false,
-showtabs=false,
-frame=single,
-tabsize=4,
-captionpos=t,
-breaklines=true,
-breakatwhitespace=false,
-%escapeinside={\%*}{*\%}{//}, % if you want to add a comment within your code
-keywordstyle=\color{green}\bfseries,
-commentstyle=\color{blue},
-morecomment=[l]{//},
-morecomment=[s]{/*}{*/},
-morestring=[b]",
-morestring=[d]’,
-frame=tb
-}
-\lstset{index={}}
View
28 parts/intro/aufbau.tex
@@ -1,21 +1,23 @@
\section{Aufbau der Arbeit}
-Das aktuelle einleitende Kapitel beschreibt die Motivation und Hintergründe, warum die pludoni GmbH die Testgetriebene Entwicklung mit Ruby on Rails\index{Ruby-on-Rails} verwenden möchte und gibt eine kurze Projektbeschreibung über das Projekt IT-Jobs-und-Stellen.de (IT-Jobs)\index{IT-Jobs-Projekt}, welches parallel zu dieser Arbeit entstand.
-Da die Testgetriebene\index{TDD} Software-Entwicklung auf dem dynamischen Unittest\index{Test!Unittest} basiert, ist das Kapitel \fullref{sec:test} dem Testen im Allgemeinen gewidmet. Danach erfolgt eine Einführung in die \textit{\nameref{sec:tdd}} im Kapitel \ref{sec:tdd}. \\
-Da ein weiterer Schwerpunkt dieser Arbeit das Webframework Ruby on Rails\index{Ruby-on-Rails} ist, enthält das Kapitel \fullref{sec:ruby} einen kurzen Überblick über Ruby und Abschnitt \ref{sec:rails} einen Überblick über das darauf basierende Framework Rails. Ebenfalls werden einige Möglichkeiten für Tests in diesem Umfeld vorgestellt.\\
-Das Kapitel \fullref{sec:metriken} zeigt auf, welche Möglichkeiten existieren, um den Erfolg der Testgetriebene\index{TDD}n Entwicklung praktisch anhand von Kennziffern nachzuweisen und den Prozess zu überwachen.
+\paragraph{Hinweis zur Notation}
-Im Kapitel \fullref{sec:auswahl} wird ausgeführt, wie die vorgestellten Werkzeuge und Methoden konkret in der pludoni GmbH eingesetzt werden sollten und welche zusätzlichen Faktoren es zu beachten gilt.
-Im praktischen Kapitel \fullref{sec:awtdd} wird die Testgetriebene\index{TDD} Entwicklung mit Ruby on Rails\index{Ruby-on-Rails} an konkreten Beispielen erklärt und einige Sonderfälle, wie das Testen externer Abhängigkeiten im Unterabschnitt \ref{sec:awmock}, erläutert.
-Danach betrachten wir konkrete Ergebnisse im Kapitel \fullref{sec:auswertung} der Code-Metrik\index{Code-Metrik}en an und vergleichen diese mit anderen Projekten der pludoni GmbH und als Ausblick auch mit einigen bekannteren Rails\index{Ruby-on-Rails}-Projekten.
-Zum Ende, im Abschnitt \fullref{sec:fazit}, werden Ergebnisse dieser Arbeit zusammengefasst und Vorschläge für eine weitere Forschung gegeben.
+\subsection{Beispiel Syntax HL}
-Im Appendix sind Hinweise für die Erstellung guter Tests aus der Literatur und die Anleitung, wie eine effektive Browsersimulation\index{Browser!Simulierter}sumgebung eingerichtet wird, hinterlegt. Am Ende der Arbeit erfolgt eine Auflistung der verwendeten Abbildungen, Quellcodes, das Literaturverzeichnis sowie das Stichwortverzeichnis.
-Dieser Arbeit liegt eine CDROM bei, die die PDF-Version dieses Dokuments enthält sowie eine halbstündigen Screencast, in dem der Autor bei der Testgetriebenen Entwicklung des Feedimports aus Abschnitt \ref{sec:awmock} beobachtet wurde.
+\begin{listing}
+\begin{rubycode}
+class Array
+ # method documentation
+ def mean
+ self.inject(:+) / self.count.to_f
+ end
+end
-\paragraph{Hinweis zur Notation} In dieser Diplomarbeit werden einige Begriffe verwendet, die innerhalb der Arbeit nicht weiter erläutert werden, stattdessen aber im Glossar enthalten sind. Solche Einträge sind mit einem $^\uparrow$ markiert, z.B. \glossar{test}.\\
-In einigen Fällen werden konkrete Techniken oder Methoden verwendet. Diese sind \textbf{fettgedruckt} dargestellt und werden bei erstmaliger Verwendung mit einer Fußnote und Quelle gekennzeichnet. Englische Fachausdrücke werden mit \textit{kursiv} dargestellt.\\
-Zitiermarken im Text und die dazugehörige Ordnungsmarke im Literaturverzeichnis bestehen aus abgekürzten Verfasserbuchstaben plus Erscheinungsjahr in eckigen Klammern, z.B. \citep{beck_test_2002}.
+"strings"
+\end{rubycode}
+\label{lst:example}
+\caption{Ruby method definition with beautiful syntax hl}
+\end{listing}
View
67 parts/intro/motivation.tex
@@ -1,71 +1,6 @@
\chapter{Einleitung}
-Das \randbem{Testgetriebene Entwicklung...}Hauptthema dieser Diplomarbeit, die Testgetriebene Entwicklung, ist vielen Programmierern vom Namen her bekannt. Ungeachtet dessen, dass viele Studien über die (positiven) Auswirkungen dieses Entwicklungsansatzes existieren, so wird sie trotzdem relativ selten eingesetzt und es existieren große Vorbehalte, wie z.B. dass es Zeitverschwendung sei oder dass Programmierer fälschlicherweise annehmen, sie könnten die Komplexität überschauen\footnote{\url{http://tamasgyorfi.wordpress.com/tag/excuses-to-tdd/}}.\\
-Diese, teilweise mythenumrankte, Technik hat innerhalb des Entwicklerteams der pludoni GmbH ein großes Interesse geweckt und wird aus diesem Grund nun näher untersucht.
-
-Die \randbem{...von Webserveranwendungen...}pludoni GmbH benötigt für ihre Services gut funktionierende und effizient entwickelte Webserveranwendungen. Das Framework Ruby on Rails\index{Ruby-on-Rails} scheint dafür wie geschaffen und erste kleinere Erfahrungen waren durchaus positiv. Durch eine vielbestätigte effektive Entwicklung ist Rails ideal für den Einsatz in kleinen Teams, wie das Entwicklerteam der pludoni GmbH eines ist, geeignet.
-
-Dieses Framework \randbem{...auf Basis von Ruby on Rails}ist das zweite große Thema dieser Diplomarbeit. Rails und Testen passen anscheinend sehr gut zusammen, da das Testen im Allgemeinen in der Ruby-Community einen sehr hohen Stellenwert hat. Außerdem existiert eine Vielzahl von Testwerkzeugen und die meisten bekannten Bibliotheken verfügen über ausgiebige Tests. Damit passen die Testgetriebene\index{TDD} Entwicklung und Ruby (on Rails) perfekt zusammen.
-
-Um die Auswirkungen der Testgetriebene\index{TDD}n Entwicklung besser nachvollziehen zu können, benötigt man ein Messinstrument. Dafür sind in diesem Kontext der Webentwicklung die Code-Metrik\index{Code-Metrik}en geeignet. Sie können einen groben Überblick über den Zustand des Quellcodes geben. Daher sind sie ideal, insbesondere in der Lernphase der Testgetriebenen Entwicklung, Feedback zu geben.
-
-Wie das Zusammenspiel von Ruby (on Rails\index{Ruby-on-Rails}), der Testgetriebene\index{TDD}n Entwicklung und dem Einsatz von Code-Metrik\index{Code-Metrik}en praktisch erfolgen kann, wird in dieser Arbeit im Detail betrachtet und mit eigenen praktischen Erfahrungen belegt.
+Thema
\section{Motivation}
-Kurz nach der Firmengründung der pludoni GmbH 2009 absolvierte der Autor dort sein Pflichtpraktikum und war danach weiterhin als Werkstudent tätig.
-Während dieser Zeit nahmen Programmierer verschiedener Erfahrungsstufen und auch Praktikanten an der Neu- und Weiterentwicklung der Webserversoftware teil. Dies hat zur Folge, dass die Komplexität der Software inzwischen ein Level erreicht hat, bei dem das Maß an Regressionsfehlern\footnote{fehlerauslösender Quelltextänderungen -- Eine Änderung an einer Stelle des Codes führt zu Fehlern an einer anderen} stark anstieg.
-
-Da zum großen Teil keine automatisierten Softwaretests geschrieben wurden, lassen sich diese Fehler nur schwer auffinden. Ein Versuch, nachträglich Softwaretests hinzuzufügen, wurde evaluiert und als zu aufwändig befunden, da der Code in seinem jetzigen Zustand nur äußerst schwer zu testen ist. Gründe dafür sind suboptimale Codestrukturen (Spaghetticode\footnote{Eine nicht oder nur schwer nachvollziehbare Code-Struktur}, Gott-Objekte/Methode\footnote{Ein Objekt / eine Funktion besitzt zuviele Aufgaben}), die schwer bis unmöglich zu testen sind. Hier müsste zuerst refaktorisiert werden, aber da keine Tests vorhanden sind, ist dies aufgrund der Regressionsfehler riskant. %Ein Teufelskreis!
-
-Für ein neues Projekt, it-jobs-und-stellen.de, soll dies nun mit einem anderen Ansatz verlaufen.\\
-Neben der Umstellung auf ein modernes Web-Framework, sollen nun Tests im Einklang zum Code erstellt werden, um auf Knopfdruck umfassende Informationen über den Systemzustand zu erhalten, wie sie ein manueller Test \index{Test}in der Gründlichkeit und Schnelligkeit niemals erreichen kann. Außerdem besteht die Hoffnung auf eine nachhaltige Verbesserung des Designs und der \glossar{quality}, um in Zukunft flexibel auf Änderungen reagieren zu können.
-
-
-\subsection{Die pludoni GmbH}
-
-Die\marginline{\includegraphics[width=0.8\marginparwidth]{material/pludoni.png}\\\centering pludoni GmbH} pludoni GmbH ist ein junges dynamisches Dresdner Unternehmen, welches sich zum Ziel gesetzt hat, lokale Communitys zur gegenseitigen Fachkräfteempfehlung aufzubauen und zu betreuen sowie Tools für die Vereinfachung der Personalarbeit mittelständischer Unternehmen zu entwickeln. Einige Beispiele für diese Communitys sind ITsax.de, ITmitte.de und MINTsax.de\footnote{http://www.itsax.de/, http://www.itmitte.de, http://www.mintsax.de/}.
-
-\paragraph{Funktionsweise der Communitys}
-Die Communitys bestehen jeweils aus mittelständischer Unternehmen einer Branche, Bildungseinrichtungen sowie Vertretern von Städten und Vereinen. Für ITsax.de ist das die IT-Branche. Neben diesem Branchenfokus sammeln sich nur Unternehmen einer spezifischen Region. Bei ITsax.de sind dies Mittel- und Ostsachsen, bei ITmitte.de z.B. Mitteldeutschland, d.h. Thüringen, Sachsen-Anhalt und Westsachsen.
-\begin{table}[htbp]
-\label{tb:dt}
-\caption{Übersicht über pludoni Communitys. Stand September 2011}
-\begin{tabular}{|l|p{3.8cm}|p{5cm}|l|}
-\hline
-\rowcolor{Gray}
-Community & Branche & Region & Mitglieder \\\hline
-ITsax.de & IT, Software & Sachsen (Fokus Süden und Osten) & 63\\\hline
-ITmitte.de & IT, Software & Mitteldeutschland (Thüringen, Sachsen-Anhalt, Westsachsen) & 57 \\\hline
-MINTsax.de & Maschinenbau, Elektrotechnik & Sachsen & 29\\\hline
-OFFICEsax.de & Vertrieb, Bürotätigkeiten & Sachsen & in Vorb.\\\hline
-OFFICEmitte.de & Vertrieb, Bürotätigkeiten & Mitteldeutschland & in Vorb.\\\hline
-\end{tabular}
-\end{table}
-
-
-
-Diese Unternehmen, die einen jährlichen Mitgliedsbeitrag für das Community\hyp{}Management\footnote{Einen Überblick über die Aufgaben eines Community-Managers finden Sie unter \url{http://www.pludoni.de/leistungen}} und die Weiterentwicklung der Portale an die pludoni GmbH zahlen, dürfen ihre für die Region relevanten Jobangebote auf dem jeweiligen Portal einstellen. Was die Communitys von pludoni von der dem bisherigen Online-Jobbörsen unterscheidet, ist das sogenannte \textbf{Empfehlungssystem}.
-
-\begin{figure}[htbp]
- \centering
- \includegraphics[width=0.8\textwidth]{./material/empfehlungscode.png}
- % empfehlungscode.png: 762x463 pixel, 72dpi, 26.88x16.33 cm, bb=0 0 762 463
- \caption{Funktionsweise des Empfehlungscodes}
- \label{fig:empfehlung}
-\end{figure}
-Viele der Personalmitarbeiter der beteiligten Firmen haben dieselbe Erfahrung gemacht, dass sie sehr guten Bewerbern absagen mussten, weil z.B. die Stelle schon vergeben wurde, die Fähigkeiten des Bewerbers nicht den Bedürfnissen des Unternehmens entsprachen oder andere äußere Widrigkeiten eine Einstellung verhinderten. Hier setzt pludoni mit seinen Communitys an und stellt eine Infrastruktur zur gegenseitigen Empfehlung dieser guten Bewerber bereit. Ausgezeichnete Bewerber erhalten neben der Absage einen Empfehlungscode, mit dem sie sich auf dem Online-Jobportal bei einer der anderen Mitgliedsfirmen bewerben können (vgl. Abbildung \ref{fig:empfehlung}). Die Software löst intern den Empfehlungscode auf und bestätigt dieser Firma nun, dass der Bewerber von einem anderen Unternehmen der Community empfohlen wurde.
-
-Dieses Empfehlungssystem überzeugt die beteiligten Unternehmen. Aktuell wurden im letzten Jahr, z.B. auf ITmitte.de, über 800 Bewerbungen über das Portal versendet, von denen mehr als die Hälfte (440) mit Empfehlungscodes versehen waren \citep{joerg_klukas_startseite_2011}. Dies motivierte mittlerweile über 150 Organisationen, bei den drei pludoni Communitys teilzunehmen \citep{joerg_klukas_referenzen_2011}.
-
-\subsection{Arbeitsablauf in der pludoni GmbH}
-\label{sec:arbeitsablauf}
-Die pludoni GmbH stellt sich dem Trend der Dezentralisierung von Arbeit, um einerseits Kundenwünsche zur individuellen Betreuung und andererseits Mitarbeiterwünsche nach flexiblen und familienfreundlichen Arbeitsplätzen gerecht zu werden. Ein Großteil der Arbeit findet somit vor Ort beim Kunden oder in Heim- / Telearbeit statt.
-Zur persönlichen Abstimmung findet aber mindestens einmal pro Woche ein Meeting statt, in welchem sich 2-4 der Mitarbeiter treffen, um alte Aufgaben abzunehmen und neue zu diskutieren. Die Abnahme erfolgt dabei durch den Teamleiter des Projekts oder dem Geschäftsführer Jörg Klukas.
-
-Zentrales Kommunikationsmittel der pludoni GmbH ist, neben der E-Mail, die Online\hyp{}Aufgaben\hyp{} und Fehlerverwaltung Redmine\footnote{\url{http://www.redmine.org} -- ein Web-basiertes Projektmanagement-Tool auf der Basis von Ruby on Rails\index{Ruby-on-Rails}. Redmine kann für Benutzer- und Projektverwaltung, Diskussionsforen, Wikis, zur Ticketverwaltung oder Dokumentenablage genutzt werden, \textit{Wikipedia}}. Dort werden alle Aufgaben und Fehler erfasst und an die zuständigen Personen verteilt.
-Neben den technischen Aufgaben der Entwickler, werden auch nicht-technische Aufgaben der anderen Mitarbeiter verwaltet, wie z.B. die Gewinnung neuer Partner (Akquise), Betreuung der Partner oder administrative Aufgaben.
-
-Trotz dieses Tools und Vorgehensweise ist die dezentrale Kollaboration aber immer mit Nachteilen in der Kommunikation behaftet. Dies hat bei den Programmierern teils gravierende Auswirkungen auf die Produktivität. Einerseits, da gleiche Funktionalität doppelt implementiert wird, weil der Überblick fehlt und somit unnötigerweise neue Fehlerquellen eröffnet werden. Andererseits, weil aufgrund der zeitlich asynchronen Arbeitsleistungen Rückmeldungen der anderen Programmierer oder ein Code-Audit nicht immer gewährleistet werden und Regressionsfehler nicht abgeschätzt werden können, da nicht alle Module bekannt sind.
-
-Für das kommende Projekt soll mithilfe der Testgetriebenen Entwicklung ein feinmaschiges Netz an Tests erstellt werden, um eine stets aktuelle Dokumentation des Quelltextes zu erhalten und das Risiko für Regressionsfehler zu minimieren.
View
8 parts/intro/preambel.tex
@@ -1,10 +1,4 @@
\chapter*{Danksagung}
-Besonderen Dank gilt meinem Betreuer, Prof. Fritzsche, der sich regelmäßig und ausführlich mit meiner Arbeit beschäftigte und mir wertvolle Hinweise erteilte.
-
-Mein Dank gilt auch der Fakultät Informatik und Prof. Wiedemann für das zur Verfügung gestellte Büro, der Bibliothek der HTW-Dresden und Prof. Nestler für das Bestellen von tagesaktueller Literatur.
-
-Ich danke auch meiner Frau, die mich während des Schreibens unterstützt hat und bei der Erstellung der Grafiken Tipps gab. Für die orthografische und expressive Optimierung danke ich meinen Freunden und Kollegen Daniel Schäufele, Jörg Sachse, Martin Schneider, Akos Toth und Stefan Koch.
-
-Diese Arbeit entstand in Zusammenarbeit mit der Firma pludoni GmbH und unter Aufsicht des Geschäftsführers Dr. Jörg Klukas. Ich danke ihm für die Möglichkeit, frei zu arbeiten und viele neue Dinge auszuprobieren und für das Vertrauen, das er dabei in mich gesetzt hat.
+Besonderen Dank gilt meinem Betreuer, ...
View
45 parts/intro/projektbeschreibung.tex
@@ -1,45 +0,0 @@
-\section{Projektbeschreibung und Projektziele}
-Für den praktischen Teil dieser Arbeit soll anhand der Entwicklung einer Ruby-on-Rails\hyp{}Anwendung die Testgetriebene\index{TDD} Entwicklung erprobt und angewendet werden.
-
-Als Ergänzung zu den lokalspezifischen Communitys mit strenger Mitgliederauswahl soll nun ein neues, allgemeines IT-Jobportal entwickelt werden. Der voraussichtliche Name wird IT-Jobs\index{IT-Jobs-Projekt}-Und-Stellen.de\footnote{\url{http://www.it-jobs-und-stellen.de/}} sein.
-
-Ziel soll es sein, den regionalen Organisationen auch eine Alternative zu den Community-Mitgliedschaften anzubieten, um kurzfristigen Personalbedarf zu decken, analog zu den bekannten Online-Stellenbörsen stepstone.de, monster.de und jobscout24\footnote{\url{http://www.stepstone.de} - \url{http://www.monster.de} - \url{http://www.jobscout24.de}}. Parallel zu dieser Arbeit wurden die Anforderungen analysiert und die in Abbildung \ref{fig:usecases} dargestellten Anwendungensfälle bestimmt.
-
-
-\begin{figure}[htbp]
- \centering
- \includegraphics[width=1\textwidth]{./material/usecases.png}
- % usecases.png: 930x899 pixel, 51dpi, 46.50x44.95 cm, bb=
- \caption{Anwendungsfälle}
- \label{fig:usecases}
-\end{figure}
-
-
-\subsection{Anwendungsfälle}
-Es gibt zwei verschiedene Nutzertypen. Zum einen der \textit{Bewerber}, der das Ziel hat, einen Job zu suchen, zu finden und sich darauf zu bewerben. Zum anderen der Mitarbeiter eines Kundenunternehmenes (\textit{Arbeitgeber}), der Stellenanzeigen auf der Webseite schalten möchte.
-Verbal formuliert sind die Anwendungsfälle die Folgenden:
-\begin{itemize}
- \item Ein Bewerber kann die Webseite nach sichtbaren Stellenangeboten durchsuchen.
- \item Ein Bewerber kann die Detailanzeige einer Stelle betrachten.
- \item Ein Bewerber kann sich auf eine Stelle über das System bewerben. Dabei kann er auch eine Verbindung zu seinem Facebook- oder LinkedIn-Account herstellen, falls er das möchte, um so automatisch einen Lebenslauf generieren zu lassen und Stammdaten eintragen zu lassen.
- \item Ein Kunde kann sich am Portal registrieren, dann anmelden und wird so zum \textit{Arbeitgeber}.
- \item Ein Arbeitgeber kann eine Stellenanzeige für ein Vielfaches von 30 Tagen schalten. Damit wird ein Bezahlvorgang über ein Drittanbieterportal (z.B. PayPal) ausgelöst und bei Bestätigung die Stelle sichtbar geschaltet. Er kann dazu zwischen 5 verschiedenen Designs wählen sowie Logo und Bild hinzufügen.
- \item Ein Arbeitgeber kann eine Stelle verlängern oder kopieren, um als sie als Vorlage für ein neues Stellenangebot zu nutzen.
- \item Ein Arbeitgeber kann eine laufende Stelle erneuern (refresh), um so seine Platzierung verbessern. Dies ist möglich, weil die Aktualität einer Stelle Auswirkungen auf die Platzierung in den Suchergebnissen hat. Ein Refresh kostet Geld und löst somit wieder einen Bezahlvorgang aus.
- \item Ein Arbeitgeber kann Statistiken über seine geschalteten Stellenanzeigen einsehen. Dies beinhaltet die Anzahl der Zugriffe pro Tag und Anzahl der Bewerbungen je Stelle.
- \item Ein Arbeitgeber kann seine Stellen mittels eines XML-Feed-Imports automatisiert einlesen. Dazu bezahlt er einen Pauschalbetrag je Kalenderjahr. Das System liest alle 6 Stunden automatisiert diesen Feed ein, der durch HTTP erreichbar sein muss und überträgt gültige Stellenanzeigen in die Datenbank\index{Datenbank}. Nicht mehr in dem Feed enthaltene Stellenanzeigen des Arbeitgebers werden in der Datenbank auf "`unsichtbar"' gesetzt. Das Format ist eine Modifikation von \glossar{RSS} 2.0.
-\end{itemize}
-
-
-
-\subsection{Nichtfunktionale Anforderungen}
-Folgende Rahmenbedingungen und zusätzliche Ziele wurden vereinbart.
-
-\begin{itemize}
- \item Eine hohe C0-\glossar{Testabdeckung} von mindestens 95\% als Grundlage für weitere Arbeiten und für den Prozess der Testgetriebenen Entwicklung\index{TDD}
- \item Eine hohe Erweiterbarkeit, um langfristig auch die bereits vorhandenen Communityportale durch das neue System zu ersetzen, welche gegenwärtig auf dem Framework \textbf{Drupal} 5 (PHP) basieren
- \item Eine moderne Suchfunktion durch einen Suchdaemon, z.B. Sphinx\footnote{\url{http://sphinxsearch.com/}} oder Lucene\footnote{\url{http://lucene.apache.org/java/docs/index.html}}
- \item Softwarestack: Ruby 1.9.2 mit Ruby on Rails 3.1, JavaScript\index{JavaScript} mit JQuery 1.6
- \item Die Software soll eine möglichst einfache und eingängige Bedienung haben
-\end{itemize}
-
View
10 parts/main_part.tex
@@ -0,0 +1,10 @@
+\chapter{Einleitung}
+\input{parts/intro/motivation}
+% Projekt description
+\input{parts/intro/aufbau}
+
+\chapter{Analyse}
+% ...
+
+\include{parts/outro/fazit}
+
View
4 parts/outro/fazit.tex
@@ -1,7 +1,5 @@
\chapter{Fazit}
\label{sec:fazit}
-\epigraph{Write the tests you wish you had. If you don't, you will eventually break something while refactoring. Then you'll get bad feelings about refactoring and stop doing it so much. Then your design will deteriorate. You'll be fired. Your dog will leave you. You will stop paying attention to your nutrition. Your teeth will go bad. So, to keep your teeth healthy retroactively test before refactoring.}{Kent Beck \citep{beck_test_2002}}
-
-In diesem abschließendem Kapitel werden erreichte Ergebnisse zusammengefasst und ein Ausblick für weitere Forschungen auf dem Gebiet der Testgetriebenen Entwicklung gegeben.
+\epigraph{Write the tests you wish you had. If you don't, you will eventually break something while refactoring. Then you'll get bad feelings about refactoring and stop doing it so much. Then your design will deteriorate. You'll be fired. Your dog will leave you. You will stop paying attention to your nutrition. Your teeth will go bad. So, to keep your teeth healthy retroactively test before refactoring.}{Kent Beck}
\section{Zusammenfassung}
View
60 parts/partials/custom_commands.tex
@@ -0,0 +1,60 @@
+% \fullref{sec:bla} -> "8.2 - 'Name der Subsection"
+% zum Verweis mit Wiederholung des Verweistitels
+\newcommand{\fullref}[1]{\ref{#1} -- \glqq\,\textit{\nameref{#1}}\grqq}
+
+
+% graphik on the right or left border (dep. on twosided)
+\newcommand{\bordergraphic}[1]{\marginline{\includegraphics[width=0.8\marginparwidth]{#1}}}
+
+% text on the border
+\newcommand{\randbem}[1]{\marginpar[\fontsize{9}{10}\selectfont \raggedleft{#1}]
+ {\fontsize{9}{10}\selectfont \raggedright{#1}}
+}
+% quote on the border
+\newcommand{\borderquote}[2]{\setlength{\epigraphwidth}{\marginparwidth}
+\marginpar{\fontsize{9}{10} \epigraph{#1}{#2}}
+\setlength{\epigraphwidth}{0.8\textwidth}
+}
+
+
+% Einheitliche Bildquelle als zusaetzliches Label
+\newcommand{\imgsource}[1]{\captionsetup{font={footnotesize,bf,it}} \caption*{#1}}
+
+% convenient long arrow
+\newcommand{\arr}{$ \Longrightarrow$}
+
+
+% load ruby as a standard listing
+\lstloadlanguages{Ruby}
+\lstset{%
+ basicstyle=\ttfamily\footnotesize\color{black},
+ commentstyle = \ttfamily\color{gray},
+ keywordstyle=\ttfamily\color{blue},
+ stringstyle=\color{red},
+ showspaces=false, % show spaces adding particular underscores
+ showstringspaces=false,
+ frame=single,
+ breaklines=true
+}
+% Allow umlauts in lstlistings
+\lstset{literate=%
+{Ö}{{\"O}}1
+{Ä}{{\"A}}1
+{Ü}{{\"U}}1
+{ß}{{\ss}}2
+{ü}{{\"u}}1
+{ä}{{\"a}}1
+{ö}{{\"o}}1
+}
+
+% fancy glossar reference with arrow in front of
+\newcommand{\glossar}[1]{$^\uparrow$\gls{#1}}
+\newcommand{\glossarpl}[1]{$^\uparrow$\glspl{#1}}
+
+ % make table beautiful:
+ % zebra colors, more difference, header bg color
+ % cannot be earlier, because frontpage uses tables for positioning
+\newcommand{\fancytables}{\rowcolors{1}{lightgray!50!white}{white}
+\colorlet{tableheadcolor}{gray!40}
+\renewcommand\arraystretch{1.25}% (MyValue=1.0 is for standard spacing)
+}
View
72 parts/partials/includes.tex
@@ -0,0 +1,72 @@
+\documentclass[ a4paper,
+ 12pt,
+ twoside, % Links und Rechtsseitig vertauschter Abstand
+ openany, % Chapter beginnen auf rechter Seite
+ parskip,
+ % tocbasic,
+ final, % DEBUG modus
+ 11pt,
+ % draft, # DEBUG MOUS
+ appendixprefix,
+ % headsepline, % Linie nach Kopfzeile.
+ % footsepline, % Linie vor Fusszeile.
+ % bibtotocnumbered, % Literaturverzeichnis im Inhaltsverzeichnis nummeriert einfügen.
+ chapterprefix % Kapitel anschreiben als Kapitel
+ ]{scrreprt}
+\usepackage[twoside,width=14cm, height=24cm,right=3.25cm, left=2.5cm]{geometry}
+
+% Hyphenate, names of toc etc.
+\usepackage[ngerman]{babel}
+
+\usepackage[utf8]{inputenc} %Damit kann man auch Umlaute direkt eintippen \o/
+\usepackage{textcomp}
+\usepackage{amsmath}
+\usepackage{amssymb}
+\usepackage{amsbsy}
+\usepackage{amsfonts}
+\usepackage{amsthm}
+\usepackage{graphicx} %including images
+\usepackage{fancyhdr} %for editiable headers and footers
+\usepackage{setspace} %for 1,5times row space
+\usepackage{color}
+\definecolor{darkblue}{rgb}{0,0,.5}
+\usepackage[colorlinks,
+ pdfpagelabels,pdfstartview=FitH,bookmarksopen=true,bookmarksnumbered=true,
+ linkcolor= black,
+ plainpages=false,
+ hypertexnames=false,
+ citecolor=black,linkcolor=black,menucolor=black,urlcolor=darkblue]
+{hyperref}
+%clickable TOC
+\usepackage{multirow} %linebreak in Table
+\usepackage{enumerate} % \begin{enumerate}[a.] Custom Nummerierung
+\usepackage{float} % Images mit Float
+\usepackage{colortbl} %colorTables
+\usepackage{framed} %begin{framed}
+\usepackage{longtable} %begin{longtable}
+\usepackage{makeidx}
+\usepackage[square,sort&compress,comma,numbers]{natbib}
+ % choose your cite style
+\usepackage{epigraph} % \epigraph = nice quotes
+\usepackage{caption} % Modifizierung und setzen von custom captions
+\usepackage[dvipsnames,table]{xcolor}
+\usepackage[nottoc]{tocbibind} % TOC Plugin -> ??
+\usepackage{relsize}
+\usepackage[toc]{glossaries}
+\usepackage{setspace} % Allow setting of \setstrech
+
+%\usepackage{marginnote}
+\usepackage{listings} % default source code listings
+\usepackage{minted}
+\usepackage{hyphenat}
+\usepackage[T1]{fontenc}
+
+\title{\ownTitle}
+\author{\ownAutor}
+\pdfinfo{
+ /Title (\ownTitle)
+ /Author (\ownAutor)
+ /Subject (\ownTitleZ)
+ /Keywords()
+}
+\date{\today}
View
19 parts/partials/listen.tex
@@ -1,11 +1,20 @@
-%\setstretch{1,0} % Mein TOC ist zu lang!!
+\printglossary[toctitle=Glossar]
+%\setstretch{1,0}
\listoffigures
-%\setstretch{1,25} % Mein TOC ist zu lang!!
+%\setstretch{1,25}
-\addcontentsline{toc}{chapter}{Quellcode-Listings}
-\lstlistoflistings
-% \cite{*} % Alles Zitieren DEBUG
+% plain lst listings ...
+%\addcontentsline{toc}{chapter}{Quellcode-Listings}
+%\lstlistoflistings
+
+
+% better listings
+\renewcommand\listoflistingscaption{Quellcode-Verzeichnis}
+\listoflistings
+
+
+% \cite{*} % everything from .bib to bibliography
\bibliographystyle{alphadin} % Kurz
%\bibliographystyle{natbib} % Verbos
View
42 parts/partials/style.tex
@@ -0,0 +1,42 @@
+
+\setlength{\epigraphwidth}{.8\textwidth}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% HEAD AND FOOTLINES
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagestyle{headings}
+\definecolor{Gray}{rgb}{0.85,0.85,0.90}
+
+\makeindex %start Aufzeichnung eines Stichwortverzeichnisses
+\makeglossary %start Aufzeichnung eines Glossars
+
+%%%%%%%%%%%%%%%%%%%%%% STYLINGS & FONTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\renewcommand{\footrulewidth}{0.5pt}
+%\let\cleardoublepage\clearpage
+\parskip 5pt % sets spacing between paragraphs
+\parindent 0pt
+
+
+\usepackage{bookman} % 118 pages, sehr sauber
+% \usepackage{newcent} % 116 pages, nice aber etwas zu kraeftig
+% \usepackage{lmodern} % 109 pages, standardmaessig
+% \usepackage{boisik} % 113 pages, gewagt aber sehr detailiert, etwas ungerade
+% \usepackage{palatino} % 111 pages, Arial'y sehr langweilig in den Ueberschriften
+% \usepackage{cmbright} % 111 pages, Wie ein modernes Buch. Gut fuer ne Doku oder so
+ \usepackage{charter} % 109 pages, Wie ein modernes Buch. Gut fuer ne Doku oder so
+%\fontsize{12}{15}
+
+
+
+% make the TOC smaller in depth
+% \setcounter{tocdepth}{2} %kleineres TOC
+
+
+\setlength{\marginparwidth}{2.25cm}
+\clubpenalty = 10000
+\widowpenalty = 10000 \displaywidowpenalty = 10000
+
+
+
+
+% set default options for syntax hl
+\newminted{ruby}{linenos, numbersep=10pt,frame=single, framesep=2mm, rulecolor=\color{gray}}
View
0 pdf/.gitkeep
No changes.

0 comments on commit 43aa440

Please sign in to comment.
Something went wrong with that request. Please try again.