Sensibilität für Codequalität fördern

peez

Bekanntes Mitglied
Ich bin jetzt ca. ein Jahr in meiner neuen Firma und habe mittlerweile das Standing, um auch mal tiefergreifende Änderungen vorzuschlagen oder durchzubringen.
Was mich von Anfang an gestört hat, ist die Qualität des Codes den unsere Programmier produzieren. Um es kurz zu machen, teilweise ist von hinten durch die Brust programmiert u. das völlig ohne Kommentare. GUI-Fenster die exakt gleich aussehen und funktionieren, sind doppelt programmiert, nur weil Daten aus einer minimal anderen Quelle angezeigt werden und und und...

Kurz vielleicht zu unserer Situation - wir haben keine Einzelprojekte sondern eines, das kontinuierlich weiterentwickelt wird. So gibt es monatliche Verteilungszeitpunkte. D.h. die Programmierer haben für die meisten Aufgaben gerade mal 3 Wochen (dann Codefreeze etc.) Zeit. Wenn man es aus dieser Sicht sieht, kann man es ihnen nicht allzu übel nehmen, dass sie etwas "nachlässig" programmieren.
Dennoch sollte man das Problem angehen. Ausser SVN und diesen Codefreeze Zeiten verwenden wir bisher keinerlei Werkzeuge zur Qualitätssicherung.

Mein erster Ansatz wäre jetzt erst mal ein monatlicher Code-Review und die Pflicht, wenigstens für alle Methoden der EJBs Unit-Tests zu entwickeln.
Ein Bug-Tracking Tool wäre auch ganz nett. Wir haben mal kurz BugZilla versucht aber das ist - jedenfalls so wie ich es gesehen habe - einfach nicht integriert genug.

Evt. kennt jemand von euch das Problem und hat es schon erfolgreich gelöst? Würde mich sehr über eure Erfahrungen freuen.

Auch frage ich mich, ob es evt. ein Codereview-Tool gibt, das mehr oder weniger nahtlos mit SVN zusammenarbeitet u. beispielsweise nur gereviewten Code ins finale Release aufnimmt. Dann evt. noch ein Bugtracking tool das ebenfalls mit SVN zusammenarbeitet u. der Programmierer beim Einchecken direkt den entspr. Bug auswählen kann, den er gerade gefixt hat...
 

slawaweis

Bekanntes Mitglied
klingt alles nach fehlenden Soft Skills. Ein Haufen von Software-Werkzeugen wird nicht helfen, wenn es kein eingespieltes Team mit einem fähigen Projektleiter gibt. Sind den die Mitarbeiter ausreichend motiviert? Werden diese regelmäßig gelobt für gute Arbeit? Was wird in den Meetings besprochen? Wird da konstruktiv diskutiert oder einfach nur genickt, damit man schneller abhauen kann? Wie ist die Kommunikation im Team? Sprechen die Leute oft miteinander über das Projekt oder erst wenn man sie mehrmals dazu aufgefordert hat? Was ist mit den Vorgesetzten und/oder den Projektleitern? Lassen sie genügend Raum für Vorschläge und Kritik seitens des Teams? Hören sie darauf und versuchen sofort eine Lösung für technische wie nicht-technische Probleme zu finden? Welchen Führungsstill haben sie? Als General, als Kapitän, als der beste Kumpel oder als die missverstandene und am meisten leidende Person des Unternehmens?

Meiner bisherigen Erfahrung nach, macht in einem echten Softwareprojekt der reine Programmieranteil um die 15% aus. Sehr viel Zeit geht auf andere Sachen drauf, die teilweise nichts mit der Software zu tun haben. Letztendlich arbeiten Menschen daran und die sind launisch. Das sind keine Roboter. Also ist es sehr wichtig, an der Atmosphäre und der Kommunikation im Team zu arbeiten, damit die Mitarbeiter frei und entspannt miteinander sprechen können. Dabei sollten sie auch einander kritisieren können ohne in persönliche Angriffe oder wilde Unterstellungen zu verfallen. Ich habe dieses Buch gelesen:

