Wie die Leute in der Regel sehr schnell darauf hinweisen, besteht einer der Vorteile von Software darin, dass sie im Vergleich zu Hardware einfach und relativ billig zu ändern sein soll. Dies ist besonders wichtig, wenn Sie zu spät feststellen, dass etwas grundlegend falsch ist. Machen Sie dasselbe mit Hardware, und Sie verlieren eine Million Dollar. Wie Sie gesagt haben, verwenden Sie Ihre Simulatoren usw. und testen die Bazinga daraus. Ich denke, hier schlägt das Paradigma etwas fehl, wenn Sie auf Software umsteigen.
Kommen Sie in den Kopf eines durchschnittlichen Software-Entwicklers, und was Sie haben, ist eine sehr beschäftigte Person mit einer unglaublich engen Frist. Sein Manager sagt, dass es in Ordnung ist, ein paar Fehler zu hinterlassen, da Sie diese später jederzeit beheben können. Tests sind oft ein nachträglicher Gedanke, aber selbst in einem testgetriebenen Szenario werden die Tests minimal gehalten und der Code auf das Minimum der Tests beschränkt. Oft werden Verknüpfungen verwendet, damit viele der Grenzfälle übersehen werden. Das System kann gründlich getestet werden, wird jedoch selten als Ganzes rigoros getestet und ebenso selten in hohem Maße einem Stresstest unterzogen. Hinzu kommt, dass Sie Software von Grund auf neu schreiben und es kaum Gelegenheit gibt, die Software zu simulieren, bevor Sie sich zum Schreiben verpflichten. Dies liegt hauptsächlich daran, dass wir selten Software aus denselben feinkörnigen Bausteinen schreiben, die Sie in Hardware finden würden.
Zurück zur Frage des OP. Können Sie ein System von Bausteinen definieren, aus denen Sie Ihre gesamte Software ableiten können? Möglicherweise. Wäre es sehr kostengünstig? Wahrscheinlich nicht, denn bis Sie ein robust genuges System aus Komponenten, Tests und anderen Utensilien entwickelt haben, um dieses Ideal zu unterstützenSystem der Programmierung, würden Sie feststellen, dass Ihre Konkurrenz Sie bereits auf den Markt geschlagen hätte, und noch schlimmer, aus der Sicht des durchschnittlichen Programmierers würden Sie wahrscheinlich einen "Ausstecher" -Stil des Programmiersystems als sehr einschränkend und wahrscheinlicher als sehr empfinden langweilig. Ich persönlich arbeite an einer API, bei der der Großteil des Modulcodes so vollständig verfeinert und standardisiert wurde, dass ich jetzt nur noch eine Codevorlage generiere und die Lücken ausfülle. Die meiste Zeit kann ich damit verbringen, einfachen Steckercode zu schreiben und die Module so schnell wie möglich aus der Tür zu holen. Es ist ernsthaft betäubend. Es gibt kaum eine Möglichkeit, mehr zu tun als nur die gleichen Dinge immer und immer wieder zu programmieren. Wenn sich also eine andere Möglichkeit für ein Projekt ergibt, ergreife ich die Chance, etwas anderes zu tun.
Wie können Sie also qualitativ hochwertige und gut faktorisierte Software liefern und es dennoch genießen, dies zu tun? Ich glaube, das hängt von Ihrer Wahl der Tools und Methoden ab. Für mich bestand die Antwort darin, die Verwendung einer guten BDD-API zu verwenden, da ich damit sehr einfach zu lesenden und dennoch hochgradig granularen Code erstellen konnte. Ich kann aus einer minimalen Anzahl wiederverwendbarer Methoden eine Testsuite erstellen und meine Tests in der Sprache der Spezifikationen beschreiben. Auf diese Weise komme ich einem stärker komponentenbasierten Entwicklungsansatz nahe, abgesehen von der Tatsache, dass ich für das Entwerfen und Überprüfen der Bausteine verantwortlich bin. Darüber hinaus zeigt der Testausgang den genauen Teil des Tests an, an dem der Fehler auftritt, sodass ich nicht erraten muss, ob die Fehler im Setup oder in der Behauptung liegen.
Das Optimieren Ihrer Methodik hilft ebenfalls. Ich bin ein großer Verfechter der Anwendung von Lean Development-Prinzipien und deren Kombination mit vielen anderen Techniken und Prinzipien, mit denen sich die Agile-Bewegung seit vielen Jahren beschäftigt. Die meisten der verschwenderischen Praktiken, die ich früher als so frustrierend empfunden habe, zu eliminieren, hat mir sehr geholfen, die Entwicklung zu einer angenehmeren Aktivität zu machen. Ich habe immer noch das Problem, dass manchmal - aber hoffentlich nicht zu oft - Fehler in meinem Code auftreten. Jetzt habe ich jedoch mehr Zeit und noch mehr Ansporn, mehr Zeit damit zu verbringen, robustere Tests zu schreiben und 100 anzustreben % Testabdeckung. Noch besser, es fühlt sich wirklich toll an, all diese grünen Lichter am Ende meines Tages zu sehen.