Therac-25!
Les développeurs du projet Therac-25 étaient plutôt confiants quant au décalage entre une interface utilisateur et un problème d’interface dans une machine thérapeutique XRAY.
Ils n'auraient pas dû être.
Vous pouvez en apprendre plus sur ce fameux désastre logiciel à l’adresse suivante:
http://www.youtube.com/watch?v=izGSOsAGIVQ
ou
http://en.wikipedia.org/wiki/Therac-25
Votre application risque d’être beaucoup moins sensible à l’échec que les dispositifs médicaux. Une méthode utile consiste à évaluer l'exposition au risque comme le produit de la probabilité d'occurrence et du coût de l'occurrence pendant la durée de vie du produit pour toutes les unités pouvant être produites.
Si vous avez choisi de construire votre code pour qu'il dure (et cela ressemble à vous), vous devriez considérer la loi de Moore qui peut facilement supprimer plusieurs zéros toutes les quelques années à mesure que les ordinateurs à l'intérieur ou à l'extérieur de votre système deviennent plus rapides. Si vous expédiez des milliers d'exemplaires, supprimez plus de zéros. Si les utilisateurs effectuent cette opération quotidiennement (ou mensuellement) pendant des années, en emportez quelques-uns de plus. S'il est utilisé là où la fibre de Google est disponible, quoi alors? Si les ordures de l'interface utilisateur collectent une opération de l'interface graphique moyenne, cela affecte-t-il la course? Utilisez-vous une bibliothèque Open Source ou Windows derrière votre interface graphique? Les mises à jour peuvent-elles affecter le timing?
Les sémaphores, les verrous, les mutex, la synchronisation de barrières sont parmi les moyens de synchroniser les activités entre les threads. Potentiellement, si vous ne les utilisez pas, une autre personne chargée de la maintenance de votre programme pourrait très rapidement changer d'hypothèse sur les relations entre les threads et invalider le calcul de la condition de concurrence critique.
Je recommande que vous synchronisiez explicitement parce que même si vous ne le voyez pas créer un problème, un client peut le faire. En outre, même si votre condition de concurrence n’est jamais remplie, que se passe-t-il si vous ou votre organisation êtes poursuivis en justice pour défendre votre code (comme Toyota était apparenté à la Prius il y a quelques années). Plus votre méthodologie est approfondie, mieux vous vous en tirerez. Il serait peut-être plus agréable de dire "nous nous gardons contre ce cas improbable comme celui-ci ..." plutôt que de dire "nous savons que notre code va échouer, mais nous avons écrit cette équation pour montrer que cela ne se produira pas de notre vivant. Probablement. "
Il semble que le calcul de probabilité vienne de quelqu'un d'autre. Connaissent-ils votre code et le connaissez-vous suffisamment pour avoir confiance qu'aucune erreur n'a été commise? Si je calculais une fiabilité de 99,99997% pour quelque chose, je pourrais aussi repenser à mes cours de statistiques universitaires et me rappeler que je n’obtenais pas toujours 100% et que je reculais de quelques pour cent sur mes propres estimations de fiabilité.