Recentemente, em um dos seminários do LES, foi apresentada uma pesquisa sobre estratégias de aumento de qualidade em software utilizando-se instrumentação de código. Com adequada instrumentação é possível evitar-se que um software apresente um defeito de maneira não controlada. Antever um possível problema e fazer com que o software reaja a esse problema de maneira “educada” é um desafio para os Engenheiros de Sofware. Em Inglês, utiliza-se o termo “graceful degradation” para denotar essa maneira “educada”. Além disso, uma instrumentação adequada fornecerá subsídios para a reparação do problema.
Vamos utilizar esse contexto para mostrar como é problemático o uso de nomes de uma maneira pouco cuidadosa. Nomes, claro, são muito importantes, mas muitas vezes o seu mau uso pode gerar muita confusão.
O caso que iremos tratar é justamente o termo utilizado para denotar essas estratégias de instrumentação do código com objetivo de torná-lo mais “educado”. Em Inglês utiliza-se o termo “Fault-Tolerant” para denotar software que age educadamente. No entanto em Português o nome comumente utilizado é “Tolerância a Falhas“ .
Tradução errada? Não exatamente, tendo em vista que vários dicionários traduzem “fault” para falha ( veja aqui, aqui e aqui). Se consultarmos o dicionário do Aurélio, veremos que falha tem como sinônimo falta, mas falta não tem falha como sinônimo. No entanto, o mais apropriado seria que a tradução fosse falta, conforme esse dicionário. Se consultarmos o Wordnet, veremos que “fault” não tem “failure” como sinônimo, mas veremos que “failure”, sim, tem “fault” como sinônimo. Portanto há coerência entre os dicionários do Aurélio e o Wordnet.
E dái? Bom, na literatura de Engenharia de Software na língua Inglesa o termo “failure” tem uma denotação bastante distinta do termo “fault”. Diz-se que um software pode ser tolerante a faltas, mas não a falhas! Não existe em Inglês o termo “Failure Tolerant”. É simples de ver: na Wikipedia encontra-se o termo “fault tolerant”, mas o termo “failure tolerant” é inexistente.
A distinção entre falta e falha é a seguinte: a) falta é um problema bem determinado no artefato, b) falha é a conseqüência de uma ou mais faltas e c) a falha é a percepção de que o artefato não comportou-se como o esperado. Portanto, observar que um software falhou é um nível de percepção externa ao software, enquanto a falta é a identificação interna, no software, de um problema.
No entanto, a Engenharia de Software, principalmente na área de Validação, é mais cuidadosa na escolha de termos, com o uso de “error” e “defect”. Se consultarmos o Wordnet veremos que não existe ligação direta de “error” para “defect”, nem vice-versa. No entanto, o termo “fault” aparece na lista de sinônimos das duas palavras. O mesmo ocorre no dicionário do Aurélio.
Na área de Validação utiliza-se erro para denotar um problema interno ao artefato e defeito para denotar a percepção externa de que o artefato não se comportou como o esperado. Erros ocasionam defeitos. Veja o paralelismo com a definição acima de falha e falta. No entanto em Validação vai-se além: testa-se para descobrir-se defeitos e depura-se para descobrir-se erros!
Nomes têm que ser utilizados com cuidado!
(08/07) – Veja uma relação de relatos sobre problemas na produção de software.
…………
Leia sobre Sistemas de Informação.
Veja a página do autor.