Indivi­du­elle Softwareentwicklung

Kunden­spe­zi­fi­sche Lösungen für die Industrie

Mit der hohen Entwick­lungs­ge­schwin­dig­keit auf allen techno­lo­gi­schen Ebenen ändern sich die Anfor­de­rungen in der Indus­trie, aber auch die Bedürf­nisse der Kunden steigen ständig. Daraus ergeben sich komplexe Aufgaben, die mit Standard­soft­ware selten ausrei­chend gelöst werden können. Daher muss Software meist indivi­duell für den jewei­ligen Anwen­dungs­fall entwi­ckelt werden. Nur so können Unter­nehmen alle Poten­ziale zum strate­gi­schen Vorteil nutzen, die sich durch die neuen Möglich­keiten bieten. Wir unter­stützen Sie dabei mit unseren Kompe­tenzen in der indivi­du­ellen  Softwareentwicklung.

Bild von Wolfram Schäfer

Vor zwanzig Jahren habe ich unser Unter­nehmen gegründet, um anspruchs­volle Indivi­du­al­soft­ware und durch­dachte Archi­tek­turen für komplexe, varian­ten­reiche Maschinen und Anlagen zu entwi­ckeln. Das ist auch heute noch unser Spezi­al­ge­biet. Und jetzt stehen uns phantas­ti­sche Techno­lo­gien zur Umset­zung noch intel­li­gen­terer Lösungen zur Verfügung.

Edge- und Cloud Compu­ting, Machine Learning und Künst­liche Intel­li­genz, Simula­tion und Augmented Reality. Damit können wir nicht nur die Effizienz Ihrer Anlagen und Systeme nachhaltig steigern, sondern in Ihrem Business die Grund­lagen für völlig neue Geschäfts­mo­delle erschaffen.

Mit den wachsenden Möglich­keiten werden natür­lich auch die Anfor­de­rungen an Software­ent­wick­lung immer unüber­sicht­li­cher und heraus­for­dernder. Außerdem gewinnen alle Aspekte des Life-Cycle-Manage­ments und die Beherr­schung der Varian­ten­viel­falt auch für Software an zentraler Bedeutung.

Deshalb ist das profes­sio­nelle metho­di­sche Vorgehen noch wichtiger: flexible Software­ar­chi­tek­turen, nicht-funktio­nale Quali­täts­kri­te­rien, Clean Code, Design Thinking und DevOps sind nur einige Stich­punkte. Wir nutzen modernste Software­ent­wick­lungs­werk­zeuge und wenden effizi­ente Vorge­hens­mo­delle an, mit dem Ziel, für unsere Kunden die intel­li­gen­testen und nachhal­tigsten Software­lö­sungen zu realisieren.

Ganz gleich aus welcher Branche Sie kommen, welche Aufga­ben­stel­lung Sie haben oder wie flexibel die Zusam­men­ar­beit mit Ihrem eigenen Entwick­lungs­be­reich gestaltet sein soll: Wir schaffen indivi­du­elle, anspruchs­volle Software­lö­sungen für innova­tive Unternehmen.

Die Zukunft wird program­miert und mit Software zur Realität.

Mehr lesen  Weniger lesen 

Wolfram Schäfer

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

Die Digita­li­sie­rung im indus­tri­ellen Umfeld ist nicht aufzuhalten

Digitale Techno­lo­gien sind Enabler der digitalen Trans­for­ma­tion der Indus­trie hin zu einer Produktion im Sinne von Indus­trie 4.0. Diese eröffnet Poten­ziale für weitere Effizi­enz­stei­ge­rungen, intel­li­gen­tere Prozesse und neue Geschäfts­mo­delle. Kennzeich­nend für den digitalen Wandel ist die rasante Weiter­ent­wick­lung und grenzen­lose Verfüg­bar­keit neuer innova­tiver Technologien.

Techno­lo­gien als Enabler für die digitale Transformation

Diese Techno­lo­gien ermög­li­chen die Vernet­zung und Digita­li­sie­rung für Indus­trie 4.0:

Edge-/ Cloud Computing

Mobiles Internet

Künst­liche Intelligenz/ Machine Learning

IIoT – Indus­trial Internet of Things

Digitaler Zwilling

Simula­ti­ons­mo­delle

Virtual/ Augmented Reality

Lösungen für Interoperabilität

Software ist von zentraler Bedeu­tung für die
Zukunfts­fä­hig­keit der Investitionsgüterindustrie

Der Schlüssel, um den techno­lo­gi­schen Wandel im indus­tri­ellen Umfeld zu meistern und aktiv zu gestalten, liegt in der indivi­du­ellen Software­ent­wick­lung. Nur durch den Einsatz intel­li­genter Software­lö­sungen gelingen die notwen­digen (Produkt-)Innovationen, um in Zeiten der Digita­li­sie­rung weiterhin wettbe­werbs­fähig zu bleiben und Vorteile durch Diffe­ren­zie­rung zu erzielen.

Unser Verständnis von Softwareentwicklung

