Metodos e Tecnicas de Engenharia de Software

Esta matéria teve como objetivo mostrar os conceitos por trás da Engenharia de Software. A seguir, o que foi apresentado na matéria

O que é Engenharia de Software?

Segundo o material da Unigranrio, Engenharia de Software é:

A engenharia de software é o conjunto de técnicas, métodos e ferramentas para construção de sistemas e tem como objetivo ordenar o desenvolvimento e obter qualidade e satisfação dos clientes.

Para maior enriquecimento, trago a definição de Fritz Bauer, encontrada no site DevMedia:

Engenharia de Software é o estabelecimento e o emprego de sólidos princípios de engenharia de modo a obter software de maneira econômica, que seja confiável e funcione de forma eficiente em máquinas reais


Processos de Software e Disciplinas da Engenharia de Software

Processos de software são as diversas fases para se construir e manter um software. Ter consciencia de um processo é importante para se manter um padrão que contribui para a qualidade de um software.

O que se entende como disciplinas de ES são as atividades aplicadas durante o processo de software que contribui para a construção e manutenção do mesmo. São elas:

Gerencia de projetos

Todo projeto precisa de planejamento. Sendo assim, essa disciplina é fundamental por propor esse planejamento ao desenvolvimento do software. Mas não somente o planejamento é importante, mas também o controle de execução do mesmo.

Levantamento de requisitos

É nesta fase que se levanta os requisitos funcionais e não-funcionais. Os requisitos são as funcionalidades que o sistema precisa entregar. Sendo assim, é nesta disciplina que se estuda e define quais as funcionalidades serão contempladas no software.

É possível, para tanto, se utilizar de diferente tecnicas para o levantamento de requisitos: brainstorming, questionário ou entrevistas

Análise

É a disciplina responsável por detalhar cada requisito levantado no processo anterior. O objetivo é detalhar passo-a-passo como o sistema será desenvolvido. É nesta disciplina que se criar os diferentes documentos da análise de projetos, tais como o Modelo Entidade-Relacionamento, quando o assunto é o bancod de dados. Quando são projetos orientados a objeto, cria-se os diagramas da UML, entre outros.

Projeto

Cria-se uma solução tecnológica para o sistema considerando suas diferentes funções, requisitos e restrições. Há também a criação de diferentes documentos.

Implementação

Aqui é a parte do desenvolvimento propriamente dito. Escolhe-se o conjunto de linguagens e tecnologias necessárias a construção do projeto.

Teste

Esta disciplina tem como função prover os diferentes conjuntos de ferramentas para a validação e verifição do software. Aqui são criados os documentos de testes e o sistema é validado sobre diferentes perspectivas: desde do nível de código até a nível de interação do usuário.

Implantação

Segundo a Unidade de Aprendizagem 3 da matéria:

É a disciplina que finaliza o desenvolvimento e disponibiliza para uso no usuário. Os procedimentos são aprovados pelos stakeholders, treinamento é desenvolvido com os usuários do negócio e carga dos dados é efetivada.

Manutenção

Disciplina que cuida da manutenção do software, bem como das diferentes tecnologias e metodologias utilizadas para isso.

Qualidade

Segundo a Unidade de Aprendizagem 3 da matéria:

Determina características necessárias para satisfazer a necessidade dos usuários do negócio.


Ciclos de vida de um Software

Ciclo de vida diz respeito as etapas de como o software poderá ser contruído e em quais momentos são feitos os documentos resultantes dessas etapas.

Independentemente do ciclo escolhido, o processo será o mesmo:

  • Conhecimento do problema
  • Representação conceitual da solução
  • E como a mesma será implantada

Cascata

Caracteristicas

  • As etapas são feitas seguidamente
  • Cada término de etapa serve de entrada para outra etapa
  • É gerado um documento a cada etapa

Pontos positivos

  • Simples de implementar

Pontos negativos

  • Tem-se dificuldade com mudanças de requisitos
  • Demora-se para entregar algo utilizável para o usuário
  • Processo burocrático

Prototipagem

Caracteristicas

  • Desenvolvimento rápido e portanto, rápida entrega

Pontos positivos

  • Intensa participação do usuário
  • Facilidade em modificar a estrutura do software

Espiral

Caracteristicas

  • Tentativa de união do modelo em cascata com o modelo em protótipos
  • Possui 4 etapas:
    • Planejamento - levantamento de requisitos;
    • Análise de riscos - projeto com a análise da viabilidade do sistema;
    • Engenharia - implementação;
    • Avaliação do usuário - validação por parte do usuário

Pontos negativos

  • Senão bem pensado, pode se tornar complexo para algumas equipes
  • Altamente dependente de tecnologia

Iterativo e incremental

Caracteristicas

  • Desenvolvimento realizado em partes
  • Maleável e manutenível
  • Rápida entrega em partes
  • Ao finalizar um ciclo, recomeça-se ele

