Wie kommt es, dass große Softwareprojekte oder auch teure Produkte teils gravierende Fehler enthalten? (Stichwort Tinder, MS-Office, etc)

11 Beiträge in diesem Thema

Empfohlene Beiträge

Hi Leute,

also meine Frage ist: Wie kommt es eigentlich, dass Programme von so riesigen Firmen (z.B. Microsoft Office, Google Drive oder Tinder) zum Teil so viele Fehler enthalten? Also Tinder hat halt fast mehr Fehler, als weibliche Profile =D Ich versteh das nicht, wieso die das nach 4 Jahren nicht gebacken kriegen, dass die App einwandfrei läuft? Was machen die den ganzen Tag da? Die App von Tinder scheint mir jetzt wirklich nicht allzu komplex zu sein und die verdienen ja genug Geld damit, dass die sich anständige Programmierer leisten können, um die App vernünftig zu programmieren. Trotzdem stürzt Tinder total oft ab, lädt die Kontakte nicht richtig, etc. etc.

Ähnlich aber nicht ganz so schlimm bei Google Drive, One Drive von Microsoft oder bei Microsoft Office.

Wie ist sowas möglich?

ich frage, da ich mich in ferner Zukunft selbst selbstständig machen will und es mich wirklich interessieren würde, wie so etwas passiert.

 

Thx

Diesen Beitrag teilen


Link zum Beitrag
vor 53 Minuten schrieb iseesharp:

"nicht allzu komplex" ... Hast du schonmal eine App selber programmiert? 

Klar ist die App schon etwas komplex, aber für so ein Team und Geld, das Tinder da hat sollte das schon drin sein, das fehlerfrei zu programmieren 

Diesen Beitrag teilen


Link zum Beitrag

Fehlerfreie Software gibt es praktisch nicht, nur für extremst einfache Programme. Die Anzahl der Fehler kann auf verschiedenen Wege gering gehalten werden, auf höherer Ebene durch Qualitätssicherungsmaßnahmen und auf Programmierebene durch Einhaltung diverser Paradigmen, z.B. nur kurze und wenig verschachtelte Funktionen zu schreiben, was aber oft genug nicht umsetzbar ist in der ersten Iteration (Zeit!). Dann kann man später ein refactoring anstreben, aber baut dabei im Zweifel wieder Fehler ein..
Du kannst Software natürlich testen, von einzelnen Funktionen bis hin zur GUI, aber du kannst natürlich nur die Dinge testen, an die du auch denkst und Fehler kommen ja eben durch Dinge, an die du nicht gedacht hast.

Und dann haben wir noch gar nicht über Sprachspezifische Details gesprochen, fehlerhafte thirdparty libraries oder dem Entwerfen der Struktur / Architektur der Software, wo die tolle Struktur vom letzten Quartal mit der neuen Anforderung eine Katastrophe ist.

 

TL;DR: Software zu entwickeln ist schwierig, deswegen hat sie viele Fehler.

bearbeitet von zaotar

Diesen Beitrag teilen


Link zum Beitrag
vor 13 Minuten schrieb salazey:

glad you asked ;)

alle von dir genannten applikationen sehr wohl sehr komplex. bleiben wir beim beispiel tinder und brechen es auf die groben funktionen hinunter.

- erstellen eines profils mittels facebook. dafür ist die verbindung zu facebook nötig wobei man auf eine 3rd party API zugreifen muss die jederzeit verändert werden kann.

- erstellen eines eigenen profils mit mixed media (kürzlich neues feature über anbindung mit spotify)

- hochladen von fotos via facebook oder dem eigenen telefon (hier wieder 3rd party API von facebook nötig)

- verlinkung von instagram profilen (ich erwähne nochmal 3rd party API)

- anzeigen von anderen user profilen aufgrundlage der von dir gesetzten einstellungen sowie mit ständigem abgleich deiner GPS daten mit den GPS daten der dir neu anzuzeigenden profile.

-  ein algorithmus der die suchergebnis liste durchmischt. so das du immer wieder profile angezeigt bekommst die du noch nicht gesehen hast und dazwischen menschen die dich schon gematcht haben. dabei immer herausfiltern wen du bereits gematcht hast.