Wir sind davon überzeugt, dass die digitale Trans­for­ma­tion der Indus­trie der Schlüssel zu neuen Poten­zialen und die Voraus­set­zung für weiteren Erfolg in der Zukunft ist. Das bedeutet für uns:

  • tiefe Überzeu­gung, dass Software­ent­wick­lung eine sehr verant­wor­tungs­volle Aufgabe ist
  • das Ergebnis am Nutzen und Mehrwert orien­tiert sein muus und den unter­neh­me­ri­schen Erfolg nachhaltig beeinflusst
  • Offen­heit für neueste Trends, Techno­lo­gien und Methoden und dauer­hafte Lernbereitschaft
  • agile Arbeits­weise in inter­dis­zi­pli­nären und flexi­blen Kompetenz-Teams
  • Arbeiten mit tool-gestützten Methoden und dem Fokus auf Time-to-Market
  • Erfah­rung und Praxis­nähe mit Verständnis für die Branchen unserer Kunden und deren Bedürf­nisse sind entschei­dende Erfolgsfaktoren
  • Der Blick über Grenzen hinweg und die Weitsicht für Anfor­de­rungen eröffnet Chancen für die Zukunft
  • die enge Zusam­men­ar­beit mit Hochschulen, spezia­li­sierten Partnern, Innova­toren und Fachver­bänden ermög­licht uns die notwen­dige Flexi­bi­lität in unseren Lösungen

Indivi­du­elle Software­ent­wick­lung bei iTE SI

Was bedeutet indivi­du­elle Software­ent­wick­lung bei iTE SI?

Für uns ist grund­sätz­lich jedes Software­pro­jekt eine indivi­du­elle Entwick­lungs­leis­tung, da Projekt­ziele und Rahmen­be­din­gungen unter­schied­li­cher Kunden nie deckungs­gleich und immer indivi­duell sind. In unserer prakti­schen Arbeit bedeutet indivi­du­elle Software­ent­wick­lung, die Anwen­dung und sinnvolle Kombi­na­tion der uns zur Verfü­gung stehenden Werkzeuge, wie bspw. Methoden, Program­mier­spra­chen und Entwick­lungs­tools, um eine maßge­schnei­derte Software­lö­sung zu entwickeln.

Worin liegt der Vorteil von indivi­du­eller Softwareentwicklung?

In Zeiten von Indus­trie 4.0 und dem IIoT ergeben sich für Indus­trie­un­ter­nehmen komplexe Heraus­for­de­rungen und Probleme, die sich mit Software „von der Stange“ aller­dings zumeist nicht mehr lösen lassen.  Deswegen setzen wir in unseren Projekten ausschließ­lich auf indivi­du­elle Software­ent­wick­lung, auch wenn Elemente einer Standard­soft­ware Teil der Gesamt­lö­sung sein können.

Welche Rolle spielt indivi­du­elle Software­ent­wick­lung in der Industrie?

Die Rolle, die indivi­du­elle Software im indus­tri­ellen Umfeld spielt, hat sich drastisch verän­dert. Zukunfts­fä­hige, durch­dachte Software­kon­zepte stellen mittler­weile einen wichtigen Wettbe­werbs­vor­teil für Unter­nehmen dar. Zudem lassen sich aus software­ge­trie­benen Ansätzen auch neue Produkte, Services und Geschäfts­mo­delle entwickeln.

Aus unserer Sicht kann Software aller­dings noch viel mehr: Nach dem Konzept des Software Defined Manufac­tu­ring lassen sich viele Vorteile reali­sieren, die über die Effek­ti­vität und Effizienz von Automa­ti­sie­rung in der Fabrik hinausgehen.

Wie konkret müssen Anfor­de­rungen eines indivi­du­ellen Software­pro­jekts beschrieben sein?

Natür­lich ist es hilfreich, wenn Kunden ihre Anfor­de­rungen genau kennen und wissen, was sie brauchen. Erfah­rungs­gemäß ist dies aber eher selten der Fall und es ist schwierig, die Spezi­fi­ka­tionen zu einem ersten frühen Zeitpunkt im Projekt eindeutig zu formu­lieren. Diese starren Vorgaben sowie Änderungen, die sich aus sich ändernden Einfluss­fak­toren während des Projekt­ver­laufs resul­tieren, ergeben dann Change Requests, was den Projektaufwand.

Deshalb basieren unsere Projekte auf einem gemein­samen Verständnis. Bereits früh im Projekt wird bei der Analyse der Rahmen­be­din­gungen und der Defini­tion des Projekt­ziels ein Konsens im Team erreicht. Weiter­füh­rend stimmen wir uns laufend mit dem Kunden ab, sodass der Projekt­status für alle trans­pa­rent ist und wir während der Entwick­lung schnell und flexibel auf Änderungen reagieren können.

Welches Vorgehen eignet sich bei indivi­du­ellen Softwareentwicklungsprojekten?

Von Software­ent­wick­lern für Software­ent­wickler hat sich die agile Vorge­hens­weise entwi­ckelt und verbreitet, sodass auch wir in unseren Projekten gerne agil arbeiten. Dabei bedeutet Agilität für uns viel mehr als nur die Flexi­bi­lität, auf kurzfris­tige Änderungs­wün­sche reagieren zu können.

Agilität ist für uns eine etablierte Reakti­ons­fä­hig­keit gepaart mit Sensi­ti­vität für zukünf­tige Markt­ver­än­de­rungen. In diesem Verständnis zieht sich bei uns die agile Arbeits­weise durch alle Projekte und spiegelt sich auch in unserer Unter­neh­mens­kultur wider. Gemeinsam sind wir anpas­sungs­fähig und mutig. Wir wagen auch einen Schritt nach vorn, um zu einer optimalen Lösung zu gelangen.

