Software-Quali­täts­si­che­rung

Unser Quali­täts­an­spruch an Software

Wir als Unter­nehmen, als Team und als Mitar­bei­tende stellen einen hohen Quali­täts­an­spruch an unsere Software. Denn wir kennen die Folgen und Probleme, die entstehen, wenn bei der Software­ent­wick­lung die Quali­täts­si­che­rung vernach­läs­sigt wurde. Wurden Archi­tektur und Code nicht sorgfältig nach maßgeb­li­chen Quali­täts­kri­te­rien erstellt, werden die Pflege und spätere Weiter­ent­wick­lungen zeitin­tensiv und teuer.

Vor allem in der Inves­ti­ti­ons­gü­ter­in­dus­trie mit sehr langen Produkt­le­bens­zy­klen zahlen sich ein konstanter Fokus und stetige Inves­ti­tion in quali­täts­si­chernde Maßnahmen mittel- bis langfristig immer aus. Deshalb wenden wir konse­quent Maßnahmen zur Quali­täts­si­che­rung an und haben diese Prozesse in unserer Arbeits­weise veran­kert. Der Quali­täts­aspekt ist Teil unseres Mindset, quasi Teil unserer DNA.

Worauf legen wir im Software­ent­wick­lungs­pro­zess Wert?

Wer ist von Auswir­kungen mangelnder Software­qua­lität betroffen?

Bereits während der Software­ent­wick­lung wirkt sich eine mangel­hafte Quali­täts­si­che­rung negativ aus: Agile Methoden können kaum genutzt werden, laufende Software­tests sind schwierig und das ganze Team ist frustriert, wenn immer wieder viel Zeit für die Fehler­suche aufge­wendet werden muss.

Die Vernach­läs­si­gung quali­täts­si­chernder Maßnahmen vor und während des Software­ent­wick­lungs­pro­zesses zeigen sich u.a. in undurch­dachten Archi­tek­turen und schlecht lesbarem Quellcode.

 

Selbst wenn eine entwi­ckelte Software die funktio­nalen Anfor­de­rungen gerade noch erfüllt, entstehen mittel- bis langfristig negative Auswir­kungen. Davon sind während und nach der Zusam­men­ar­beit alle Projekt­be­tei­ligten betroffen.

Anwender

  • erhält mangel­hafte, schlecht bedien­bare Software
  • im schlimmsten Fall verur­sacht Software Systemausfälle
  • hohes Frustra­ti­ons­level
  • höherer Schulungs­auf­wand aufgrund kürzerer Nutzungs­dauer der Software

Auftrag­geber

  • hohe Kosten durch zeitin­ten­sive Fehlerbehebungen
  • unwirt­schaft­liche Lösung, keine Wieder­ver­wen­dung program­mierter Funktionen
  • Abhän­gig­keit von Dienst­leister, interne Weiter­ent­wick­lung aufgrund unver­ständ­li­chen Codes unmöglich
  • Anhäu­fung techni­scher Schulden
  • im Worst Case droht Abbruch des Softwareprojekts

Entwickler

  • hoher Zeitauf­wand für Fehler­su­chen und ‑behebungen
  • hohes Frustra­ti­ons­level
  • sinkende Motiva­tion
  • erschwerte Teamar­beit, kaum kolla­bo­ra­tives Arbeiten möglich

Techni­sche Schulden

Fehlt die Bereit­schaft, zu Beginn eines Software­ent­wick­lungs­pro­jekts in den notwen­digen Aufwand zur Quali­täts­si­che­rung zu inves­tieren, riskiert der Auftrag­geber den Aufbau „Techni­scher Schulden“. Auch zu hoher Zeitdruck und unklare Anfor­de­rungen können diesen Effekt begüns­tigen. Vergleichbar mit finan­zi­ellen Schulden, Zinsen und Zinses­zins­ef­fekt poten­zieren sich diese Altlasten v. a. bei einer längeren Lebens­dauer von Software mit allen nachtei­ligen Konsequenzen.

Techni­sche Schuld kann somit als aufge­scho­bene Inves­ti­tion in die innere Qualität  gesehen werden. Dies geht so lange gut, bis die techni­sche Schuld so hoch ist, dass es Auswir­kungen auf das Projekt hat. Änderungen am schlechten Code werden nur behelfs­mäßig durch­ge­führt, wodurch sich die Mängel an der Software weiter erhöhen. Am Ende beein­träch­tigt die Tilgung der techni­schen Schuld alle Prozesse von der Entwick­lung, über die Wartung bis zur Weiterentwicklung.

Grafik zeigt Auf- und Abbau technischer Schulden
Aufbau und Tilgung techni­scher Schulden
Bild von Wolfram Schäfer

Inves­tiert man von Beginn an in ein ausge­reiftes Konzept, eine saubere Archi­tek­turen und in agile Prozesse sinkt zwar zunächst meist die Entwick­lungs­ge­schwin­dig­keit. Doch dieser Aufwand zur Vermei­dung techni­scher Schulden rechnet sich unserer Erfah­rung nach in jedem Fall.

Wolfram Schäfer

Geschäfts­führer IT Enginee­ring Software Innovations

Vorteile agiler Softwareentwicklung

Wir setzen konse­quent auf agile Entwick­lungs­pro­zesse, da sich dadurch unschlag­bare Vorteile für die Software, das Mitein­ander im Team und somit für das gesamte Projekt ergeben.

