Seite auswählen

Kategorie: Softwareentwicklung & Technik

User Stories vs. Job Stories: Zwei Wege, ein Ziel

Heute komme ich endlich dazu, diesen lange (seit 2017 😱) geplanten Artikel zu schreiben, um euch Job Stories vorzustellen. Nachdem mein letzter Beitrag von User Stories gehandelt hat, geht es heute um eine meiner Meinung nach wertvolle Ergänzung: Job Stories, basierend auf dem Konzept von Jobs To Be Done (JTBD), konzentrieren sich darauf eine gegenwärtige und eine erstrebenswerte zukünftige Situation zu betrachten, sowie die Schritte um den Übergang zwischen diesen beiden Zuständen zu erreichen. Einblick in Job Stories: Das Situative Anforderungsformat 💼 Job Stories sind ein Format für die Anforderungsdefinition in der Produktentwicklung, das sich darauf konzentriert, die spezifischen...

Weiterlesen

Gute User Stories: Eine Kunst in der agilen Softwareentwicklung

Heute gibt es Aufgewärmtes 🧑‍🍳😊 … Diese Überarbeitung meines Artikels von 2017 betrachtet erneut User Stories in der agilen Softwareentwicklung. Seit der Veröffentlichung meines Artikels ist einige Zeit verstrichen und noch immer sind User Stories ein wichtiges Werkzeuge, um Anforderungen im agilen Umfeld zu kommunizieren. Die Grundlagen: Was sind User Stories? 👨‍💻👩‍💻 User Stories beschreiben eine Funktion einer Applikation, die für den Anwender oder Käufer der Software wertvoll ist. Sie bestehen aus einer schriftlichen Beschreibung, Gesprächen über die Story und aus Akzeptanzkriterien. Diese dreigliedrige Struktur, bekannt als “Card, Conversation, and Confirmation”, wurde von Ron Jeffries geprägt. Die Herausforderung: Balance...

Weiterlesen

INVEST – Charakteristik einer guten Story

Im vorherigen Artikel habe ich User Stories als Mittel zur Anforderungserfassung vorgestellt. Wir haben gelernt, dass eine User Story eine geforderte Funktion in einem kurzen Satz beschreibt, so dass ein Wert für den User erkennbar ist. Der User kann dabei der Endanwender sein oder aber der Käufer der Software – oft handelt es sich dabei um unterschiedliche Personen mit unterschiedlichen Interessen – ich gehe später noch einmal darauf ein. Neben dem Aspekt der Beschreibung hat eine User Story zwei weitere Aspekte, nämlich das Gespräch und die Akzeptanztests. Nur unter Berücksichtigung aller drei Aspekte lässt sich mit User Stories arbeiten. Doch was...

Weiterlesen

Anforderungen in der agilen Softwareentwicklung

Entwickler wollen wissen, was sie machen sollen, nicht wie sie es machen sollen. Für letzteres sind sie in der Regel die Experten. Doch wie teilt man Entwicklern mit, was benötigt wird? Was soll als nächstes implementiert werden? Und wie geschieht das in einem agilen Umfeld? Eine geeignete Möglichkeit ist “User Stories” für die Formulierung von Entwicklungsaufgaben einzusetzen. Ich werde im Folgenden beschreiben, was User Stories sind, wie man mit ihnen plant und warum man sie einsetzen sollte. Ich werde dabei jedoch nicht in die Tiefe gehen, denn damit ließen sich durchaus ein paar Kapitel eines Buch füllen. Statt dessen verweise...

Weiterlesen

Verfügbarkeit erhöhen durch Minimierung der MTTR

In meinem letzten Artikel sprach ich davon, Fehler in Softwaresystemen zu akzeptieren. Dieser Meinung ist auch Michael T. Nygard, wenn er es mit dem folgenden Satz auf die Spitze treibt: Normal mode of operation is partial failure. Also verfolgen wir doch bei der Erstellung von Software doch diesen Ansatz und gehen davon aus, dass der normale Betriebsmodus ein teilweiser Ausfall des Gesamtsystems bedeutet. Doch wie kommen wir zu dieser Annahme? Verfügbarkeit Bei dem Betrieb von Softwaresystemen dreht sich doch alles um die Verfügbarkeit. Man spricht von Availability bzw. oft sogar von High Availability wenn Anforderungen an Softwaresysteme gestellt werden und...