Dies gilt auch für unser Metho­denset: Je nach Zusam­men­set­zung des Teams und Projekt­stand arbeiten wir nach Scrum, Kanban, Design Thinking oder DevOps.

Wie ist der Ablauf eines indivi­du­ellen Softwareentwicklungsprojekts?

Bei uns beginnt ein Projekt üblicher­weise mit einer Start­phase, dem sogenannten Sprint 0. Während dabei sowohl die techni­sche Infra­struktur aufge­baut wird, arbeiten wir inhalt­lich im Rahmen eines oder mehrerer Workshops zusammen. Diese dienen dazu, ein gemein­sames Verständnis der Problem­stel­lung und des Nutzungs­kon­textes zu erarbeiten und Projekt­ziele festzulegen.

Zudem werden im Rahmen dieser Start­phase weitere, einzelne Projekt­schritte geplant, damit diese in weiteren Sprints umgesetzt und mit dem Kunden gereviewt werden können. Eines ist jedoch für jedes Projekt gleich und für uns beson­ders wichtig: dass am Ende eine passge­naue Lösung entsteht.

Wie lange dauert ein indivi­du­elles Softwareentwicklungsprojekt?

Software­ent­wick­lungs­pro­jekte gelten selten als komplett abgeschlossen, da Software laufend verbes­sert werden kann. Sowohl aus der Verwen­dung bei den Kunden, als auch aus techno­lo­gi­schen Weiter­ent­wick­lungen ergeben sich regel­mäßig neue Funktio­na­li­täten und Wünsche.

Für uns ist ein Projekt abgeschlossen, wenn der Kunde mit der entwi­ckelten Lösung (mehr als) zufrieden ist, damit arbeiten kann und in der Lage ist, das System mit eigenen Mitteln zu betreuen. Gerne begleiten wir unsere Kunden  auch darüber hinaus und stellen so die optimale Weiter­ent­wick­lung der Software­lö­sung sicher.

Was spricht für externe Unter­stüt­zung bei indivi­du­ellen Softwareprojekten?

Durch die Vielzahl verfüg­barer Techno­lo­gien und komplexer werdenden Rahmen­be­din­gungen steigen die Anfor­de­rungen an Software­ent­wick­lung. Um mit diese Entwick­lungen Schritt halten zu können, fehlen vielen Unter­nehmen die richtigen Ressourcen und das nötige Knowhow. In diesen Fällen leisten wir mit einem indivi­duell zusam­men­ge­stellten Team Unterstützung.

Gerne unter­stützen wir auch bestehende Entwick­lungs­teams und bringen Ihre Mitar­beiter als Sparring­partner in ihren aktuellen Problem­stel­lungen voran. Gerade bei histo­risch gewach­senen Anwen­dungen (Legacy Systemen) stecken Entwickler oft in einer Sackgasse. Ein objek­tiver Blick von außen schafft Klarheit und gibt neue Impulse.

Wie erfolgt die Abrech­nung bei indivi­du­eller Softwareentwicklung?

Grund­sätz­lich prakti­zieren wir bei Software­ent­wick­lungs­pro­jekten zwei  unter­schied­liche Abrech­nungs­me­thoden, die sich für uns und unsere Kunden als sinnvoll und prakti­kabel etabliert haben:

Agiler Festpreis

  • Formu­lie­rung des Projekt­zieles je Sprint
  • Festle­gung des Budgets je Sprint
  • Priori­sie­rung der Anfor­de­rungen während des Projektverlaufs
  • (Kommu­ni­ka­tion und Transparenz)

Der agile Festpreis ist ein einfach zu handha­bendes Modell, es liefert Trans­pa­renz und behält das Budget im Auge, ohne dabei großen bürokra­ti­schen Aufwand zu generieren. In Verbin­dung mit agilen Methoden ist er die ideale Lösung, um mit sich ändernden Anfor­de­rungen umzugehen. Der Kunde hat stets den Überblick, er steuert und priori­siert die Anfor­de­rungen in jedem Sprint.

Stunden­kon­ti­gent

  • Abrech­nung nach Aufwand
  • Flexible, unkom­pli­zierte Abarbei­tung laufender Aufgaben
  • Stützen langfris­tige Partnerschaften

Die Abrech­nung nach Aufwand bietet sich bei laufenden Aufgaben und wieder­keh­renden Tätig­keiten an, wie z. B. Wartung und Service. Der Kunde kommt umhin, für einzelne kleinere Aufgaben einen Auftrag zu vergeben und wir können die anfal­lenden Aufgaben im Tages­ge­schäft unbüro­kra­tisch, schnell und effizient erledigen.

Gerne unter­stützen wir auch indivi­du­elle Abrech­nungs­mo­delle, die durch ihre vertrag­liche Ausge­stal­tung eine flexible und unkom­pli­zierte Zusam­men­ar­beit unterstützen.

Wie gelingt die Zusam­men­ar­beit zwischen Kunde und Software-Dienstleister?