Agilität ist für uns die Fähig­keit zur Anpas­sung an neue Gegeben­heiten, weswegen Software „automa­tisch“ wandelbar entwi­ckelt wird.

  • Anfor­de­rungen müssen nicht von Beginn an „starr“ festge­legt sein, sondern werden in dem Maße präzi­siert, wie es für ihre Umset­zung notwendig ist
  • somit können auch schlecht einschätz­bare Aufwände und Risiken kontrol­liert werden
  • die konti­nu­ier­liche Verbes­se­rung ist ein Kernaspekt von Agilität, somit ist auch die entwi­ckelte Software auf Weiter­ent­wick­lung ausgelegt
Grafik zeigt Prozess der agilen Softwareentwicklung

Methoden zur Qualitätssicherung

Conti­nuous Development

Um die stetige, schritt­weise Weiter­ent­wick­lung von Software zu ermög­li­chen, braucht es Prozesse, die diese Vorge­hens­weise unter­stützen. Nur eine durch­gän­gige Prozess­kette, die in hohem Maße automa­ti­siert ist, ermög­licht diese Arbeits­weise, auch Continous Develo­p­ment genannt. Neue Releases und damit auch neue Funktio­na­li­täten können damit den Anwen­dern möglichst direkt und schnell zur Verfü­gung gestellt werden.

Conti­nuous Integra­tion (CI)

In einem automa­ti­sierten Prozess werden die einzelnen Kompo­nenten zu einer Anwen­dung zusam­men­ge­fügt. Das Ziel ist die Quali­täts­stei­ge­rung der Software. 

Conti­nuous Delivery (CD)

Techniken, Prozesse und Tools, die den Software­aus­lie­fe­rungs­pro­zess verbes­sern. So kann in Kombi­na­tion mit agilen Methoden quali­tativ hochwer­tige Software entwi­ckelt werden. 

Conti­nuous Deploy­ment (CD)

Release­pro­zess, bei dem Änderungen am Code automa­ti­siert und sofort an Endnutzer ausge­lie­fert werden. Fehler werden aufgrund kleiner Entwick­lungs­schritte schnell identifiziert. 

Weitere quali­täts­si­chernde Maßnahmen

Code Reviews 

Regel­mä­ßige Code Reviews sind das effizi­en­teste Verfahren, um Software­qua­lität nachhaltig zu steigern. Durch die konti­nu­ier­liche Analyse des Quell­codes nach dem „Vier-Augen-Prinzip“ durch andere Entwickler wird eine itera­tive Optimie­rung möglich. 
  • Berück­sich­ti­gung und Steige­rung nicht-funktio­naler Qualitätsmerkmale
  • Einbin­dung von Kompe­tenzen anderer Entwickler
  • Erzie­lung einer wartbaren und erwei­ter­baren Software

Automa­ti­sierte Softwaretests 

Verschie­dene Test-Szena­rien werden regel­mäßig und automa­ti­siert ausge­führt, um den manuellen Testauf­wand zu minimieren. Software­tools übernehmen die wieder­keh­rende Überprü­fung relevanter Funktionen der Software­an­wen­dung, um deren stabilen Betrieb sicherzustellen. 
  • geringer manueller Aufwand für das wieder­keh­rende Testing
  • automa­ti­sierte Überprü­fung von Funktionsabläufen 
  • regel­mä­ßiges Testen der Software­an­wen­dung ist möglich

Source Code Management 

Source Code Manage­ment bzw. Systeme zur Versi­ons­ver­wal­tung stellen konti­nu­ier­lich den Verlauf der Codeent­wick­lung dar und unter­stützen dadurch eine verteilte, dezen­trale Arbeits­weise inner­halb des Entwicklerteams. 
  • paral­leles Arbeiten am gleichen Quell­code möglich
  • ortsun­ab­hän­gige Software­ent­wick­lung möglich 
  • hohe Trans­pa­renz und Nachvoll­zieh­bar­keit durch Versio­nie­rung aller Änderungen

Refac­to­ring & Restrukturierung 

Refac­to­ring & Restruk­tu­rie­rung zielen auf die Optimie­rung von Software hinsicht­lich Archi­tektur und Code ab. Während Software bei der Restruk­tu­rie­rung an neue Techno­lo­gien angepasst wird, hat Refac­to­ring die Struk­tur­ver­bes­se­rung des Quellodes zum Ziel. 
  • Steige­rung der Perfor­mance einer Software
  • Erleich­te­rung der Weiter­ent­wick­lung einer Software
  • Zukunfts­si­cher­heit

Clean Code

Clean Code beschreibt eher ein Prinzip bzw. eine generelle Haltung in der Software­ent­wick­lung und stellt weniger eine konkrete Methode dar. Dabei werden vier zentrale Werte als Grund­lage für nachhal­tige, effizi­ente und erfolg­reiche Software­ent­wick­lung definiert:

Wandelbarkeit 

Die Software kann ohne erheb­li­chen Zusatz­auf­wand an neue Anfor­de­rungen angepasst und um neue Features erwei­tert werden. 

Korrektheit 

Sowohl funktio­nale als auch nicht-funktio­nale Anfor­de­rungen an die Software werden erfüllt.

Produktionseffizienz 

Software kann effizient und zu angemes­senen Kosten entwi­ckelt, verbes­sert und erwei­tert werden und ist langlebig. 

Konti­nu­ier­liche Verbesserung 

Entwickler sammeln ständig Erfah­rung, reflek­tieren diese, lernen daraus und teilen ihr Wissen. 

Wie können wir Sie unterstützen? 

Sie suchen einen Entwick­lungs­partner für die Umset­zung komplexer Software­pro­jekte im indus­tri­ellen Umfeld?