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.
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)
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.
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?
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?
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.