Eine profes­sio­nelle und gleich­zeitig vertrau­ens­volle Bezie­hung in der Zusam­men­ar­beit ist aus unserer Sicht geprägt von Offen­heit, Ehrlich­keit und Trans­pa­renz. Während unsere Kunden das Exper­ten­wissen aus ihrer Branche mitbringen, haben wir das Knowhow zu Möglich­keiten der Umset­zung. Durch eine Zusam­men­ar­beit auf Augen­höhe entsteht eine Atmosphäre, die durch hohe Motiva­tion geprägt ist und in vorzeig­baren Ergeb­nissen mündet. Gerne unter­stützen wir das Team dabei auch mit unserem Wissen im Projekt­ma­nage­ment und begleiten die Arbeit mit passenden Methoden und Werkzeugen. Dabei sind wir auch im Einsatz virtu­eller Werkzeuge und der Arbeit in virtu­ellen Teams geübt. Die Zusam­men­ar­beit mit uns gestaltet sich demnach „Agil. Innovativ. Zuverlässig“.

Was ist der Unter­schied zwischen Software­ent­wick­lung und Webentwicklung?

Software­ent­wick­lung unter­scheidet sich für uns von der Webent­wick­lung durch das Thema Ganzheit­lich­keit. Während Webent­wick­lung einen klaren Fokus auf den Einsatz von Front­end­tech­no­lo­gien legt und damit zumeist die Schnitt­stelle zwischen Mensch und Maschine betrachtet, fasst die Software­ent­wick­lung alle Kompo­nenten des Systems mit ein. Dabei ist gerade die Infra­struktur und das Backend zumeist das Herzstück einer Anwen­dung, wobei beson­deres Augen­merk auf Sicher­heit und Perfor­mance gelegt werden müssen.

iTE SI Kollege am Arbeitsplatz als Symbol für Supportleistungen

Verän­derte Rolle von Software im Investitionsgüterbereich

Früher

Heute

Zukünftig

Software wird vor allem dort einge­setzt, wo unbedingt notwendig

Bei Produkten wird Software als zentrale Kompo­nente zur Funkti­ons­er­fül­lung eingesetzt

In der Produktion dienen Software­lö­sungen zur Visua­li­sie­rung und Prozesssteuerung

Software wird als strate­gi­sches Schlüs­sel­ele­ment bei Produkten, Dienst­leis­tungen und Geschäfts­mo­dellen eingesetzt

Software bewirkt „echte“ Wertschöp­fung durch Techno­lo­gien wie Machine Learning & Künst­liche Intelligenz

Software­ent­wick­lung im indus­tri­ellen Umfeld wird eher „stief­müt­ter­lich“ betrieben

Unter­nehmen haben meist eigene Kompe­tenzen in der Softwareentwicklung

Unter­stüt­zung durch Dienst­leister mit breitem Kompe­tenz­spek­trum oder „Insel­ex­per­tise“

Unter­nehmen erkennen die Software(-kompetenz) als strate­gi­sches Schlüs­sel­ele­ment für den Unternehmenserfolg

Integrierte Zusam­men­ar­beit mit spezia­li­sierten Partnern

Entwick­lung orien­tiert sich an den vorhan­denen Kompetenzen

Heraus­for­de­rung, mit den Fortschritten Schritt zu halten und den Überblick zu bewahren

Eigene Kompe­tenzen werden nach den Bedarfen der Anwen­dung geschult/ gesucht

Heraus­for­de­rung, interne & externe Teams in einer agilen & vertrau­li­chen Zusam­men­ar­beit zu führen

Techno­lo­gien & Kompe­tenzen sind Innova­ti­ons­treiber für Produkte, Dienst­leis­tungen und Geschäfts­mo­delle  über den gesamten Produkt­le­bens­zy­klus und der Kunden­be­zie­hung hinweg

Früher

alter PC als Symbol für frühere Softwareentwicklung

Software wird vor allem dort einge­setzt, wo unbedingt notwendig

Software­ent­wick­lung im indus­tri­ellen Umfeld wird eher „stief­müt­ter­lich“ betrieben

Entwick­lung orien­tiert sich an den vorhan­denen Kompetenzen

Heute

zwei PCs und Maschine als Symbol für heutige Softwareentwicklung

Bei Produkten wird Software als zentrale Kompo­nente zur Funkti­ons­er­fül­lung eingesetzt

In der Produktion dienen Software­lö­sungen zur Visua­li­sie­rung und Prozesssteuerung

Unter­nehmen haben meist eigene Kompe­tenzen in der Softwareentwicklung

Unter­stüt­zung durch Dienst­leister mit breitem Kompe­tenz­spek­trum oder „Insel­ex­per­tise“

Heraus­for­de­rung, mit den Entwick­lungen Schritt zu halten und den Überblick zu bewahren

Eigene Kompe­tenzen werden nach den Bedarfen der Anwen­dung geschult/ gesucht

Zukünftig

 

vernetzte PCs, Fabrik und Cloud als Symbol für zukünftige Softwareentwicklung

Software wird als strate­gi­ches Schlüs­sel­ele­ment bei Produkten, Dienst­leis­tungen und Geschäfts­mo­dellen eingesetzt

Software bewirkt echte Wertschöp­fung durch Techno­lo­gien wie Machine Learning und Künst­liche Intelligenz

Unter­nehmen erkennen die Software(-kompetenz) als strate­gi­sches Schlüs­sel­ele­ment für den Unternehmenserfolg

Integrierte Zusam­men­ar­beit mit spezia­li­sierten Partnern

Heraus­for­de­rung, interne & externe Teams in einer agilen & vertrau­li­chen Zusam­men­ar­beit zu führen

Techno­lo­gien & Kompe­tenzen sind Innova­ti­ons­treiber für Produkte, Dienst­leis­tungen und Geschäfts­mo­delle vom Unter­nehmen bis zum Kunden, über den gesamten Produkt­le­bens­zy­klus und der Kundenbeziehung