- dazu dann noch attraktivitätsfilter etc.pp an mir als datingplattform betreiber ist gelegen dir für dich passende matches eher anzuzeigen als welche die du nicht so attraktiv findest. sprich ich habe irgendwo im hintergrund einen algorithmus am laufen wen du matcht (alter, geschlecht, gps nähe, anzahl fotos. wie oft wurde diese person von anderen gematcht, wie oft angeschrieben, wie oft schreibt sie zurück etc.etc.etc daraus lässt sich die relative attraktivität von dir zu der relativen attraktivität deiner matches ableiten und so kann ich herausfinden wen von den neuen usern ich dir zuerst anzeige.)

- kauf und freischaltung von Premium funktionen. wobei hier wieder jedemenge 3rd party apis eingesetzt werden müssen für die diversen zahlungsanbieter. dann läuft im hintergrund ein invoice und billig prozess damit alles auch beim finanzamt glatt läuft.

- einblendung von werbung, hier wiederum abhängigkeiten von 3rd party api für werbebetreibende, sicher stellen das alles korrekt getrackt wird usw.

- nachrichten versand zwischen usern.

- push notifications auf dem telefon

- neues party feature wo verschiedene leute andere leute zu einer gruppe hinzufügen können blahblubberblubb

Von software Updates auf Android und iOS geräten haben wir noch gar nicht gesprochen. Allein durch den Funktionsumfang hast du viele algorithmen, abhängigkeiten von drittanbieter APIs und dazu auch noch server verbindungen die in abhängigkeit der zuverlässigkeit deiner Internetverbindung stehen.

Das ist alles einen haufen quellcode der sicherlich teilweise mit harten deadlines geschrieben werden musste. Code wird von Menschen geschrieben, menschen machen fehler. Vor allem in komplexeren algorithmen die lernfähig sind, wie wir sie hier haben müssen, sind anfällig für fehler. man kann nicht jede möglichkeit im vorheraus berechenn und bedenken. dann die starke bindung an die hardware, der gps funktionen. tinder wird ausserdem, wie fast jedes start up, stark von investoren abhängig sein. die wollen zahlen und neue features sehen, da hat man als entwickler oft nicht die gelegenheit den fragilen code den man damals unter zeitdruck geschrieben hat, wieder gut zu machen.

vor allem ist es oft so das solche software eine schlechte basis hat. da wurde am anfang oft nicht bedacht wie groß etwas in zukunft wird und man setzt auf die einfachen technologien weil sie schnell und unkompliziert zu erstellen sind, aber eben nicht unendlich skalierbar sind. hat man sich einmal für eine grundlegende datenbank struktur entschieden und eine bestimmte anzahl von usern erreicht ist es quasi unmöglich diese ohne längere downtime zu ändern. und downtime ist es, das man sich nicht mehr leisten kann weil der laufende betrieb zu viel geld kostet als das man länger als für 1 minute offline sein könnte.

 

es gibt viele methoden und techniken um solche fehler schneller zu finden und zu verhindern. zum einen nennt es sich test driven development. sprich man schreibt einen test auf das ergebnis einer funktion bevor man die eigentliche funktion entwickelt hat. es ist nämlich so das man in komplexerem code immer eine causale kette hat. eine funktion die etwas berechnet ist wiederum abhängig davon valide daten geliefert zu bekommen. und wenn man keine behandlung für den fall invalider daten hat, crashed es.  es hat ausserdem den vorteil, wenn man den test schreibt, das man sich schon einmal vor ab gedanken über seinen code und etwaige fehlerquellen machen muss.

auch kann es helfen einen coding-styleguide einzuhalten. also das sich das entwickler Team darauf geeinigt hat wie der code formatiert wird und zum beispiel welchen programmier pattern der vorzug gegeben wird. dafür gibt es in editoren direkt plugins die einem beim programmieren darauf hinweisen sich an die pattern zu benutzen bzw dann automatische tests beim erstellen eines pull requests am ende des entwicklungsprozesses.

andere techniken um die qualität von code zu verbessern und fehler zu vermeiden sind pair programming und code reviews.

