Entwickler als Tester

IMG_3201Im Blog Haacked, las ich vor kurzen einen Artikel über Testen bei GitHub. Dort ist es die Aufgabe der Entwickler die Änderungen selbst zu testen. Als selbst testen, bezeichne ich die manuelle Tätigkeit einer Anwendung die letzten geheimen Bugs zu entlocken. Entwickler gehen dieser Tätigkeit sicher nicht mit Begeisterung nach, bei einigen löst dieses Thema Unbehagen aus. Es gibt dazu auch die Annahme das Entwickler ihre Arbeit nicht selber testen sollten.

Dafür gibt es gute Gründe, als Entwickler hat man auf sein Produkt und auf selbst erstellte Funktionen einen eigenen Blickwinkel. Ich würde es fast mit Identifizierung oder als Urheberschaft vergleichen. Ein Entwickler sieht den Code oder das Produkt als seine Leistung an. Mit diesem Hintergrund ist es leicht verständlich, dass jeder Entwickler seinen Code mit Samthandschuhen angreift.

Kommt ein Produkt jedoch in die Hände eines Testers, hat dieser ein ganz andere Vorstellung. Seine Lieblingsbeschäftigung ist es einen Fehler zu finden. Jeder Fehler ist wie ein kleines Geschenk. Einem Tester ist es auch egal welcher Entwickler dafür verantwortlich ist und wie lange eine Behebung des Fehlers dauert.

Trotzdem sollte man in diesem Bereich über seinen eigenen Schatten springen. Selbst wenn man nicht alle Eigenheiten einer Anwendung mit der gleichen Blickes eines Testers sieht, findet man doch die gröbsten Ausreißer.
Außerdem ist es sehr wohl möglich als Entwickler ein guter Tester zu sein. Wichtig ist für sich selbst die Perspektive zu ändern.
Als erstes sollte man dabei den nächsten Fertigstellungstermin, vor dem Testen, vergessen.

Aus meiner Sicht sollte jeder Entwickler seinen Code testen und die bekannten Zusammenhänge ausprobieren. Es geht jedoch nichts über einen Vollzeittester, der alle Gegebenheiten zu einem Projekt kennt. Dieser Tester kann noch andere Aspekte des Projektes wie die Erfüllung aller Kundenanforderungen, die Geschwindigkeit, das UI-Verhalten und noch viele andere Kleinigkeiten testen und beurteilen. Wie man auch an den Kommentaren zu dem original Blogeintrag erkennen kann, gibt es in diesem Bereich viele Meinungen. Die einzige Gemeinsamkeit ist, dass Software auch manuell getestet werden muss.

Aus von Google Reader

ReadingIn den letzten Tagen haben sich schon viele Blogger dazu geäußert. Auch ich habe nach dem lesen der ersten Nachricht einen Eintrag erstellt. Heute möchte ich dazu die unterschiedlichen Meinungen zusammen stellen.

Netzwertig ist von den Twitter-Listen angetan und setzt Hoffnungen in alternativen Anbietern. Es gibt dort auch einen Link zu zwölf Google Reader Alternativen.

T3N stellt ebenfalls eine Liste von sechs Alternativen Readern bereit.

Auf Caschys-Blog(Stadt-Bremerhafen) befindet sich ebenfalls eine Liste von Anbietern die die Lücke schließen wollen.

Weiter Einträge finden sich am Pottblog und bei Bottek.

Zu den unterschiedlichen Meinungen kann ich eigentlich nur feststellen, es gibt keine unterschiedliche Meinungen. Jeder hat den RSS-Reader von Google verwendet und sucht jetzt nach einer neuen Möglichkeit die RSS-Feeds zu organisieren. Von Desktop-Anwendungen wird eigentlich nicht gesprochen, wie es scheint zählen nur Onlinedienste.

Google Reader wird eingestellt

http://www.flickr.com/photos/ladybeames/

Der Google Reader, ein Programm das mir lange gute Dienste geleistet hat, soll Anfang Juli nicht mehr zur Verfügung stehen. Natürlich bin ich nicht sonderlich erfreut über diese Entwicklung. Nicht weil der RSS-Reader von Google das Top-Programm ist. Sondern einfach weil jede Änderung am Anfang schwer fällt. Auch ist ein aussuchen und bewerten von Alternativen mit einigem Zeitaufwand verbunden.
Für mich ist der RSS-Reader ein fixer Bestandteil meiner Informationsbeschaffung. Wegen der Verwendung mehrerer Computer, möchte ich diese Feeds weiterhin Zentral ablegen können und natürlich brauche ich auch eine Unterstützung für mobilen Geräten.