Heraus­for­de­rungen für indivi­du­elle Software­ent­wick­lung in der Investitionsgüterindustrie

Hohe Varianz von Maschinen, Anlagen & Produkten

Aufgrund sich immer schneller ändernden Anfor­de­rungen in der produ­zie­renden Indus­trie existieren meist mehrere Varianten bzw. Genera­tionen verschie­dener Baureihen „neben­ein­ander“. Dementspre­chend müssen parallel ältere und bereits weiter­ent­wi­ckelte Maschinen mit prinzi­piell den gleichen Funktionen (Software­ap­pli­ka­tionen) betrieben werden.

Software­lö­sungen und Updates müssen diesen Spagat der Modula­rität und Aufwärts-/ Abwärts­kom­pa­ti­bi­lität bewältigen!

Lange Produktlebenszyklen

Maschinen, Anlagen und Kompo­nenten haben i. d. R. eine sehr hohe Lebens­dauer. Sie werden zudem im Laufe der Zeit erwei­tert, umgebaut und moder­ni­siert. Das muss eine „gute“ Software im Zusam­men­spiel der verschie­denen Elemente zulassen bzw. ausrei­chend anpas­sungs­fähig sein.

Die Software­lö­sungen müssen updatefähig und über viele Releases kompa­tibel sein und bleiben!

Vergleichsweise geringe Anzahl an Nutzern

In der Inves­ti­ti­ons­gü­ter­in­dus­trie ist die Nutzer­zahl im Vergleich zu anderen Indus­trien eher gering. Deshalb gilt hier die beson­dere Maßgabe der Wirtschaft­lich­keit für die Software­ent­wick­lung bei gleich­zeitig sehr hohem Qualitätsanspruch.

Die Software­ar­chi­tektur und die Methodik in der Entwick­lung müssen den Ansprü­chen an Effizienz, Nachhal­tig­keit und Güte gerecht werden!

Parallelbetrieb verschiedener Konfigurationen & Generationen

Infolge der hohen Varianz und Produkt­le­bens­dauer sind zeitgleich Maschinen, Anlagen und Kompo­nenten mit unter­schied­li­chem Funkti­ons­um­fang und Versio­nie­rung in Betrieb. Das ist eine Heraus­for­de­rung für Hersteller und Betreiber. Für Software-
lösungen resul­tiert dadurch immer ein gewisser Pflegeaufwand.

Bei der Software­ent­wick­lung (Wartbar­keit & Verfüg­bar­keit der einge­setzten Techno­logie) und in der Entwick­lungs­or­ga­ni­sa­tion (Kapazität & Know-How) muss das bedacht werden!

Möchten Sie weitere Infor­ma­tionen oder Beratung zur indivi­du­ellen Software­ent­wick­lung für Ihre Anfor­de­rungen? Wir helfen gerne weiter.

Bild von Wolfram Schäfer

Wolfram Schäfer

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

Steigende Anfor­de­rungen an die Softwareentwicklung

  • Usabi­lity: Gewähr­leis­tung einer einfa­chen und fehler­freien Bedie­nung, unter Beach­tung der Nutzungs­si­tua­tion und stets orien­tiert am Anwender
  • User Experi­ence: Schaf­fung eines positiven Benut­zer­erleb­nisses (Stich­wort „Gamifi­ca­tion“)
  • einfa­ches Deploy­ment auf unter­schied­liche Zielsysteme
  • konti­nu­ier­liche Erwei­te­rung bei laufendem Betrieb der Software
  • Platt­form­un­ab­hän­gig­keit
  • Nutzung auf unter­schied­li­chen Endge­räten, wie z. B. Laptop, Tablet und Smart­phone (Stich­wort „Respon­sive Design“)
  • ortsun­ab­hän­gige Nutzung der Software
  • Geschwin­dig­keit bei der Entwicklung
  • Berück­sich­ti­gung funktio­naler Qualitätsaspekte
  • Berück­sich­ti­gung nicht-funktio­naler Quali­täts­aspekte (Wartbar­keit, Erwei­ter­bar­keit, Wiederverwendbarkeit)

Erfül­lung nicht-funktio­naler Quali­täts­an­for­de­rungen bei der Softwareentwicklung

Bei indivi­du­eller Software­ent­wick­lung ist die Erfül­lung funktio­naler Quali­täts­kri­te­rien und Anfor­de­rungen wichtig, aber in jedem Fall selbst­ver­ständ­lich. Der Fokus muss darüber hinaus auf der Erfül­lung nicht-funktio­naler Quali­täts­an­for­de­rungen liegen.

Werden diese Krite­rien bei der Konzep­tion und Program­mie­rung beachtet, schafft man nachhal­tige Software­lö­sungen, die auf lange Produkt­le­bens­zy­klen ausge­legt sind. Dies ist insbe­son­dere im Inves­ti­ti­ons­gü­ter­be­reich bei Laufzeiten von 15–20 Jahren ein wichtiger Faktor.

Wartbar­keit

Software kann einfach an geänderte Spezi­fi­ka­tionen angepasst und modifi­ziert werden. Änderungen (z. B. Fehler­be­he­bungen) sind ohne großen Aufwand und Risiko möglich.

Erwei­ter­bar­keit

