2 FUNDAMENTAÇÃO TEÓRICA
Este capítulo tem como objetivo apresentar os principais conceitos teóricos necessários ao desenvolvimento deste trabalho, como: modelos de ciclos de vida de desenvolvimento, processos de desenvolvimento, modelos de referência e normas, avaliação de software e por fim, sistemas especialistas.
2.1 MODELOS DE CICLO DE VIDA DE DESENVOLVIMENTO
Os modelos podem ser usados para representar toda a vida desde a concepção até o descarte ou para representar a parte da vida correspondente ao projeto atual. O modelo de ciclo de vida é composto por uma sequência de fases que podem se sobrepor e/ou iterar, conforme apropriado para o escopo do projeto, magnitude, complexidade e necessidades de mudanças e oportunidades. Cada fase é descrita com uma declaração de propósito e resultados. Os processos e as atividades do ciclo de vida são selecionados e empregados em uma fase para cumprir o propósito e os resultados da mesma (ISO/IEC 12207, 2008).
Um ciclo de vida de desenvolvimento de Software é a forma de construção do desenvolvimento de um produto de software. Geralmente as atividades relacionadas a cada fase são consideradas um subconjunto de ciclo de vida de desenvolvimento de sistemas. Existem modelos para tais processos, cada um descrevendo abordagens para uma variedade de tarefas ou atividades que ocorrem durante o processo (BHUVANESWARI; PRABAHARAN, 2013).
Modelos de ciclo de vida de desenvolvimento de software (SDLC3) descrevem as fases e a
ordem em que essas fases são executadas de modo a desenvolver um produto de software. As fases comuns são levantamento de requisitos, especificação, projeto, codificação, testes e manutenção (RAGUNATH, 2010; KHURANA, 2012; CLARA, 2013). Cada fase produz resultados finais exigidos pela próxima fase do ciclo de vida. Existe grande variedade de modelos de desenvolvimento de cada um com os seus procedimentos e passos específicos. (GUPTA; AGGARWAL, 2012).
Modelos de ciclo de vida de desenvolvimento de software são mecanismos que garantem que o software atenda aos requisitos estabelecidos. Estes modelos impõem vários graus de disciplina para o processo de desenvolvimento de software com o objetivo de tornar o processo mais eficiente e previsível. Nos dias de hoje, as empresas têm diversas opções de modelos a adotar para o desenvolvimento de software. Cada modelo satisfaz a necessidade específica de cada cliente (KHURANA; GUPTA, 2012).
O modelo de ciclo de vida de desenvolvimento de software refere-se às fases do processo de desenvolvimento. Na produção de um software há um ciclo de vida ou uma série de fases que, naturalmente, estão interligadas. O modelo de ciclo de vida descreve as fases envolvidas no desenvolvimento de software, a partir de um estudo de viabilidade (CLARA, 2013).
Dentre os modelos de ciclos de vida de desenvolvimento de software existentes na literatura, pode-se destacar os modelos cascata, evolucionário, espiral, incremental e incremental iterativo (PAULA FILHO, 2009; PRESSMAN, 2010; SOMMERVILLE, 2007).
As fases são, por vezes, decompostas em partes menores, descritas como atividades. Uma atividade pode ser considerada simplesmente como um conjunto de tarefas (ISO/IEC 12207, 2008).
2.1.1 Modelo Cascata
O modelo cascata é o modelo clássico da engenharia de software. Este modelo é um dos mais
antigos e é muito utilizado em projetos de grandes empresas (VERMA et al., 2013). Ainda, segundo
Verma et al. (2013), o modelo enfatiza o planejamento nas fases iniciais, pois evita falhas de projeto
antes mesmo que elas se desenvolvam. O modelocascata contém várias fases não sobrepostas, como
apresentado na Figura 2. O modelo começa com o estabelecimento de requisitos de sistema e requisitos de software e continua com o projeto arquitetônico, projeto detalhado, codificação, testes e manutenção. O modelo cascata serve como base para vários outros modelos de ciclo de vida (VERMA
et al., 2013).
De acordo com Ragunath et al. (2010), o modelo cascata possui as seguintes características:
Fases de especificação e desenvolvimento separadas e distintas;
30
A próxima fase só começa quando a primeira está completa.
A Figura 2, representa o modelo cascata de acordo com Verma et al. (2013).
Figura 2. Modelo Cascata
Fonte: Adaptado de Verma et al. (2013).
A lista a seguir detalha as etapas utilizadas no modelo Cascata, de acordo com a Figura 2:
1) Requisitos de Sistema: Estabelecem os componentes para a construção do sistema,
incluindo os requisitos de hardware, ferramentas de software e outros componentes necessários. Exemplos incluem decisões sobre hardware, como placas e as decisões sobre peças externas de software, tais como bancos de dados ou bibliotecas.
2) Requisitos de Software: Estabelecem as expectativas para a funcionalidade do software
e identifica quais os requisitos do sistema afetam o software. Análise de requisitos inclui determinar a interação necessária com outras aplicações e bancos de dados, requisitos de desempenho e requisitos de interface do usuário.
3) Projeto Arquitetônico: Determina o framework do sistema, necessário para atender os
requisitos específicos de software. Esta fase define os componentes principais e a interação dos mesmos. As interfaces externas e ferramentas utilizadas no projeto podem ser determinadas nesta fase.
4) Projeto Detalhado: Examina os componentes de software definidos na fase anterior e
produz uma especificação de como cada componente é implementado.
5) Codificação: Implementa a especificação detalhada do projeto.
6) Testes: Determina se o software atende aos requisitos especificados e encontra erros
7) Manutenção: Aborda os problemas e pedidos de melhorias após os lançamentos de software. Em algumas organizações, o controle de mudanças mantém a qualidade do produto, revendo cada alteração feita na fase de manutenção.
2.1.2 Modelo Evolucionário
O objetivo deste modelo é descrever um processo no qual o software pode ser desenvolvido a partir da evolução de protótipos iniciais. Este modelo é baseado na prototipação (ou prototipagem), que sugere uma abordagem baseada numa visão evolutiva do desenvolvimento de software. Esta abordagem produz versões iniciais (protótipos) com a qual podem ser realizadas verificações e experimentações, a fim de avaliar os requisitos antes que o software venha a ser desenvolvido por completo (BARROS, 2011).
Um protótipo tem por objetivo permitir que os usuários do software possam avaliar propostas dos desenvolvedores através de um desenho do produto final, ao invés da interpretação e avaliação do projeto somente com base em descrições. A prototipação também pode ser usada por usuários finais para descrever e comprovar os requisitos que os desenvolvedores não consideraram, e que pode ser um fator chave na relação comercial entre os desenvolvedores e seus clientes. A prototipação envolve as seguintes etapas (GUPTA; AGGARWAL, 2012):
1) Identificar os requisitos básicos, através de análise dos itens a serem implementados;
2) Desenvolver protótipo inicial, como forma de fazer uma apresentação gráfica do que
será desenvolvido;
3) Os clientes, incluindo usuários finais, examinam o protótipo e fornecem um feedback
sobre aditamentos ou alterações e
4) Usando o feedback tanto as especificações quanto o protótipo podem ser melhorados
(GUPTA; AGGARWAL, 2012).
Na Figura 3, segue uma representação de como é o ciclo de desenvolvimento para o modelo evolucionário.
32
Figura 3. Modelo Evolucionário Fonte: Sommerville (2007).
O modelo evolucionário ou prototipação, segundo Carvalho e Chiossi (2001) pode ser de dois tipos: desenvolvimento exploratório, em que o objetivo do processo é trabalhar junto com o usuário para descobrir seus requisitos, de maneira incremental até alcançar o produto final; e o protótipo descartável que objetiva entender os requisitos do usuário para obter uma melhor definição dos requisitos do sistema. O objetivo desta seção foi apresentar o modelo exploratório, uma vez que o foco do trabalho está no ciclo de desenvolvimento.
2.1.3 Modelo Espiral
O modelo em espiral é semelhante ao modelo incremental, com mais ênfase colocada na análise de risco. O modelo espiral tem quatro fases: Planejamento, Análise de Risco, Engenharia e Avaliação. Um projeto de software passa repetidamente através dessas fases através de iterações (neste modelo, chamadas de espirais). A espiral da linha de base, a partir da fase de planejamento, os requisitos estão reunidos e o risco é avaliado. Cada espiral subsequente baseia-se na linha de base da espiral. Os requisitos são recolhidos durante a fase de planejamento. Na fase de análise de risco, um processo é realizado para identificar soluções de risco e alternativas. Um protótipo é produzido no final da fase de análise de risco. O software é produzido na fase de engenharia, juntamente com o teste no final da fase. A fase de avaliação permite o cliente avaliar a saída do projeto antes que o projeto continue para a próxima espiral. No modelo de espiral, o componente angular representa progredir, e o raio da espiral representa custo (MUNASSAR; GOVARDHAN, 2010).
Figura 4. Modelo Espiral Fonte: Sommerville (2007).
2.1.4 Modelo Incremental
No modelo incremental, tem-se como primeiro incremento o núcleo do produto, onde apenas os requisitos básicos são definidos. Esse núcleo do produto é enviado para o cliente e um próximo incremento é desenvolvido (PRESSMAN, 2010).
O modelo incremental combina elementos do modelo em cascata aplicado de maneira incremental, conforme ilustrado na Figura 5. Cada sequência linear produz incrementos do software passíveis de serem entregues. Em cada incremento é realizado todo o ciclo do desenvolvimento de software, do planejamento aos testes do sistema já em funcionamento. Cada etapa produz um sistema totalmente funcional, apesar de ainda não cobrir todos os requisitos.
34
Figura 5. Modelo Incremental Fonte: Pressman (2010).
Pode-se notar pela Figura 5 que o modelo incremental aplica sequências lineares (como no modelo cascata) de forma escalonada, à medida que o tempo do projeto for avançando. Cada uma das sequencias lineares gera um incremento do software. Esses incrementos são entregáveis e estão prontos para o cliente.
2.1.5 Modelo Incremental e Iterativo
O modelo incremental corresponde à ideia de aumentar pouco-a-pouco o sistema em sucessivos incrementos. Por sua vez, o modelo iterativo corresponde à ideia de refinar o sistema pouco-a-pouco. A essência do sistema não é alterada, mas o seu detalhe vai aumentando em iterações sucessivas (SILVA; VIDEIRA, 2001).
O desenvolvimento iterativo é uma abordagem para a construção de software, em que o ciclo de vida total é composto de várias iterações em sequência. Cada iteração é um mini projeto independente composto por atividades como análise de requisitos, design, programação e teste (LARMAN, 2004)
O modelo Incremental e Iterativo, é a união destes dois modelos, onde para cada requisito é definido o que é mais importante e o que é menos importante, assim um número de incrementos para
entrega é definido, com cada incremento fornecendo um subconjunto das funcionalidades do sistema. Após a priorização dos incrementos, os requisitos são detalhados. Em seguida, iterações são criadas e um processo mini cascata é iniciado. Depois de desenvolvidas as iterações, as mesmas são entregues. A medida que novos incrementos são construídos eles vão sendo agregados aos já existentes (LARMAN, 2004; SOMMERVILLE, 2007).
Iterações são passos em fluxo de trabalho e incrementos são crescimentos do produto, conforme a Figura 6.
Figura 6. Diagrama do ciclo de vida Incremental e Iterativo Fonte: Larman (2004).
No modelo Incremental e Iterativo, mesmo que todas as fases tenham uma única iteração, o modelo ainda é diferente do Cascata, pois permite que cada iteração passe por todas as atividades. Tipicamente, este modelo de ciclo de vida consegue compreender tanto o desenvolvimento (ciclo inicial) de um produto quanto a sua manutenção (ciclos evolutivos).