Zum Glück bleibt noch genug Zeit sich nach passenden Lösungen umzusehen. Also werde ich fürs erste Ruhe bewahren.

Emacs mit Rechtschreibüberprüfung

Was verwendet man zur Textverarbeitung auf einem sehr langsamen Computer, nein nicht VI sondern emacs!


Schon gut, es handel sich nicht um den intuitivsten Wortprozessor. Aber man spart sich einiges an Wartezeiten, wenn keine Rechenleistung zur Verfügung steht.

Emacs hat mich anfangs auch nicht als Texteditor angesprochen, sondern die Funktionalität zur Erfassung von Aufgaben, Terminen, Zeitaufzeichnung oder Auswertungen. Es lohnt sich auf jeden Fall einen Blick auf dieses tolle Paket(OrgMode) zu werfen.

Ein wichtiges Kriterium an einen Wordprozessor, ist eine integrierte Rechtschreibprüfung. Erst mit dieser Funktion betrachte ich einen Editor als geeignetes Werkzeug zur Texterstellung. Emacs erfüllt diese Vorgabe.

Da auf dem Computer auf dem emacs zum Einsatz kommt befindet sich ein Ubuntu 12.04. Die Installation von emacs erledigte ich über den Paketmanager. Als Wörterbuch installierte ich aspell-de.
Apt-Befehle:
sudo apt-get emacs
sudo apt-get aspell-de

Eine follständige Dokumentation befindet sich auf der GNU-Seite

  • M-x ispell Alls Wörter prüfen.
  • - Akzepieren wechselt auf nächstes Wort
  • M-x flyspell-mode Wortüberprüfung bei der Eingabe

Auch mit aktivem Flyspell funktionierte die Texteingabe sehr schnell und ohne Verzögerung.

Aktualisiere deine Systeme

Falls du heute noch keine gute Tat vollbracht hast, dann aktualisiere deinen Browser und updateYourBrowser

überprüfe ob alle Sicherheitupdates eingerichtet sind. Leider weiß man nie, ob ein Link auf eine manipulierte Seite geht und ob die angesprochenen Sicherheitslücken auf dem eigenen System noch offen sind.

Solltest du noch keinen Virenscanner installiert haben, kannst du auch mit einer Gratisversion nicht unsicherer als ohne Virenscanner sein.

Entspannte Besucher trotz Hund

Viele kennen die Situation, es Klingelt an der Tür und der Hund ist in heller Aufregung über die kommenden Ereignisse.

image

In den letzten Monaten hat sich diese Situation bei meiner Hündin sehr geändert. Er registriert zwar wenn ein Besuch kommt, doch die große Aufregung ist jetzt vorbei. Der Weg dorthin war gar nicht so schwer wie gedacht. Angeleitet wurden wir von einer Trainerin des DogProfi-Teams.

Das bekannte Verhalten

Früher begrüßte meine Frau und ich die Besucher und meine Hündin war durch eine Tür der Zugang zu den Gästen versperrt. Am trippeln vor der Tür konnte man jedoch die Aufregung beim ihr deutlich erkennen. Nach einiger Zeit öffneten wir meinem Hund die Tür und die Belästigung” der Gäste, durch meinen Hund, begann. Alle wurden an gestupst, abgeleckt oder angesprungen und wurde ihr keine Beachtung geschenkt bekam man ein lautes Bellen zu hören. Auch Versuche ihr weiterhin den Weg zu verstellen umging sie sehr geschickt und war eigentlich nicht zu stoppen. Oft wanderte sie deshalb in ihre Box, wo sie dann friedlich lag.

Neues Verhalten

Für mich und meine Frau war das nicht das Verhalten, dass wir von unserem Hund gegenüber Fremden erwarteten. Von der Trainerin bekamen wir die Anweisung unseren Hund bei solchen Treffen anzuleinen. Sie konnte sich dadurch in unserer Nähe befinden, ohne alle anderen zu belästigen. Danach kam das Antrainieren eines neuen Verhaltens. In unserem Fall, legen wir sie auf eine Decke auf der sie während des Besuches bleiben muss. Dieses neue Verhalten nahm sie sehr gut an und jetzt liegt sie während eines Besuches neben mir oder meine  Frau und hofft auf eine kleine Belohnung für ihr ruhiges Verhalten.