Softwareentwicklung im Team - Erfolgreiche Planung und Durchführung von IT-Projekten: Amazon.de: Georg Erwin Thaller: Bücher

und das hat mir sehr geholfen einige Sachen besser zu verstehen. Es gibt hunderte Bücher zu diesem Thema und bestimmt gibt es bessere, aber das genante Buch ist einfach zu lesen und ich fand es hilfreich.

Jedenfalls muss immer ein fähiger Projektleiter vorhanden sein, der nicht nur die technische, sondern auch die soziale Komponente versteht und managen kann. Weiterhin muss man Leute abstellen, die nicht nur an der Software arbeiten, sondern sich mit anderen, genauso wichtigen Bereichen, beschäftigen. Z.B. eine Gruppe, die sich rein mit der Dokumentation beschäftigt. Was muss dokumentiert werden, was nicht? Im welchen Format, mit welcher Software? Kommen damit alle zurecht? Machen es auch alle? Wo mangelt es? Vielleicht eine Schulung machen, damit alle auf den selben Stand sind? Dann z.B. eine Utility-Gruppe. Was wird häufig an Hilfsfunktionen benötigt? Was ist ähnlich und kann in ein globales Utility-Framework eingebunden werden, was dem ganzen Unternehmen zu Verfügung gestellt und auch ausreichend beworben wird? Was brauchen die Mitarbeiter noch an Hilfsfunktionen, woran mangelt es? Regelmäßige Umfragen? Eine weitere Gruppe könnte z.B. eine Testgruppe sein. Diese programmiert nicht an der Software selber, sondern beschäftigt sich täglich mit den Gedanken, Tests und Verfahren, wie man die Software kaputt kriegt. D.h. eine reine Demolition-Gruppe die alles im Rahmen der Kreativität einsetzt, um die Software auf Herz und Nieren zu testen und regelmäßig gute Fehlerberichte und -analysen zu erstellen.

Slawa
 

Murray

Top Contributor
<slightly-off-topic>
Ich bin jetzt ca. ein Jahr in meiner neuen Firma und habe mittlerweile das Standing, um auch mal tiefergreifende Änderungen vorzuschlagen oder durchzubringen.
Nach einem Jahr kannst Du tiefgreifende Änderungen auch durchbringen (vorschlagen kann man das sicher schon eher)? Respekt...

Ich nehme mal an, dass die Entwickler, über die Du hier sprichst, zumindest teilweise schon länger im Unternehmen sind als Du - da brauchst Du wohl ziemlich gute Rückendeckung.

Auf jeden Fall wünsche ich Dir viel Erfolg - wir "Langgedienten" können bestimmt manchmal etwas frischen Wind gut gebrauchen, selbst wenn man erstmal automatisch eine Abwehrhaltung einnimmt.
</slightly-off-topic>

M.E. ist die Idee mit den verpflichtenden Unit-Test ganz gut; obligatorischen Code-Reviews dürften am Zeitaufwand scheitern - denn die Entwickler machen die von Dir beschriebenen Dinge ja vermutlich nicht aus Unwissenheit oder Böswilligkeit, sondern durch den Zeitdruck; wo sollte man da zusätzliche Zeit für Reviews hernehmen?

Vielleicht hilft auch der Einsatz eines Architektur-Management-Tools wie PMD, Findbugs oder Checkstyle weiter .

Technisch erzwungene organisatorische Hürden für das Einchecken würde ich lieber nicht aufstellen wollen, weil garantiert irgendwann die Situation kommt, in der eine Lösung ganz schnell produktiv gestellt werden muss, egal, ob vorher Code-Reviews gelaufen sind oder nicht.
 
Zuletzt bearbeitet:

kama

Top Contributor
Hallo,

Was mich von Anfang an gestört hat, ist die Qualität des Codes den unsere Programmier produzieren. Um es kurz zu machen, teilweise ist von hinten durch die Brust programmiert u. das völlig ohne Kommentare. GUI-Fenster die exakt gleich aussehen und funktionieren, sind doppelt programmiert, nur weil Daten aus einer minimal anderen Quelle angezeigt werden und und und...
Das hört sich danach an, als ob die Applikation ein Refactoring benötigen würde...Refactoring ist aber realistisch nur dann machbar wenn man eine gute Abdeckung durch Unit Tests hat...