beim pair progamming sitzen zwei entwickler gemeinsam an einem arbeitsrechner. einer der beiden entwickler ist derjenige der programmiert (driver) und der andere entwickler kommentiert und korrigiert den code währenddessen (pilot). das hat den großen vorteil das sich zwei leute mit demselben problem beschäftigen und somit von vornherein zwei ansichten auf ein problem gibt. während man über den code spricht reflektiert man also direkt mit einer anderen person von aussen darüber.

code reviews funktionieren dann am ende des entwicklungs prozesses. jemand hat also ein neues feature fertig gestellt und möchte es jetzt in den master-branch des codes einfügen. bevor die persond as aber tun darf müssen andere entwickler den code einmal lesen und verstehen und somit "reviewen". sie können zum beispiel auf bessere algorithmen  oder coding standards hinweisen.

 

so das waren jetzt teilweise ein bisschen viele fachbgeriffe, ich kann gerne das ein oder andere noch einmal genauer ausführen wenn gewünscht. aber fakt ist nunmal: code wird von menschen geschrieben und menschen machen fehler.

 

 

Wow, unglaublich guter Beitrag! Würde dir am liebsten 100 Likes dafür geben. Wirklich sehr interessant hier die Praxiseinblicke zu hören 

Diesen Beitrag teilen


Link zum Beitrag
Gast

Wenn man erstmal angefangen hat und ein gewisses Stadium erreicht hat, kann man nicht mehr einfach zu dem Punkt zurückkehren, wo der Fehler gemacht wurde, und von da an alles noch mal neu machen. Man muss es irgendwie notdürftig beheben.

Ist auf dem Bau nicht anders.

Diesen Beitrag teilen


Link zum Beitrag
Am 13.11.2016 um 15:15 schrieb salazey:

glad you asked ;)

alle von dir genannten applikationen sind sehr wohl komplex. bleiben wir beim beispiel tinder und brechen es auf die groben funktionen hinunter.

- erstellen eines profils mittels facebook. dafür ist die verbindung zu facebook nötig wobei man auf eine 3rd party API zugreifen muss die jederzeit verändert werden kann.

- erstellen eines eigenen profils mit mixed media (kürzlich neues feature über anbindung mit spotify)

- hochladen von fotos via facebook oder dem eigenen telefon (hier wieder 3rd party API von facebook nötig)

- verlinkung von instagram profilen (ich erwähne nochmal 3rd party API)

- anzeigen von anderen user profilen aufgrundlage der von dir gesetzten einstellungen sowie mit ständigem abgleich deiner GPS daten mit den GPS daten der dir neu anzuzeigenden profile.

-  ein algorithmus der die suchergebnis liste durchmischt. so das du immer wieder profile angezeigt bekommst die du noch nicht gesehen hast und dazwischen menschen die dich schon gematcht haben. dabei immer herausfiltern wen du bereits gematcht hast.

- dazu dann noch attraktivitätsfilter etc.pp an mir als datingplattform betreiber ist gelegen dir für dich passende matches eher anzuzeigen als welche die du nicht so attraktiv findest. sprich ich habe irgendwo im hintergrund einen algorithmus am laufen wen du matcht (alter, geschlecht, gps nähe, anzahl fotos. wie oft wurde diese person von anderen gematcht, wie oft angeschrieben, wie oft schreibt sie zurück etc.etc.etc daraus lässt sich die relative attraktivität von dir zu der relativen attraktivität deiner matches ableiten und so kann ich herausfinden wen von den neuen usern ich dir zuerst anzeige.)

- kauf und freischaltung von Premium funktionen. wobei hier wieder jedemenge 3rd party apis eingesetzt werden müssen für die diversen zahlungsanbieter. dann läuft im hintergrund ein invoice und billig prozess damit alles auch beim finanzamt glatt läuft.

- einblendung von werbung, hier wiederum abhängigkeiten von 3rd party api für werbebetreibende, sicher stellen das alles korrekt getrackt wird usw.

- nachrichten versand zwischen usern.

- push notifications auf dem telefon

- neues party feature wo verschiedene leute andere leute zu einer gruppe hinzufügen können blahblubberblubb