Erwei­ter­bare Software kann leicht um weitere Funktio­na­li­täten ergänzt und einfach an neue Anfor­de­rungen angepasst werden. Der Aufwand der Skalie­rung ist gering.

Wieder­ver­wend­bar­keit

Ganz oder teilweise Verwen­dung von Softwarebau­steinen für neue Produkte, Baureihen oder Anlagen bzw. Einsatz bei Projekten, für die sie ursprüng­lich nicht entwi­ckelt wurden.

Unsere Erfolgs­fak­toren

Um den hohen Ansprü­chen und Trends gerecht zu werden, flexibel für die Nutzung neuer Chancen zu bleiben und aus unserer über 20-jährigen Erfah­rung sind dies aus unserer Sicht die entschei­denden Erfolgs­fak­toren bei indivi­du­eller Softwareentwicklung:

  • offene & zukunfts­fä­hige Softwaretools
  • struk­tu­riertes & toolge­stütztes Vorgehen
  • agile Methoden
  • flexible Software­ar­chi­te­kuren
  • weitere Maßnahmen zur Qualitätssicherung

Verwen­dung offener & zukunfts­fä­higer Softwareentwicklungswerkzeuge

Wir verfolgen immer die Strategie, für die jewei­lige Problem­stel­lung das richtige Lösungs­kon­zept aus Software­ar­chi­tektur, Program­mier­spra­chen und dem Zusam­men­spiel von Tools zu erarbeiten. Wir arbeiten platt­form­un­ab­hängig und sind offen für alle Programmiersprachen.

Deshalb legen wir großen Wert auf die stetige Weiter­ent­wick­lung unserer eigenen Experten. Dabei ziehen wir bei Projekten z.B. auch in Betracht, ob im Einzel­fall auch Software­ent­wickler mit den entspre­chenden Fähig­keiten und Kompe­tenzen verfügbar sind.

Struk­tu­riertes und tool-gestütztes Vorgehen

In einem profes­sio­nellen Entwick­lungs­pro­zess werden bestehende Funktio­na­li­täten bzw. Module bereits während der Program­mie­rung mittels automa­ti­siert durch­ge­führter Tests, wie Unit- oder Regres­si­ons­tets,  abgesi­chert. So wird über den gesamten Prozess eine hohe Qualität sichergestellt.

Hierfür setzen wir entspre­chende Systeme ein und imple­men­tieren sie in unseren Entwick­lungs­pro­zess des Conti­nuous Develo­p­ment, der aus drei Phasen besteht.

Diese Vorteile ergeben sich aus der Verwen­dung der drei Konzepte: 

  • Ständige Verfüg­bar­keit eines ausführ­baren Systems
  • Frühzei­tiges Erkennen von Problemen bei der Integration
  • Steige­rung der Effizienz bei der Softwareentwicklung
  • Änderungs­wün­sche können flexi­bler berück­sich­tigt werden
  • höhere Kunden­ori­en­tie­rung

Conti­nuous Integra­tion (CI)

Automa­ti­sierter Prozess des fortlau­fenden Zusam­men­fü­gens von Kompo­nenten zu einer Anwen­dung. Das Ziel der konti­nu­ier­li­chen Integra­tion ist die Steige­rung der Softwarequalität. 

Conti­nuous Delivery (CD)

Techniken, Prozessen 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 können aufgrund kleiner Entwick­lungs-
schritte schnell identi­fi­ziert werden.

Agile Software­ent­wick­lung mit Methodik

Metho­di­sches Vorgehen ist eine Schlüs­sel­kom­pe­tenz in der agilen Software­ent­wick­lung. Wir wenden effizi­ente und erprobte Methoden generell in allen Software­ent­wick­lungs­pro­jekten an, sowohl im Hochspra­chen­be­reich, als auch im Bereich der SPS-Software­ent­wick­lung. Mit Kanban, Scrum, DevOps und Design Thinking machen wir sehr gute Erfah­rungen. Folgende Tools unter­stützen unsere agile Arbeitsweise:

Design Thinking

Beim Ansatz des Design Thinking wird das Ziel verfolgt, Innova­tionen zu entwi­ckeln, die sich am Nutzer und dessen Bedürf­nissen orien­tieren. Dabei stehen weniger die „harten“ techni­schen Anfor­de­rungen im Vorder­grund, sondern vor allem die  Wünsche aus Sicht der Anwender. Während der Entwick­lung wird stets versucht, mit möglichst geringem Aufwand einen ersten Lösungs­an­satz darzu­stellen („Minimum Viable Product“, MVP) und dieses abzustimmen.

Grafik beschreibt Scrum Prozess bei individueller Softwareentwicklung

Scrum

Die Anwen­dung des agilen Vorge­hens­mo­dells Scrum bietet zahlreiche Vorteile:

  • sehr effizi­ente Arbeits­weise im inter­dis­zi­pli­nären Team
  • regel­mäßig funkti­ons­fä­hige Softwarestände
  • termin­ge­rechte Umsetzung
  • verbes­serte Motiva­tion und Einbin­dung der Mitarbeiter
  • schnel­lere Reaktion auf geänderte Anforderungen

Kanban