Dennoch sollte man das Problem angehen. Ausser SVN und diesen Codefreeze Zeiten verwenden wir bisher keinerlei Werkzeuge zur Qualitätssicherung.
Also jetzt bin ich mal ein wenig pingelig...SVN ist ein Version Control Tool und hat nichts mit QS zu tuen...

Mein erster Ansatz wäre jetzt erst mal ein monatlicher Code-Review und die Pflicht, wenigstens für alle Methoden der EJBs Unit-Tests zu entwickeln.
Ein Bug-Tracking Tool wäre auch ganz nett. Wir haben mal kurz BugZilla versucht aber das ist - jedenfalls so wie ich es gesehen habe - einfach nicht integriert genug.
Code Reviews werde hier scheitern. Warum? Weil die Kultur nicht existiert...der Erste Schritt ist verbindlich Unit Tests einzuführen...

Evt. kennt jemand von euch das Problem und hat es schon erfolgreich gelöst? Würde mich sehr über eure Erfahrungen freuen.
Wenn jemand diese Art von Problemen gelöst hätte dass wären wir alle glücklich ;-)

Auch frage ich mich, ob es evt. ein Codereview-Tool gibt, das mehr oder weniger nahtlos mit SVN zusammenarbeitet u. beispielsweise nur gereviewten Code ins finale Release aufnimmt. Dann evt. noch ein Bugtracking tool das ebenfalls mit SVN zusammenarbeitet u. der Programmierer beim Einchecken direkt den entspr. Bug auswählen kann, den er gerade gefixt hat...
Also ich eher der Meinung ein Code Review bringt hier zuerst einmal garnichts...auch ein Tool hilft nicht weiter...
Das Erste sind Unit Tests weiterhin wäre hier der richtige Einsatz einer Branching Strategie basierend auf einem Issue Tracking System (Ein Branch pro Issue etc.). Dann der Einsatz eines Continious Integration System (z.B. Hudson) und entsprechende Anpassung der Arbeitsweise darauf..
Issue Tracking System: z.B. Redmine (Redmine - Overview - Redmine)...

Branching und insbesondere Merging ist auch nur realistisch möglich mit einer guten Abdeckung durch Unit Tests...

Wenn man Unit Tests einführt kommt man zwangläufig an Orte wo oft gesagt wird, dass ich schwierig zu Testen oder eventuell garnicht. Das sind dann Punkte die gefactored werden müssen, um Sie testbar zu machen...
 

kama

Top Contributor
Hallo,

Vielleicht hilft auch der Einsatz eines Architektur-Management-Tools wie PMD, Findbugs oder Checkstyle weiter .
Was haben PMD, Findbugs und Checkstyle mit Architektur Management Tools zu tuen ? Hier werden duplicate Code, Einhaltung Code Style Richtlinien geprüft...und typische Bug Situation?

Gruß
Karl Heinz Marbaise
 

Marco13

Top Contributor
Jedenfalls muss immer ein fähiger Projektleiter vorhanden sein...
Z.B. eine Gruppe, die sich rein mit der Dokumentation beschäftigt...
Dann z.B. eine Utility-Gruppe. Was wird häufig an Hilfsfunktionen benötigt? ...
Eine weitere Gruppe könnte z.B. eine Testgruppe sein....
Der Fall, dass jeder einzelne Mitarbeiter EIN Projekt "managt", "programmiert", "dokumentiert" und "testet" ist damit wohl auch abgedeckt ;)
 
B

bygones

Gast
Wenn man Unit Tests einführt kommt man zwangläufig an Orte wo oft gesagt wird, dass ich schwierig zu Testen oder eventuell garnicht. Das sind dann Punkte die gefactored werden müssen, um Sie testbar zu machen...
legacy code zu testen ist so und so zu 99% nicht möglich oder so umständlich, dass einem die Mission "Unit Tests helfen uns weiter" in keiner weise geglaubt wird.