von software Updates auf Android und iOS geräten haben wir noch gar nicht gesprochen. allein durch den funktionsumfang hast du viele algorithmen, abhängigkeiten von drittanbieter APIs und dazu auch noch server verbindungen die in abhängigkeit der zuverlässigkeit deiner Internetverbindung stehen.

das ist alles einen haufen quellcode der sicherlich teilweise mit harten deadlines geschrieben werden musste. code wird von menschen geschrieben, menschen machen fehler. vor allem komplexere algorithmen die lernfähig sind, wie wir sie hier haben müssen, sind anfällig für fehler. man kann nicht jede möglichkeit im vorheraus berechnen und bedenken. dann die starke bindung an die hardware, der gps funktionen. tinder wird ausserdem, wie fast jedes start up, stark von investoren abhängig sein. die wollen zahlen und neue features sehen, da hat man als entwickler oft nicht die gelegenheit den fragilen code den man damals unter zeitdruck geschrieben hat, wieder gut zu machen.

vor allem ist es oft so das solche software eine schlechte basis hat. da wurde am anfang oft nicht bedacht wie groß etwas in zukunft wird und man setzt auf die einfachen technologien weil sie schnell und unkompliziert zu erstellen, aber eben nicht unendlich skalierbar sind. hat man sich einmal für eine grundlegende datenbank struktur entschieden und eine bestimmte anzahl von usern erreicht ist es quasi unmöglich diese ohne längere downtime zu ändern. und downtime ist es, das man sich nicht mehr leisten kann weil der laufende betrieb zu viel geld kostet als das man länger als für eine minute offline sein könnte.

es gibt viele methoden und techniken um solche fehler schneller zu finden und zu verhindern. zum einen nennt es sich test driven development. sprich man schreibt einen test auf das ergebnis einer funktion bevor man die eigentliche funktion entwickelt hat. es ist nämlich so das man in komplexerem code immer eine causale kette hat. eine funktion die etwas berechnet ist wiederum abhängig davon valide daten geliefert zu bekommen. und wenn man keine behandlung für den fall invalider daten hat, crashed es.  es hat ausserdem den vorteil, wenn man den test schreibt,  sich schon einmal vor ab gedanken über seinen code und etwaige fehlerquellen machen muss.

auch kann es helfen einen coding-styleguide einzuhalten. also das sich das entwickler Team darauf einigt wie der code formatiert wird. zum beispiel welchen programmier pattern der vorzug gegeben wird. dafür gibt es in editoren häufig plugins die einem beim programmieren darauf hinweisen sich an die pattern zu halten. und dann gibt es automatische tests beim erstellen eines pull requests am ende des entwicklungsprozesses.

andere techniken um die qualität von code zu verbessern und fehler zu vermeiden sind pair programming und code reviews.

beim pair progamming sitzen zwei entwickler gemeinsam an einem arbeitsrechner. einer der beiden entwickler ist derjenige der programmiert (driver) und der andere entwickler kommentiert und korrigiert den code währenddessen (pilot). das hat den großen vorteil das sich zwei leute mit demselben problem beschäftigen und somit von vornherein zwei ansichten auf ein problem gibt. während man über den code spricht reflektiert man also direkt mit einer anderen person von aussen darüber.

code reviews funktionieren dann am ende des entwicklungs prozesses. jemand hat also ein neues feature fertig gestellt und möchte es jetzt in den master-branch des codes einfügen. bevor die person das aber tun darf müssen andere entwickler den code einmal lesen und verstehen und somit "reviewen". sie können zum beispiel auf bessere algorithmen  oder coding standards hinweisen.

dann natürlich sollte das entwicklerteam ein unabhängiges testsystem haben. dann gibt es QA-mitarbeiter die neue funktionen testen. die sind jedoch auch nur so gut wie der produktmanager der eine aufgabe ausformuliert. sprich, je detaillierter die funktionsweise eines neuen features beschrieben ist, desto besser kann es getestet werden. hierbei ist aber darauf zu achten das der produktmanager nicht versucht programmier entscheidungen zu testen. produktmanager dürfen vorschläge unterbreiten, aber dürfen niemals bestimmen welche technologie eingesetzt werden soll. das muss das entwicklerteam gemeinsam entscheiden. oft ist es aber so das produktmanger es trotzdem tun oder ein einzelner entwickler eine entscheidung trifft ohne mit seinem Team rücksprache zu halten. oder das entwicklerteam hat sich über die jahre stark verändert und somit auch die bevorzugte technologie der entwickler und jetzt müssen sie mit dingen arbeiten die sie vorher noch nicht benutzt hatten.

