Engenharia de Software: Conceitos e Melhores Práticas
Classificado em Tecnologia
Escrito em em português com um tamanho de 8,25 KB.
Engenharia de Software
Engenharia de Software: Aplicação de abordagem sistemática, disciplinada e quantificável no desenvolvimento, operação e manutenção de software (IEEE, STD 610 – 1990).
Estabelecimento e uso de sólidos princípios de engenharia na obtenção de um software confiável, eficiente e economicamente viável (Fritz Bauer – 1969).
Início de um Projeto de Desenvolvimento de Software
Correção de erros pós-entrega, já na etapa de evolução (operação, produção ou manutenção) podem apresentar um custo 100 vezes superior ao de sua correção na fase de desenvolvimento/validação.
Importância de um Time Coeso no Desenvolvimento de Software
Vantagens:
- Padronização de qualidade pode ser desenvolvida/implementada;
- Trabalho integrado: inibição devido a desconhecimento ou ignorância é reduzida;
- Membros aprendem uns com os outros e conhecem o trabalho de cada um;
- Esforço para a melhoria do programa de cada membro, em detrimento do Ego.
Determinação do Número Ideal de Módulos do Sistema
A curva em formato de parábola é gerada a partir da composição do custo unitário (por módulo) e o custo da integração dos módulos. O ponto de mínimo desta curva indica o custo mínimo no desenvolvimento de um sistema, composição entre baixar o custo unitário sem permitir que o custo de integração exploda.
Impacto da Coesão e Acoplamento na Qualidade do Sistema
Coesão e acoplamento são tidos como critérios de qualidade no desenvolvimento de software. Quanto maior a coesão e menor o acoplamento, maior a qualidade do código. O gráfico acima indica, de um ponto de vista puramente financeiro, o intervalo ótimo de número de módulos do sistema, o que pode estar em conflito com o número otimizado desde um ponto de vista de qualidade.
Sendo assim, com foco em custo, pode ser necessário diminuir a coesão e aumentar o acoplamento do sistema visando baratear o custo final do sistema.
Gerenciamento de Riscos em Projetos de Software
Definição:
Gerência de Risco (RM) - foca em identificar riscos e implementar planos que minimizem seus efeitos.
Processo de RM:
- Identificação - riscos de projeto, produto e negócio;
- Análise - estimar a probabilidade e as consequências desses riscos;
- Planejamento - desenho de um plano de contingência;
- Monitoração - monitorar os riscos durante o projeto.
Interfaces entre Sistemas em um Projeto de Software
O projeto de interfaces é um dos princípios básicos de um projeto de software e obrigatoriamente deve constar da definição e análise de requisito, tendo impacto direto na operação (manutenção). A quantidade e complexidade das interfaces influenciam diretamente o custo, prazo e dificuldade do projeto. Seu maior impacto vem da dificuldade do gerenciamento já que, na maioria das vezes, o owner e operação do outro sistema é independente, de difícil gerenciamento.
Segmentação de Sistemas Complexos em Subsistemas
A divisão faz uso de um dos princípios básicos da Engenharia de Software: a Segmentação (ou Decomposição). Basicamente sua vantagem reside em que a complexidade do problema das partes (subdivisões) é menor do que a do todo, resultando menor esforço de entendimento e trabalho.
Na etapa de desenvolvimento essa abordagem resulta em maior velocidade na entrega e na operação resulta em maior velocidade na manutenção (menor custo).
Coesão e Acoplamento: Análise Comparativa
Definições:
Coesão – medida da diversidade dos "tópicos" abordados por um módulo.
Acoplamento – medida da dependência de um módulo em relação aos outros.
Comparando as opções, o módulo A na Opção II (em relação a Opção I) apresenta menor coesão (depende de maior interação com outros módulos), enquanto os módulos B e C apresentam maior coesão. No aspecto geral, o acoplamento da Opção II é maior que da Opção I.
Efetivamente, fazendo-se uma análise de fan-in e fan-out dos módulos, vemos que estes são os módulos impactados:
Requisitos Funcionais vs. Não Funcionais
Definições:
Funcionais - funcionalidade do software que atende a uma necessidade de automação - “o quê” se espera seja feito.
Não-Funcionais – qualidades e restrições globais do sistema.
Requisitos Funcionais são aspectos específicos, funcionalidades solicitadas. Os não-funcionais são subjetivos, geralmente medidos de forma indireta.
Estratégias para Tratamento de Sistemas
A definição das opções de como tratar um sistema passa pela análise de Valor Estratégico x Qualidade, exatamente o gráfico apresentado.
A informação referente à qualidade do código é obtida analisando-se a quantidade e tipo de manutenções (registro histórico) e feedback do grupo de TI.
A informação referente ao valor estratégico é obtida mediante feedback dos stakeholders, adequação dos procedimentos ao domínio do sistema.
Com os dois feedbacks indicados acima é possível definir o quadrante em que se encontra o sistema.
- A teoria de análise de sistemas legados indica que:
Baixa qualidade, alto valor negócio (I): reengenharia ou substituição;
Alta qualidade, alto valor de negócio (II): continuar operação;
Alta qualidade, baixo valor de negócio (III): CotS, eliminação ou manutenção;
Baixa qualidade, baixo valor de negócio (IV): sistemas devem ser substituídos.
Assim sendo, posicionando-se o sistema no gráfico, definimos qual a estratégia que melhor se adéqua.
Modelos de Análise na Fase de Desenvolvimento
Na fase de análise, três modelos que devem ser considerados são: do domínio da informação, o funcional e o comportamental.
Comunicação Eficaz: Canal Oral, Visual ou Misto?
A diferença fundamental é a da retenção da informação pela audiência:
Canal Após 3 horas Após 3 dias
Oral 70% 10%
Visual 70% 20%
Oral + Visual 85% 65%
Tipicamente, é mais eficiente comunicar-se com o grupo de trabalho via mescla de canais do que por um isolado.
Bibliotecas de Módulos: Vantagens e Desvantagens
A padronização de procedimentos de trabalho e documentação permite/facilita o entendimento do código e sua manutenção/desenvolvimento/adaptação por membros diversos da equipe.
- Quando bem implementada/utilizada, gera awereness do grupo e permite o reuso.
Caso a biblioteca de módulos criada não seja extensa (em relação ao mercado de atuação), os módulos podem não atender à necessidade específica do cliente.
Estudo de Viabilidade: Aspectos Essenciais
Relatório que visa embasar a decisão de se a proposta (software ou sistema) é viável - aspectos técnicos, financeiros e temporais.
Estudo focado em analisar:
- Contribuição aos objetivos organizacionais;
- Integração com sistemas atualmente em uso;
- Orçamento x necessidades financeiras;
- Disponibilidade x necessidades técnicas.
Desafios na Etapa de Elicitação de Requisitos
Elicitação é sinônimo de Descobrimento de Requisitos, etapa em que o time técnico trabalha com o cliente para descobrir:
- Domínio da aplicação;
- Serviços requeridos;
- Vínculos e limitações.
Fundamental o envolvimento de todos os stakeholders no processo. Tipicamente o time técnico encontrará dificuldades do tipo:
- Stakeholders não têm claro as necessidades;
- Conflito de terminologia e linguagem (técnicos x negócio);
- Conflito de requisitos;
- Impactos organizacionais/políticos;
- Processo dinâmico: eliminação/alteração/surgimento de requisitos;
- Alteração do ambiente.