Kanban ist ein nützli­ches Frame­work in der agilen Software­ent­wick­lung. Kapazi­täten werden in Echtzeit kommu­ni­ziert und alle Aufgaben völlig trans­pa­rent aufge­zeigt. Die einzelnen Aufga­ben­ele­mente werden auf einem Kanban Board visuell darge­stellt, sodass sich die Teammit­glieder jeder­zeit einen Überblick über den Status der Arbeits­schritte verschaffen können.

  • kürzere Durch­lauf­zeiten
  • weniger Engpässe
  • termin­ge­rechte Umsetzung
  • visuelle Darstel­lung von Softwaremetriken
  • Conti­nuous Delivery
Grafik beschreibt Kanban Prozess bei individueller Softwareentwicklung
Grafik beschreibt DevOps Prozess bei individueller Softwareentwicklung

DevOps

Der Begriff setzt sich aus „Dev“ (Develo­p­ment, Entwick­lung) und „Ops“ (Opera­tions, Vorgänge) zusammen. Dabei werden die eigent­lich grund­ver­schie­denen Bereiche Software­ent­wick­lung und  IT-Betrieb zusammengeführt.

  • Verbes­se­rung der Zusam­men­ar­beit von Teams
  • Steige­rung der Produktivität
  • Erhöhung der Entwicklungsgeschwindigkeit
  • Verbes­se­rung der Software

Flexible Software­ar­chi­tek­turen

Getreu dem Motto „Form follows Function“ ist auch die Software­ar­chi­tektur auf die jewei­ligen Anfor­de­rungen der erfor­der­li­chen Lösung anzupassen. Skalier­bar­keit bzgl. Anzahl der Nutzer und des damit verbun­denen Daten­vo­lu­mens, Zugriff von unter­schied­li­chen Stand­orten aus, der Vendor Log-In und die Anfor­de­rungen an konti­nu­ier­li­ches Deploy­ment sind nur einige der zur berück­sich­ti­genden Aspekte bei der Entschei­dung für den geeig­neten Lösungsansatz.

On-Premise Lösungen

Bei einer On-Premise Lösung wird die Software auf einem Server im Netzwerk des eigenen Unter­neh­mens instal­liert und betrieben.

Vorteile:

    • maximale Kontrolle über die Daten (Daten­schutz)
    • unein­ge­schränkter Zugriff und hohe Verfügbarkeit

Nachteile:

    • schlechte Skalier­bar­keit
    • meist kein konti­nu­ier­li­ches Deploy­ment möglicht
    • höhere Inves­ti­ti­ons­kosten für Hardware

Cloud-Lösungen

Bei Cloud-Lösungen kann zwischen Infra­st­ruc­ture as a Service (Iaas), Platt­form as a Service (Paas) oder Software as a Service (Saas) unter­schieden werden. Entspre­chend wird die Software bei einem „Provider im Internet“ ausgeführt
 

Vorteile

    • maximale Skalier­bar­keit
    • keine Inves­ti­tion in eigene Hardware
    • Zugriff von jedem Ort
    • Einfa­ches und kosten­güns­tiges Software-Deployment

Nachteile:

    • Ggf. einge­schränkte Bandbreite bzgl. der Kommunikation
    • hohe Latenz bei Datenaustausch
    • je nach Service-Level höherer Vendor-Login

Hybrid-Ansätze

Für – insbe­son­dere daten­ge­trie­bene – Lösungen im indus­tri­ellen Umfeld haben sich auch hybride Archi­tek­turen etabliert. Rohdaten aus dem Unter­neh­mens­um­feld werden lokal – On premise – vorver­ar­beitet und nur verdich­tete Infor­ma­tionen werden an den Service in der Cloud kommu­ni­ziert. Damit lassen sich Gesamt­ap­pli­ka­tionen so schneiden, dass Vorteile maximiert und entspre­chende Nachteile minimiert werden können. In diesem Zusam­men­hang werden oft auch „Cloud Native“ Lösungen realisiert.

Weitere Maßnahmen zur Qualitätssicherung

Code-Review ist die effizi­en­teste Methode, um die Software­qua­lität nachhaltig zu steigern. Die ständige Analyse des Source-Codes ermög­licht dem Entwickler eine itera­tive Optimierung.

Gitlab ist z.B. eine Sammlung von Web-Appli­ka­tionen, welche die Entwickler dabei unter­stützt über den Source-Code und dessen Änderungen zu kommunizieren.

Review des Source-Codes nach dem „Vier-Augen-Prinzip“ durch andere Entwickler

  • Berück­sich­ti­gung und Steige­rung nicht-funktio­naler Qualitätsmerkmale
  • Effizi­ente Möglich­keit zur Einbin­dung von Kompe­tenzen anderer Entwickler
  • Erzie­lung einer wartbaren und erwei­ter­baren Software

Effek­tive Unter­stüt­zung einer verteilten, dezen­tralen Arbeitsweise

  • Unabhän­giges Arbeiten an gleicher Software-Version möglich
  • Software­ent­wick­lung und ‑anpas­sung auch an externen Stand­orten (z. B. vor Ort beim Kunden)
  • Spätere Versio­nie­rung der Änderungen und tool-gestützte Zusam­men­füh­rung im zentralen Repository

Konti­nu­ier­liche Überar­bei­tung einer Software (meist) unter Beibe­hal­tung des Funkti­ons­um­fangs, mit dem Ziel der Verbes­se­rung der Archi­tektur, Optimie­rung des Codes und Besei­ti­gung von Code-Smells (z. B. Code-Duplikate)

Refac­to­ring:  Struk­tur­ver­bes­se­rung von Quell­texten unter Beibe­hal­tung des bishe­rigen Programmverhaltens