so das waren jetzt teilweise ein bisschen viele fachbgeriffe, ich kann gerne das ein oder andere noch einmal genauer ausführen wenn gewünscht. aber fakt ist nunmal: code wird von menschen geschrieben und menschen machen fehler.

 

 

Als Ergänzung dazu: 
Das erste Photoshop hatte ca. 100 000 Zeilen Code. Mittlerweile sind es ca. 4 Millionen. 
MAC OS 10.4 bringt es auf 84 Millionen Zeilen Code. 

Diesen Beitrag teilen


Link zum Beitrag
Am 13.11.2016 um 13:19 schrieb Mujeriego89:

Hi Leute,

also meine Frage ist: Wie kommt es eigentlich, dass Programme von so riesigen Firmen (z.B. Microsoft Office, Google Drive oder Tinder) zum Teil so viele Fehler enthalten? Also Tinder hat halt fast mehr Fehler, als weibliche Profile =D Ich versteh das nicht, wieso die das nach 4 Jahren nicht gebacken kriegen, dass die App einwandfrei läuft? Was machen die den ganzen Tag da? Die App von Tinder scheint mir jetzt wirklich nicht allzu komplex zu sein und die verdienen ja genug Geld damit, dass die sich anständige Programmierer leisten können, um die App vernünftig zu programmieren. Trotzdem stürzt Tinder total oft ab, lädt die Kontakte nicht richtig, etc. etc.

Ähnlich aber nicht ganz so schlimm bei Google Drive, One Drive von Microsoft oder bei Microsoft Office.

Wie ist sowas möglich?

ich frage, da ich mich in ferner Zukunft selbst selbstständig machen will und es mich wirklich interessieren würde, wie so etwas passiert.

 

Thx

Komplexität. Alleine jedes Andoid Update kann Einflüsse auf deine App haben.
Wie viele unterschiedliche Geräte und Androidversionsstände sind jetzt da draussen? Da fängts schon an...
Von anderen Apps die dazwischenfunken können ganz zu schweigen...

so ist die IT leider.

---
Ich arbeite in der IT... Mal ganz grob gesprochen als Beispiel...

Bei uns kostet ein Eingabefeld zu ändern/ersetzen/etc.. schon mal 5000-10000 Euro, weil so viele Prozesse (auch QA) dranhängen.
Und weil die Nebenwirkungen untersucht werden müssen. Und trotzdem reicht es manchmal nicht und es knallt später.


PS: Ich möchte nicht der Projektmanager von der MS Office Entwicklung sein :)

bearbeitet von MrJack

Diesen Beitrag teilen


Link zum Beitrag

Hey. Wollte nochmal kurz meinen Senf dazu geben, weil ich selbst momentan an einer größeren App mit zwei Kollegen arbeite für ein Projekt.

 

Das Problem ist nicht direkt die einzelnen Funktionen, sprich; um du 100 Funktionen oder 1000 hast, sondern das Zusammenspiel. 

Beispiel; du willst nicht, dass man von außen auf die Profile von Leuten Bilder hochladen kann, willst aber praktisch im selben Moment, das man von außen Bildern von Facebook importieren kann. Es ist halt schwer die Sicherheitslücken usw zu schließen bzw zu minimieren und dabei keine buggs zu haben.

 

Diesen Beitrag teilen


Link zum Beitrag

Erstelle ein Mitgliedskonto, oder melde Dich an, um zu kommentieren

Du musst ein Mitgliedskonto haben, um einen Kommentar verfassen zu können

Mitgliedskonto erstellen

Registriere Dich ganz einfach in unserer Community.

Mitgliedskonto registrieren

Anmelden

Du hast bereits ein Mitgliedskonto? Melde Dich hier an.

Jetzt anmelden
  • Wer ist Online   0 Mitglieder

    Aktuell keine registrierten Mitglieder auf dieser Seite.