Bei Festen die länger dauern schicken wir sie in abgegrenzte Bereiche, in denen sie sich frei bewegen kann. Sie hält diese Bereiche sehr genau ein, auch wenn man ihr ansieht, dass sie lieber mitten im Geschehen wäre.

Für mich scheint es, als hat sich die Situation für alle verbessert und darüber bin ich wirklich froh.

DopProfi persönliches Training

Mein Hund Esther hat ein sehr lebhaftes Wesen. Mit dieser Eigenschaft bringt sie es leicht fertig, meine Fähigkeiten als Hundeführer ziemlich schlecht aussehen zu lassen.
Besonders bei Besuchen konnte sie leicht den Ablauf stören und sich durch ihr Verhalten die Aufmerksamkeit aller sichern. An ein nettes Beisammensein war oft nicht zu denken.
Meine Versuche dieses Verhalten zu beeinflussen waren vielfältig und nur selten von dauerhaften Erfolg gekrönt.
Die besten Ideen lieferten mir die Bücher von Martin Rütter. Mein Hund begrüßte jedoch weiterhin alle Besucher mit einen oder mehreren feuchten Küssen.

Die Hundeschule bei, der ich die letzten Jahre Mitglied war, stand meinen Problemen ebenfalls sehr Ratlos gegenüber. Im Nachhinein betrachtet wirft das kein gutes Bild auf die Fähigkeiten der dort arbeitenden Trainer.

Dogprofi
Meine Frau fand zufällig, über eine Werbung für eine persönliche Betreuung, zum DogProfi und leitete ein Treffen in die Wege. Innerhalb dieses Treffens beobachtete die Trainerin unser und das Verhalten unserer Hündin.
Kurz gefasst lag die Schuld wieder beim Menschen und nicht beim Hund.
Zur Lösung unseres Problems bekamen wir drei Übungen und einen Plan, wie Besuche in der Zukunft für den Hund besser gestaltet werden können.
Es ist zwar noch zu früh einen großen Fortschritt zu erkennen, jedoch habe ich endlich das Gefühl es verändert sich zum besseren.
Sollte sich eine dauerhafte Besserung einstellen, werde ich eine genauere Beschreibung der Übungen und das Verhalten meines Hundes geben.

WSDL To Java

Jede Java-Anwendung kann auf WebServices zugreifen. Ant- oder Mavenscripts können einem die Anlage der Clientschnittstelle erheblich erleichtern. Im Vergleich zur Erstellung des Clientzugriffes über die IDE, sehe ich einen eindeutigen Vorteil bei der Wiederholbarkeit. Die Scripts können unabhängig von einer IDE, mit den gleichen Einstellungen ausgeführt werden.

Die bekanntesten Clienttools sind Axis2 und Apache-CXF.
Axis2 Anttask
  <target name="axisWsdl2java">
    <path id="axis2.classpath">
      <fileset dir="D:/libs/axis2/axis2-2.6.2/lib">
         <include name="**/*.jar"/>
      </fileset>
    </path>
    <taskdef name="axis2-wsdl2java" classname="org.apache.axis2.tool.ant.AntCodegenTask" classpathref="axis2.classpath"/>
    <axis2-wsdl2java overwrite="true" wsdlfilename="http://localhost:8080/service/Service?wsdl"/>
  </target>
CXF Anttask

  <property name="cxf.home" location ="d:/libs/apache-cxf-2.6.2" />
  <path id="cxf.classpath">
     <fileset dir="${cxf.home}/lib">
        <include name="*.jar"/>
     </fileset>
  </path>

  <target name="cxfWSDLToJava">
     <java classname="org.apache.cxf.tools.wsdlto.WSDLToJava" fork="true">
        <arg value="-client"/>
        <arg value="-d"/>
        <arg value="${project.dir}/src_wsdl"/>
        <arg value="http://localhost:8080/service/Services?WSDL"/>
        <classpath>
           <path refid="cxf.classpath"/>
        </classpath>
     </java>
  </target>

