Infográfico: Engenharia de software fácil

Como funciona o desenvolvimento de software? Esta pergunta é repetida religiosamente por todos que iniciam seus primeiros passos no mundo do desenvolvimento de software e outros projetos de software.

O que é engenharia de software?

Mas afinal, como podemos definir de forma clara o que a engenharia de software abrange? Nada de pânico! Vamos esclarecer as principais características desse mundo ainda cheio de indefinições.

O termo engenharia por si só já tem o poder de causar um certo receio, e até mesmo a presunção de algo burocrático e desgastante. Muita calma nessa hora, na verdade a engenharia de software é menos maligna do quanto possa parecer.

Não tenha medo! A Engenharia de Software é como um gatinho com juba de leão!
Engenharia de Software: Não tenha medo! A Engenharia de Software é como um gatinho com juba de leão!

Engenharia de Software, ou Engenharia de Sistemas fica muito menos assustadora quando entendemos seus objetivos, competências, metodologias e os papéis que atuam em cada cenário de seus processos. “É como um gatinho, com uma enorme juba de leão!”.

No artigo “O que faz um engenheiro de software” explicamos de forma objetiva e detalhada todos as atividades que a engenharia de software compreende, e também um esquema e uma lista com exemplos práticos das atividades e competências de responsabilidade de um engenheiro de software e sistema.


As 5 fases de engenharia de software

É possível agrupar de forma sucinta todo domínio da engenharia de software em apenas 5 fases, obviamente em uma ótica macro.

    1. Análise de Negócio e Análise de Requisitos;
    2. Projeto e Arquitetura do Software;
    3. Desenvolvimento ou programação;
    4. Garantia de qualidade e Entrega;
    5. Manutenção corretiva-adaptativa e Manutenção Evolutiva;

Lembrando que estas cinco fases que elencamos de um processo de engenharia de software não deve ser tomada como regra ou norma. Todo processo de desenvolvimento de software deve ser modelado conforme a necessidade de cada projeto, a menos que você queira que seu projeto seja um verdadeiro fracasso!

Infográfico: O que é engenharia de software? Entenda em 5 fases.
Infográfico: O que é engenharia de software? Quais as 5 fases da engenharia de software.

Análise de negócio e análise de requisitos

Identificação e individualização do problema a ser resolvido. Nesta primeira fase, são executadas as duas atividades (disciplinas) mais críticas e determinantes de um projeto de desenvolvimento de software.

A identificação do problema de negócio a ser resolvido, e a correta especificação dos requisitos de sistema necessários para atender a solução para este problema, serão decisivos para o sucesso ou fracasso do projeto.

As 7 dimensões do produto são: user, interface, action, data, control, environment e quality
The 7 product dimensions – As 7 dimensões do produto, são sete dimensões de extrema importante para a identificação, detalhamento, planejamento e execução de um projeto de desenvolvimento de software.

Arquitetura do software

Neste ponto do ciclo de desenvolvimento de software, é realizada a compatibilização dos requisitos de sistema, funcionais e não funcionais, com os recursos tecnológicos do ambiente em questão.

O arquiteto de software ou engenheiro de software, analisa cada um dos requisitos de sistema especificados. E então identifica através de qual recurso tecnológico ele será atendido da forma mais eficiente, eficaz e com o menor impacto sobre eventuais outras funcionalidade.

Recurso tecnológico é todo e qualquer recurso que provenha do ambiente computacional no qual irá ocorrer o desenvolvimento de software. Por exemplo, funções e métodos da linguagem de programação, features e comportamento do banco de dados.