Weiterlesen

Shit happens! Finde dich damit ab …

re·sil·ience (rĭ-zĭl′yəns), noun The ability to recover quickly from illness, change, or misfortune; buoyancy. The property of a material that enables it to resume its original shape or position after being bent, stretched, or compressed; elasticity. http://www.thefreedictionary.com/resilience [1] Der erste Schritt in Richtung Resilient Software Design ist, zu akzeptieren, dass jede Software “fehlerhaft” ist.  Erst wenn man akzeptiert, dass Fehler auftreten werden, ist man in der Lage darüber nachzudenken, wie man dieser Tatsache begegnen kann, um stabile, robuste, verlässliche Softwaresysteme zu erschaffen. Frei übersetzt nach Micheal T. Nygard [4] benötigt Unternehmenssoftware die folgende Eigenschaft: Software muss zynisch sein. Zynische Software erwartet...

Weiterlesen

log4j-Logging im JBoss 5 AS via JMX anpassen

Das Logging via log4j im JBoss 5 AS wird in der Regel über eine Konfigurationsdatei gesteuert. Möchte man nun temporär das Log-Level ändern, um beispielsweise DEBUG-Meldungen zu sehen, dann besteht grundsätzlich die Möglichkeit, dies mittels Texteditor direkt in der Konfigurationsdatei anzupassen. Nach einer Wartezeit von maximal 60 Sekunden erfolgt (sofern man die Standardeinstellungen nicht verändert hat) eine automatische Rekonfiguration von log4j, falls sich die Konfigurationsdatei geändert hat. Der Nachteil dieser Vorgehensweise ist, dass man (vor allem bei Produktivsystemen) eine dauerhafte Änderung an der Konfiguration vornimmt. Diesem Nachteil kann man begegnen, wenn man die Änderungen an der log4j Konfiguration über JMX (jmx-console > jboss.system > service=Logging,type=Log4jService) macht. Über die im MBean angebotenen Methoden können nun die Log-Level beliebig geändert werden, ohne dass diese persistent weggeschrieben werden. Spätestens mit einem Neustart des Servers gehen die Änderungen verloren und log4j arbeitet wieder, wie in der Konfigurationsdatei definiert. Wer nicht auf den Komfort einer Konfigurationsdatei verzichten möchte, kann beide Vorgehensweisen kombinieren und via JMX über den Parameter “ConfigurationURL” der MBean auf eine alternative Datei verweisen. This article is based on the blog post ‘Dynamically Updating Log Levels in JBoss’ by Chris Mahns. Thank you very much for sharing your knowledge...

Weiterlesen

Probleme nach Update auf TYPO3 4.5.15

TYPO3 4.5.15 schließt eine große Sicherheitslück. Allein deshalb ist ein Update auf diese Version sehr zuempfehlen. Leider treten nach dem Update einige Fehler in Zusammenhang mit dem Seitenbaum im Backend auf, die sich wie folgt auswirken können: der Seitenbaum wird für einen (nicht-Admin) Benutzer nicht angezeigt der Seitenbaum ist unvollständig Unterseiten lassen sich nicht aufklappen Seiten sind mehrfach im Seitenbaum vorhanden Im Backend kann den Problemen vorläufig damit begegnet werden, dass der Benutzer in seinen Benutzereinstellungen die temporären Daten löscht und sich ab- und wieder anmeldet. Eine fehlerbereinigte Version von TYPO3 4.5 wird sehnlichst erwartet. Weiter Informationen: https://typo3.org/teams/security/security-bulletins/typo3-core/typo3-core-sa-2012-002/ http://www.webhosting-franken.de/support/knowledge-base/anzeige/art/70/problem-mit-seitenbaum-bei-typ.html...

Weiterlesen

Graphicsmagick 1.1.11 auf Ubuntu 10.04 LTS installieren

