Jan Ploski – Dienstleistungen – Software-Entwicklung
Software-Entwicklung bedeutet für mich die ingenieurmäßige Erstellung und Optimierung von Software-Systemen gemäß funktionalen, qualitätsbezogenen und wirtschaftlichen Anforderungen meiner Kunden, unter Berücksichtigung der bestehenden technischen Randbedingungen und Geschäftsprozesse.
Mein Angebot erstreckt sich prinzipiell über alle Phasen des Softwareentwicklungsprozesses (Anforderungsanalyse, Entwurf und Implementierung, Test, Installation und Wartung), mit Augenmerk auf folgende Tätigkeiten:
Reverse-Engineering
Analyse von bestehenden (meist wenig dokumentierten) Softwaresystemen zur Rekonstruktion des ursprünglichen Entwurfs und als Voraussetzung für fundierte Entscheidungen über die Weiter- oder Neuentwicklung. Erfahrungsgemäß tendieren viele Entwickler dazu, fremde, unbekannte Software grundsätzlich für "schlecht" zu befinden und abzulehnen, selbst wenn keine objektiven Kritikgründe vorliegen. Reverse-Engineering ist psychologisch belastend. Eine Neuentwicklung ohne gründliche Analyse der vorhandenen Software ist jedoch meistens ein riskanter Vorschlag für den Kunden. Die in der bisherigen Software enthaltenen Informationen müssen dann anderweitig ermittelt werden: im Vergleich zum sorgfältigen Reverse-Engineering ein schwieriges und fehlerträchtiges Unterfangen.
Troubleshooting und Debugging
Kausale Erklärung und Behebung von Softwaredefekten. Obwohl die grundsätzlichen Vorgehensweisen beim Debugging mittlerweile wissenschaftlich gut erforscht sind, erfordert effektives Debugging in der Praxis ein hohes Maß an Denktraining, den Einsatz von spezialisierten Werkzeugen sowie tiefe Vorkenntnisse von (System-)Software zur Formulierung von zutreffenden Hypothesen. Die Anforderungen übersteigen normalerweise diese bei der Anwendungsentwicklung und tragen maßgeblich zu den beobachtbaren Effizienzunterschieden zwischen individuellen Software-Entwicklern bei.
Performanzuntersuchung
Die Laufzeitperformanz ist ein bei der Software-Spezifikation und der darauf folgenden Implementierung oft übersehener Aspekt. Eine traditionelle Faustregel lautet, die Performanzanalyse (Profiling) erst spät in der Entwicklung vorzunehmen, um durch frühzeitige Optimierungen keine Beeinträchtigungen anderer Softwarequalitätsmerkmale zu verursachen. Besonders schwierige Performanzprobleme sind allerdings nicht in einem einzigen Softwaremodul angesiedelt und halbautomatisch ermittelbar, sondern vielmehr emergente Systemprobleme, zu deren Behebung eine sorgfältige Datenanalyse ggf. verbunden mit Architekturänderungen erforderlich ist.
Restrukturierung (Refactoring)
Refactoring ist eine QS-Aktivität im Entwicklungsprozess, die unter Beibehaltung der funktionalen Softwaremerkmale darauf abzielt, die Software auf zukünftige Änderungen vorzubereiten, um bekannten Risiken vorzubeugen (z. B. Wachstum der Nutzeranzahl, Einstellung neuer Entwickler) und Chancen wahrzunehmen (z. B. technologischer Fortschritt).
Ich verwende regelmäßig die Programmiersprachen Perl, PHP (Drupal) und Java und bin gut vertraut mit den Idiomen, Bibliotheken und Frameworks für diese Sprachen. In meiner bisherigen Tätigkeit als Programmierer habe ich früher und projektbedingt viele weitere Sprachen verwendet: C++, x86 Assembler, PL/SQL, Visual Basic, Python, PHP, JavaScript, Lisp, Prolog, NCL, Bourne Shell... Somit stellt der Einstieg in eine neue Programmiersprache bzw. Entwicklungsumgebung für mich keine Herausforderung dar. Ich bin fest davon überzeugt, dass grundlegende Prinzipien in der Softwareentwicklung programmiersprachenunabhängig sind, was natürlich nicht bedeutet, dass die einzelnen Sprachen für alle Anwendungen gleichermaßen geeignet sind.