Pular para o conteúdo principal

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.

Comentários

Unknown 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.

Postagens mais visitadas deste blog

O Modelo Espiral

O objetivo do modelo espiral é prover um metamodelo que pode acomodar diversos processos específicos. Isto significa que podemos encaixar nele as principais características dos modelos vistos anteriormente, adaptando-os a necessidades específicas de desenvolvedores ou às particularidades do software a ser desenvolvido. Este modelo prevê prototipação, desenvolvimento evolutivo e cíclico, e as principais atividades do modelo cascata. Sua principal inovação é guiar o processo de desenvolvimento gerado a partir deste metamodelo com base em análise de riscos e planejamento que é realizado durante toda a evolução do desenvolvimento. Riscos são circunstâncias adversas que podem surgir durante o desenvolvimento de software impedindo o processo ou diminuindo a qualidade do produto. São exemplos de riscos: pessoas que abandonam a equipe de desenvolvimento, ferramentas que não podem ser utilizadas, falha em equipamentos usados no desenvolvimento ou que serão utilizados no produto final, etc.

O Modelo Evolutivo

O modelo evolutivo descreve um processo na qual o software deve ser desenvolvido de forma a evoluir a partir de protótipos iniciais. Para entender melhor este modelo é importante entender o que é prototipação (ou prototipagem). Prototipação é uma abordagem baseada numa visão evolutiva do desenvolvimento de software, afetando o processo como um todo. Esta abordagem envolve a produção de versões iniciais - "protótipos" - de um sistema futuro com o qual pode-se realizar verificações e experimentações para se avaliar algumas de suas qualidades antes que o sistema venha realmente a ser construído. Objetivos da Prototipação Num projeto de software várias questões podem ser respondida com a construcão de protótipos. Nas situações típicas de desenvolvimento podemos distinguir entre diferentes objetivos na prototipação: Exploratória - é quando o protótipo é usado para ajudar a esclarecer requisitos dos usuários com respeito ao sistema futuro. Uma prototipação também é exploratória

Sistemas Computacionais

Um sistema computacional (ou baseado em computador) é aquele que automatiza ou apóia a realização de atividades humanas através do processamento de informações. Um sistema baseado em computador é caracterizado por alguns elementos fundamentais. Hardware Software Informações Usuários Procedimentos ou Tarefas Documentação O hardware corresponde às partes eletrônicas e mecânicas (rígidas) que possibilitam a existência do software, o armazenamento de informações e a interação com o usuário. A CPU, as memórias primária e secundária, os periféricos, os componentes de redes de computadores, são exemplos de elementos de hardware. Um único computador pode possibilitar a existência de diversos sistemas e um sistema pode requisitar diversos computadores. O software é a parte abstrata do sistema computacional que funciona num hardware a partir de instruções codificadas numa linguagem de programação. Estas instruções permitem o processamento e armazenamento de informações na for