Weiterhin hat man das Problem dass bei nicht vorhandenen Testwissen dass alleinige Schreiben von Unittests (womöglich sogar mit einer hohen Coverage) leider Qualitätsmäßig nicht immer einen vorwärtsbringt.

Dennoch ist es natürlich richtig das ganze in kleinen Schritten anzugehen - ich sehe aber definitiv Schwierigkeiten in der Vermittlung von QS aktivitäten, wenn man mit legacy code anfängt.
 
V

Vayu

Gast
Atlassian Jira in Verbindung mit Fisheye und evtl ein paar Hookskripte im svn bilden ein gutes Werkzeug
 

Landei

Top Contributor
Wie schon gesagt wurde: Die Werkzeuge sind nicht das Problem, sondern die Leute.

Wenn man sie nicht überzeugen kann, dass es hier nicht um Rumgemecker geht, sondern um konstruktive Kritik, die sie selbst weiterbringt und ihnen ihre Arbeit im Endeffekt erleichtert, ist Hopfen und Malz verloren.

Sanfter Zwang kann helfen, aber nur bis zu einem gewissen Grad, dann machen sie "zu".
 
V

Vayu

Gast
...und trotzdem keinen Service haben möchte...

Wir haben schon Confluence als Wiki und von denen kommt mir nach Möglichkeit nichts mehr ins Haus...

hmm kann ich nicht nachvollziehen, als ich noch mit denen zutun hatte und service brauchte ging das eigentlich relativ flott und kompetent.

Geld ist ne andere Sache, klar kostet Geld, aber ich fand das war sein Geld wert. Und in ner Firma kann man ja schonmal Geld für sowas ausgeben.
 

fastjack

Top Contributor
Wahrscheinlich ist das alles eine Frage der Motivation der Mitarbeiter bei Euch. Vielleicht haben die einfach keinen Bock, oder wollen nicht mehr, weil abgestumpft etc. Kurzum: Motivationslag.
Codestil und JavaDoc könnt Ihr durch Checkstyle mit Checkstyle-Reports prüfen.
Testen sollte auch Selbstschutz der jeweiligen Entwickler sein. Gerade bei größeren Projekten, oder bei vielen Wiederverwendbaren Teilen kann nur so die Stabilität anderer Projekte, bei Änderungen, gewahrt bleiben. Zur Testabdeckung kann man Emma benutzen, das erzeugt auch Reports.
Wenn man die Reports automatisiert etwas "schöner", "bunter" macht, sind viele Entwickler gleich motivierter.
Vielleicht sollte Ihr auch den Arbeitstil ändern, z.B. agile Teams bilden etc. Das fördert auch die Motivation.
Die Leute müssen einfach den Zweck vom Testen, Dokumentieren etc. verstehen und der lautet: Streß vermeiden.
 

fastjack

Top Contributor
Mit Streß vermeiden meine ich genau diesen Streß, den man hat, wenn man Methode X geändert hat und ein paar Wochen später die darauf aufbauenden Projekte A, B und C schief laufen.
 
M

maki

Gast
Evt. kennt jemand von euch das Problem und hat es schon erfolgreich gelöst? Würde mich sehr über eure Erfahrungen freuen.
Ist gar kein Problem, es müsste sich nur alles ändern... inkl. der Entwickler ;)

Vorgehensmodelle und Literatur gibt es ja mehr als genug zu diesem Thema (Clean Code, Refactoring, XP, etc. pp.), das ist, wie schon von anderen erwähnt, eine kulturelle Angelegenheit: Arbeitet man sauber, oder ist es "fertig" wenn erstmal etwas funktioniert.

Sehe das anders als slawaweis, Aufgaben zu trennen (Implementierung, Test, Doku, etc. pp.) ist der falsche Weg imho, der richtigere Weg wäre das Teammitglieder Aufgaben wahrnehmen und Verantwortung tragen, finde Trennung zwischen Testern & Entwicklern nie gut, da wird zuviel Verantwortung weitergeschoben und die Wege werden unnötig lang.