Ich musste letzte Woche einen Server mit Ubuntu 10.04 LTS für eine TYPO3-Installation präparieren. Alles kein Problem, dachte ich. Graphicsmagick und die anderen Tools installiert aptitude install graphicsmagick catdoc xpdf-utils ppthtml unrtf unzip xlhtml und die Datenbank eingerichtet. Ein bisschen PHP- und Apache2-Konfiguration und das müsste es im Großen und Ganzen gewesen sein. Als ich dann aber im TYPO3-Install Tool die “Image Processing” Tests durchgeführt habe, gab es die böse Überaschung: Knapp 30 Sekunden für den Test “Reading image formats”. Und auch der Aufruf von Seiten, die noch nicht im Cache liegen, dauerte ewig. Die gesamte Site-Performance ließ dadurch zu wünschen übrig und war inakzeptabel. Ein Umstieg auf die unter Ubuntu 10.04 LTS aktuell verfügbare Version von ImageMagick brachte leider auch nicht den gewünschten Verbesserungseffekt. Ich entschied mich dann für die Installation von Graphicsmagick in der Version 1.1.11 (aus Ubuntu Hardy), die ich auch in anderen TYPO3-Installationen erfolgreich verwende. Hier folgt nun eine kurze Anleitung, wie ich das bewerkstelligt habe – mit dieser Vorgehensweise lassen sich ältere (vielleicht auch neuere) Versionen von Software-Paketen installieren. Downloads: wget http://ftp.halifax.rwth-aachen.de/ubuntu/pool/universe/g/graphicsmagick/libgraphicsmagick1_1.1.11-1_amd64.deb wget http://ftp.halifax.rwth-aachen.de/ubuntu/pool/universe/g/graphicsmagick/graphicsmagick_1.1.11-1_amd64.deb Installation: dpkg -i libgraphicsmagick1_1.1.11-1_amd64.deb apt-get install -f dpkg -i libgraphicsmagick1_1.1.11-1_amd64.deb dpkg -i graphicsmagick_1.1.11-1_amd64.deb Lock in apt/aptitude: echo libgraphicsmagick1 hold | dpkg --set-selections echo graphicsmagick hold | dpkg --set-selections aptitude hold libgraphicsmagick1 aptitude hold graphicsmagick Test: TYPO3 Backend > Install Tool > Image Processing > 1. Reading image formats Parsetime with...

Weiterlesen

WebServices mit JBossWS realisieren

Zur Zeit befasse ich mit mit der Realisierung von WebServices mit JBossWS in einem JBoss AS 4.2.3.GA. Hier möchte ich kurz zusammenfassen, was ich beachtet habe und wie ich bei der Service-Implementierung vorgegangen bin. JBoss AS und Java6 Betrieben wird ein JBoss AS 4.2.3.GA (und ein 4.2.2.GA; Java 5 compiled binaries) in einer Java 6 Umgebung. Auf die Gründe, wesghalb kein JBoss AS 5.x eingesetzt wird möchte ich nicht näher eingehen und wir nehmen die Umgebung als gegeben hin. In dieser Umgebung gilt es allerdings folgenden Konfigurationshinweis aus der 4.2.3.GA Distribution zu beachten, die analog für Version 4.2.2.GA gilt: JBossAS 4.2.3.GA can be compiled with both Java5 & Java6. The Java5 compiled binary is our primary/recommended binary distribution. It has undergone rigorous testing and can run under both a Java 5 and a Java 6 runtime. When running under Java 6 you need to manually copy the following libraries from the JBOSS_HOME/client directory to the JBOSS_HOME/lib/endorsed directory, so that the JAX-WS 2.0 apis supported by JBossWS are used: jboss-jaxrpc.jar jboss-jaxws.jar jboss-jaxws-ext.jar jboss-saaj.jar jaxb-api.jar JAX-WS und JAX-RPC “JAX-WS” und “JAX-RPC” laufen einem immer wieder über den Weg, sobald man sich mit WebServices in der Java-Welt beschäftigt. Anfangs stellte sich mir die Frage, was sich hinter diesen Begriffen verbirgt und was dabei der Unterschied ist. Ich fand hierzu einen interessanten Artikel von Vamshi Rapolu in dessen Blog und ich verzichte an dieser Stelle näher auf...

Weiterlesen

