Java SW-Engineering unter Linux
Das Internet erwies sich als unschätzbare Quelle für mein Buch "Java
SW-Engineering unter Linux", das beim millin Verlag (ehem. SuSE PRESS) erscheint, Damit Sie beim
Lesen des Buchs nicht jedesmal die dort enthaltenen Verweise mühevoll in
Ihren Lieblingsbrowser eintippen müssen, sind sie auf dieser Seite (sowie
unter InfoQuellen) versammelt
(zusammen mit weiteren Informationen). Der Aufbau dieser Link-Sammlung
orientiert sich dabei nach den einzelnen Teilen des Buchs, gefolgt von Sonstiges.
Wer vor lauter Links das Internet nicht findet, kann sich auch Hilfe bei
einer der zahlreichen User Groups suchen. Eine recht aktive Gruppe stellt die
JUGS (Java User Group Stuttgart) dar, deren
Höhepunkt das jährliche Java Forum ist.
Und bei LinUGS erhält man Entscheidungshilfe, ob man Linux
überhaupt braucht.
Um festszustellen, ob Sie das Buch "Java
SW-Engineering unter Linux" benötigen, müssen Sie es schon lesen:-) Oder
Sie lassen sich von den verschiedenen Rezensionen dazu anregen.
Warum bietet Linux die bessere Entwicklungs-Umgebung? Ist Java wirklich
das bessere C++? Und gibt es neben dem Stromschnellen-Modell (ständiges Auf
und Ab, bevor das Projekt den Bach runter get) noch weitere
Entwicklungs-Modelle? Für die Antwort auf diese Fragen gibt es neben dem Teil
I des Buches folgende Links:
GNU/Linux
- die Linux-Story
wer wissen will, wie Linux enstanden ist, findet hier die
wichtigsten Meilensteine aus verschiedenen Sichten geliefert
- die GNUvolution
auch wenn aus Hurd noch nicht
viel geworden ist, wurde mit den ganzen GNU-Tools
und der GPL (GNU
General Public License)der richtige Nährboden geschaffen, damit Linux
gedeihen konnte.
- Distributionen:
man kann zwischen der roten (Red
Hat), der grünen (S.u.S.E.) oder
eine Reihe von weiteren Distributionen (TurboLinux, Mandrake, Debian, Slackware, ...) auswählen. Und
wer will, kann sich seine eigenes Linux from Scratch
zusammenstellen.
- Investitions-Kosten
100 oder 10.000 DM für ein kleines Netzwerk?
- Microsoft
Windows NT Server 4.0 versus UNIX
enthält einen sehr interessanten und umfassenden
Erfahrungsbereicht von John Kirch, einem Networking Consultant und
Microsoft Certified Professional (Windows NT) - unbedingt lesen!
- Linux Standard Base (LSB)
ist der Zusammenschluss mehrerer Distributoren mit dem Ziel, die
unterschiedlichen Distributionen zu vereinheitlichen und mit Hilfe
einer Test-Suite
zu überprüfen.
- der Desktop
inzwischen gibt es eine Reihe von graphischen Oberflächen wie KDE oder GNOME, die den Einstieg in Linux
erleichtern. Daneben gibt es natürlich noch die normale Konsole, die
nicht nur im
Weltraum die Rettung bedeuten kann.
- Software für Linux
kann man von verschiedenen Server wie z.B. Sunsite oder Rpmfind beziehen. Für
Perl-Module bietet sich CPAN an.
- MS und Unix
ja, auch Microsoft hatte vor langer Zeit mit Xenix eines der besten
Betriebssysteme im Programm
- Unix unter NT
für all diejenigen, die unter NT arbeiten müssen, gibt es als
Survival Kit die wichtigsten Unix-Tools von MKS oder Cygwin auch für
Windows
Java
Welche JVM? Als erste Anlaufstelle für den Linux-treuen
Java-Entwickler ist neben Javasoft.vor allem Blackdown.org. Hier bzw. von einem
der zahlreichen Mirror (z.B.
ftp.informatik.hu-berlin.de) kann auch das aktuelle JDK für
Linux heruntergeladen werden. Daneben gibt es weitere frei verfügbare
JDKs wie Kaffe oder Japhar. Und wer sich seine eigene JVM
bauen will, findet mit dem GNU
Classpath die JDK-Bibliotheksteile für seinen Baukasten.
- Java
Technology: An Early History
enthält einige interessante Informationen zur (Vor-)Geschichte von
Java bei Sun.
- Whatis Java
Technology
enthält einen Überblick über Java und die verschiedenen
Java-Plattformen J2SE, J2EE und J2ME)
- Suns JDK 1.4
ist die Referenz, mit der sich andere JDKs messen müssen
- IBMs JDK 1.4
diese VM zeichnet sich durch Schnelligkeit und Stabilität
aus.
- Kaffe
sowohl in Source-Form (unter der GPL) als auch als
vorcompiliertes Binary in einer kommerziellen Version von
Transvirtual (KaffePro, früher http://www.transvirtual.com. jetzt
leider unbekannt verzogen) verfügbar, erhält man mit Kaffe eine VM,
die sehr kompakt ist und sich zusätzlich noch für verschiedene
Einsatzgebiete (z.B. Embbeded Bereich oder PDAs) abstrippen läßt
- ORP (Open Runtime
Platform)
ist eine VM von Intel, die zuammen mit dem GNU Classpath eingesetzt
werden kann
- jikes
ist ein Java-Compiler von AlphaWorks, der sich durch
seine Schnelligkeit und seine Fähigkeit auszeichnet, Abhängigkeiten
automatisch zu erkennen. Der Jikes-Debugger
dagegen ist nicht mehr auf der Höhe der Zeit.
- GNU-Compiler gcj
kann nicht nur Java-Sourcen in Byte-Code übersetzen, sondern auch
direkt in Maschinencode.
- der Volano
Report
ist ein Java
Benchmark für Server-Plattformen. Es gibt aber auch noch andere
Benchmarks wie den CaffeineMark,
der im Buch für den Vergleich der verschiedenen JDKs verwendet
wurde
- JIT-Compiler
gibt es inzwischen einige, wie z.B. shuJIT, CACAO
(Alpha-Prozessor), OpenJIT,
...
- die HotSpot-Technologie
versucht die Hot Spots herauszufinden und zu
optimieren
- Optional
Packages (ehemals "Standard Extensions")
sind zusätzliche Java-Bibliotheken wie z.B. JavaMail,
die von Sun heruntergeladen werden können.
- JavaUnix
ist eine Erweiterung, über die symbolische Links und andere
Unix-spezifische Eigenschaften zugegriffen werden kann
XML -- eine kurze Einführung
Die eXtensible Markup Language (XML) hat sich inzwischen einen festen
Platz in der IT-Welt erobert, ist sie doch vielseitig einsetzbar und auf
allen Plattformen zuhause.
- SGML
ist der Vorläufer von XML, das aber für viele Aufgaben zu komplex war.
- Anwendungsgebiete für
XML
sind vor allem Austauschformate wie XMI für UML-Diagramme,
VML für
Vektor-Diagramme, XML/EDI
oder ebXML für den elektronischen
Handel, die MusicXML
für künftige Mozarts, Wf-XML für
Workflows. Und natürlich SOAP, das als XML-basiertes
Protokoll den Austausch von Daten und Dokumenten zwischen den
einzelnen Webservices regelt.
- XHTML
ist der neue HTML-Standard auf XML-Basis, der vom W3C als Recommendation verabschiedet
wurde
- XML-Parser für Java
gibt es z.B. Xerces, der
ursprünglich aus XML4J von IBM
hervorgegangen ist (Xerces 1), inzwischen aber ein komplettes
Redesign erfahren hat (Xerces 2). Von Sun wurde Crimson (ehem. Projekt X)
gestiftet. Weitere Parser sind James Clark's XP, Lark und Larval, OpenXML oder AELfred.
- Java Architecture for XML
Binding (JAXB)
ist ein Framework für die Abbildung von Java-Objekten nach XML und
umgekehrt und wird im Java Specification Request
31 (JSR-31) beschrieben.
- XML-Editoren:
Neben (X)Emacs gibt es natürlich
noch andere Edtioren, mit denen XML-Dokumente erstellt werden können.
Amaya, die
Referenz-Implementierung des W3C eignet sich vor allem zur Erstellung
von XHTML- und MathML-Dateien. Mit dem XMLmind XML Editor (XXE)
können XML-Dokumente editiert und validiert werden.
- weitere Informationsquellen
für XML sind z.B. die W3Schools, XML.org oder die XML-Tutorials
von Sun.
JDK (Java Development Kit)
Egal, nach welcher Methode und mit welchen Tools man entwickelt, das JDK
ist stets ein treuer Begleiter bei der Java-Programmierung. Deswegen lohnt es
sich, sich näher damit auseinanderzusetzen.
JDK & JVM
Gefällt Ihnen der Zeichensatz des JDKs nicht? Tauschen Sie ihn doch
gegen den Zeichensatz der Firma URW
aus, der bei den meisten Distributinen mitgeliefert wird (Datei
font.properties anpassen).
Java-Tools
Gute Programme finden nicht nur ihren Weg von Unix/Linux nach Windows,
sondern auch umgekehrt. So gibt es den in der DOS/Windows-Welt beliebten
Midnight Commander
inzwischen auch für Linux. Was hat das mit Java zu tun? Nun, mit dem
Midnight-Commander kann man recht einfach Jar-Archive anschauen und darin
enthaltene Dateien editieren.
- JAR
File Specification
beschreibt den Aufbau der MANIFEST-Datei, sowie Signierung und
Indizierung von Jar-Dateien.
Sicherheit
ist Einstellungssache -- so auch in Java. Wenn man Sicherheit ernst
nimmt, wird man früher oder später mit der Zertifikaten und Signierung
von Java-Programmen in Berührung kommen. Wenn Sie dabei eine
Format-Beschreibung eines Zertifikats suchen, so schauen Sie doch mal in
den RFCs nach -- dort ist es
(wie so vieles im Internet-Umfeld) beschrieben (z.B. in RFC 1421).
- Java
Security Architecture
Die Beschreibung des Java-Sicherheitsmodell ist normalerweise in der
Java-Dokumentation zu finden, kann aber auch online bei java.sun.com gelesen werden.
- das CERT
ist erster Einstiegspunkt, wenn es um bekannte Sicherheitslücken rund
um den Computer geht. Gibt man "Java" in die Suchmaschine ein, findet man auch
für diese Sprache eine Reihe von Treffern.
- in den Request for Comments (RFC)
sind viele Protkolle und Formate beschreiben, u.a. die
Format-Beschreibung von Zertifikaten im RFC 1421.
Decompiler und Obfuscator
Wenn Sie in Java entwickeln, sollten Ihnen bewußt sein, dass sich aus
Ihrem Byte-Code mit Hilfe von Decompilern wie jad oder Mocha der
Java-Code wieder zurückgewonnen werden kann. Wer etwas was zu verbergen
hat, kann sich mit Hilfe eines Obfuscators wie
z.B. RetroGuard (OpenSource) davor
schützen.
- die Java-Decompiler-HOWTO
enthält weitere Links zu Decompilern und erläutert u.,a., wie man die
korrekte Funktionsweise eines Decompilers überprüfen kann..
Nach Murphy
kann ja bei der SW-Entwicklung einiges schiefgehen. Zum Glück gibt es eine
Reihe von Tools und Vorgehensweisen, um das Schiefgehen besser kontrollieren
zu können.
Versionierung
während RCS eher für kleinere Projekte eingesetzt wird, ist CVS das
Standard-Versionierungssystem im Internet. Es gibt kaum ein
OpenSource-Projekt, das nicht CVS zur Versionierung einsetzt.
- CVS-RCS-HOWTO
ist ein "Practical Guide", um schnell mit CVS/RCS loslegen zu
können.
- Das CVS Book
gibt es als Buch in Papierform, online, oder auch in deutscher
Übersetzung.
- Das CVS
Buch
ist Teil von Selflinux, das
sich der Erstellung eines umfassenden Hypertext-Tutorials über das
Betriebssystem Linux zum Ziel gesetzt hat.
Wem die Kommando-Zeile zu altmodisch erscheint, dürfte sich vielleicht
mit einem der graphischen Frontends von CvsGui.org anfreunden. Weitere
Frontends sind z.B.
- tkCVS
ist ein CVS-Frontend mit langer Tradition, das auf Tcl/Tk basiert und damit nicht
nur unter Linux lauffähig ist. Es ist gut für Projekte innerhalb
geschlossener Netze (Intranet) geeignet.
- jCVS
ist ein java-basiertes CVS-Frontend.
- Cervisia
ist ein KDE-Frontend zu CVS, das sehr praxisorientiert aufgebaut
ist.
- Pharmacy
ist ein CVS-GUI im GNOME-Look
- weitere Frontends
gibt es z.B. mit LinCVS oder
mit einer der vielen Java-IDEs wie (X)Emacs, NetBeans, Eclipse,
...
Analyse
Der erste Schritt in der Analyse dürfte in der Erfassung der
Requirements liegen. Während DOORS hier leider noch keine
offizielle Linux-Version anbieten kann, ist jRequest noch in der
Enstehungsphase.
Wer eine umfassende Entwicklungs-Umgebung a la SourceForge sucht, findet unter Alexandria eine
Lösung, mit der auch Anforderungen und Änderungswünsche verwaltet werden
können.
Design
Für die Erstellung und Dokumentation der SW-Architektur ist die UML
(Unified Modelling Language) entwickelt worden. Eine Übersicht über die
verschiedenen UML-Tools findet man unter jeckle.de
- Argo/UML
ein frei verfügbares UML-Tool mit einigen Features wie "Cognitiver
Support" oder "Critics", die konkurrenzlos sind.
- Fujaba
zwar nicht ganz so leistungsfähig wie die kommerziellen Tools, dafür
aber mit einer sehr gutem Reverse Engineering.
- kUML
ist das OpenSource-UML-Tool für KDE, um das es leider etwas still
geworden ist.
- Together
Together ist ein UML-Tool, das sich dadurch auszeichnet, dass die
Model-Information im Code abgelegt wird ("der Code ist das Modell!").
Damit wird ein Auseinanderdriften zwischen aufgestelltem Modell und
realem Code vermieden. Auch ein Reengineering verliert dadurch seinen
Schrecken.
- Innovator
ist ein UML-Tool aus deutschen Landen, das auch unter Linux lauffähig
ist. Als Client-/Server-Lösung ist es eher für größere Projekte
interessant und stellenweise etwas gewöhnungsbedürftig.
Der SW-Lifecycle
es gibt eine Reihe von Entwicklungs-Prozesse, die um die Gunst der
SW-Entwickler und Manager buhlen, wie z.B.
- Rational
Unified Process (RUP)
ein kommerzielles und detailliertes Vorgehensmodell der Firma
Rational, das eher für größere Projekte ausgelegt ist
- eXtreme Programming
Hinter eXtreme Programming stecken eine Reihe von Ideen und
Anregungen, um den Entwickungsprozess besser in den Griff zu
bekommen. So tritt bei XP, wie es auch kurz genannt wird, das Testen
und Refactoring
stärker im Vordergrund. XP hat einige bemerkenswerte Erfolge zu
verbuchen, trotzdem wird es teilweise kontrovers
diskutiert.
Codierung
Neben dem vielgeliebten
Standard-Editor gibt es natürlich auch andere Editoren, mit denen der
gemeine Entwickler sein Glück versuchen kann:
- NEdit
der "Nirwana Editor" hat schon eine lange (X-)Geschichte und
treue Fan-Gemeinde hinter sich und dürfte vor allem
Windows-Aufsteiger ansprechen.
- jEdit
wem der (X)Emacs zu altmodisch ist und dennoch
auf einem Editor besteht, der auf jeder Plattform zu Hause ist (und
auch noch per FTP Dateien editieren können soll), sollte sich
vielleicht mal jEdit
anschauen. Basierend auf Swing (d.h. fetter Rechner vorausgesetzt)
bietet er einiges, was das
Programmiererherz erfreut. Und wem trotzdem noch das eine oder andere
Feature fehlt, der bastelt sich halt sein eigenes Plugin dazu.
- DDD
ist ein Debugger-Frontend zum gdb, der sich aber zur Zusammenarbeit
mit dem Java-Debugger jdb überreden lässt.
IDE
Über nichts wird so gerne gestritten unter Entwicklern als um die
beste, ultimativste, coolste, ... Entwicklungsumgebung. Zur möglichen
Wahl stehen:
- JBuilder
von Borland/Inprise - eine recht beliebte IDE für den es eine Reihe
von Plugins von der JBuilder-Homepage
und jbopentools.sourceforge.net
gibt. Obwohl sie selbst in Java geschrieben ist, ist sie angenehm
schnell (nachdem die Java-Gedenkminute beim Starten erstmal
überwunden ist). Für die Test-Unterstützung gibt es Assertions und
auch Tipps, um das Debuggen mit JDK 1.3 zu beschleunigen.
Und für Fragen existiert ein eigener News-Server, der auch übers Web erreichbar ist.
- VisualAge Micro Edition
(VAME)
von OTI ist die dritte
Neu-Entwicklung von VisualAge, die auf den Embedded Bereich zielt.
Man kann sie aber auch für die normale Java-Entwicklung
einsetzen.
- Eclipse - lohnt sich der
Umstieg?
Eclipse ist eine Java-IDE, die gar nicht nach Java aussieht, da sie
eigene Wege bei der Oberflächengestaltung beschreitet: das GUI
basiert auf SWT (eine Art besseres AWT), um möglichst Nahe an das
Look&Feel und die Performance der Zielplattform (Windows, Linux,
Solaris) heranzukommen. Aber eigentlich ist Eclipse mehr eine
Plattform, die durch verschiedene (freie und kommerzielle) Plugins
angereichert werden kann und die als Basis für verschiedene
kommerzielle Produkte (z.B. WSAD von
IBM oder Rational
XDE) dient.
- NetBeans
ist eine Pure-Java-Umgebung, die für den privaten Gebrauch
kostenlos ist. Allerdings braucht man einen schnellen Rechner, soll
die Bedienung nicht zur Qual werden. Als kommerzielle ist sie unter
dem Namen "Forte" von Sun mit
Support erhältlich.
- Emacs und XEmacs
sind IDE, Betriebssystem und Weltanschauung zugleich.Neben
unzähligen Erweiterungen
gibt es mit JDE auch eine
spezielle Java-Entwicklungsumgebung.
- IntelliJ IDEA
ist eine kommerzielle IDE, für die es leider nicht mehr im Buch
gereicht hat. IntelliJ IDEA besticht vor allem durch sein
Refactoring, das über das von Eclipse hinausgeht. (s.a. www.heise.de/ix/artikel/2002/05/092)
- BlueJ
ist eigentlich keine Entwicklungsumgebung, sondern eine Lernumgebung
-- vorbildlich gemacht, ideal für Java-Anfänger und leichter zu
bedienen als viele IDEs.
Der Build-Prozess
Erfolgreiche SW-Projekte führen zusammen mit dem täglichen Build
("Daily Build" oder auch "Nightly Build") einen "Smoke Test" aus, um
den Zustand des Builds beurteilen zu können.
- In
Continuous Integration
geht Martin Fowler auf die Wichtigkeit und Bedeutung eines
automatisierten Build-Prozesses ein.
- make
ist eines der ältesten Build-Tools im Unix-Bereich. Bei der
Erstellung eigener Makefiles empfiehlt es sich, an die GNU Makefile
Conventions zu orientieren.
Für die Java-Entwicklung ist make leider nur bedingt geeignet.
- jmk
ist ein java-basiertes "make" mit einer weniger fehlerträchtigen
Syntax und einer graphischen Oberfläche
-
ist im Rahmen des Jakarta-Projekts entstanden und
wurde speziell auf die Bedürfnisse der Java-Entwicklung und
Plattform-Unabhängigkeit zugeschnitten. Ant-Build-Dateien lassen sich
erheblich einfach erstellen und warten als Makefiles, sodass sich Ant
nicht ohne Grund zu dem Build-Tool im Java-Bereich
entwickelt.
- Ant in
Anger
enthält Tipps und Richtlinien, wie man Ant am besten einsetzen
sollte.
- Java
Development with Ant
behandelt ausführlich, wie man Ant in den Build-Prozess einbettet. Es
basiert auf Ant 1.5
- Ant-FAQ
enthält die Antworten auf die Fragen, die Sie sich vielleicht schon
gestellt haben.
Im Server-Bereich hat sich Linux inzwischen seinen festen Platz erobert.
Auch Java ist serverseitig nicht mehr wegzudenken, werden doch mit der Java2
Enterprise Edition (J2EE) von Sun eine Reihe von Techniken wie JDBC,
Servlets, JSP, EJB, ... spezifizert, um Java auf dem Server zu etablieren.
RMI
Remote
Method Invocation (RMI) ist die Basis vieler
Client/Server-Architekturen, u.a. auch für Enterprise JavaBeans
(s.u.).
JDBC
Alle großen Datenbank-Hersteller (s. Übersicht von
Portalux) bieten ihre Produkte auch
für Linux an. Und für die meisten Datenbanken sind inzwischen auch
JDBC-Treiber verfügbar, um von Jara darauf zugreifen zu können.
Java im Web
Waren es anfangs Applets, die Interaktivität in statische Web-Seiten
bringen sollten, werden heutzutage die Seiten dynamisch mit Hilfe von
Java erzeugt.
EJB
Die Enterprise
JavaBeans Spezifikation von Sun definiert eine Architektur bzw
Framework, mit dem die Erstellung komponentenorientierter, verteilter
Anwendungen vereinfacht werden soll. Für die Datenablage gibt es
Anbindungen an relationale Datenbanken, wobei Transaktionen mit Hilfe von
JTA (Java Transaction API)
und JTS (Java
Trans\-action Service) realisiert werden.
- WebLogic
von BEA
ist ein recht flotter Application Server. Für die ersten
Gehversuche empfiehlt es sich, die Dokumentation
durchzulesen.
- WebSphere
(IBM)
lange Zeit hinkte IBM technologisch etwas den anderen Application
Server hinterher. Aber mit der 4er-Version hat IBM hier Boden gut
gemacht. Wer mit Visual Age als Entwicklungsumgebung arbeitet, wird
sich an der guten Integration in dieser IDE freuen.
- Borland
Enterprise Server
ist ein Application Server, der sich durch gute Integration in
JBuilder auszeichnet.
- JBoss (ehemals EJBoss)
ist ein frei verfügbarer Application-Server, der durch ein einfaches
Deployment glänzt.
- JOnAS (Java Open
Application Server)
ist eine Open-Source-Initiative, an der Bull maßgeblich beteiligt ist und
u.a. von France Telekom unterstützt wird.
Durch Testen läßt sich leider nicht die Fehlerfreiheit eines Programms
feststellen, sondern nur, ob noch Fehler vorhanden sind. Werden keine Fehler
gefunden, heißt das noch lange nicht, dass keine drin sind!
Fehlersuche
Auch in der SW-Entwicklung gilt: "Vorbeugen ist besser als Heulen!" -
dazu gibt es verschiedene Techniken wie DbC (Design by Contract) oder
"Asserts" (die inzwischen Eingang in JDK 1.4 gefunden haben). Und sollten
sich dennoch Fehler einschleichen, gibt es nicht nur den Debugger, um
ihnen auf die Spur zu kommen.
- Logging
in Java Applications
gibt einen Überblick über Logging in Java und welche Vorteile man
daraus zieht.
- log4j
Ursprünglich aus den IBM
Forschungslabors und inzwischen bei Apache untergekommen ist log4j
eine frei verfügbare Logging-Lösung, die durch eine gute Performance,
vielfältige Erweiterungsmöglichkeiten und Konfigurierbarkeit
glänzt.
- mit JSR47
gibt es eine Spezifikation für eine Logging-Lösung, die Eingang in
JDK 1.4 gefunden hat.
- Design
by Contract: The Lessons of Ariane
ein Artikel, den Sie ihren Chef zeigen können, wenn er Ihnen
wieder keine Zeit für´s Testen und solche "Spielereien" wie DbC
(Design by Contract) gönnen will.
- iContract
verwendet Vor- und Nachbedingungen, die über @pre
und @post
im Javadoc-Kommentar instrumentiert werden.
Als Zusatz gibt es icontract Plus, das zu
iContract einige Erweiterungen und Erleichterungen bietet.
- JTest
verwendet einen ähnlich Ansatz und verwendet dieselben Doclets.
Über iDoclet
können aus diesen Tags auch die entsprechende API-Dokumentation
erzeugt werden.
- Programming
With Assertions
geht auf die neuen Assert-Features von JDK 1.4 ein und ihren
Einsatz in Java-Programmen ein.
- Kopi Java Compiler
(KJC)
ist ein Java-Compiler, der einen Assert-Mechanismus bietet, der
ausgeblendet werden kann.
Test-Phase
Es gibt verschiedene Frameworks und Tools, um seine Test-Fälle
einzubetten und zu automatisieren.
- JUnit
ist ein einfaches Test-Framework von Kent Beck und Erich Gamma,
das in Java geschrieben ist und in dem man seine Testfälle in Form
von Java-Code einhängen kann. Es bietet sowohl eine einfache,
textbasierte Benutzerschnittstelle, als auch eine einfache,
graphische Benutzerschnittstelle (inzwischen auch auf Swing-Basis)
an.
- DejaGnu
ist ein Test-Framework, das auf expect basiert
Performance
Für das Tieferlegen von Java-Programmen sind vor allem Profiler das
richtige Werkzeug, um das letzte Quäntchen Leistung aus der VM
herauszuquetschen.
- der ProfileViewer
ist ein einfacher, frei verfügbarer Profiler
- PerfAnal
ist ein Profiler aus "Java
Programming on Linux" von Nathan Meyers, der in JavaLinuxBook.jar
enthalten ist.
- HPjmeter
von HP ist ebenfalls frei verfügbar und für die Performance-Analyse
geeignet
- OptimzeIt
ist ein kommerzieller Profiler, der nicht umsonst schon mehrere
Preise eingeheimst hat.
Mehr als in anderen Programmiersprachen hat man in Java mit
Performance-Problemen zu kämpfen. Neben guten Ratschlägen und
Tuning-Tipps
gibt es Java-Optimierier die hier für Abhilfe sorgen sollen.
- Jopt
ist ein Java-Optimierer, der Java-Bytecode kompakter und schneller
machen soll. und frei verfügar als Zip-Datei
erhältlich ist
Natürlich gibt es auch Bücher zu diesem Thema. Eines davon ist "Java Platform Performance
- Strategies and Tactics" von Suns Java Performance Team, das auch online
gelesen werden kann.
Interfaces und abstrakte Klassen
Das Interface-Konzept ist, im Gegensatz zu manch anderen Sprachen,
Teil der Sprache Java und kann zur Definition von Schnittstellen
verwendet werden. Daneben kann man aber auch abstrakte Klassen einsetzen,
wenn man einige Methoden mit einer Default-Implementierung versehen will
(s.a "Abstract
classes vs. interfaces")
Reflexion
Über Reflexion ann man auf Klassen-Elemente zugreifen, ohne die Klasse
im Vorfeld kennen zu müssen.
Java Native Interface (JNI)
Über das Java
Native Interface ist der Zugriff von Java auf C/C++-Routinen (und
umgekehrt) möglich. Damit ist es möglich, die JVM zu verlassen um z.B.
auf das drunterliegende Betriebssystem oder Hardware zuzugreifen.
- JNI-Tutorial
zeigt den Umgang mit dem Java Native Interface.
Auch die Qualität von Programmen sollte bei der Entwicklung berücksichtigt
werden.
Java-Dokumentation
Mit Hilfe von javadoc
und des Standard-Doclets kann aus /**Javadoc-Kommentaren*/ die
API-Dokumention in HTML-Form generiert werden, mit Hilfe von anderen
Doclets auch in anderen Formaten erzeugt werden. Eigene Doclets
können unter Verwendung des Doclet-APIs erstellt werden. Sind es nur
kleinere Änderungen, können auch die Sourcen
des Standard-Doclets modifiziert werden, wie es z.B. beim Docet der
FreeHep Java Bibliothek gemacht
wurde. Oder man erweitert das Standard-Doclet über Verwerbung, wie im
Buch beschrieben.
Programmierrichtlinien
Basis vieler Programmierrichtlinien sind die "Code
Conventions for the Java Programming Language" von Sun.
Q-Tools
Manche lästige Dinge wie Formatierungen oder Einhaltungen mancher
Regeln können auch von Tools übernommen werden, wie z.B.
Endlich fertig mit der Entwicklung? Dann gibt es mehrere Möglichkeiten,
das Programm an den Mann bzw. auf den Rechner zu bringen und vor allem auch
die Bug-Liste zu verwalten.
Installationen
Für Java-Programme gibt es mehrere Möglichkeiten, diese dauerhaft auf
dem Rechner zu implantieren:
- IBM Java
Installations-Toolkit
ist ein frei verfügbarer Java-Installer, um dessen
Weiterentwicklung es etwas still geworden ist.
- InstallShield
eigentlich eher in der Windows-Welt bekannt, gibt es
InstallShield auch in einer Multi-Plattform Edition,
die auch Linux und das RPM-Format unterstützt.
- RPM
ist unter Linux ein Standard-Format für Installation (und
Deinstallation)von Software-Paketen. Es gibt auch ein RPM-HOWTO dazu, das die
Erstellung von RPM-Paketen beschreibt. Für die Suche nach einem
bestimmten Paket ist rpmfind.net
die erste Anlaufstelle.
- mit WebStart
von Sun kann man Java-Programma
direkt über einen Link innerhalb einer Web-Seite starten. Beim ersten
Start wird das Programm lokal heruntergeladen, bei weiteren Aufrufen
nur dann, wenn es sich in der Zwischenzeit geändert hat. Ausprobieren
kann man das Ganze auf der Webstart-Demoseite.(oder
auch mit ArgoUML).
Ausgeliefert!
Kein Programm ist fehlerfrei. Und so werden nach der Auslieferung
einer Anwendung bald die ersten Fehlermeldungen eintrudeln. Wohin damit?
Wie damit umgehen? Wie verwalten? Dies ist die Stunde der Trouble Ticket
Systeme, von der es erfreulicherweise auch einige frei verfügbare Systme
gibt:
- Call Center, Bug Tracking
and Project Management Tools for Linux
liefert einen sehr guten Überblick über freie und kommerzielle
Trouble-Ticket-Systeme.
- Helpdesks
gibt einen Überblick (mit Wertung) über verschiedene Web-basierten
Helpdesk-Systeme.
- GNATS
ist ein recht altes System mit langer Tradition, zu dem es mit
TkGNATS auch eine graphische Oberfläche und ein Web-Frontend gibt
- Request
Tracker(RT)
ist im Vergleich zu GNATS einfacher zu bedienen und nicht so
komplex.Einen ersten Eindruck kann man sich über die Screenshots
oder die Bug-Liste
verschaffen.
- OpenTrack
(OT)
basiert auf einem Tracking-Programm der Open Software für OSF/1 ist
ein Relikt aus dem letzten Jahrtausend
- WebTTS
ist ein einfaches Trouble-Ticket-System für den gestressten
System-Administrator
- Debian
Bug TS
ist bereits seit 1994 bei Debian im Einsatz wird hauptsächlich per
Email bedient. Auch für KDE, GNOME oder innerhalb der Firma nCipher wird es eingesetzt.
- Req / ReqNG
gegenüber Req enthält ReqNG zahlreiche Verbesserung und
Ergänzungen wie Volltextsuche (mittels Glimpse) und verschiedene
Frontends: ein Emacs-Frontend, ein WWW-Frontend WWWReq, sowie ein
Tcl/Tk-Interface TkReq.
- Bugzilla
ist ein recht umfangreiches Bug-Tracking-System, das für
Netscapes Mozilla-Projekt
verwendet wird.
Um die Installation zu vereinfachen, gibt es auch einen Bugzilla
Installer für Linux und Solaris.
- JitterBug
ist das Bug-Tracking-System des Samba-Projekts.
- Double Choco Latte (DCL)
ist ein relativ junges Prjekt mit einigen interessanten Featurs wie
Zeitabrechnung, Volltextsuche oder Mehrsprachigkeit, benötigt aber
einen JavaScript-fähigen Web-Browser.
Wie wird es weitergehen mit Java? Auf der Serverseite wird sich sicherlich
der Trend fotsetzen, bereits vorhandene Lösungsansezte unter einer
gemeinsamen Schnittstelle zusammenzufassen und über den Java Community Process (JCP) zu koordinieren. Für
den Low-End-Bereich gibt es inzwischen die ersten Prozessoren, die Byte-Code
verarbeiten können (z.B. der ARM-Prozessor).
Auch im Echtzeitbereich wird dank spezieller VMs (wie z.B. die J9-VM von OTI) verstärkt vordringen, nicht nur
bei Siemens.
Im Linux-Bereich beginnt man so langsam das Potential der Benutzer und
Administratoren zu erahnen. So hat der amerikanische IT-Versicherer Wurzler die Versicherungsprämien gegen
Hacker-Angriffe auf Linux-Systeme gegenüber Windows-Systemen gesenkt.
Begründung: Linux-Administratoren
sind besser und kompetenter!
Um sich vom Rest der (Fach-)Welt abzugrenzen werden in der Computerwelt
gern Akronyme und Abkürzungen verwendet. Damit auch Sie mitreden bzw. Ihren
Chef verwirrenkönnen, gibt es neben dem New Hacker's Dictionary (und der
Anleitung "How
to become a Hacker") hier einige weitere Anregungen:
- Capability Maturity Model (CMM)
dieses Modell des Software Engineering Instituts (SEI) versucht die Güte der
SW-Entwicklung zu bewerten und in Stufe 1 (chaotisch) bis 5 (höchste
Stufe) einzuteilen
- CORBA
ist ein Standard der OMG mit dem Ziel, Objekte im Netz verteilen und
unabhängig von Plattform und Programmiersprache ansprechen zu können. Mit
MICO gibt es auch ein freie
Implementierung diesen Standards
- OSF (Open Software Founation)
ist inzwischen Bestandteil der Open
Group
- Request For Comment (RFC)
beschreiben viele Standards im Unix- und Internet-Bereich
- URL (Uniform Resource Locator)
und andere Begriffe können beim
W3C nachgelesen werden
Weitere (Linux-) Begriffe kann man z.B. in "Linux
Glossary for Windows user" nachschlagen.
- Writing
Robust Java Code von Scott W. Ambler:
Ein äußerst nützliches Buch, wenn es um Programmierrichtlinien geht.
- The Mythical
Man-Month
ein Klassiker, der auch nach 25 Jahren nichts an Aktualität verloren
hat
- Fehlerfrei
programmieren in C und C++
Genug von Java? Möchten Sie lieber wieder zurück nach C/C++?
Überlegen Sie es sich gut. Falls Sie es doch wollen (oder müssen) sollten
Sie dieses Buch lesen, bevor sie von den Tücken der C/C++-Programmierung
und -Fehlersuche überrollt werden.
- Java Programming on Linux von
Nathan Meyers
das erste Buch, das dieses Thema ausführlich behandelt
Linux ist als Entwicklungsplattform unschlagbar, was den Umfang an Tools
für die SW-Entwicklung angeht, die bereits in der Grundausstattung der
meisten Distributionen enthalten sind. Sollte doch etwas fehlen, so bietet
das Internet eine Fülle weitere nützlicher Tools an.
Begleitende Tools
Genug vom letzten Word-Gefecht? Mit StarOffice (kommerziell) und OpenOffice (frei verfügbar) gibt es
zwei Alternativen, die nicht nur Word-Dokumente lesen, sondern auch
schreiben können. Wer Programm-Dokumentation lieber mit TeX oder LaTeX
machen will, werfe einen Blick auf Dante.
Wer mit der Zeiterfassung für verschiedene Aufgaben zu kämpfen hat -
auch hier gibt es Abhilfe:
- karm
ein einfach zu bedienendes Tool im KDE-Look, um die zeitliche
Übersicht über seine einzelnen (Teil-)Projekte zu wahren
- titrax
das Vorbild für karm,
einfach zu bedienen, aber optisch etwas altbacken (eben X11-like).
Zwischenzeitlich als TiTrax II in einer
ansehlicheren Java-Version von www.jMonkey.com erhältlich, inzwischen
aber wohl in den unendlichen Weiten des Webs verschollen (kennt
jemand zufällig den derzeitigen Aufenthaltsort?)
Utilitis & Co.
Hier sind all die kleinen Hilfen, Tools und andere Verweise
aufgelistet, die teilweise keinen Platz im Buch fanden.
- utils.tgz
enthält findclass, mit dem sie JAR-Archive nach einer
gesuchten Klasse durchforsten können und passcrypt, das
Ihnen ein Passwort verschlüsselt ausgibt (nützlich für das Anlagen
einer CVS-Passwortdatei).
- CMP Conversion
Amanuensis
Vergessen, wie man von Integer nach String konvertiert? Diese und
andere Konvertierungs-Aufgaben werden mit diesem kleinen Java-Applet
zum Cut&Copy-Kinderspiel.
- BYACC/Java
eine Erweiterung des allseits beliebten - Lex&Yacc-Programms -
statt C/C++ wird Java-Code erzeugt. Damit kann man auf einfacher
Weise unter Angabe einer Eingabe-Grammatik Compiler, Eingabe-Parser
und Taschenrechner schreiben.
© 22. Dezember 2005,