Restruk­tu­rie­rung:  Anpas­sung der Software bzw. von Modulen an neue Technologien

    • Steige­rung der Perfor­mance einer Software
    • Erleich­te­rung der Weiter­ent­wick­lung einer Software

Dieses Prinzip besagt, dass eine Funktion entweder eine Aktion durch­führt (Command) oder Werte abfragt, also Daten an den Aufrufer zurück­gibt und niemals beides in einer Funktion tun sollte. Dadurch entsteht „sauberer“ Quell­code, der intuitiv verständ­lich ist.

Erleich­te­rung der Weiter­ent­wick­lung einer Software

    • Stabi­lere und effizient wartba­rere Programme
    • Kürzere Entwick­lungs­zeiten bei Funkti­ons­er­wei­te­rung und Fehlerbehebungen

Automa­ti­sierte Software­tests lohnen sich insbe­son­dere bei agilen Projekten, da so einfach und regel­mäßig Integra­tions- und Regres­si­ons­tests durch­ge­führt werden können. Dafür müssen bereits am Beginn der Entwick­lung die entspre­chenden Voraus­set­zungen geschaffen und während der Entwick­lungs­phase berück­sich­tigt werden:

    • Testbar­keit ermöglichen
    • Testar­chi­tektur für Kompo­nenten- oder Unittests festlegen
    • Konven­tionen und Standards für fremden Source­code definieren
    • aussa­ge­kräf­tige Reportings etablieren

Verän­de­rungen eröffnen neue Potenziale

Dadurch, dass gute Indivi­du­al­soft­ware allen beschrie­benen Krite­rien gerecht werden soll, bietet sich stets die Chance, den Verän­de­rungs­druck strate­gisch für Neues zu nutzen. Zusammen mit der laufenden Weiter­ent­wick­lung innova­tiver Techno­lo­gien, können z. B. neue, lukra­tive Geschäfts­mo­delle entwi­ckelt und angeboten werden.

Laufzeit-/ nutzungsabhängige Vergütungsmodelle

    • nach Nutzungs­dauer von Maschinen (Zeit, „Pay-per-Use“)
    • nach produ­zierten Stück­zahlen (Ergebnis, „Perfor­mance-based Contracting“)
    • nach verwen­deter Belas­tung (Leistung)
    • nach Anzahl der Nutzung (Lizenz­mo­delle)
    • Freischal­tung spezi­eller Funktionen, evtl. kosten­loser Testzeit­raum („Rent instead of Buy“)

Weiterentwicklung der Software

    • während des Betriebs können Software­funk­tio­na­li­täten weiter- oder neu entwi­ckelt werden („After­sales“)
    • für bereits ausge­lie­ferte Maschinen oder Anlagen können neue Funktio­na­li­täten bzw. Features angeboten werden („Upgrade“)

Es gibt keine Patentrezepte!

Die Anfor­de­rungen für unter­schied­liche Appli­ka­tionen in verschie­denen Branchen und Berei­chen sind sehr vielfältig. Deshalb gibt es meist keine passenden Standard­lö­sungen bzw. ist Indivi­du­al­soft­ware meist ungeeignet. Für eine erfolg­reiche Reali­sie­rung muss für die jewei­lige Problem­stel­lung das richtige Lösungs­kon­zept aus Software­ar­chi­tektur, Program­mier­spra­chen und dem Zusam­men­spiel von Tools erarbeitet muss. Dabei gilt es die verschie­densten Erfor­der­nisse, die manchmal gegen­sätz­liche Ansätze erfor­dern können, gegen­ein­ander abzuwägen, um eine für alle Belange optimale Lösung zu finden.

Ein nicht zu unter­schät­zender Faktor ist dabei auch die Verfüg­bar­keit an Software­ent­wick­lern mit den erfor­der­li­chen Fähig­keiten und Kompe­tenzen, heute und in der Zukunft. Deshalb legen wir großen Wert auf die stetige Weiter­bil­dung unserer eigenen Experten und Mitar­beiter. Unter diesem Aspekt berück­sich­tigen wir bei der Projekt­pla­nung auch stets die internen Möglich­keiten bei unserem Kunden, falls Systeme später hausin­tern gepflegt werden sollen.

Wir verfolgen immer das Ziel flexible und zukunfts­fä­hige Software­lö­sungen zu entwi­ckeln, an denen Sie funktio­nell und wirtschaft­lich lange Freude haben.

Mehr lesen  Weniger lesen 

Unser Angebot

Unsere Kernkom­pe­tenz als Dienst­leister liegt in der Entwick­lung anspruchs­voller, indivi­du­eller Software­lö­sungen im indus­tri­ellen Umfeld. Wir erstellen für Sie neue, maßge­schnei­derte Anwen­dungen oder nehmen notwen­dige Anpas­sungen an Ihrer bestehenden Infra­struktur vor. Dafür bieten wir Ihnen Know-How, Kapazität und Erfah­rungen aus unter­schied­lichsten Projekten und Branchen.

Wir verstehen uns als verläss­li­cher Entwick­lungs­partner und Impuls­geber: Von der Beratung, Planung und Konzep­tion, über Program­mie­rung, Imple­men­tie­rung und Quali­täts­tests bis zur konti­nu­ier­li­chen Weiter­ent­wick­lung der Software, deckt unser Leistungs­spek­trum alle Phasen von indivi­du­ellen Software­pro­jekten ab.