Recursos de hardware, consumo de informação de fonte externa através de API`s ou outro tipo de integração também são recursos tecnológicos.

Diagramas UML

Os diagramas de modelagem de sistema, ou apenas diagramas UML, são recursos preciosos para um detalhamento eficiente dos requisitos de um sistema.

A utilização de diagramas durante todo o ciclo de desenvolvimento do sistema é uma prática recomendada porém não obrigatória.

Os tipos de diagrama disponibilizados pela linguagem de modelagem (UML), possibilitam o desenvolvimento e evolução visual de todo o sistema, partido desde o diagrama de caso de uso – use case diagram, até diagrama de atividade -(activity diagram) diagrama de sequência, diagrama de classe, e outros conforme a necessidade do projeto.

LIVRO: Utilizando UML e Padrões - Craig Larman - Português
LIVRO: Utilizando UML e Padrões – Craig Larman – Português

Durante o processo de arquitetura do sistema, são sequencialmente definidos atributos técnicos da linguagem de programação que deverão ser utilizados na solução dos requisitos de sistema.

O arquiteto de software detalha então os componentes das interfaces, seus atributos,  as interações entre componentes do sistema ou externos, características especiais. Também durante esta etapa são determinados os métodos, funções e padrão de codificação a serem obedecidos durante a programação do software.

Programação, Codificação ou Desenvolvimento do Software

Terminadas as fases de análise de negócio, análise de requisitos e arquitetura de sistema, chega então o momento de fazer a mágica acontecer, é a hora de programar!

Através das documentações e artefatos produzidos durante as etapas anteriores, um programador, ou melhor dizendo, um desenvolvedor realiza o entendimento de tais especificações, instruções e padrões e desenvolve o código que atenderá aos requisitos especificados.

A programação de uma funcionalidade durante o processo de desenvolvimento de software, seja em uma situação de desenvolvimento adaptativo, corretivo, evolutivo e também em um novo sistema, deve obedecer o quanto estabelecido e determinado durante a análise de requisitos, e arquitetura de software, e documentado através de artefatos que variam conforme a metodologia de desenvolvimento adotada.

Uma premissa universal para a atividade de codificação, é de que um código deve ser entendível e alterável por qualquer outro desenvolvedor que possua as mesmas competências técnicas independentemente do tempo transcorrido após a implementação.

Boas práticas de indentação, nomenclatura e documentação através de comentários são diferenciais muito úteis na manutenção de um sistema estável, que possua recursos reutilizáveis e com um baixo índice de refluxo.

Garantia de qualidade do software

O termo ‘Garantia de qualidade de software’ representa uma série de atividades, processos, critérios e metodologias que tem como objetivo principal atestar a conformidade de uma ou mais funcionalidade de um sistema.

Análise de testes de software

Durante esta fase, são normalmente envolvidos o personagem do analista de teste e o testador. O analista de teste é responsável por planejar, elaborar e documentar todas as verticais passíveis de verificação em uma implementação  ou correção de software.

A importância da análise de testes

O analista de testes, utiliza os artefatos de documentação de software gerados nas etapas anteriores para direcionar a análise e o plano de teste. Buscando sempre como objetivo final a verificação ou não da aderência de cada feature (funcionalidade) individual com o seu respectivo requisito de sistema, e requisito de negócio.

A figura do testador por sua vez, com o apoio do plano de testes e demais documentações disponíveis, executa testes sistemáticos conforme especificado. A forma, constância e complexidade destas rotinas de testes variam conforme o ambiente, tecnologia, escopo, prazo e dimensão da implementação.

Software delivery (entrega de software)

Uma vez que os testes foram executados e a conformidade de cada uma das implementações for verificada, o sistema, pacote, ou versão está disponível para o processo de delivery, ou seja para disponibilização ao usuário.

O processo de entrega de uma implementação é determinado por diversos fatores, como por exemplo o tipo de emprego do software, ambiente, nicho de mercado, impacto da entrega, tecnologia, etc.

Manutenção adaptativa, evolutiva e corretiva

Mesmo que em teoria o processo de desenvolvimento de sistemas tenha sido concluído no momento da entrega da implementação ao cliente, a manutenção do sistema também é de responsabilidade da engenharia de software.

Esta etapa pode ser interpretada como um loop que, em caso de necessidade, seja ela a correção de um defeito do sistema, ou para o desenvolvimento de um novo recurso, retorna o fluxo ao primeiro estágio da lógica apresentada neste artigo.

Manutenção não é suporte

Não deve-se cometer o erro de confundir a fase de MANUTENÇÃO com o cenário de SUPORTE.

Por mais que a fase de manutenção e a de suporte convirjam no mesmo caminho, uma tem por objetivo garantir o funcionamento e aderência do software.

Já a outra tem como premissa única a entrega de conhecimento ao usuário final, ou pelo menos deveria ser assim – mas isso é assunto para outra discussão

Sair da versão mobile