Java Code
In beiden Fällen werden alle in den WSDL definierten Klassen angelegt. Beim Service-Stub kann in beiden Fällen eine URL im Konstruktor übergeben werden. Bei Axis kann die URL als String-Wert ohne “?WSDL” Endung übergeben werden. CXF benötigt ein URL-Object mit dem vollständigen WSDL-Pfad.
Die URL-Generierung kann im Service-Stub Standardkonstruktor geprüft werden.
Unterschiede
Von der Verwendung, Geschwindigkeit und der Zuverlässigkeit konnte ich keine Unterschiede feststellen. Trotzdem gibt es WSDL-Files die nur von einer der beiden Frameworks richtig implementiert werden. In einem meiner Projekte hatte Axis, in der Version 2.6.2, Probleme mit einem WS das mit einem JBoss7.1 zur Verfügung gestellt wurde. Apache-CXF hatte damit keine Probleme.

Spring WEB-App von Tomcat zu JBoss as7

Der Wechsel eines Java-Web-Servers sollte eigentlich keine große Angelegenheit sein. In meinem Portierungsprojekt musste zum Glück keine Codeänderung und keine Lib ausgetauscht werden. Ein paar Einstellungen waren doch vorzunehmen. Besonders hilfreich war dabei die JBoss AS 7 migrations guide. Den JBoss as 7 habe ich bei diesem Test im Standalonemodus ausgeführt, die Konfiguration im standalone.xml habe ich nicht verändert.

JPA Properties

JBoss as7 kommt mit einer eigenen Unterstützung für JPA, diese durchsucht das Projekt nach dem File “persistence.xml”. Dieses File sollte umbenannt werden, damit hier kein Konflikt entstehen kann. In der JBoss Konfiguration kann auch das JPA-Modul entfernt werden.
Im Beispielcode habe ich den Namen “jpa-persistence.xml” vergeben.
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceXmlLocation" 
        value="classpath*:META-INF/jpa-persistence.xml"/>
</bean>

Hibernate

In meinem Projekt setze ich JPA in Verbindung mit Hibernate ein. Hibernate wird auch von JBoss selber zur Verfügung gestellt.
Ich wollte die eigene Version verwenden, damit zur Tomcatumgebung kein Unterschied entsteht. Die von JBoss geladenen Libs können mit der Datei “WEB-INF/jboss-deployment-structure.xml” gesteuert werden. Die Datei kann im WEB-INF oder META-INF Verzeichnis abgelegt werden.
<jboss-deployment-structure 
    xmlns="urn:jboss:deployment-structure:1.0">
<deployment>
    <exclusions>
       <module name="org.hibernate">
    </exclusions>
  </deployment>
</jboss-deployment-structure>

Apache CXF

Eine weitere Befürchtung war, dass die WebServices die über das Apache CXF Framework bereitgestellt werden, unter JBoss ein eigenes Verhalten zeigen. Zum Glück kam es zu keinen Problemen, obwohl beim Starten eine Fehlermeldung ausgegeben wurde.

Code im Blog

Für alle die ebenfalls auf der Suche nach einem Plugin/Tool zum veröffentlichen von Code-Snippets sind, beschreibe ich hier meine Auswahl.

Die meisten meiner Artikel verfasse ich nicht direkt im Backend, sondern in einer Tablet-App oder WindowsLiveWriter. Dadurch suchte ich zusätzlich nach einem Plugin, das auch mit dem WLW zusammenarbeiten kann. Code als Screenshots schieden für mich aus, da die Inhalte nicht kopiert werden können. Meine Auswahl viel auf PreCode in Verbindung mit Syntaxhighlighter für die Clientdarstellung.

PreCode

Ist ein WLW-Plugin und eine eigenständige Anwendung. Die darin erstellten Code-Snippets können auch in Stackoverflow verwendet werden. Die Liste der möglichen Programmiersprachen ist sehr umfangreich.

Die Funktionsweise ist ebenfalls sehr einfach. Aus IDE den Code in den Editor-Bereich einfügen, ein HTML-Tagformat auswählen und eine Highlighter Class auswählen.

Mit OK oder CopyToClipboard wird der Vorgang abgeschlossen.

Precode

WordPress

In WordPress wird der Syntaxhighlighter mit einem Plugin eingerichtet. Das Plugin “SyntaxHighlighter Evolved” steht direkt über die WP-Pluginsuche zur Verfügung.

Java Codebeispiel

 public class Test{
   @Test
   public void testAssertTrue(){
     Assert.assertTrue(true);
   }
 } 

Wichtige Links

Plugin-Ersteller

WordPress “Posting Source Code”