Infográfico: 5 fases simples para entender a engenharia de software
Infográfico: 5 fases simples para entender a engenharia de software

O que  é Engenharia de Software? Esta pergunta é repetida religiosamente por todos que iniciam seus primeiros passos no mundo do desenvolvimento de sistemas e outros projetos 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.

“Um gatinho com juba de leão”

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!
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 fases da engenharia de software, ou engenharia de sistemas

É 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? Entenda em 5 fases.

1 – 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

Os requisitos de sistema

O detalhamento dos requisitos de software que atenderão a solução para o problema de negócio identificado são, a grande modo divididos em dois tipos, sendo:

Requisitos funcionais

Recurso ou funcionalidade do software, que pode ou não interagir com o usuário.

Exemplo de requisito funcional:

# DESCRIÇÃO TIPO PRIORIDADE
1 O sistema deve permitir o cadastro de novos usuários, realizando a validação através de um e-mail de confirmação. REQUISITO FUNCIONAL OBRIGATÓRIO
2 Deve ser possível ao usuário solicitar a redefinição de sua senha, informando o e-mail cadastrado. REQUISITO FUNCIONAL IMPORTANTE

Requisitos não funcionais

São características de comportamento ou de ambiente, que interferem no funcionamento esperado de um sistema, e que não são atendíveis unicamente através de um ou mais requisitos funcionais.

Exemplo de requisito não funcional

# DESCRIÇÃO TIPO PRIORIDADE
1 O sistema deve ter garantida uma disponibilidade maior que 98.05%. REQUISITO NÃO  FUNCIONAL OBRIGATÓRIO
2 O sistema deve ser multiplataforma, possibilitando seu uso em dispositivos com O.S. Windows, Linux e macOS. REQUISITO NÃO FUNCIONAL OBRIGATÓRIO

 

Ainda durante a fase de análise de requisitos e análise de negócio, são realizadas atividades de:

    • Identificação e especificação dos domínios do programa (qual o cenário em que ele será inserido, e quais seus limites);
    • Detalhamento de comportamento do sistema;
    • Prototipação e especificação de interfaces;
    • Comportamentos do sistema para atender as regras de negócio;

Mesmo que pareça repetitivo, é fundamental que a importância destas duas atividades de análise esteja clara para todo gerente de projetos, arquiteto de software, análise de negócios ou requisitos e também para todos os estudantes de engenharia de software.

Os erros e imprecisões cometidos nesta fase, serão perpetuados e amplificados ao longo de todo o projeto, resultando incontestavelmente em prejuízo financeiro e em um sistema que não atende as necessidades reais.

2 – Projeto e 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 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.

Recursos tecnológicos é todo e qualquer recurso que provenha do ambiente computacional no qual o sistema será desenvolvido, 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.

Diagramas UML – Unified Modeling Language

Os diagramas de modelagem de sistema, 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 por esta linguagem de modelagem (UML), possibilitam o desenvolvimento e evolução visual de todo o sistema, partido desde o diagrama de casos de usouse case diagram, até diagramas de atividadeactivity 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.

3 – 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, 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.

“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”

4 – Garantia de qualidade do Software e Entrega

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.

 

O que são requisitos de software, e porque vão fazer seu projeto fracassar!
O que são requisitos de software, e porque vão fazer seu projeto fracassar!

A importância da análise de testes e do teste de software

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

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.

 

5 – Manutenção adaptativa e evolutiva do software

Mesmo que em teoria o processo de desenvolvimento de software 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 é sinônimo de 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 =].

Previous article34 técnicas de Análise de Negócios do BABOK®
Next articleO que é EAP, Estrutura Analítica do Projeto – EAP ou WBS?
Chico Alff é o nome da persona de batalha de Francilvio Roberto Alff. Paranaense apaixonado por São Paulo, possui formação em Engenharia de Software, Análise e Desenvolvimento de Sistemas para Internet, iniciou também uma jornada acadêmica em História e Língua italiana, aventura essa que não foi concluída - ainda! Atualmente é acadêmico do curso de Engenharia Civil - Como é possível combinar a paixão por Computadores com a Divina Comédia e principalmente tijolos... por TIJOLOS!!! Frequentou os bancos acadêmicos tanto no Brasil quando na Itália, precisamente na Università degli Studi di Verona. Trabalha com  desenvolvimento de software desde 2010, tendo lançado âncora no mar da Análise de Requisitos, Análise de Negócios e Gerenciamento de Projetos, com experiência em projetos para a administração pública, sistemas de ERP, contábil e fiscal. Da mesma forma como um malabarista, tenta milagrosamente manter o portal www.AnálisedeRequisotos.com.br como prova de sua paixão pelo mundo da engenharia de software.