domingo, 27 de abril de 2014

Os fundamentos da engenharia de software

A maioria das engenharias tem seus fundamentos em ciências. As engenharias civil, mecânica e elétrica, para citar as mais tradicionais, estão fundamentas nas leis da física. Estes fundamentos permitem a construção de artefatos que, obedecendo a estas leis, possuem a qualidade desejada pelas pessoas.

Queremos qualidade em software. Queremos sistemas que funcionem corretamente e que atendam as necessidades das pessoas. Que sejam confiáveis, robustos, com bom desempenho e seguros. E quais são os fundamentos que garantem isso?

Parte destes fundamentos estão na ciência da computação. Há modelos matemáticos que permitem identificar problemas de funcionamento em um software apenas pela análise do código fonte. Pode-se prever o desempenho de um programa que processa uma quantidade enorme de dados com análise matemática. Vários fundamentos já são conhecidos e devem ser usados pelos engenheiros para que seus produtos atendam os requisitos de qualidade.

Mas esses fundamentos não podem negligenciar que dados e programas são uma invenção da mente humana. O software é um artefato conceitual cuja utilidade depende do uso que as pessoas fazem dele. O funcionamento de um software é regido pelo comportamento humano: pelas regras construídas pelos programadores e pelos dados e comandos dos usuários, tal como interpretado por cada um deles, de acordo com suas crenças e convicções.

Vejamos um caso bem simples. Considere um software que calcula a subtração de dois valores, já citado em outro post anterior. Um programa para fazer isso é bastante simples:

read a
read b
write 'resultado=' a-b

Agora considere uma interface gráfica para este programa em duas situações, como ilustrado abaixo. No primeiro caso, temos o cálculo do lucro. No segundo, o cálculo do salário bruto. Observe que o que mudou foi apenas os termos usados nesta interface gráfica. E isto faz uma grande diferença.



Um software não existe isoladamente. Ele faz parte de uma rede, um sistema de sistemas mais amplo, do qual fazem parte os seus usuários. A mente humana é portanto uma parte importante do comportamento deste sistema. Para o exemplo acima, o comportamento do software envolve as interpretações que os programadores e os usuários têm dos códigos usados. Sim, software é um conjunto de significações que são codificadas em programas, em palavras, em imagens e em sons interpretadas pelos usuários e pelos outros programa que obedecem ordens dos seus programadores.

Assim, é fundamental para um software funcionar bem que se entenda como os envolvidos entendem os significados dos diversos códigos usados. Escolher a palavra adequada para o nome de uma classe ou de botão da interface gráfica é tão fundamental quanto decidir pela estrutura de controle do correta.

Nos sistemas de compras pela Internet, a escolha pelo nome "carrinho de compra" para a lista de produtos escolhidos pelo usuário parece bastante natural. É o exemplo de uma escolha acertada que acabou sendo copiada em vários outros sistemas. Teria dado tão certo se fosse diferente?

As escolhas adequadas para signos e significações são parte dos fundamentos da engenharia de software. E mais fundamental ainda é entender que os processos significativos não são exatos e o que o comportamento dos sistemas são afetados pelas interpretações que os participantes humanos realizam. Vale ressaltar que não temos os fundamentos científicos do comportamento humano.

Isso é similar à construção de um empreendimento. Quais são os fundamentos científicos que regem o funcionamento do empreendimento? Quais as garantias que temos que as coisas serão previsíveis?

Um sistemas computacional baseado em software é como um empreendimento. Ambos funcionam com regras e códigos para processar informações e ambos tem no elemento humano um processador pouco previsível cujo funcionamento desconhecemos.

Um comentário:

Bruno César Bulnes disse...

Estou muito feliz pois você voltou a publicar no seu blog. Já aprendi muita coisa por aqui, e tenho certeza que aprenderei muito mais.