Modelo Evolutivo

Caracteristicas

  • Parte do princípio que não é possível ter todos os requisitos num primeiro momento
  • A partir do que o cliente colocar, é desenvolvido o sistema e entregue uma versão operacional
  • O cliente da o feedback que é necessário para mais requisitos e assim volta ao início do ciclo
  • O software já atende a requisitos do cliente mais cedo
  • Não há preocupação na construção de documentos
  • Há a necessidade de um forte gerenciamento neste modelo
  • Há uma intensa participação do cliente

RAD: Rapid Application Development

Caracteristicas

  • Ciclos curtos de desenvolvimento, de 60 a 90 dias
  • Paralelismo nas atividades
  • Múltiplas equipes trabalhando no sistema
  • Módulos de desenvolvimento independentes
  • Prototipagem rápida e bastante interação com o cliente
  • Padronização de telas e UI devido ao forte uso de frameworks componentizados

Desenvolvimento ágil

Scrum

A seguir, uma imagem que ilustra bem o fluxo do Scrum:

Conceitos

  • Sprint: ciclo iterativo de duração determinada. Ao final da sprint, o software é incrementado.

  • Backlog: é o conjunto de requisitos priorizados pelo Product Owner.

  • Daily scrum: é a reunião diária em que os integrantes da equipe dizem como está o andamento de suas tarefas

  • Retrospectiva: é a reunião que tem como objetivo refletir sobre a Sprint passada.

  • Estória: é o requisito documentado.

Conceitos

  • Product Owner: é o proprietário do produto. É aquele que está mais próximo do cliente e de quem está interessado com o produto.

  • Scrum Master: líder da equipe. É o que possui contato direto com o Product Owner.

  • A Equipe de Desenvolvimento: é a equipe em si.

XP eXtrem Programming

  • stand up meeting: reuniões diárias em que os integrantes da equipe falam sobre o que fizerem / irão fazer. Tem duração, em média, de 30 minutos.

  • iterações ou releases: a cada duas ou quatro semanas, o software irá ser incrementado de acordo com o desenvolvimento da equipe.

  • programação em par (pair programming): consiste na prática de dois programadores estarem trabalhando na mesma máquina na mesma tarefa. Há três motivos para isso: melhor aprendizado, concentração e qualidade.

  • desenvolvimento guiado a testes (TDD): todo o código e desenvolvimento, do início ao fim, visa ser testado continuamente. Por isso a presença constante adoção de automação de testes nesta metodologia.

  • a adoção de releases curtos é outra característica. Isso possibilita que o sistema seja incrementado de maneira mais simples e objetiva, possibilitando um melhor trabalho.

  • código coletivo juntamente com refactoring ajuda a manter o código mais robusto e manutenivel, pois, quanto mais pessoas olharem o código, maior a possibilidade de achar bugs e assim tornar o código melhor.

É possível trabalhar com o Scrum e XP juntos?

Como foi possível ver, é possível trabalhar com os dois conjuntamente, tendo em vista que o foco do XP são boas práticas de programação, enquanto o Scrum se preocupa mais com a organização da equipe


Ciclo de vida de um projeto

As informações a seguir foram extraídas do conteúdo programático da Unigranrio.

Estabelecimento de uma sequencia de fases com o objetivo de realizar algo e garantir um bom gerenciamento.

O que é o PMBOK

Segundo o PMBOK, ciclo de vida:

Divide o desenvolvimento em fases que conectam o início de um projeto ao seu final, descrevendo trabalho técnico que deve ser realizado, as entregas que devem ser geradas em cada fase, o recurso envolvido e como controlar e aprovar cada fase.

O PMBOK define cinco grupos (fases) de processos:

  • Iniciação:

    • autoriza um projeto e o documenta
    • identifica as partes interessadas
  • Planejamento:

    • coleta requisitos
    • define o escopo do projeto
    • cria o EAP (abordado mais a frente)
    • estima custos entre outras coisas
    • define os padrões de qualidade
  • Execução:

    • materialização do que foi planejado
  • Controle:

    • monitora e controla a execução do projeto
    • realização do controle de qualidade
  • Encerramento:

    • lições aprendidas
    • projeto concluída

EAP - Estrutura Analítica do Projeto

Segundo o material da faculdade:

É uma decomposição hierárquica orientada à entrega do trabalho a ser executado pela equipe do projeto, para atingir os objetivos do projeto e criar as entregas necessárias.

A EAP organiza o projeto como um todo, divindindo o mesmo em menores partes, mais gerenciáveis, conhecidas como pacotes de trabalho.

Pacote de trabalho

É a menor parte gerenciável de um projeto. É o nível mais baixo do EAP, no qual é possível definir custos e prazos de maneira confiável.


Controle de Projetos

