Déclarations, erreurs et plantages: quelle est la différence?

Contenu

Symbole de danger d'échec

Problèmes informatiques. Nous les avons tous tôt ou tard. Connaître les tenants et aboutissants des erreurs, affirmations, défauts et plus est essentiel pour mieux comprendre le problème à résoudre. Tout savoir.

Qu'est-ce qu'un Réclamer?

Quand un développeur commence à écrire du code, présentera bientôt if déclarations dedans. Un if La déclaration est utilisée chaque fois qu'il est nécessaire de tester une certaine condition. Par exemple, on pourrait écrire un pseudo-code if declaración de la próxima manera:

si (water_level > high_water_mark) alors {
  raise_alert
}

En d'autres termes, si el nivel del agua supera la marca alta, se genera una alerta. Pero tal vez el sensor de agua esté roto, por lo tanto actualizamos el código para que coincida:

si (sensor_readout == nonsensical) alors {
  raise_error
  fail
}autre{
  si (water_level > high_water_mark) alors {
    raise_alert
  }
}

Génial, ahora obtendremos un error y fallaremos la rutina si el sensor_readout no tiene sentido. Y solo si el valor demuestra ser sensato (debido a la else clause, En d'autres termes, qué hacer en la situación opuesta), procéder à la vérification du water_level avec le high_water_mark.

Malgré cela, peut-être que quelqu'un a éteint le capteur. On peut continuer comme ça un moment. Nous pouvons couvrir tous les scénarios possibles imaginables et en manquer encore quelques-uns. Bien sûr, nous pourrions couvrir toutes les situations possibles avec une combinaison else clause et vérifier que chaque condition est comparée à une autre, mais même dans de tels cas, nous aurions pu négliger certaines combinaisons de variables.

Même si nous n'avions qu'un ensemble limité de variables avec lesquelles travailler, le nombre de combinaisons possibles dans lesquelles un progiciel peut être trouvé est assez nombreux. Et en plus, ce type de if Les tests conditionnels se produisent assez régulièrement dans presque tous les logiciels.

Raisonner un peu plus sur ce dilemme, on comprend vite qu'on (en tant que développeurs) nous pourrions (comme tous les humains nous faisons des erreurs) introduire tôt ou tard du code qui permet au logiciel de s'exécuter dans un territoire indéfini. La variable x est définie sur une valeur spécifique, la variable et est affecté à un autre, et il n'y avait aucune disposition pour cela dans le code.

C'est exactement la situation dans laquelle une déclaration peut, jusqu'à un certain point, apporter. Une affirmation est une autre condition (Considérez-le comme un autre if déclaration.) qui indique s'il y a une certaine situation étrange / peu commun / imprévu / imprévu et, en général, gère une telle situation en arrêtant le programme au lieu de continuer à s'exécuter dans un état indéfini / inconnu.

Bien que le réseau qui renverra le test d'actif soit toujours limité à l'intelligence et aux compétences du développeur mettant en œuvre l'assertion, une affirmation peut souvent être faite plus longtemps que les limites limitées de if instructions qui testent l'état de plusieurs variables, ou il pourrait être rendu assez spécifique pour éviter certaines situations dangereuses.

Par exemple, disons que notre petit capteur d'eau est monté dans un réservoir de pluie. Pour cela, l'eau ne doit jamais bouillir. Malgré cela, si notre capteur d'eau avait un thermomètre, nous pourrions nous assurer, même si cela n'arriverait jamais / ne devrait jamais arriver. Ajoutons une assertion au pseudocode que nous avons commencé ci-dessus.

Au lieu du point d'ébullition (100 degrés Celsius), nous chercherons un maximum plus raisonnable de 70 degrés Celsius, qu'il ne faut encore jamais atteindre lorsqu'on pense à piéger l'eau de pluie, au moins, selon nous. Recuerde la palabraopinión”, car il devient important lorsque l'on considère l'intelligence du développeur mettant en œuvre la revendication. (Plus à ce sujet ci-dessous).

si (sensor_readout == nonsensical) alors {
  raise_error
  fail
}autre{
  assert (water_temp < 70.0){ 
    raise_assert_message 
    fail 
    exit 
  } 
  si (water_level > high_water_mark) alors {
    raise_alert
  }
}

Nous écrivons la déclaration à l'envers. Le code doit indiquer que la température de l'eau est inférieure 70 degrés centigrades. Si ce n'est pas comme ça, exécutera le bloc de code, qui va générer un message d'assertion, puis le logiciel plantera et se fermera.

Les assertions dans le code réel sont assez similaires à l'exemple ci-dessus. Ils vérifient si une certaine situation s'applique ou non et, ensuite, arrêter (ou bloquer de manière contrôlée) le programme / logiciel en question.

Souvent, ces actifs sont enregistrés dans les fichiers journaux de l'application ou même directement dans la sortie écran. Passez-les en revue et / ou recherchez souvent une copie du message d'affirmation exacte sur votre moteur de recherche préféré (si l'erreur a été trouvée précédemment) vous amènera à un rapport de bogue à ce sujet.

Les messages d'affirmation sont souvent des erreurs, même s'il peut s'agir simplement d'erreurs dans le raisonnement du développeur. Après tout, Qui dit à l'intérieur 1000 années, la pluie ne doit pas dépasser 70 degrés centigrades? (J'espère pas!)

Un message d'assertion est la sortie présentée par l'assertion introduite par les développeurs dans le code, En d'autres termes, la sortie textuelle réelle générée par le logiciel et affichée à l'écran ou dans les journaux. Par exemple, imaginez que ce message d'assertion est affiché pour le programme ci-dessus.

Affirmer: (water_temp < 70): (88 < 70): faux

Même si cela semble un peu cryptique (tout comme certains messages d'affirmation), regarder d'un peu plus près nous fait comprendre que dans la deuxième partie, water_temp a été échangé contre 88 et que la sortie est false (En d'autres termes, l'assertion water_temp <70 falló debido a que el agua estaba a 88 grados y, por eso, la aserción desencadenó el mensaje de aserción). Sí, puede resultar un poco confuso.

Armé de ces nouvelles capacités, déboguer un message d'assertion la prochaine fois que vous en voyez un devient beaucoup plus facile. De plus, il est possible de vous permettre de comprendre plus facilement ce qui n'allait pas lorsque l'application a été arrêtée..

Qu'est-ce qu'un Erreur?

Les erreurs informatiques se produisent tout le temps et pour une grande variété de raisons. Ils se produisent à la fois au niveau du développeur et de l'utilisateur et à chaque étape entre les deux. Par exemple, un ingénieur DevOps peut oublier d'inclure un fichier requis, ou le signataire d'un package peut utiliser la mauvaise clé pour signer le logiciel, et ainsi de suite.

En résumé, une erreur informatique peut être définie comme un obstacle avec le matériel informatique ou le logiciel. Il y a quelques exemples de bogue même dans le pseudocode limité ci-dessus. Quand il sensor_readout == nonsensical la condition est remplie, un message d'erreur s'affiche.

Certaines erreurs sont plus fréquentes que d'autres. Par exemple, utiliser le mauvais chemin ou le mauvais nom de fichier est une erreur courante. Problèmes liés à l'énergie (par exemple, batterie faible) ce sont aussi des erreurs assez courantes.

Les erreurs sont assez distinctes et différentes des messages d'assertion, même si le message d'assertion lui-même peut être considéré comme une erreur, Ou mieux, comme une situation indéfinie qui recouvre désormais l'assertion. En général, un error de computadora se traduce bastante bien enNecesito un humano para arreglar este problema”.

À mesure que les ordinateurs deviennent plus intelligents et que l'IA progresse, j'espère que moins d'erreurs se produiront, même s'il y a beaucoup de place pour la discussion et même pour les arguments dans ce domaine.

Qu'est-ce qu'un Choc?

Un crash informatique peut prendre plusieurs formes. Nous connaissons tous les écrans bleus de Microsoft Windows, qui se produisait lorsqu'une application se comportait mal ou qu'une partie centrale du système d'exploitation ou du matériel de la machine tombait en panne.

Malgré cela, la plupart du temps, un crash est une application logicielle qui se trouve dans une situation indéfinie. Il existe de nombreux scénarios possibles non définis de ce type. Il est possible qu'un ordinateur ait essayé d'écrire dans une zone de RAM qui était déjà utilisée, ce qui s'est dérangé ou une autre application, ou peut-être êtes-vous tombé sur un scénario où vous avez essayé de diviser par zéro (ce qui est impossible), ou une situation équivalente.

De nombreux systèmes d'exploitation écrivent un fichier de vidage du noyau (si ainsi configuré), ce qui permet à un développeur et, parfois, à un utilisateur final avec une certaine compétence, déboguer le problème en question.

Si vous voulez en savoir plus sur le débogage lorsque les choses tournent mal, y compris l'analyse des fichiers de vidage du noyau, Vous pourriez être intéressé par notre article Débogage avec GDB: introduction.

Un crash peut aussi être le résultat d'une application qui se trouve dans une situation indéfinie, qui n'est pas géré par une erreur (le moyen le plus simple pour une application de signaler un problème) ou une affirmation (un obstacle plus profond, exclu à l'origine par le développeur comme impossible mais se produit toujours).

En même temps, notez qu'une compilation de programme pour tester, En d'autres termes, avec des informations de débogage (y compris les assertions de niveau de débogage uniquement) intégré dans le binaire du résultat final, peut échouer lors de la production d'une assertion, Comment est le cas, par exemple, avec MySQL. serveur.

Fin

Dans ce billet, nous explorons les concepts d'affirmations, erreurs et plantages, ainsi que la façon dont ils sont liés. Nous examinons en profondeur à quoi ressembleraient les revendications dans le code et comment cela se rapporte à un exemple réel de surveillance du niveau et de la température de l'eau avec un capteur d'eau.. La prochaine fois que vous rencontrez un message d'affirmation, regardez de plus près et profitez du débogage.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.