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 bei der Produkt­ent­wick­lung mit entspre­chenden Softwarelösungen.

Vor zwanzig Jahren habe ich unser Unter­nehmen gegründet, um anspruchs­volle, indivi­du­elle Software 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 Methoden an, mit dem Ziel, für unsere Kunden die intel­li­gen­testen und nachhal­tigsten Software­lö­sungen zu entwickeln.

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 entwi­ckeln 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

Beispiele einige der maßgeb­li­chen Techno­lo­gien, welche die Vernet­zung und Digita­li­sie­rung für Indus­trie 4.0 ermöglichen:

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 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 muss am Nutzen und Mehrwert orien­tiert sein und beein­flusst den unter­neh­me­ri­schen Erfolg nachhaltig
  • 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 Anfor­de­rungen 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

Verän­de­rungen der Anfor­de­rungen & Akzep­tanz von Software im Investitionsgüterbereich

Früher

alter PC als Symbol für frühere Softwareentwicklung

Heute

zwei PCs und Maschine als Symbol für heutige Softwareentwicklung

Zukünftig

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

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 Entwick­lungen 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 vom Unter­nehmen bis zum Kunden, über den gesamten Produkt­le­bens­zy­klus und der Kundenbeziehung

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 Produkt­le­bens­zy­klen

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!

Vergleichs­weise 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!

Paral­lel­be­trieb verschie­dener Konfi­gu­ra­tionen & 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 zu indivi­du­ellen Software­lö­sungen für Ihre Anfor­de­rungen? Wir helfen gerne weiter.

Wolfram Schäfer

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

Steigende Anfor­de­rungen an die Softwareentwickung

  • 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

Software kann leicht um weitere Funktio­na­li­täten ergänzt werden. Erwei­ter­bare Software kann einfach z. B. an neue Anfor­de­rungen angepasst werden und ist ohne großen Aufwand skalierbar.

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 quali­tät­sichernde Maßnahmen

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)

Sammlung von Techniken, Prozessen und Werkzeugen, die den Software­aus­lie­fe­rungs­pro­zess verbes­sern. Diese Techniken erlauben in Kombi­na­tion mit agilen Methoden die Entwick­lung quali­tativ hochwer­tiger Software.

Conti­nuous Deploy­ment (CD)

Automa­ti­sierter Release­pro­zess, bei dem Änderungen am Code automa­ti­siert und sofort an den Endnutzer ausge­lie­fert werden; Fehler können aufgrund der kleinen 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 Entwick­lung von Software für indivi­du­elle Systeme. 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 quali­täts­si­chernde Maßnahmen

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-Dupli­kate)Refac­to­ring:  Struk­tur­ver­bes­se­rung von Quell­texten unter Beibe­hal­tung des bishe­rigen Programm­ver­hal­tensRestruk­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-/ nutzungs­ab­hän­gige 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“)

Weiter­ent­wick­lung 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 sind sehr vielfältig und indivi­duell. Deshalb gibt es meist keine passenden Standard­lö­sungen bzw. ist Indivi­du­al­soft­ware meist ungeeignet. Als Strategie gilt, dass 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 werden 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­ent­wick­lung unserer eigenen Experten. 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, für Sie 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 
Beratung und Coaching

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 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.