SlideShare uma empresa Scribd logo
1 de 17
Baixar para ler offline
Automatisierung mit NANA
           Documentation
                Release 0.1




                   Steinam




                   26. 02. 2010
Inhaltsverzeichnis




1   Einführung                                                                                                        3

2   Installation der beteiligten Komponenten                                                                          5
    2.1 Struktur des Beispielprojektes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    5
    2.2 Ordnerstruktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    9

3   Erstellen der Konfiguration                                                                                       11
    3.1 Struktur der Konfigurationsatei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     11

4   Indices and tables                                                                                               13




                                                                                                                      i
ii
Automatisierung mit NANA Documentation, Release 0.1


Inhaltsverzeichnis:




Inhaltsverzeichnis                                                     1
Automatisierung mit NANA Documentation, Release 0.1




2                                                     Inhaltsverzeichnis
KAPITEL 1




                                                                                      Einführung


NANT (http://nant.sourceforge.net) ist ein Tool zum Erstellen von Skripten und ist damit ein wesentliches Element
der Automatisation der Softwareentwicklung. Mit Hilfe von NANT ist es möglich, die Abläufe der verschiedenen
Prozesse einer Softwareentwicklung unter einem Skript zusammenzufassen.
Ein Vorläufer von NANT ist das java-basierte ANT (http://ant.apache.org), von dem es wesentliche Konzepte über-
nommen hat. Das Microsoft-eigene Build-Tool msbuild (http://msbuild.microsoft.com) hat sich wiederun an NANT
orientiert und weitere Elemente hinzugefügt. Wer innerhalb der .NET-Plattform entwickelt, sollte sich daher mehr mit
MSBUILD als mit NANT beschäftigen.
Im folgenden Tutorial soll innerhalb von 5 Runden das Zusammenführen unterschiedlicher Aspekte der Softwareent-
wicklung dargestellt werden.
    • Runde 1: Installation der entsprechenden Komponenten
    • Runde 2: Löschen und Kompilieren des Quellcodes anhand verscheidener Variationen
    • Runde 3: Ausführen von Unit-Tests
    • Runde 4: Aufruf eines Installers
    • Runde 5: Generieren einer API-Dokumentation
Das Tutorial setzt das .NET-Framework-SDK in der Version 4.0 voraus. Das .sln-File des Projektes ist mit der Version
11 definiert, welches die Verwendung von Visual Studio 2010 voraussetzt.
Die verwendeten Tools sind:
    • NUNIT (http://www.nunit.org) zum Erstellen und Durchführen der Unit-Tests
    • Doxygen (http://www.doxygen.org) zum Erstellen der API-Dokuemntation
    • Innosetup (http://www.jrsoftware.org/isinfo.php) zum Erstellen des Installers




                                                                                                                  3
Automatisierung mit NANA Documentation, Release 0.1




4                                                     Kapitel 1. Einführung
KAPITEL 2




                                    Installation der beteiligten
                                                 Komponenten


NANT wird als einfache gepackte Datei zum Download angeboten und muss nicht weiter installiert werden. Die
ausführbare Datei befindet sich im Unterordner bin.


2.1 Struktur des Beispielprojektes

Beim Programm geht es um eine bereits in frühreren Zeiten verwendete selbstgeschriebene Stack-Klasse namens
Stapel, die mit Hilfe von UnitTests (StackTest) überprüft wird.




                                                                                                         5
Automatisierung mit NANA Documentation, Release 0.1




Der Quellcode der entsprechenden Klassen sieht wie folgt aus:

using System;
using System.Collections;

namespace StackTest
{
      /// <summary>
      /// Description of Stapel.
      /// </summary>
      public class Stapel
      {

                  bool emptyState = true;
                  //object myValue; tEST % GEHT SDO NICHT
                  ArrayList myValue = new ArrayList();

                  /// <summary>
                  /// Gibt an, ob der Stack leer ist oder nicht



6                                                     Kapitel 2. Installation der beteiligten Komponenten
Automatisierung mit NANA Documentation, Release 0.1



                    /// </summary>
                    /// <returns>true für leer, false für voll</returns>
                    public bool isEmpty()
                    {
                        return emptyState;
                    }

                    /// <summary>
                    /// test 4 macht Halten eines Objektes notwendig
                    /// </summary>
                    /// <param name="value"></param>
                    public void push(object value)
                    {
                        myValue.Add(value);
                        emptyState = false;
                    }

                    /// <summary>
                    /// Wird durch den 4. test von void auf object geändert
                    /// </summary>
                    public object pop()
                    {
                        emptyState = true;
                        return myValue;
                    }
        }
}

Die entsprechenden UnitTests befinden sich im Projekt StackTest und halten eine Referen auf die Klassenbibliothek
Stapel

    using System;
    using NUnit.Framework;

    namespace StackTest
{
         /// <summary>
         /// Description of StapelTest.
         /// </summary>
         [TestFixture]
     public class StapelTest
     {
                 static Stapel myStack;

            /// <summary>
            /// Wird bei jedem Aufruf einer testmethode vorher
            /// ausgeführt
            /// </summary>
            [SetUp]
            public void Init()
            {
                myStack = new Stapel();
            }

            ///   <summary>
            ///   Create a Stack and verify that
            ///   IsEmpty is true.
            ///   </summary>


2.1. Struktur des Beispielprojektes                                                                           7
Automatisierung mit NANA Documentation, Release 0.1



       [Test]
       public static void testOne()
       {
           Assert.IsTrue(myStack.isEmpty());
       }

       /// <summary>
       /// Nach Hinzufügen eines Elementes muss
       /// isEmpty false zurückgeben
       /// </summary>
       [Test]
       public static void testTwo()
       {
           myStack.push("hello");
           Assert.IsFalse(myStack.isEmpty());
       }


       /// <summary>
       /// Hinzufügen - Wegnehmen --> isEmpty ergibt true
       /// </summary>
       [Test]
       public static void testThree()
       {
           myStack.push("hello");
           myStack.pop();
           Assert.IsTrue(myStack.isEmpty());
       }


       /// <summary>
       /// Hinzufügen von hello und holen von hello muss eine ObjektGleichheit ergeben
       /// </summary>
       [Test]
       public static void testFour()
       {
           myStack.push("hello");
           object x = myStack.pop();
           Assert.AreEqual("hello", x);

       }


       /// <summary>
       /// Hinzufügen und Wegnehmen mehrerer Elemente muss jeweils Objektgleichheit ergeben
       /// </summary>
       [Test]
       public static void testFive()
       {
           string a = "hello";
           string b = "mr.";
           string c = "steinam";

           myStack.push(a);
           myStack.push(b);
           myStack.push(c);

           object z = myStack.pop();



8                                          Kapitel 2. Installation der beteiligten Komponenten
Automatisierung mit NANA Documentation, Release 0.1



              Assert.AreEqual(c, z);
              object y = myStack.pop();
              Assert.AreEqual(b, y);
              object x = myStack.pop();
              Assert.AreEqual(a, x);
         }
    }
}



2.2 Ordnerstruktur

Die Struktur des Dateisystems ist wie folgt:




    • C:nant_stack: Grundlegender Hauptordner
    • C:nant_stackapi_doc: Nimmt die von doxygen generierte API-Dokumentation auf
    • C:nant_stacksetup: Nimmt die Konfigurationsdatei von Innosetup sowie das Ergebnis des Innosetup-Comilers
      (Setup.exe) setup.exe auf.
    • C:nant_stacklogfiles: Nimmt die Logfiles auf
    • C:nant_stacknant_086bin: Ausführbare Datei nant.exe
    • C:nant_stackStapel: Quellcode der Stapel-Klasse


2.2. Ordnerstruktur                                                                                          9
Automatisierung mit NANA Documentation, Release 0.1


     • C:nant_stackStackTest: Quellcode der Testklassen




10                                                     Kapitel 2. Installation der beteiligten Komponenten
KAPITEL 3




                                    Erstellen der Konfiguration


NANT erwartet eine Beschreibung der aufzurufenden Prozesse in einer Konfigurationsdatei. Diese wird standardmäßig
default.build genannt. NANT sucht nach dem Aufruf im jeweils aktuellen Ordner nach dieser Datei. Andere Namen
kann man per Parameter an NANT übergeben


3.1 Struktur der Konfigurationsatei

Die Konfigurationsdatei wird mit Hilfe von XML-Tags beschrieben. Die grundlegende Struktur ist der sog. project -
Tag, der ein Projekt beschreibt.
Innerhalb dieser Struktur definieren sog. Target-Tags die einzelnen zu erledigenden Aufgaben.
Innerhalb der Target-Struktur werden dann die einzelnen Aufgaben durch sog. Tasks definiert.
Ein Beispiel für eine einfache Beschreibung könnte wie folgt aussehen:

<project name="Teacher" default="rebuild">
      <target name="compileDebug">
          <exec program="${devEnvPath}">
              <arg value="c:/nant_stack/StackTest/StackTest.sln" />
              <arg value="/build" />
              <arg value="Debug" />
           </exec>
      </target>

      <target name="rebuild" depends="compileDebug" />
</project>

</project>




                                                                                                             11
Automatisierung mit NANA Documentation, Release 0.1




12                                                    Kapitel 3. Erstellen der Konfiguration
KAPITEL 4




                 Indices and tables


• Index
• Module Index
• Search Page




                                     13

Mais conteúdo relacionado

Destaque

Geburtstag Dominik
Geburtstag DominikGeburtstag Dominik
Geburtstag DominikKevge
 
Socialmedia in den Lehrplan ?
Socialmedia in den Lehrplan ?Socialmedia in den Lehrplan ?
Socialmedia in den Lehrplan ?Judith Denkmayr
 
SSD vs. HDD, Risiken und Nebenwirkungen der Flash Technologie
SSD vs. HDD, Risiken und Nebenwirkungen der Flash TechnologieSSD vs. HDD, Risiken und Nebenwirkungen der Flash Technologie
SSD vs. HDD, Risiken und Nebenwirkungen der Flash TechnologieKroll Ontrack GmbH
 
Estrel Berlin: Highlights im Herbst & Winter 2014
Estrel Berlin: Highlights im Herbst & Winter 2014Estrel Berlin: Highlights im Herbst & Winter 2014
Estrel Berlin: Highlights im Herbst & Winter 2014Estrel Berlin
 
Treppenlifte Lehrstuhl
Treppenlifte LehrstuhlTreppenlifte Lehrstuhl
Treppenlifte Lehrstuhlsabrinageli
 
Mit Social Media bewegen
Mit Social Media bewegenMit Social Media bewegen
Mit Social Media bewegenAlexander Derno
 
Effektif Launch Demo (German)
Effektif Launch Demo (German)Effektif Launch Demo (German)
Effektif Launch Demo (German)Tom Baeyens
 
Duitsland Eifel 2005 11 11->13
Duitsland Eifel 2005  11 11->13Duitsland Eifel 2005  11 11->13
Duitsland Eifel 2005 11 11->13Her Hert
 
Employer Branding im Web 2.0
Employer Branding im Web 2.0Employer Branding im Web 2.0
Employer Branding im Web 2.0pludoni GmbH
 
M.K. Tel 24 Info
M.K. Tel 24 InfoM.K. Tel 24 Info
M.K. Tel 24 InfoM.K. Tel 24
 
Bat open data und datenwirtschaft in der schweiz_20150619
Bat open data und datenwirtschaft in der schweiz_20150619Bat open data und datenwirtschaft in der schweiz_20150619
Bat open data und datenwirtschaft in der schweiz_20150619Andre Golliez
 
Window Mobile Antivirus
Window Mobile AntivirusWindow Mobile Antivirus
Window Mobile Antivirussabrinageli
 
#StreetViewTorte - Learnings einer erfolgreichen Kampagne
#StreetViewTorte - Learnings einer erfolgreichen Kampagne#StreetViewTorte - Learnings einer erfolgreichen Kampagne
#StreetViewTorte - Learnings einer erfolgreichen KampagneBenjamin Buhl
 

Destaque (20)

Sebastian Vettel
Sebastian VettelSebastian Vettel
Sebastian Vettel
 
Geburtstag Dominik
Geburtstag DominikGeburtstag Dominik
Geburtstag Dominik
 
Socialmedia in den Lehrplan ?
Socialmedia in den Lehrplan ?Socialmedia in den Lehrplan ?
Socialmedia in den Lehrplan ?
 
Rene Valencia Fuentes
Rene Valencia FuentesRene Valencia Fuentes
Rene Valencia Fuentes
 
Ensayo
EnsayoEnsayo
Ensayo
 
Tics webquest
Tics webquestTics webquest
Tics webquest
 
SSD vs. HDD, Risiken und Nebenwirkungen der Flash Technologie
SSD vs. HDD, Risiken und Nebenwirkungen der Flash TechnologieSSD vs. HDD, Risiken und Nebenwirkungen der Flash Technologie
SSD vs. HDD, Risiken und Nebenwirkungen der Flash Technologie
 
Estrel Berlin: Highlights im Herbst & Winter 2014
Estrel Berlin: Highlights im Herbst & Winter 2014Estrel Berlin: Highlights im Herbst & Winter 2014
Estrel Berlin: Highlights im Herbst & Winter 2014
 
Treppenlifte Lehrstuhl
Treppenlifte LehrstuhlTreppenlifte Lehrstuhl
Treppenlifte Lehrstuhl
 
Sistema
SistemaSistema
Sistema
 
Mit Social Media bewegen
Mit Social Media bewegenMit Social Media bewegen
Mit Social Media bewegen
 
Indi aimee
Indi aimeeIndi aimee
Indi aimee
 
Showdown ss2013
 Showdown ss2013 Showdown ss2013
Showdown ss2013
 
Effektif Launch Demo (German)
Effektif Launch Demo (German)Effektif Launch Demo (German)
Effektif Launch Demo (German)
 
Duitsland Eifel 2005 11 11->13
Duitsland Eifel 2005  11 11->13Duitsland Eifel 2005  11 11->13
Duitsland Eifel 2005 11 11->13
 
Employer Branding im Web 2.0
Employer Branding im Web 2.0Employer Branding im Web 2.0
Employer Branding im Web 2.0
 
M.K. Tel 24 Info
M.K. Tel 24 InfoM.K. Tel 24 Info
M.K. Tel 24 Info
 
Bat open data und datenwirtschaft in der schweiz_20150619
Bat open data und datenwirtschaft in der schweiz_20150619Bat open data und datenwirtschaft in der schweiz_20150619
Bat open data und datenwirtschaft in der schweiz_20150619
 
Window Mobile Antivirus
Window Mobile AntivirusWindow Mobile Antivirus
Window Mobile Antivirus
 
#StreetViewTorte - Learnings einer erfolgreichen Kampagne
#StreetViewTorte - Learnings einer erfolgreichen Kampagne#StreetViewTorte - Learnings einer erfolgreichen Kampagne
#StreetViewTorte - Learnings einer erfolgreichen Kampagne
 

Semelhante a Automatisierungmit NANT

2009 03 17 Spring101
2009 03 17 Spring1012009 03 17 Spring101
2009 03 17 Spring101gueste4be40
 
Drohnen und WARP-Antriebe
Drohnen und WARP-AntriebeDrohnen und WARP-Antriebe
Drohnen und WARP-Antriebeberndmueller
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...GFU Cyrus AG
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppetinovex GmbH
 
Automated testing of JavaFX UI components
Automated testing of JavaFX UI componentsAutomated testing of JavaFX UI components
Automated testing of JavaFX UI componentsWolfgang Weigend
 
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...inovex GmbH
 
Ionic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenIonic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenHendrik Lösch
 
Mögen die Tests mit dir sein
Mögen die Tests mit dir seinMögen die Tests mit dir sein
Mögen die Tests mit dir seincodepitbull
 
Java Batch: Der neue Standard für‘s Stapeln
Java Batch: Der neue Standard für‘s StapelnJava Batch: Der neue Standard für‘s Stapeln
Java Batch: Der neue Standard für‘s Stapelngedoplan
 
Nagios Conference 2007 | Vmware Monitoring by Ingo Latschner
Nagios Conference 2007 | Vmware Monitoring by Ingo LatschnerNagios Conference 2007 | Vmware Monitoring by Ingo Latschner
Nagios Conference 2007 | Vmware Monitoring by Ingo LatschnerNETWAYS
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsQAware GmbH
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsJosef Adersberger
 
Oracle Critical Patch Update und Patch Set Update - DOAG SIG Security 2011 - ...
Oracle Critical Patch Update und Patch Set Update - DOAG SIG Security 2011 - ...Oracle Critical Patch Update und Patch Set Update - DOAG SIG Security 2011 - ...
Oracle Critical Patch Update und Patch Set Update - DOAG SIG Security 2011 - ...OPITZ CONSULTING Deutschland
 
OSDC 2011 | Enterprise Cloud Lösung - Open Stack in der Praxis by Christian B...
OSDC 2011 | Enterprise Cloud Lösung - Open Stack in der Praxis by Christian B...OSDC 2011 | Enterprise Cloud Lösung - Open Stack in der Praxis by Christian B...
OSDC 2011 | Enterprise Cloud Lösung - Open Stack in der Praxis by Christian B...NETWAYS
 
TYPO3 CMS 7.3 - Die Neuerungen - pluswerk
TYPO3 CMS 7.3 - Die Neuerungen - pluswerkTYPO3 CMS 7.3 - Die Neuerungen - pluswerk
TYPO3 CMS 7.3 - Die Neuerungen - pluswerkdie.agilen GmbH
 

Semelhante a Automatisierungmit NANT (20)

FLOW3-Workshop F3X12
FLOW3-Workshop F3X12FLOW3-Workshop F3X12
FLOW3-Workshop F3X12
 
Einsteiger Workshop
Einsteiger WorkshopEinsteiger Workshop
Einsteiger Workshop
 
2009 03 17 Spring101
2009 03 17 Spring1012009 03 17 Spring101
2009 03 17 Spring101
 
Feature Flags mit Togglz
Feature Flags mit TogglzFeature Flags mit Togglz
Feature Flags mit Togglz
 
Drohnen und WARP-Antriebe
Drohnen und WARP-AntriebeDrohnen und WARP-Antriebe
Drohnen und WARP-Antriebe
 
Test-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetpro
Test-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetproTest-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetpro
Test-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetpro
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppet
 
Automated testing of JavaFX UI components
Automated testing of JavaFX UI componentsAutomated testing of JavaFX UI components
Automated testing of JavaFX UI components
 
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
 
Ionic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenIonic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf Steroiden
 
Mögen die Tests mit dir sein
Mögen die Tests mit dir seinMögen die Tests mit dir sein
Mögen die Tests mit dir sein
 
Java Batch: Der neue Standard für‘s Stapeln
Java Batch: Der neue Standard für‘s StapelnJava Batch: Der neue Standard für‘s Stapeln
Java Batch: Der neue Standard für‘s Stapeln
 
Testing tools
Testing toolsTesting tools
Testing tools
 
Nagios Conference 2007 | Vmware Monitoring by Ingo Latschner
Nagios Conference 2007 | Vmware Monitoring by Ingo LatschnerNagios Conference 2007 | Vmware Monitoring by Ingo Latschner
Nagios Conference 2007 | Vmware Monitoring by Ingo Latschner
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Oracle Critical Patch Update und Patch Set Update - DOAG SIG Security 2011 - ...
Oracle Critical Patch Update und Patch Set Update - DOAG SIG Security 2011 - ...Oracle Critical Patch Update und Patch Set Update - DOAG SIG Security 2011 - ...
Oracle Critical Patch Update und Patch Set Update - DOAG SIG Security 2011 - ...
 
OSDC 2011 | Enterprise Cloud Lösung - Open Stack in der Praxis by Christian B...
OSDC 2011 | Enterprise Cloud Lösung - Open Stack in der Praxis by Christian B...OSDC 2011 | Enterprise Cloud Lösung - Open Stack in der Praxis by Christian B...
OSDC 2011 | Enterprise Cloud Lösung - Open Stack in der Praxis by Christian B...
 
TYPO3 CMS 7.3 - Die Neuerungen - pluswerk
TYPO3 CMS 7.3 - Die Neuerungen - pluswerkTYPO3 CMS 7.3 - Die Neuerungen - pluswerk
TYPO3 CMS 7.3 - Die Neuerungen - pluswerk
 

Automatisierungmit NANT

  • 1. Automatisierung mit NANA Documentation Release 0.1 Steinam 26. 02. 2010
  • 2.
  • 3. Inhaltsverzeichnis 1 Einführung 3 2 Installation der beteiligten Komponenten 5 2.1 Struktur des Beispielprojektes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Ordnerstruktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3 Erstellen der Konfiguration 11 3.1 Struktur der Konfigurationsatei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 4 Indices and tables 13 i
  • 4. ii
  • 5. Automatisierung mit NANA Documentation, Release 0.1 Inhaltsverzeichnis: Inhaltsverzeichnis 1
  • 6. Automatisierung mit NANA Documentation, Release 0.1 2 Inhaltsverzeichnis
  • 7. KAPITEL 1 Einführung NANT (http://nant.sourceforge.net) ist ein Tool zum Erstellen von Skripten und ist damit ein wesentliches Element der Automatisation der Softwareentwicklung. Mit Hilfe von NANT ist es möglich, die Abläufe der verschiedenen Prozesse einer Softwareentwicklung unter einem Skript zusammenzufassen. Ein Vorläufer von NANT ist das java-basierte ANT (http://ant.apache.org), von dem es wesentliche Konzepte über- nommen hat. Das Microsoft-eigene Build-Tool msbuild (http://msbuild.microsoft.com) hat sich wiederun an NANT orientiert und weitere Elemente hinzugefügt. Wer innerhalb der .NET-Plattform entwickelt, sollte sich daher mehr mit MSBUILD als mit NANT beschäftigen. Im folgenden Tutorial soll innerhalb von 5 Runden das Zusammenführen unterschiedlicher Aspekte der Softwareent- wicklung dargestellt werden. • Runde 1: Installation der entsprechenden Komponenten • Runde 2: Löschen und Kompilieren des Quellcodes anhand verscheidener Variationen • Runde 3: Ausführen von Unit-Tests • Runde 4: Aufruf eines Installers • Runde 5: Generieren einer API-Dokumentation Das Tutorial setzt das .NET-Framework-SDK in der Version 4.0 voraus. Das .sln-File des Projektes ist mit der Version 11 definiert, welches die Verwendung von Visual Studio 2010 voraussetzt. Die verwendeten Tools sind: • NUNIT (http://www.nunit.org) zum Erstellen und Durchführen der Unit-Tests • Doxygen (http://www.doxygen.org) zum Erstellen der API-Dokuemntation • Innosetup (http://www.jrsoftware.org/isinfo.php) zum Erstellen des Installers 3
  • 8. Automatisierung mit NANA Documentation, Release 0.1 4 Kapitel 1. Einführung
  • 9. KAPITEL 2 Installation der beteiligten Komponenten NANT wird als einfache gepackte Datei zum Download angeboten und muss nicht weiter installiert werden. Die ausführbare Datei befindet sich im Unterordner bin. 2.1 Struktur des Beispielprojektes Beim Programm geht es um eine bereits in frühreren Zeiten verwendete selbstgeschriebene Stack-Klasse namens Stapel, die mit Hilfe von UnitTests (StackTest) überprüft wird. 5
  • 10. Automatisierung mit NANA Documentation, Release 0.1 Der Quellcode der entsprechenden Klassen sieht wie folgt aus: using System; using System.Collections; namespace StackTest { /// <summary> /// Description of Stapel. /// </summary> public class Stapel { bool emptyState = true; //object myValue; tEST % GEHT SDO NICHT ArrayList myValue = new ArrayList(); /// <summary> /// Gibt an, ob der Stack leer ist oder nicht 6 Kapitel 2. Installation der beteiligten Komponenten
  • 11. Automatisierung mit NANA Documentation, Release 0.1 /// </summary> /// <returns>true für leer, false für voll</returns> public bool isEmpty() { return emptyState; } /// <summary> /// test 4 macht Halten eines Objektes notwendig /// </summary> /// <param name="value"></param> public void push(object value) { myValue.Add(value); emptyState = false; } /// <summary> /// Wird durch den 4. test von void auf object geändert /// </summary> public object pop() { emptyState = true; return myValue; } } } Die entsprechenden UnitTests befinden sich im Projekt StackTest und halten eine Referen auf die Klassenbibliothek Stapel using System; using NUnit.Framework; namespace StackTest { /// <summary> /// Description of StapelTest. /// </summary> [TestFixture] public class StapelTest { static Stapel myStack; /// <summary> /// Wird bei jedem Aufruf einer testmethode vorher /// ausgeführt /// </summary> [SetUp] public void Init() { myStack = new Stapel(); } /// <summary> /// Create a Stack and verify that /// IsEmpty is true. /// </summary> 2.1. Struktur des Beispielprojektes 7
  • 12. Automatisierung mit NANA Documentation, Release 0.1 [Test] public static void testOne() { Assert.IsTrue(myStack.isEmpty()); } /// <summary> /// Nach Hinzufügen eines Elementes muss /// isEmpty false zurückgeben /// </summary> [Test] public static void testTwo() { myStack.push("hello"); Assert.IsFalse(myStack.isEmpty()); } /// <summary> /// Hinzufügen - Wegnehmen --> isEmpty ergibt true /// </summary> [Test] public static void testThree() { myStack.push("hello"); myStack.pop(); Assert.IsTrue(myStack.isEmpty()); } /// <summary> /// Hinzufügen von hello und holen von hello muss eine ObjektGleichheit ergeben /// </summary> [Test] public static void testFour() { myStack.push("hello"); object x = myStack.pop(); Assert.AreEqual("hello", x); } /// <summary> /// Hinzufügen und Wegnehmen mehrerer Elemente muss jeweils Objektgleichheit ergeben /// </summary> [Test] public static void testFive() { string a = "hello"; string b = "mr."; string c = "steinam"; myStack.push(a); myStack.push(b); myStack.push(c); object z = myStack.pop(); 8 Kapitel 2. Installation der beteiligten Komponenten
  • 13. Automatisierung mit NANA Documentation, Release 0.1 Assert.AreEqual(c, z); object y = myStack.pop(); Assert.AreEqual(b, y); object x = myStack.pop(); Assert.AreEqual(a, x); } } } 2.2 Ordnerstruktur Die Struktur des Dateisystems ist wie folgt: • C:nant_stack: Grundlegender Hauptordner • C:nant_stackapi_doc: Nimmt die von doxygen generierte API-Dokumentation auf • C:nant_stacksetup: Nimmt die Konfigurationsdatei von Innosetup sowie das Ergebnis des Innosetup-Comilers (Setup.exe) setup.exe auf. • C:nant_stacklogfiles: Nimmt die Logfiles auf • C:nant_stacknant_086bin: Ausführbare Datei nant.exe • C:nant_stackStapel: Quellcode der Stapel-Klasse 2.2. Ordnerstruktur 9
  • 14. Automatisierung mit NANA Documentation, Release 0.1 • C:nant_stackStackTest: Quellcode der Testklassen 10 Kapitel 2. Installation der beteiligten Komponenten
  • 15. KAPITEL 3 Erstellen der Konfiguration NANT erwartet eine Beschreibung der aufzurufenden Prozesse in einer Konfigurationsdatei. Diese wird standardmäßig default.build genannt. NANT sucht nach dem Aufruf im jeweils aktuellen Ordner nach dieser Datei. Andere Namen kann man per Parameter an NANT übergeben 3.1 Struktur der Konfigurationsatei Die Konfigurationsdatei wird mit Hilfe von XML-Tags beschrieben. Die grundlegende Struktur ist der sog. project - Tag, der ein Projekt beschreibt. Innerhalb dieser Struktur definieren sog. Target-Tags die einzelnen zu erledigenden Aufgaben. Innerhalb der Target-Struktur werden dann die einzelnen Aufgaben durch sog. Tasks definiert. Ein Beispiel für eine einfache Beschreibung könnte wie folgt aussehen: <project name="Teacher" default="rebuild"> <target name="compileDebug"> <exec program="${devEnvPath}"> <arg value="c:/nant_stack/StackTest/StackTest.sln" /> <arg value="/build" /> <arg value="Debug" /> </exec> </target> <target name="rebuild" depends="compileDebug" /> </project> </project> 11
  • 16. Automatisierung mit NANA Documentation, Release 0.1 12 Kapitel 3. Erstellen der Konfiguration
  • 17. KAPITEL 4 Indices and tables • Index • Module Index • Search Page 13