Spring3 + Hibernate + Jasypt

Ich habe ein neues Java-Projekt, indem ich Hibernate zum ersten mal mit Spring und Jasypt einsetze. Spring und Hibernate dürften eher bekanntere Begriffe aus der Javawelt sein, so dass ich nur kurz erwähnen möchte, was Jasypt ist. Jasypt steht für Java simplified encryption und bietet dem Entwickler bei kombiniertem Einsatz mit Hibernate eine für die Businesslogik transparente Verschlüsselung von zu persitierenden Daten. Ich habe versucht, der Anleitung zum Einsatz von Jasypt mit Hibernate 3 zu folgen, erhiel aber immer wieder die folgende EncryptionInitializationException: Exception in thread “main” org.jasypt.exceptions.EncryptionInitializationException: No string encryptor registered for hibernate with name “strongHibernateStringEncryptor” at org.jasypt.hibernate.type.AbstractEncryptedAsStringType.checkInitialization(AbstractEncryptedAsStringType.java:250) at … Nachdem ich mehrere Stunden verzweifelt nach der Ursache und meinem Fehler gesucht habe – mittels Google und Try’n’Error – bin ich auf einen Beitrag gestoßen, der mich schließlich auf die Lösung gebracht hat. Nach einer kleinen aber wirkungsvolle Änderung in meiner Spring-Konfigurationsdatei applicationContext.xml (depends-on=”hibernateStringEncryptor” in der markierten Zeile) war der Fehler behoben … applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <bean id="strongEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor"> <property name="algorithm"> <value>PBEWithMD5AndDES</value> </property> <property name="password"> <value>xJxAxSxYxPxTx</value> </property> </bean> <bean id="hibernateStringEncryptor" class="org.jasypt.hibernate.encryptor.HibernatePBEStringEncryptor"> <property name="registeredName"> <value>strongHibernateStringEncryptor</value> </property> <property name="encryptor"> <ref bean=”strongEncryptor” /> </property> </bean> <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mydatabase" /> <property name="user" value="myusername" /> <property name="password" value="mysecretpassword" /> <property name="minPoolSize" value="2" /> <property name="maxPoolSize" value="4" /> </bean> <bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" depends-on="hibernateStringEncryptor"> <property name="dataSource" ref="datasource" />...

Weiterlesen

JAX2010 – Workshop und Konferenztag I

Montag morgen. Ich bin nach über einer Stunde Stau mit einer kleinen Verspätung in Mainz angekommen. Leider keine Zeit mehr für eine Tasse Kaffee, der Workshop hat bereits begonnen. Also setze ich mich in eine der hinteren Reihen und merke, dass ich nicht allzuviel verpasst hatte. Um was ging es im Workshop? Ich besuchte den Power Workshop “Einführung in das Spring Framework 3.0”. Eberhard Wolff, Referent des Workshops und Autor des Buchs Spring 3: Framework für die Java-Entwicklung, gab zunächst eine Einführung in die Konzepte von Spring 3 und zeigte den Teilnehmern eindrucksvoll die Anwendung dieser Konzepte in Life-Demonstrationen. Der interessanteste Teil war für mich die Einführung in die apektorientierte Programmierung (AOP) mit dem Spring Framework. Auch die Vorstellung von SpringRoo war beeindruckend. Aber irgendwo hab ich das schonmal gesehen: Codegenerierung und Scaffolding :-) Zusammenfassend kann ich sagen, dass mir der Workshop einen guten Einblick und Einstieg in die Welt von Spring gegeben hat. Die Fragen, die ich mir stelle und die ich noch nicht beantwortet habe und auch noch nicht beantworten kann ist folgende: Sind EJB3 und Spring gegensätzliche Technologien? Welche Vorteile bietet mir die eine Technologie gegenüber der anderen? Wann ist es Sinnvoll einen ebedded Container zu verwenden und wann macht es Sinn auf JEE zurückzugreifen? Wie gesagt, für den Einstieg war der Workshop eine gelungene Veranstaltung, die in mir auf jeden Fall das Interesse an Spring geweckt hat. Am nächsten Tag begann die eigentliche JAX2010...

Weiterlesen
Wird geladen