O controle de projetos é um processo necessário para garantir que os objetivos do projeto sejam alcançados através do monitoramento do progresso, e também visa identificar os desvios que devem ser tratados pela equipe.

Sendo assim, ele contem 3 fases:

  • Monitoramento do projeto
  • Avaliação do desempenho do projeto
  • Ajustar e Intervir no projeto para fazer as mudanças que o trarão de volta ao planejado

Cronograma

Para tanto, é necessário ferramentas que auxiliam a essa tarefa, assim surgem os cronogramas

Cronograma de marcos

  • Mostra somente o início e fim das tarefas definidas como marcos

Cronograma detalhado

  • Representa todos os marcos e atividades do projeto

Cronograma sumarizado

  • Exibe apenas as iformações da atividade e de sua periodicidade

Gráficos

Gráfico de Gantt

Permite a visualização do progresso do projeto. O objetivo é deixar a informação o mais transparente possível

Exemplo de gráfico


Teoria de testes

É a validação de requisitos propostos para o sistema. Validar aqui é utilizar o software exaustivamente, de maneira sistêmica buscando erros. O objetivo aqui é validar o software para que este vá para produção.

Porquê testar?

Testar é importante porque possibilita a visualização de erros antes que o software vá para a produção. Um outro argumento a favor de testar, que veremos mais a frente, diz respeito ao fato de que testando, se melhora a qualidade do software, pois se garante que o mesmo irá possuir confiabilidade, segurança e previsibilidade.

Técnicas de teste de software

Teste estrutural (caixa branca)

Visa testar o software pelo seu código, vendo se o mesmo possui a estrutura e coesão pretendidas. É o teste a nível de componente. Com esse teste é possível verificar se todas as estruturas possíveis foram percorridas e se o resultado foi o esperado depois disso.

Teste funcional (caixa preta)

Visa testar as funcionalidades do software visando saber se todas elas estão sendo atendidas. Ela é conhecida assim por não se importar em como o software foi construído, somente se suas funcionalidades foram atendidas.

Tipos de testes

Há vários tipos de testes em que o objetivo é testar o software desde do nível de código (mais baixo nivel) até o nível do usuário (mais alto nível).

  • Funcionalidade: busca erros a nível de funcionalidade
  • Interface: verifica a usabilidade do software
  • Desempenho: verifica se o software atende as espectativas quando o comportamento do ambiente é esperado. Ex: testar se um server http responde com um bom desempenho quando recebe uma quantidade esperada de requisições.
  • Carga (stress): visa testar o software com uma carga anormal de pressões do ambiente. Ex: testar se um server http responde com um bom desempenho quando recebe uma quantidade altamente anormal de requisições.
  • Sensibilidade: verifica se o sistema responde bem quando colocado em condições de instabilidade.
  • Automático (automatizado): é testar de maneira automático e contínua o software.
  • Regressão: visa retestar partes do software que foram modificadas buscando erros que possam ter surgido.
  • Alfa e beta: os testes alfa acontecem quando o software é testado pelo desenvolvedor no ambiente do usuário. Já o teste beta é o inverso, quando o software é testado pelo desenvolvedor no ambiente do usuário.
  • Aceitação: teste realizado pelo usuário para validação dos requisitos.
  • Segurança: teste realizado para verificar a fragilidade do sistema quanto a invasões.

Documento de plano de teste

Este documento visa fornecer um plano de como o software será testado e validado. Ele e fundamental por documentar o processo de teste como um todo. Tem-se um padrão internacional para criação de tais documentos que é a ISO IEEE-829.


Qualidade de Software

A qualidade de software é uma área de conhecimento da engenharia de software que tem o objetivo de garantir a qualidade do produto através da definição e normatização de processos de desenvolvimento.

Segundo Sommerville, há perguntas que norteiam a qualidade de software

  • Durante o processo de desenvolvimento os padrões de programação e documentação foram seguidos?
  • O software foi devidamente testado?
  • O software é suficientemente confiável para ser colocado em uso?
  • O desempenho do software é aceitável para uso normal?
  • O software é bem estruturado e compreensível?

O CMMI e o modelo em estágios

CMMI é uma evolução do CMM e procura estabelecer um modelo único para o processo de melhoria corporativo, integrando diferentes modelos e disciplinas. Então o CMMI se aplica a qualidade de software pois fornece às organizações uma direção sobre como ganhar controle de seu processo de desenvolvimento de software e como evoluir para uma cultura de excelência na gestão de software.

Os estágios do CMMI

  • Fase 1 - Inicial (Ad-hoc): O nível 1 não possui áreas de processo.
  • Fase 2 - Gerenciado: processos já implementados.
  • Fase 3 - Definido: padronização de projetos.
  • Fase 4 - Quantitativamente Gerenciado: Coleta de dados.
  • Fase 5 - Otimização: Criatividade e feedback são usados para otimizar os processos.

results matching ""

    No results matching ""