Erfahren Sie mehr
Erfahren und verstehen Sie, wie es aussieht
Technologie
Flexible Teams
Künstliche Intelligenz
Wolke / Wolke
Softwareentwicklung
Digitales Produktdesign
Ausgewählte Technologien
IT-Wartungsdienste
Fintech
Industrie und Produktion
Dedizierte Lösungen
Produktionssoftware
Erweiterte Realität
Software für die HoReCa-Branche
Von Anfang an organisieren wir unsere Repositories so, dass sie den Anforderungen unserer Arbeitsweise mit Code entsprechen. Wir verwenden zwei Hauptzweige (Master und Development) und viele zusätzliche Zweige, die Funktionalitäten und Korrekturen entsprechen. Der Zweig master spiegelt den Produktionscode wider, während development ein Verweis auf die interne Entwicklungsumgebung ist. Für jede neue Funktionalität erstellen wir einen separaten Zweig und verbinden ihn mit einem Backlog-Element. Mit diesem Ansatz können Sie Ihren Fortschritt besser überwachen. Wir verwenden außerdem eine standardisierte Nomenklatur, um die Branchen und ihre Ziele besser zu unterscheiden. Wir frieren wichtige Meilensteine in Form von Tags ein.
Wir lassen unseren Entwicklern die volle Wahlfreiheit hinsichtlich der verwendeten IDE und des Texteditors, da wir gut standardisierte Codeanforderungen haben. Wir befolgen interne Standards hinsichtlich Benennung, Formatierung, Wiederverwendung von Code, Codestruktur, Architektur und Dateiorganisation im Projekt. All dies ermöglicht es uns, einheitlichen, sauberen und effizienten Code zu erstellen. Wir verwenden hauptsächlich zwei Ansätze zum Entwerfen von Lösungen je nach Designanforderungen: FDD (Feature Driven Development) oder TDD (Test Driven Development). Wir konzentrieren uns auch stark auf Designmuster. Abschließend überarbeiten wir den Code und verwenden Linters, um sicherzustellen, dass er optimal bleibt, unseren Standards entspricht und alle Anforderungen der entworfenen Lösung erfüllt.
Jede Codezeile, die wir zu unseren Hauptzweigen hinzufügen, wird doppelt überprüft. Wir verwenden eine gegenseitige Überprüfung durch Entwickler. Wir überprüfen den Code aus vielen Perspektiven – von Architekturproblemen über Struktur, fehlerhafte Muster, Namens- und Formatierungsprobleme bis hin zu Tippfehlern. Dadurch können wir potenzielle Bedrohungen bereits in der Entwurfsphase erkennen, den Code optimieren und ihn vor der Testphase sicherer machen. Es kommt manchmal vor, dass wir Änderungen rückgängig machen und darüber nachdenken müssen, wie wir das Problem durch Löschen der Pull-Anfrage lösen können. Es ist jedoch besser, dies in der Codeüberprüfungsphase zu tun, als Probleme in der Produktion zu verursachen.
Der letzte und wichtigste Schritt ist das Testen. Während der Entwicklung durchläuft der Code Unit- und Integrationstests. Dann nutzen wir automatische Tests aus zuvor vorbereiteten Szenarien und manuelle Tests. Wenn alles reibungslos verläuft, sind wir bereit, den Code mit dem Entwicklungszweig zusammenzuführen und einen zweiten Pull-Request an die Produktionsumgebung vorzubereiten, wo der Code aus vielen Zweigen erneut getestet wird.
Für jedes Projekt erstellen wir vollautomatische Mechanismen zur kontinuierlichen Integration und kontinuierlichen Implementierung (unter anderem mithilfe von Azure Pipelines und Azure Artifacts). Seit 2019 implementieren wir alle unsere Lösungen mit Containern, die mit Docker und Kubernetes kompatibel sind.