Comme les gens le soulignent généralement très rapidement, l'un des avantages du logiciel est qu'il est censé être facile et relativement bon marché à changer par rapport au matériel. Ceci est particulièrement important lorsque vous réalisez tard que vous vous êtes trompé fondamentalement. Faites de même avec le matériel, et vous perdez un million de dollars, donc comme vous l'avez dit, vous utilisez vos simulateurs, etc., et vous en testez le bazinga. Je pense que c'est là que le paradigme échoue quelque peu lorsque vous passez au logiciel.
Entrez dans la tête du développeur de logiciels moyen, et ce que vous avez est une personne très occupée avec un délai incroyablement serré. Son manager dit qu'il est correct de laisser quelques bugs car vous pouvez toujours le corriger plus tard. Les tests sont souvent une réflexion après coup, mais même dans un scénario piloté par les tests, les tests sont minimisés et le code écrit au minimum des tests, et souvent des raccourcis sont pris afin que de nombreux cas limites puissent être manqués. Le système peut être minutieusement testé à l'unité, mais il est rarement testé rigoureusement dans son ensemble, et tout aussi rarement testé à un degré élevé. Ajoutez à cela que vous écrivez des logiciels à partir de zéro, et il y a peu d'occasions de simuler le logiciel avant de vous engager à l'écrire, principalement parce que nous écrivons rarement des logiciels à partir du même type de blocs de construction à grain fin que vous trouveriez dans le matériel.
Revenons à la question du PO. Pourriez- vous définir un système de blocs de construction à partir duquel dériver tous vos logiciels? Peut-être. Serait-ce très rentable? Probablement pas, car au moment où vous vous familiarisez avec le développement d'un système suffisamment robuste de composants, de tests et d'autres accessoires pour soutenir cela idéalsystème de programmation, vous constateriez que votre concurrence vous aurait déjà battu sur le marché, et pire encore, du point de vue du programmeur moyen, vous trouveriez probablement un style de système de programmation "coupe-biscuit" très limitant et très probablement très ennuyeuse. Personnellement, je travaille sur une API, où la majeure partie du code du module a été affinée et normalisée si complètement, que tout ce que je fais maintenant est de générer un modèle de code et de remplir les blancs. La plupart de mon temps peut être consacré à l'écriture de code de connecteur simple et à la sortie des modules le plus rapidement possible. C'est vraiment engourdissant. Il y a très peu d'occasions de faire plus que simplement coder le même genre de choses encore et encore, donc quand une autre opportunité de projet se présente, je saute sur l'occasion de pouvoir faire TOUT autre chose.
Alors, comment pouvez-vous arriver à fournir des logiciels de haute qualité et bien factorisés, tout en vous amusant à le faire? Je crois que cela se résume à votre choix d'outils et de méthodologie. Pour moi, la réponse a été d'employer une bonne API BDD, car elle m'a permis de créer un code très facile à lire, mais très granulaire. Je peux construire une suite de tests à partir d'un nombre minimal de méthodes réutilisables et décrire mes tests dans le langage des spécifications. De cette façon, je me rapproche d'une approche de développement plus composante, sauf pour le fait que je suis responsable de la conception et de la vérification des blocs de construction. De plus, la sortie du test identifie la partie exacte du test où l'échec se produit, de sorte que je n'ai pas à deviner si les échecs sont dans la configuration ou l'assertion.
Ajuster votre méthodologie est également utile. Je suis un ardent défenseur de l'application des principes du développement Lean et de leur combinaison avec de nombreuses autres techniques et principes que le mouvement Agile frappe depuis de nombreuses années. Ayant éliminé la plupart des pratiques inutiles que je trouvais si frustrant, j'ai beaucoup aidé à faire du développement une activité plus agréable. Je reste avec le problème que parfois - mais j'espère pas trop souvent - des bugs apparaîtront dans mon code, mais je me retrouve maintenant avec plus de temps, et encore plus d'incitation à passer plus de temps à écrire des tests plus robustes et à viser 100 % Couverture de test. Encore mieux, c'est vraiment génial de voir tous ces feux verts apparaître à la fin de ma journée,