Introdução à Engenharia de software

O que é a?

A engenharia de software utilização consiste na utilização do pensamento lógico para reolução de problema e implementação em sistemas de computação.

Abordagem

Para solucionar um problema complexo, a forma mais eficiente é dividí-lo em partes menoes, solucioná-los individualmente para depois sintetizá-los(juntar/integrar) em uma solução completa.

Terminologias


Ferramenta: instrumento ou sistema para realizar um procedimento de forma mais eficiente.

Ex: Se você quiser quebrar uma rocha com um martelo, você até pode, mas com uma marreta (ferramenta mais adequada) é muito mais eficiente e prático.

Procedimento: Combinação de técnicas e ferramentas para produzir um resultado específico.

Ex: É como se fosse uma receita de bolo, você segue as instruções e usa ferramentas para gerar um bolo bacana.

Paradigma: Abordagem para a resolução de problema.

Ex: Eu posso gostar de teclados de película e você dos teclados mecânicos, mas estamos resolvendo o mesmo problema: a necessidade de digitar.

papel da engenharia de software

O papel do Engenheiro de Software

Analisar os problemas que lhe forem apresentads e apontar a ferramenta/metodologia mais eficiente para resolvê-los.

Estruturar a criação do software para que o resultado final seja, manutenível, robusto, preciso e eficiente ao realizar o que se propõe. Em suma, que seja um software de qualidade (mais sobre isso adiante no texto)

descrevendo bugs na engenharia de software

Como descrever bugs?

Erro: Falha humana que gera um resultado inconsistente.

Ex: Uma estrutura condicional incorreta ou a falta de um “;” (ponto vírgula) ao final de uma linha de código.

Defeito: Divergência entre a especificação e implementação, causada pelo não entendimento dos requisitos do sistema (visão interna do sistema – devs).

Ex: Você não entendeu direito o que precisava ser feito e implementou (codificou) uma funcionalidade errado. Digamos que era para comprar maçãs e você trouxe bananas.

Falha: Diferença entre o comportamento real e o esperado. Ela só acontece quando um defeito do sistema impacta o usuário demonstrando um funcionamento não condizente (visão externa – usuários)

Ex: O úsuário tentou comprar o produto, mas na página de checkout, apareceu uma mensagem de erro na tela e impediu o cliente de realizar a compra.

Exemplo integrado:

Espeficicação: Um sistema para cadastro de vendas que aceite o CPF e CNPJ.

Erro: O programador implementa as duas funções, mas esquece de colocar a condicional que verifica o CNPJ.

Defeito: O sistema agora está fora de especificação, pois não aceita compras com CNPJ.

Falha: O funcionário tenta realizar uma venda com CNPJ e o sistema trava e sai da aplicação.

Note que o defeito só se torna uma falha quando o usuário tenta realizar a venda para um cliente com CNPJ, pois até então, ele estava usando o sistema normalmente.

qualidade em engenharia de software

Perspectivas de qualidade

Trancedental: Vem do aristóteles, que define o ideal como algo inalcançável, mas fazemos o melhor software para aproximar desse ideal.

Usuário: Quando atende as necessidades que ele precisa de forma eficiente.

Fabricante: Satisfaz aos requisitos e especificações.

Produto: Características inerentes do produto (confiabilidade, manutenção, …).

Mercado: O que o consumidores estão dispostos a pagar para ter acesso ao produto.

Qualidade do processo de desenvolvimento do software também impacta o produto final, portante esta é uma métrica a ser considerada. Esta também é relacionada com o valor comercial. Para calcular o valor comercial, empresas normalmente verificam o esfoço para crição/manutenção (ou investimento no caso de adquirir um já pronto) vs retorno em produvidade/eficiência que ele pode trazer.

Não existe uma métrica de qualidade ideal, depende do contexto do produto. É necessário analisar por várias perspectivas diferentes, pois cada caso é um caso.

Quem faz engenharia de software

Quem faz Engenharia de Software?

Para criação de um software, é necessária uma comunicação entre os envolvidos. Para isso, as funções são dividas em papéis (responsabilidades) que são bem definidas em projetos de grande porte e mais gerais nos projetos mais simples.

Cliente: pessoa ou organização que está pagando o desenvolvimento do software.

Desenvolvedor: quem está construindo o software (em casos mais complexos, há subdivisões entre os desenvolvedores).

Usuário: Quem vai usar o sistema.

Cabe ressaltar que o usuário, desenvolvedor e cliente podem ser pessoas diferentes ou a mesma pessoa. No caso afirmativo, é necessário averiguar as necessidades de cada um para alinhar o desenvolvimento e gerar um softare efetivo.

Tomemos como exemplo um sistema de gerenciamento de caixa: o dono do mercado financia o desenvolvimento do software, mas ele não será o usuário direto. Ele verá os relatórios, mas o cadastro/lançamento de vendas serão realizados pelos funcionários no caixa.

É necessário também definir, antes da elaboração do sistema, quais as fronteiras que ele terá, ou seja, quais serão as especificações, quais atividades o sistema fará e quais não fará. Quanto mais específica, melhor.

Ex: No caso hipotético de um cliente que estabeleceu contratualmente na especificação: “Geração de relatórios”. Em outras palavras, ele terá a liberdade de exigir de você ou sua empresa qualquer tipo de relatório no sitema. Em contrapartida, se estivesse: “Relatório sobre o fluxo de vendas do estabelecimento”, não seria possível exigir para ele exigir outros sem custo adicional, por exemplo.

Vale lembrar também que é preciso definir quais serão as entradas e qual processo será realizado para a produção da saída.

Ex: Presuma um sistema para geração de relatórios. De onde virão esses dados? Qual será o formato deles? Que tipo de relatório será gerado?

Engenharia de Software - Elementos

Elementos do sistema

Atividade: algo que acontece no sistema.

Objetos/Entidades: elementos envolvidos na atividade.

Relações/Fronteiras: Definição de quais atividades estarão dentro do escopo do sistema.

Em suma, um sistema (computacional ou não) é um conjunto de entidades com relações entre si que possuem fronteiras e trabalham para execução de um objetivo em comum: a(s) atividade(s) que lhe competem.