Die Techniken wurden schon genannt, Code Reviews, Unittests, Refactoring, würde da noch CI mitreinnehmen.
Aber ohne die passende Kultur in den Köpfen, wird das nix, ist kein Toolingproblem.

Nebenbei, Trac würde ich heute niemandem mehr empfehlen, Redmine kann das auch, nur besser.
 

KSG9|sebastian

Top Contributor
Vorgehensmodelle und Tests als Pflicht zu definieren macht das ganze nur schlimmer.

Die Kultur muss stimmen: Wenn der Entwickler keinen Wert auf Qualität legt dann bringen Unittests auch nichts. Solange das Bewusstsein dafür nicht vorhanden ist bringt es nix.

Wir haben in einem Team ein ähnliches Problem gehabt: Wir haben dann ein Projekt mal nach Testdriven Development gemacht. Am Anfang waren die Leute ziemlich skeptisch, aber wir konnten schließlich alle überzeugen.

Die Leute müssen einen Mehrwert sehen. Unittests zu schreiben damit Unittests da sind hilft nichts. Wenn man den Leuten aber erklären kann warum und wieso dann gehts, z.B. "schreib zuerst einen Test und dann den eigentlich Code. Dadurch bist du schnell, du weißt von Anfang an welche Schnittstellen benötigt werden und es wird kein unnützer Code geschrieben"
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Plugins entwickeln für ein CMS welches unter der GPL V3 steht Softwareentwicklung 1
I Datenbankschema für Versionierung der Tabellen Softwareentwicklung 9
R Datenstruktur für einen rätselhaften Namen Softwareentwicklung 10
Rahim Post Conditions für InsertAt und remove Softwareentwicklung 1
P Thema für meine Projektarbeit die etwas mit Webautomatisierung zu tuen haben soll? Softwareentwicklung 1
H Entwurfsmuster für den Client der Rest API Softwareentwicklung 0
D Welche Technologien für App und web? Softwareentwicklung 3
Thallius oAuth2 und ClientCredentials für API sinnvoll? Softwareentwicklung 3
S Welche Programmiersprache für eine 3D-Software? Softwareentwicklung 6
N Technologie Grundlagen für eine "App" Softwareentwicklung 12
OnDemand Welches Tool für Planung Softwareentwicklung 2
B Sprache für 3D Physics Engine? Softwareentwicklung 3
K Maßnahmen für Softwarequalität Softwareentwicklung 2
N Graphenalgorithmen: Best Practice für Knoten-/Kanten-Attribute Softwareentwicklung 5
Z Analysemuster - Welches nehme ich für diese Problem? Softwareentwicklung 0
L Softwareentwicklung für Embedded Systems Softwareentwicklung 1
T Gibt es eine Software die Texte für Skype automartisch (automassage) sendet ? Softwareentwicklung 4
R Online-Plattform für Essensbestellungen mit der momentanen Bestellverfolgung Softwareentwicklung 1
S Suche: (Versionierungs)Tool für Klassenaustausch mit Kollegen, die auch an dem Projekt arbeiten Softwareentwicklung 5
R UML-Diagramm für mehrere JFrames Softwareentwicklung 0
S Algorithmus für perfekte Kombination Softwareentwicklung 2
U Individualsoftware - eine Gefahr für Kunden oder die günstigere Alternative? Softwareentwicklung 7
J Grafiken für eigene Apps ? Softwareentwicklung 2
V [Klassendesgin] Verhalten von Subklassen für Aufgabenteilung benutzen. Softwareentwicklung 2
KranzKrone Architektur für einfaches Gui Programm Softwareentwicklung 6
R freie Engine für IOS, Android, Blackberry Softwareentwicklung 11
T SMART für USB Sticks? Softwareentwicklung 9
BinaryLogic Software für Projektplanung und -Entwicklung Softwareentwicklung 19
A MVC & getter für GUI Komponenten Softwareentwicklung 5
S Abstractes/Schnittstellen für Objekte Softwareentwicklung 8
fastjack Welches Tool für Agile Softwareentwicklung? Softwareentwicklung 6
C Wiki für ein Uni - High Level Design Softwareentwicklung 5
S Design Pattern für zwei abhängige Klassen Softwareentwicklung 8
Mike90 Lizenz für eigene software Softwareentwicklung 9
V Welche Programmisprache für den Desktop? Softwareentwicklung 17
V Zeitplanung für JUnit-Tests? Softwareentwicklung 9
Jay_030 Checkstyle: Lösungsvorschläge für Design for Extension Softwareentwicklung 7
B Allgemeine Fragen für eigenes Projekt Softwareentwicklung 4
B Empfehlung für Datenbankschulung? Softwareentwicklung 2
D Beispiele für Patterns Softwareentwicklung 3
K Aufwandsabschätzung für User Stories Softwareentwicklung 8
Torres SDK für automatische Bildkorrektur Softwareentwicklung 3
martin82 Tool für IT-Requests Softwareentwicklung 5
Z Welche Software für Web Anwendungen/Spiel Softwareentwicklung 3
Quaxli Suche Tutorial für Jasper Report - speziell iReport Softwareentwicklung 8
Outsourcer Webservertechnologie für Objekterkennung Softwareentwicklung 7
Landei SSH für VMware GSX mit Windows? Softwareentwicklung 2
ARadauer jetzt wirds zeit für Delphi Softwareentwicklung 6
X JavaScript Plugin für Eclipse Softwareentwicklung 3
sparrow Welche Lizenz für ein offenes Programm Softwareentwicklung 2
ARadauer Code Konvention für Datenbanken Softwareentwicklung 5
G Suche Programm für Masken Design für Pflichtenheft Softwareentwicklung 5
S Wie weiter gehen und tutorial für MVC Softwareentwicklung 20
G Pattern für Datenbank Anwendung Softwareentwicklung 22
m@nu Anti-Spam-System für Blog bauen Softwareentwicklung 3
B Was ist besser für Grafiken? Java oder C#? Softwareentwicklung 9
N Brauche Hilfe für Onlineshop Aufgabe für OOP Grundlagen Softwareentwicklung 4
N Für und Wieder von Java und .NET (primär C#) | Performance Softwareentwicklung 6
G 1 Benutzeroberfläche für 3 einzelne Programme! Softwareentwicklung 9
D Programme für UML Softwareentwicklung 3
A Was ist die richtige Lizenz für mich? Softwareentwicklung 2
R Tool für Anforderungsermittlung, Bugtracking und Test Softwareentwicklung 4
V Antwort bewerten (Nur etwas für Experten!) Softwareentwicklung 15
D cheat für ein spiel fixen Softwareentwicklung 19
F IDE für VB Softwareentwicklung 4
K Design Pattern für einen simple Rechenmaschine Softwareentwicklung 18
S Beispiel für MVC gesucht Softwareentwicklung 53
F Kleines Programm für Windows Softwareentwicklung 2
K Buch oder Online-Tutorium für Programmentwicklung (Anfänge) Softwareentwicklung 5
G Bitte Hilfe für mySQL in einem Query Softwareentwicklung 7
J Beispiel für Besuchermuster Softwareentwicklung 6
M Übersetzer für Programmhilfe gesucht Softwareentwicklung 2
M Disclaimer für eigene Programme? Softwareentwicklung 3
U Geeignete Plattform für Projekt (JSP, PHP, Java-Anwendung) Softwareentwicklung 7
S Open Source Software für UML Softwareentwicklung 8
R Ein Thread für eine Methode Softwareentwicklung 2
S Hilfe für anfänger Softwareentwicklung 7
I regualar expression für Konstruktoren Softwareentwicklung 4
T Brauche für meinen Java-Code dringend Hilfe Softwareentwicklung 4
B Wo bekommt man fertige Java-Programme (z.B. für Lsg LGS) Softwareentwicklung 3
Landei Codequalität: "Funktioniert" ist nicht genug Softwareentwicklung 22

Ähnliche Java Themen

Neue Themen


Oben