O campo da engenharia de software tem amadurecido muito desde seu início há 40 anos. Durante todo este tempo os profissionais têm aprendido lições importantes que contribuem para as melhores práticas de hoje. Algumas se tornaram obsoletas, mas muitas são ainda bastante relevantes e amplamente implementadas hoje. Em seu livro [1], Alan Davis garimpou 201 princípios que formam a base da engenharia de software. Abaixo destacamos alguns dos mais importantes e exploramos cada um deles:
Tenha a qualidade como prioridade 1
Software de alta qualidade é possível
Entregue produtos aos clientes rapidamente
Utilize um processo de software apropriado
Minimize a distância intelectual
Inspecione o código
Pessoas são a chave para o sucesso
Tenha a qualidade como prioridade 1
Nada é mais importante que entregar um produto de qualidade aos clientes — eles simplesmente não toleraram qualquer coisa menos. No entanto, diferentes pessoas possuem diferentes ideias do que qualidade significa, por isso, deve ser especificada e mesurada. O exemplo primordial de qualidade é quão rigorosamente o software atende aos requisitos do cliente, quantos defeitos possui, e quanto custa para produzir. As medidas de qualidade precisam ser especificadas com antecedência para garantir que os alvos corretos estão sendo perseguidos e atingidos.
Software de alta qualidade é possível
Embora possa ser difícil produzir software de alta qualidade, seguir métodos e técnicas modernas de engenharia de software tem comprovado atender objetivos de qualidade razoáveis. Alguns exemplo incluem envolver o cliente, prototipagem, realização de inspeções e empregar processos de software incrementais.
Entregue produtos aos clientes rapidamente
Muitos projetos de software falham porque os clientes entram em contato com o software demasiadamente tarde no ciclo de desenvolvimento. Esta foi uma das maiores motivações para a introdução de métodos ágeis. É praticamente impossível conhecer todos os requisitos com antecedência, e envolver os clientes tão cedo quanto possível é essencial para obter os requisitos corretos. Ter eles se envolvendo desde cedo, ajudando a especificar requisitos é muito importante, mas oferecer software funcionando e o cliente usando-o é crucial para entender o que ele realmente precisa. Os clientes podem pensar que querem uma funcionalidade específica, ou pensar que querem uma interface de usuário de uma certa maneira, mas até que eles tenha uma versão do software para usar você nunca poderá ter certeza. Empregar técnicas como processos ágeis, prototipagem e processos incrementais permitem aos clientes ter software em suas mão mais cedo no ciclo de desenvolvimento.
Utilize um processo de software apropriado
Existem muitos modelos de processo de software e nenhum deles é apropriado para qualquer tipo de projeto. Por exemplo, o processo em cascata funciona bem para projetos onde todos os requisitos são bem conhecidos desde o início. Reciprocamente, processos ágeis e outros processos iterativos são considerados quando pouco requisitos são conhecidos com antecedência. Bons engenheiros de software e líderes de projeto reservam um tempo para compreender o tipo de projeto a ser realizado e usam um modelo apropriado.
Minimize a distância intelectual
Este princípio diz que para qualquer solução de software para um problema do mundo real, tanto as estruturas da solução de software quanto as do problema do mundo real devem ser similares tão quanto possível. Quanto mais próximas as estruturas são umas das outras, mais fácil é para desenvolver e manter o software.
Inspecione o código
Isto deve ser entendido como "inspecione todos artefatos", onde artefatos são definidos como qualquer produto do processo de desenvolvimento de software, incluindo especificações técnicas, planos de testes, documentação, e código. Inspeções têm comprovado que encontrar erros o quanto mais cedo possível aumenta a qualidade e diminui o custo do projeto como um todo.
Pessoas são a chave para o sucesso
Ter pessoas altamente qualificadas e motivadas é provavelmente o fator mais importante que contribui para o sucesso de um projeto de software. Bons profissionais podem compensar uma variedade de obstáculos, incluindo ferramentas pobres, processos insuficientes e problemas não previstos. Bons profissionais descobrem um meio para superar estes obstáculos e tornam o projeto um sucesso. Maus profissionais com nenhum destes obstáculos provavelmente ainda falharão. Contratar e manter os melhores profissionais é essencial para produzir software com alta qualidade e bem sucedido.
Referências
Este trecho de texto foi traduzido e adaptado a partir de [2].
DAVIS, Alan. 201 Principles of Software Engineering. McGraw Hill, 1995.
BRAUDE, Eric J.; BERNSTEIN, Michael E.. Software Engineering: Modern Approuches. 2. ed. Boston: Wiley, 2010. Cap. 1, p. 10-12.