Baixe o app para aproveitar ainda mais
Prévia do material em texto
45 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 ENGENHARIA DE SOFTWARE I Unidade II 3 PROCESSO DE SOftwaRE 3.1 Conceitos preliminares Weber et al. ([s.d.]), no artigo escrito para apresentar os resultados alcançados e as lições aprendidas com a implantação do modelo MPS.BR de melhoria do processo de software brasileiro, afirmam: Hoje, todos (no governo, academia e indústria) reconhecem a importância da melhoria dos processos de software para a competitividade, qualidade e produtividade sistêmica do setor de software brasileiro; mas poucos têm ideia da magnitude, complexidade e duração do esforço quando se trata de superar este desafio em um país com as dimensões e características do Brasil (WEBER et al, [s.d.]). Para tratar especificamente dos processos de software, é muito importante localizá-los no contexto da engenharia de software. Como já foi visto, a engenharia de software estuda e propõe soluções que abrangem todo o ciclo de vida de um produto de software. Para isso, deve incluir diversas facetas que se apresentam nesse contexto. A figura a seguir apresenta uma visão holística, em forma de pilares, do desenvolvimento de software, que abrange todos os aspectos envolvidos nos modelos de engenharia de software. Pr oc es so s M ét od os /T éc ni ca s Ciclo de vida de software (visão da ES) Fe rr am en ta s Qu al id ad e Ge re nc ia m en to Figura 4 – Visão holística do ciclo de vida do software Os pilares verticais apresentados na figura representam os principais aspectos envolvidos com o desenvolvimento e a manutenção de software, obtidos a partir de livros, materiais didáticos e modelos da engenharia de software e definidos conforme a seguir. 46 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 Unidade II • Processos de software: — são o estudo, os conhecimentos adquiridos e as práticas que apoiam as atividades envolvidas com o desenvolvimento e a manutenção de software durante toda a vida de um determinado produto de software; — precisam ser descritos, normatizados e divulgados para todas as pessoas da organização envolvidas com software; — têm como resultado do processo de software o produto de software, constituído de códigos programados que formam um sistema de informação, que é considerado o elemento central, já que realiza estruturas complexas e flexíveis que fornecem funções, utilidade e valor ao sistema; — incorporam as pessoas, os documentos e as regras de execução de suas atividades, inclusive, determinando as responsabilidades na sua execução. • Métodos e técnicas: — as atividades de um processo de software envolvem conhecimento na sua execução, disciplina e padrões predefinidos; — para isso, a engenharia de software propõe um conjunto de técnicas e métodos para que os desenvolvedores consigam executar suas tarefas com o máximo de produtividade e qualidade. • Ferramentas: — ao longo de quarenta anos, e ainda em evolução, têm surgido ferramentas de automação que dão suporte às atividades do processo de software; — ferramentas para desenho, descrições, testes de software e, principalmente, para os trabalhos colaborativos entre as equipes de desenvolvimento. • Qualidade: — com a pressão cada vez maior pela qualidade nos produtos de software, a engenharia de software vem propondo e desenvolvendo diversos modelos para a garantia da qualidade, tanto no nível dos processos quanto no dos produtos desenvolvidos e mantidos dentro das áreas de software das organizações. • Gerenciamento: — são todas as propostas para a gestão da área de software e para os projetos de software. A grande procura é pelo aumento da eficiência no uso dos recursos e na eficácia na produção de sistemas de informação; 47 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 ENGENHARIA DE SOFTWARE I — atualmente a gestão ou o gerenciamento de software vem atuando, também, no nível de governança, criando modelos e aplicando práticas próprias ou oriundas de outras áreas da engenharia que têm sucesso registrado e provado nos últimos tempos; — diversos aspectos do gerenciamento são abrangidos por esse pilar: gerência de equipe, gerência de projetos, gerência da qualidade, governança de TI etc. Esses pilares se inter-relacionam e trabalham juntos (ou de forma paralela) na busca das melhores práticas nos processos de software, como mostra a figura 5. Métodos e técnicas Qualidade de software Gerenciamento Ferramentas Processo de desenvolvimento Figura 5 – Relação dos pilares de sustentação da engenharia de software Lembrete Dominar o ciclo de vida de software significa conhecer todos os pilares e suas funcionalidades. A complexidade está em trabalhar ao mesmo tempo nos projetos executando os diversos papéis que permeiam esse modelo. Um aspecto importante a ser considerado é que o desenvolvimento de software envolve empresas de todos os tamanhos e quantidades de recursos disponibilizados. Os modelos brasileiros têm, ao longo do tempo, dado especial atenção às pequenas empresas de software, em virtude da seguinte constatação: as pequenas empresas de desenvolvimento de software possuem poucos recursos financeiros para investir na utilização das melhores práticas do mercado; diante disso, perdem competitividade no mercado nacional e no internacional, e deixam de atender a padrões de qualidade. Uma das alternativas que o mercado vem implementando é o uso de métodos ágeis que foram desenvolvidos exatamente para atender aos pequenos projetos e para pequenas equipes de desenvolvimento. Esses métodos procuram deixar os processos de software mais simples, menos burocráticos, porém não menos organizados, com o intuito de se construir softwares de forma mais 48 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 Unidade II rápida e com grande qualidade. A garantia de que as empresas praticam processos com qualidade tem advindo dos processos de certificação, tanto nacionais como internacionais. Saiba mais Existem diversas certificações, tanto para empresas quanto para profissionais de software, tais como: certificação em teste de software do Instituto IBQTS; certificações das normas ISO para as empresas da ABNT em processos de qualidade de software, como o CMMI-DEV, do SEI americano, e o modelo nacional de melhoria de processos MPS.BR etc. Todas essas organizações possuem portais disponibilizados na internet, que podem ser acessados para busca de maiores detalhes a respeito: <http://www.abnt.org.br>. <http: www.ibqts.com.br>. <http://www.sei.cmu.edu/>. <http://www.softex.br/mpsbr/>. 3.2 Etapas do processo de software Como acontece com todo produto industrial, o software tem um ciclo de vida que possui os seguintes elementos ou fases: • é concebido a partir da percepção das necessidades de uma área da organização ou de clientes- usuários, partindo de uma realidade; • é desenvolvido, transformando-se em um conjunto de itens entregáveis ao cliente ou ao usuário final; • entra em operação, sendo utilizado dentro de algum processo de negócio, por um tempo indeterminado, e podendo sofrer evoluções ao longo do tempo; • é retirado de operação, ao final de sua vida considerada útil. O esquema a seguir mostra uma visão do ciclo de vida de um produto de software que segue os mesmos princípios do ciclo de vida de qualquerproduto da manufatura ou industrial. 49 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 ENGENHARIA DE SOFTWARE I Criação Evolução Decadência Figura 6 – Visão do ciclo de vida de produtos de software No ciclo criação ocorre o desenvolvimento de uma aplicação ou de um sistema de informação. Existem diversas metodologias e modelos para representar esse ciclo inicial de software. Este possui um tempo predeterminado para ocorrer e é dependente do planejamento do software a ser construído. No ciclo evolução ocorre a alteração de um produto de software existente. Inclui melhorias, novas funcionalidades ou necessidades de adaptação para novas tecnologias. Não existe um tempo predeterminado para acontecer evolução em um produto de software, e isso vai depender do tipo de sistema, das funcionalidades às quais ele atende e/ou de eventos aleatórios que acontecem ao longo do ciclo de vida do produto. O ciclo decadência ocorre quando o produto de software atingiu um ponto em que não existem mais possibilidades para sua evolução. Ele entra em decadência por diversos motivos, tais como: obsolescência da tecnologia, mudanças de regras de negócio, mudanças radicais nas regras dos órgão públicos etc. O ciclo de vida do software apresentado na figura pode, ainda, ser dividido em diversas etapas detalhadas, e cada modelo existente, norma certificadora e/ou autor do mercado apresenta uma visão diferenciada dessas divisões. O quadro 3 apresenta visão típica da estrutura do ciclo de vida de um processo de software, mas que não necessariamente seria apresentada por outros autores ou modelos existentes. Quadro 3 – Visão do ciclo de vida de um produto de software Percepção das necessidades do cliente ou usuário final (requisitos do software) Desenvolvimento Concepção (análise do software – modelagem) Elaboração (definição da arquitetura do software) Construção Desenho inicial Implementação Desenho detalhado Codificação Teste de unidade Testes de integração Transição (entregas parciais e testes de homologação pelo cliente/ usuário final) Operação (utilização do software pelo cliente-usuário) Manutenção (melhorias do software e acertos de defeitos) Retirada (troca ou cancelamento do produto de software) 50 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 Unidade II Algumas considerações devem ser feitas sobre o processo de desenvolvimento de um produto de software: • o desenvolvimento de software deve ser feito por profissionais treinados e capacitados em engenharia de software e deve ocorrer dentro do conceito de projetos; • todo projeto de software deve ter uma data de início e uma de fim, uma equipe alocada e outros recursos de apoio, tais como arquitetos de sistemas, analistas de negócio, administradores de banco de dados, testadores etc.; • o cronograma do projeto deve ser feito a partir de métricas de estimativas e representa a execução de um processo de software; • todo processo bem-definido tem subdivisões que permitem avaliar o andamento de um projeto e corrigir seus rumos quando ocorrerem problemas; • todas as etapas e atividades do processo de software devem ser terminadas por meio de marcos predefinidos. Esses marcos são pontos de controle que representam estados significativos do projeto; • geralmente os marcos são associados a resultados concretos, como documentos, modelos ou porções do produto, que fazem parte do conjunto prometido ao cliente ou têm apenas utilização interna ao projeto; • o próprio produto final, o software propriamente dito, é um resultado associado ao marco de conclusão do projeto. Saiba mais Não deixe de ler: PEZZÉ, M.; YOUNG, M. Teste e análise de software: processos, princípios e técnicas. Porto Alegre: Bookman, 2008. Nesse livro, os autores fazem um estudo profundo com relação ao processo de teste de software e às diversas técnicas que permitem a melhoria de sua qualidade. PRADO, J. C. S. Gerenciando a qualidade de software com base em requisitos. Rio de Janeiro, [s.d.]. Disponível em: <http://www-di.inf.puc-rio. br/~julio/Slct-pub/Livro-qualidade.pdf>. Acesso em: 31 mar. 2014. Nesse ensaio, o autor discute a obtenção da qualidade no desenvolvimento de software. O autor faz uma análise do capítulo 17 do livro Qualidade de Software, de Rocha, Maldonado e Weber (2001), que dá uma visão simples e clara sobre os problemas e as alternativas na busca da qualidade em software. 51 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 ENGENHARIA DE SOFTWARE I Fechando o entendimento de processo de software, a próxima figura apresenta todos os aspectos envolvidos com o ciclo de vida de software. Processo de construção de software Artefatos Nível abstração Processo de gestão de software Controle do sistema Produtos Alto Médio Baixo Pessoas, organização, cultura Notação/linguagens Ferramentas (automação) Processo de qualidade Construção Construção Figura 7 – Visão holística do processo de software O subprocesso de construção é apresentado em camadas que indicam o nível de entendimento e abstração com relação aos domínios da tecnologia envolvida no processo. Quanto mais se desce nos níveis de conhecimento específico das tecnologias, mais os desenvolvedores deverão ter entendimento, e quanto mais alto nos níveis, maior será a necessidade de conhecimento do negócio. 3.3 Processo Pessoal de Software (PSP) Para um entendimento dos processos de software apresentados a seguir, é interessante observar como o Software Engineering Institute (SEI) os organiza. Essa visão é apresentada na figura a seguir. Modelo CMMI voltado para a capacitação organizacional Modelo PSP voltado para a capacitação de indivíduos Modelo TSP voltado para a capacitação de equipes ou times de desenvolvimento de software Organização Time 1 Time 2 Figura 8 – Visão dos processos como entendido pelo SEI 52 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 Unidade II De acordo com Maldonado e Fabbri (2001): • seguindo um modelo de gerenciamento de processos de software, as organizações têm alcançado melhorias significativas nos seus processos e modos de trabalho, e muitas perceberam que, para obter índices melhores, dependem do talento individual de seus funcionários; • como um grande modelo de qualidade tipo ISO 15504 ou Capability Maturity Model Integration (CMMI) poderia ser aplicado no trabalho individual ou em pequenas equipes de projeto, em que os profissionais de software pudessem, individualmente, aplicar princípios do nível máximo de capacidade e maturidade almejados? • surge, então) a proposta do Personal Software Process – PSP (2009), de propriedade do Instituto de Engenharia de Software (SEI – Software Engineering Institute), como recurso para melhoria e otimização do processo individual de trabalho. O modelo PSP (2009) sugere práticas e métodos para que o próprio indivíduo consiga identificar e corrigir seus pontos fracos. É uma sugestão para organizar e disciplinar os processos individuais e não diminui nem restringe a capacidade criativa dos indivíduos. O modelo foi originalmente derivado do modelo de qualidade Capability Maturity Model (CMM), e o autor desse processo é o mesmo, Whatts Humphrey, que adaptou 12 das 18 áreas-chave de processo CMM (Key Process Area – KPA) da época ao trabalho individualde profissionais de software. Aplica conceitos importantes de engenharia de software em nível individual para desenvolver softwares, e não apenas para codificar programas. O modelo PSP (2014) faz uso de um conjunto de sete etapas sequenciais e progressivas, cada uma com um conjunto de roteiros, formulários e gabaritos associados. É apoiado por um livro-texto e um curso introdutório oferecido por esse mesmo livro (exercícios de programação e relatórios), principal veículo de aprendizado. De acordo com Humphrey, autor do PSP, à medida que os profissionais de desenvolvimento de software aprendem a avaliar seus trabalhos, a analisar essas medidas e a definir e atingir metas de melhoria, passam a enxergar os benefícios de usar o processo definido e são motivados constantemente a isso. Observação De acordo com o SEI (2014), a qualidade de um software é governada pelo indivíduo que o desenvolve (rotinas ou componentes) e exige conhecimento, disciplina e comprometimento. O modelo PSP tem os seguintes objetivos básicos: • demonstrar os princípios do processo individual; • determinar a situação do processo atual de software individual; 53 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 ENGENHARIA DE SOFTWARE I • elaborar um processo de planejamento para desenvolvimento de software; • medir o tamanho do software, como parte do processo de planejamento; • fazer uma estimativa antecipada do tamanho do software; • fazer uma estimativa do cronograma e dos recursos necessários para o software; • realizar medições apropriadas do processo individual; • fazer revisões significativas de projeto e código; • executar gerenciamento da qualidade do software; • executar projeto de software de modo mais formal; • verificar o projeto usando métodos como máquinas de estados finitos e rastreamento de programa; • aumentar a escala de PSP para problemas maiores; • ajudar a elaborar planos mais precisos; • determinar as etapas necessárias para melhorar a qualidade do produto; • estabelecer um padrão de referência para se medir as melhorias do processo pessoal; • determinar o impacto das mudanças sobre a eficiência profissional. A figura a seguir apresenta a estrutura visual do modelo PSP (2009). Processo cíclico Qualidade pessoal Planejamento pessoal Medição pessoal PSP3 Desenvolvimento cíclico PSP 2 Revisões de código Revisões de projeto PSP1 Estimativa de tamanho Relatório de teste PSP 0 Processo atual Registro de tempos e defeitos PSP 2.1 Gabaritos de projeto PSP 1.1 Planejamento de tarefa Planejamento deescalonamento PSP 0.1 Padrão de codificação Medição de tamanho Proposta de melhoramento do processo Figura 9 – A evolução do processo PSP (2009) 54 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 Unidade II O PSP 0 representa o processo de construir software que permanece o mesmo. Os profissionais de software aprendem a aplicar os formulários e roteiros do PSP aos seus trabalhos pessoais, medindo tempo e defeitos de desenvolvimento, defeitos estes injetados ou removidos. O PSP 0.1 adiciona um padrão de codificação, medição de tamanho e formulário de proposta de melhoramento do processo (PMP). Os profissionais de software registram no PMP os problemas, os tópicos importantes para discussão e argumentação e as ideias a serem usadas futuramente, aperfeiçoando, assim, os seus processos pessoais. O PSP 1 introduz o Proxy-Based Estimating Method (Método PROBE) para estimar tamanhos e tempos de desenvolvimento para novos programas, com base nos próprios dados individuais, utilizando regressão linear para calcular parâmetros de estimativa e gerar intervalos de confiança para indicar a qualidade dessa estimativa de tamanhos e tempos. Já no PSP 1.1, adicionam-se o escalonamento e o planejamento de tarefas. O PSP 2 introduz o gerenciamento de defeitos. Com esses dados reunidos previamente, os profissionais de software constroem e usam listas de verificação para revisão de projeto e código (checklists). O PSP 2.1 introduz as técnicas de especificação de projeto e análise em acréscimo à prevenção de defeitos, análise e comparação de processos. Os profissionais de software aprendem a avaliar e melhorar a eficiência individual. No PSP 3, os profissionais de software combinam múltiplos PSP 2.1, de uma forma cíclica, para construir módulos com milhares de linhas de código (Kilo Lines of Code – KLOC). Exploram os métodos de verificação de projeto, assim como os princípios e métodos de definição de processo. Lembrete O PSP, diferentemente do CMMI, que atua no nível de ambiente organizacional (áreas de processos), equipa os profissionais para fazerem tal trabalho de alta qualidade e para participarem ativamente no melhoramento do processo de software da organização. No paradigma do PSP, cada desenvolvedor estabelece metas pessoais, define os métodos que usará, mede seu trabalho, analisa seus resultados e os ajusta para se aproximar das metas. O PSP tem sido usado com sucesso em atividades pessoais estruturadas, tais como escrever um livro e desenvolver um autotreinamento. De acordo com o PSP (2009) é muito útil, caso seja empregado em conjunto com o modelo de qualidade CMMI. Tem mostrado resultados significativos: • aumento de 30% na produtividade; 55 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 ENGENHARIA DE SOFTWARE I • precisão em estimativas aumentada para +/- 10%; • injeção de erros/defeitos no desenvolvimento reduzido em 60%; • erros/defeitos, encontrados no teste de unidade, reduzidos em 75%. Observação Como conclusão, pode-se dizer que o PSP é um processo definido para ajudar o desenvolvedor a fazer melhor o seu trabalho, bem como a ajustá- lo e estendê-lo para atender às suas necessidades futuras. Saiba mais O modelo PSP é de propriedade do Instituto de Engenharia de Software ou Software Engineering Institute (SEI). Para saber mais, acesse o site, disponível em:<http://www.sei.cmu.edu>. 3.4 Processo para equipe de software (tSP) O Team Software Process (TSP) (2010), de acordo com o SEI, significa um guia ou framework para: • planejar e gerenciar um projeto em equipe; • processos definidos; • papéis distribuídos; • princípios de teamwork e teambuilding; • baseado no PSP; • construído a partir de métodos comprovados de engenharia e trabalho em equipe. Uma equipe é um grupo de pessoas que deve estar comprometido com um objetivo comum e dispor de um quadro de trabalho comum; é composta de, no mínimo, duas pessoas, e cada uma tem um papel específico atribuído. A conclusão da missão requer alguma forma de dependência entre os membros do grupo. 56 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 Unidade II Para serem eficazes, as equipes devem estar devidamente qualificadas e ser capazes de funcionar como unidades coesas. Equipes eficazes têm certas características comuns: • os membros são qualificados; • o objetivo da equipe é importante, definido, visível e realista; • os recursos são suficientes para o trabalho; • os membros estão motivados e empenhados a cumprir o objetivo da equipe; • os membros cooperam uns com os outros e se apoiam; • os membros são disciplinados em seu trabalho. Outra característica das equipes eficazes é sua capacidade de inovar. A inovação é mais do que pensar somente em ideias brilhantes,já que exige criatividade e muito trabalho. Praticamente todas as tarefas de engenharia são parte de um esforço inovador, e equipes inovadoras devem ter pessoas qualificadas e capazes, além de muito motivadas. Elas devem ser criativas, flexíveis e disciplinadas. Equipes ou times devem se esforçar para cumprir prazos apertados, enquanto se ajustam às novas necessidades. Devem também manter os custos e os horários sob controle, mantendo a gerência informada de seu progresso; são compostas por pessoas que podem sentir falta de confiança no projeto. Quando os engenheiros não se sentem seguros e respeitados, muitas vezes, sentem-se hostilizados e manipulados. Para estabelecer essas condições, são dez as orientações do TSP (2010), no modelo do SEI: • os membros da equipe estabelecem metas comuns e definem os papéis dos membros; • a equipe desenvolve uma estratégia; • os membros da equipe definem um processo comum para o seu trabalho; • todos os membros participam na elaboração do plano, e cada um sabe o seu papel; • a equipe negocia o plano com a gerência; • os membros fazem o trabalho da maneira que planejaram; • a equipe se comunica livremente e com frequência; • forma um grupo coeso: os participantes cooperam, e todos estão empenhados em atingir a meta; 57 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 ENGENHARIA DE SOFTWARE I • os engenheiros conhecem sua situação, buscam o feedback sobre seu trabalho e têm uma liderança que sustenta a sua motivação; • essas condições não são óbvias: o TSP fornece orientação explícita do que as organizações necessitam para construir equipes de engenharia eficazes. De acordo com o modelo TSP, cada papel nesse processo é considerado como uma espécie de gerente e será responsável por uma lista de tarefas. O gerente de desenvolvimento decide o número de iterações que a equipe precisa executar na construção do software e desenvolve uma estratégia para fabricar o produto; o gerente de planejamento acompanha as iterações planejadas, para auxiliar a equipe na estimativa e no balanceamento de carga; o gerente de qualidade produz artefatos como o plano de gerência de configuração e os testes de aceitação. O gerente de processo deve ter respostas para a maioria das questões sobre o processo. É responsável pela alocação de recursos, pela execução de reuniões e pela gerência de riscos, tendo, no entanto, responsabilidade menor nos demais processos. Ele precisa da participação de diversos atores na organização: os gerentes, os desenvolvedores, os usuários e os clientes. O desenvolvimento de software é colaborativo, no sentido de que o trabalho deve ser alinhado e sintonizado. O objetivo é capacitar a equipe para que se gerencie, distribuindo entre si as responsabilidades pelas atividades gerenciais e de apoio; deve ocorrer em ciclos incrementais, de forma que mitigue os riscos de cada um dos ciclos (launch). Para tanto, antes de se lançar no desenvolvimento, a equipe deve traçar suas estratégias, conhecendo suas forças, disponibilidades e fraquezas, e só depois disso elaborar o planejamento e a execução de desenvolvimento. A missão do framework TSP é ser simples e baseado nos fundamentos do PSP, para: • utilizar o modelo de ciclo de vida incremental (ciclos); • estabelecer medidas-padrão para qualidade e performance; • prover métricas precisas para equipes e desenvolvedores; • usar avaliações de papéis e de equipe; • requerer disciplina de processo; • prover orientações para solução de problemas com equipes. 58 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 Unidade II A figura a seguir apresenta uma visão holística dos princípios do modelo TSP. Arcabouço (framework) de medição integrada Personal Software Process (PSP) Gerência da qualidade Coaching (tutorial) Equipes autogerenciáveis Fatores - princípios do TSP Figura 10 – Visão holística dos princípios do TSP Os princípios-base do TSP são: • estabelecimento de objetivos e papéis comuns; • definição de um processo comum de trabalho; • envolvimento de todos na produção do plano; • negociação do plano entre o time e a gerência; • revisão e aceite final pela gerência; • comunicação livre e frequente; • exigência de que a pessoa tenha sido previamente treinada em PSP; • possibilidade de formar a base para a adoção do CMMI. Com relação aos indicadores, o TSP apresenta um conjunto necessário para a avaliação dos produtos desenvolvidos pelas equipes de projeto. Os indicadores apresentados pelo modelo são: • precisão de estimativas; • intervalos de previsibilidade (tamanho, esforço e defeitos); • distribuição de esforço e defeitos nas fases; • remoção de defeitos nas fases; • produtividade; 59 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 ENGENHARIA DE SOFTWARE I • porcentagem de reúso; • índice de desempenho; • valor agregado (earned value); • densidade de defeitos total e por fase; • eficácia dos filtros de defeitos; • custo da qualidade; • perfis de qualidade; • índice de perfis de qualidade; • taxas de revisão; • rendimento do processo; • rendimento das fases. Com relação ao processo TSP (2010), o SEI afirma que: • é baseado na melhoria de processos de uma equipe de desenvolvimento, usando a noção de time (grupo de pessoas) com o mesmo objetivo; • provê um conjunto de scripts de processos, formulários, métodos, métricas; • esses elementos guiam os desenvolvedores a criarem equipes eficazes e estabelecer metas e planos para a equipe acompanhar e reportar o trabalho. Para o TSP, o desenvolvimento de software está dividido em oito fases, que estão definidas como: • lançamento da equipe do projeto; • desenvolvimento da estratégia; • desenvolvimento do plano; • definição dos requisitos; • design de alto nível; • implementação; • testes de integração e de sistema; • post mortem. 60 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 Unidade II Oferece, ainda, métodos prontos para serem utilizados de forma que não precisem ser reinventados ou descobertos e possam, portanto, ser reutilizados, diminuindo, assim, o tempo do projeto. O TSP baseia-se no PSP, utilizando as medidas de tamanho, tempo e defeito, e, ainda, adiciona a data de término das tarefas. Para todas as medidas e projeções, os dados são coletados individualmente e, ainda, são analisados semanalmente pela equipe, para que esta possa ter ideia do andamento do projeto em relação ao seu plano. Com relação à estrutura do modelo TSP, tem-se: • que o primeiro requisito para aplicações do TSP é que cada membro da equipe tenha sido treinado no PSP; • que este é o primeiro passo para montar uma equipe de trabalho no TSP; • o TSP adiciona elementos necessários para que se possa realizar o trabalho em equipe, como mostrará a próxima figura; • todos os membros da equipe devem trabalhar para executar uma determinada tarefa, que, no TSP, são denominadas de lançamentos do time. A figura que segue apresenta a estrutura do TSP, a partir da proposta do autor Koscianski e Soares (2007). Times integrados Disciplinas de engenharia Disciplinas de times Disciplinas de administração PSP Aquisição de habilidades Planos pessoais Medidas de qualidade Valores aprendidos Métodos de planejamentoProcessos definidos Dados de proocesso TSP Construção de times Comprometimento Possessão do plano Possessão da qualidade Papéis do time Planos agressivos Detalhamento do plano Objetivos do projeto Recursos do time TSP Trabalho de times Prioridade da qualidade Revisão da qualidade Respeito dos processos Gerência de mudanças Custo da qualidade Comunicação Revisão de status Figura 11 – Estrutura do TSP da SEI 61 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 ENGENHARIA DE SOFTWARE I Como mostra a figura, é necessário que o pessoal tenha formação no PSP antes de dar início à implantação do modelo TSP. Os engenheiros de software devem ser treinados nas habilidades do PSP antes que possam participar das equipes ou times do TSP. Equipes TSP são relançadas periodicamente, pois o processo segue uma estratégia de desenvolvimento iterativo e evolutivo. Os relançamentos periódicos são necessários para que cada fase ou ciclo possam ser planejados com base nos conhecimentos adquiridos no ciclo anterior. O relançamento também é necessário para atualizar os planos dos engenheiros em detalhes, os quais, normalmente, são necessários apenas por alguns meses. No lançamento TSP, as equipes fazem um plano global e outro detalhado, por cerca de três a quatro meses. Após os membros (todos ou a maioria) da equipe terem completado a fase do projeto ou ciclo, é feita uma revisão do plano global e, se necessário, um novo plano detalhado para cobrir os próximos três ou quatro meses. Eles são guiados a fazer isso pelo processo de relançamento do TSP. O lançamento da equipe compreende a fase inicial do processo TSP, na qual são discutidos vários temas, durante os quatro dias de duração dessa fase. Segundo Koscianski e Soares (2007), o processo de lançamento é composto por uma série de atividades de planejamento do trabalho a ser realizado. Após o lançamento da equipe, é preciso que esta desenvolva uma estratégia de trabalho. Essa etapa tem como principal objetivo minimizar o risco de o desenvolvimento exceder o tempo programado para a conclusão do projeto. Para o modelo, definiram-se os seguintes passos: • no primeiro ciclo de desenvolvimento, deve-se fabricar um produto executável com as funções mínimas do produto final; • esse produto, resultante do primeiro ciclo, deve ser uma base para o restante do produto, para que possa facilmente ser estendida; • em todos os ciclos, gerar um produto com alta qualidade, permitindo que este possa ser facilmente testado; • ter uma arquitetura modular, para que membros da equipe possam trabalhar independentemente. Com relação ao desenvolvimento do plano, o modelo indica que o planejamento ajuda os engenheiros da equipe a trabalharem de maneira mais eficiente, com mais produtividade e sem desperdício de tempo. Além disso, algumas atividades poderão ser esquecidas, se não forem planejadas. Portanto, planejar um projeto não é uma tarefa muito fácil, pois projetos grandes e complexos consomem muitas horas de planejamento. Com a utilização do TSP, é possível analisar a sobrecarga de tarefas de alguns membros da equipe, enquanto outros estão mais “folgados”. Isso faz aqueles que não estão sobrecarregados terem, em alguns casos, de esperar pela conclusão do trabalho daqueles sobrecarregados, atrasando, assim, o grupo. Para 62 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 Unidade II resolver esse problema, o TSP propõe que, nessa fase de planejamento, seja feito um balanceamento de trabalho entre os membros da equipe. Já na fase de implementação, está definida a etapa de construção das partes do produto, e, consequentemente, o produto em sua totalidade. O desenvolvimento de cada parte projetada na fase anterior será, preferencialmente, realizado por quem a projetou. Porém, mesmo que o engenheiro seja o mais indicado para programá-la, isso pode ser diferente, pois a estratégia que será adotada não é imposta pelo TSP. Observação O SEI (2014) relatou que, antes do TSP, a empresa Teradyne tinha, nos testes de integração, testes do sistema, testes de campos e testes em clientes, em média, vinte defeitos por KLOC (mil linhas de código). O projeto TSP, primeiro, reduziu estes níveis para um defeito por KLOC (mil linhas de código). Uma vez que o custo médio é de 12 horas de engenharia para encontrar e corrigir cada defeito, a Teradyne economizou 228 horas de engenharia para cada KLOC de programa desenvolvido. 4 MODELOS DE CICLO DE VIDa DE SOftwaRE 4.1 Introdução a ciclo de vida de software De acordo com Gordon e Gordon (2006), o ciclo de vida do desenvolvimento de sistemas (Systems Development Life Cycle – SDLC), conhecido também como ciclo de vida do software, refere-se aos estágios de concepção, projeto, criação e implementação de um Sistema de Informação (SI). Um desdobramento possível para SDLC é mostrado na figura a seguir. Levantamento das necessidades Desenvolvimento Manutenção Implementação Análise das alternativas Projeto Figura 12 – Ciclo de vida do desenvolvimento de software (SDLC) Analisando-se as atividades propostas para o ciclo SDLC, com base em Gordon e Gordon (2006), tem-se o exposto a seguir. 63 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 ENGENHARIA DE SOFTWARE I • Levantamento de necessidades: — essa atividade compreende diversas tarefas para o entendimento e o levantamento das necessidades da área de negócio, dos clientes ou dos usuários que precisam de um software de automação de suas atividades; — tem como resultados mais importantes a lista de requisitos do sistema a ser construído, as informações que serão tratadas e armazenadas e, se necessário, um protótipo das interfaces entre os usuários e o sistema de software. • Análise de alternativas: — essa atividade consiste na identificação e na avaliação de alternativas sistêmicas que melhor atendam aos requisitos do software a ser construído; — seria interessante, para que essa atividade fosse padronizada e a organização possuísse uma arquitetura de referência, que a base fosse para todas as soluções de tecnologia de todos os sistemas da empresa. • Projeto: — trata da construção das especificações detalhadas para o projeto selecionado; — essas especificações incluem projeto das interfaces, banco de dados, características físicas do sistema, tais como número, tipos e localizações das estações de trabalho, hardware de processamento, cabeamento e os dispositivos de rede; deve especificar os procedimentos para testar o sistema completo antes da instalação. • Desenvolvimento: — inclui o desenvolvimento ou a aquisição do software, a provável aquisição do hardware e o teste do novo sistema. • Implementação: — ocorre após o sistema ter passado satisfatoriamente por testes de aceitação. O sistema é transferido do ambiente de desenvolvimento para o ambiente de produção; — o sistema antigo (se existir) deve migrar para o novo. • Manutenção: — refere-se a todas as atividades relacionadas a um sistema depois que ele é implementado, devendo incluir atividades como a correção de software que não funcione corretamente, a adição de novos recursos aos sistemas em resposta às novas demandas dos usuários etc. 64 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 Unidade II Observação Não há modelo de SDLC uniformemente aceito. Alguns combinam desenvolvimentoe implementação em uma única etapa. Outros combinam o levantamento e a análise das necessidades, também, em uma única etapa. Alguns modelos dividem o projeto em lógico e físico. 4.2 Os principais modelos de ciclo de vida de software 4.2.1 O modelo codifica-remenda O modelo codifica-remenda significa um processo de ciclo de vida de software mais caótico. Partindo apenas de uma especificação ou simplesmente de uma reunião de trabalho, os desenvolvedores começam imediatamente a codificar, remendando, à medida que os erros vão sendo descobertos. Não existe nenhum processo definido e nenhum é seguido. Esse modelo, provavelmente e infelizmente, seja o ciclo de vida mais usado na atualidade. Para alguns desenvolvedores, ele é atraente porque não exige nenhuma sofisticação técnica ou gerencial. Todavia, é considerado um modelo de alto risco, impossível de ser gerenciado e que não permite assumir compromissos confiáveis. Esse modelo persistiu durante algumas décadas, e, como não existia separação de papéis, todos faziam um pouco de tudo. Às vezes, uma única pessoa analisava, codificava e testava um sistema inteiro. Na busca de eliminar os problemas causados pelo método codifica-remenda, foram sendo criadas as metodologias conhecidas hoje como tradicionais, sendo a mais conhecida a chamada cascata, que é, também, referida como o modelo clássico de desenvolvimento de software. 4.2.2 O modelo cascata (waterfall) O modelo clássico ou cascata, que também é conhecido por abordagem top-down, surgiu na década de 1970. Até meados da década de 1980, foi o único modelo com aceitação geral; derivado de modelos de atividade de engenharia com o fim de estabelecer ordem no desenvolvimento de grandes produtos de software. Comparado com outros modelos, este é mais rígido e menos administrativo. Um dos mais importantes, é referência para muitos outros, servindo de base para projetos modernos. A versão original desse modelo foi melhorada e retocada ao longo do tempo, e este continua a ser muito utilizado hoje em dia. Grande parte do sucesso do modelo cascata está no fato de ser orientado para a documentação. No entanto, esta abrange mais do que arquivo e texto: incluindo representações gráficas e mesmo simulações. Uma abordagem que incorpora processos, métodos e ferramentas deve ser utilizada pelos criadores de software. Janete Highlight Janete Highlight Janete Highlight Janete Highlight 65 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 ENGENHARIA DE SOFTWARE I O paradigma do ciclo de vida clássico demanda uma abordagem sistemática e sequencial para o desenvolvimento de software. Começa no nível do sistema e progride, através da análise, do design, da codificação, do teste e da manutenção, como apresentado na figura a seguir. Engenharia de sistemas Análise Design Codificação Testes Manutenção Figura 13 – Visão do ciclo clássico ou cascata de desenvolvimento de software Problemas encontrados no ciclo clássico de desenvolvimento de software são fartamente documentados pelos autores consagrados da engenharia de software: • os projetos reais raramente seguem o fluxo sequencial que o modelo propõe; ocorrem interações, bem como voltas a níveis anteriores, provocando problemas na aplicação do paradigma; • frequentemente os usuários têm dificuldade de estabelecer explicitamente todos os requisitos do software, acompanhada das incertezas naturais que existem no início de muitos projetos; • uma versão do software somente estará disponível quando todo o sistema for definido e desenvolvido; qualquer alteração pode ocasionar um desastre no desenvolvimento do sistema; isso requer paciência dos usuários. Observação Esses problemas são reais, porém o paradigma do ciclo clássico de software tem um definitivo e importante lugar na engenharia de software: proporciona um modelo real para a colocação e uso dos métodos para analisar, projetar, codificar, testar e manter softwares. 4.2.3 O modelo incremental De acordo com Pressman (2006), Sommerville (2007), Paula Filho (2003) e outros autores, o modelo incremental seria a aplicação do modelo cascata por diversas vezes em um mesmo projeto. Isso ocorre ao se dividir o desenvolvimento de um sistema complexo em pequenas partes, o que pode ocorrer de forma sequencial, parte a parte ou em paralelo, com equipes diferentes desenvolvendo partes diferentes. 66 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 Unidade II Para apresentar o modelo, é utilizada uma visão do ciclo de vida em cascata considerada por Peres, Laskoski e Radaelli (2014), mostrada na próxima figura. Comunicação Planejamento Modelagem Construção Implantação Figura 14 – Modelo em cascata As fases desse modelo, de acordo com Peres, Lakosky e Radaelli (2014, p. 2) significam: • comunicação: consiste de atividades para o levantamento dos requisitos do sistema e envolve a comunicação entre os desenvolvedores e o cliente; • planejamento: consiste de atividades para o estabelecimento de um plano de desenvolvimento do sistema ou projeto de software. Descreve, também, as técnicas a serem conduzidas, os riscos prováveis, os recursos que serão necessários, os produtos de trabalho a serem produzidos e um cronograma; • modelagem: composta de atividades que incluem a criação de modelos que permitem ao desenvolvedor e ao cliente entender melhor os requisitos do software e o projeto que vai satisfazer a esses requisitos; • construção: essa fase combina a geração de código e os testes necessários para revelar erros no código implementado; • implantação: o software é entregue ao cliente, que avalia o produto e fornece feedback com base na avaliação. Se essas fases se repetirem e pequenos pedaços do software forem sendo liberados ou agrupados para serem entregues ao cliente, teremos o que se chama de modelo incremental, mostrado na figura a seguir. 67 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 ENGENHARIA DE SOFTWARE I Comunicação Comunicação Comunicação Planejamento Planejamento Planejamento Modelagem Modelagem Modelagem Construção Construção Construção Implantação Implantação Implantação Incremento 1 Incremento 2 Incremento n Entrega do 1º incremento Núcleo do produto Fu nc io na lid ad es e c ar ac te rís tic as d o so ft w ar e Entrega do 2º incremento Entrega do n incremento Figura 15 – Modelo incremental Vantagens apontadas pelos autores para o modelo incremental em relação ao modelo em cascata puro: • entregas parciais facilitam a identificação e a correção de erros entre os componentes do software; • necessidades não especificadas nas fases iniciais podem ser desenvolvidas nos incrementos; • cada iteração produz um conjunto de itens utilizáveis (se possível); • os feedbacks de iterações anteriores podem ser usados nos próximos incrementos; • os incrementos podem ser desenvolvidos por menos profissionais; • a entrega dos incrementos permite o cumprimento do prazo especificado. Como todo modelo conceitual, porém, o modelo incremental apresenta algumas desvantagens: • o número de iterações não pode ser definido no início do processo, o que pode não ser aceito pelo cliente; • o fim do processo também não pode ser previamente definido; 68 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io -2 5/ 04 /2 01 4 Unidade II • o gerenciamento e a manutenção do sistema completo podem se tornar complexos, principalmente, se ocorrem durante o desenvolvimento dos incrementos; • o gerenciamento do custo do projeto é mais complexo, em razão do número de iterações que pode acabar com a verba disponível. 4.2.4 O modelo Rapid Application Development (RAD) Na busca de produtividade e qualidade no processo de desenvolvimento de sistemas, especialistas e autores da engenharia de software, baseados nos problemas do ciclo clássico (cascata), na evolução das técnicas estruturadas, no impacto das linguagens de programação orientadas a objetos e no surgimento dos conceitos de qualidade, no final da década de 1980 e início da década de 1990, propuseram um novo paradigma denominado de Rapid Application Development (RAD). A metodologia RAD propõe um conjunto de elementos que criaram um novo paradigma incluindo a prototipação interativa, o desenvolvimento espiral e o uso intensivo de ferramentas de automação do desenvolvimento (CASE), com uso de linguagens de quarta geração, orientação a objetos e modelos- padrão de desenvolvimento, como a Unified Modeling Language (UML). O RAD foi originalmente utilizado por James Martin, em seu livro RAD, publicado em 1991. De acordo com Ramos (2009), tem-se sobre o modelo RAD: • é sequencial linear e enfatiza um ciclo de desenvolvimento extremamente curto; • o desenvolvimento rápido é obtido usando uma abordagem de construção baseada em componentes; • os requisitos devem ser entendidos corretamente, e o alcance do projeto deve ser restrito; • é usado principalmente para aplicações de sistemas de informação; • cada função principal pode ser direcionada para uma equipe RAD separada e, então, integrada para formar o todo. A próxima figura mostra uma visão gráfica do modelo RAD proposta por Ramos (2009). 69 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 ENGENHARIA DE SOFTWARE I Modelagem do negócio Modelagem do negócio Modelagem do negócio Modelagem dos dados Modelagem dos dados Modelagem dos dados Modelagem do processo Modelagem do processo Modelagem do processo Geração de aplicação Geração de aplicação Geração de aplicação Teste e modificação Teste e modificação Teste e modificação Equipe nº1 60 a 90 dias Equipe nº2 Equipe nº3 Figura 16 – O modelo RAD Alguns autores consideram que nem todos os tipos de aplicação são apropriados para o modelo RAD. Para que este seja aplicado corretamente, as seguintes considerações devem ser levadas em conta: • a aplicação deve permitir uma efetiva modularização, com ciclos curtos de desenvolvimento; • se a aplicação exigir alto desempenho e se este for obtido sintonizando as interfaces dos componentes, a abordagem RAD poderá não funcionar a contento; • a prototipação interativa e viva, aliada ao desenvolvimento incremental e não linear, são aspectos extremamente positivos para atingir os objetivos do desenvolvimento rápido; • a adoção da orientação a objetos ou o uso de linguagens de quarta geração é também um fator altamente positivo, principalmente, na aplicação de reúso de código; • o modelo RAD propõe-se a ser um método leve, flexível e adaptável às novas tecnologias emergentes que considerem o RAD um processo organizado, gerenciado e padronizado. Saiba mais Consulte o material do autor Ricardo Argenton Ramos, da Univasf, que detalha os modelos apresentados nesta unidade. RAMOS, R. A. Processos de desenvolvimento de software. Univasf, Juazeiro, 2009. Disponível em: <http://www.univasf.edu.br/~ricardo. aramos/disciplinas/ESI2009_2/Aula02.pdf>. Acesso em: 13 fev. 2014. 70 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 Unidade II 4.2.5 Os modelos evolucionários Os modelos evolucionários ou modelos evolutivos, como o próprio nome sugere, são os explicitamente projetados para acomodar um produto de software que evolui com o tempo. A cada iteração, os modelos evolucionários ou evolutivos têm por objetivo produzir uma versão melhor e mais completa do software. Dois modelos se encaixam nessa definição: o de prototipagem e o espiral. 4.2.5.1 O modelo de prototipagem A prototipação é uma ferramenta que pode ser usada em qualquer um dos modelos apresentados até agora. Essa técnica auxilia o engenheiro de software e o cliente a entenderem melhor o que deve ser construído quando os requisitos estão confusos. Um protótipo é uma espécie de versão preliminar do software. Pode ser um software ou um plano no papel e concentra-se na representação dos aspectos do software que são visíveis para o cliente. O objetivo é entender os requisitos do usuário e, assim, obter melhor definição dos requisitos do sistema. Possibilita que o analista crie um modelo (protótipo) do software que será construído. Esse protótipo é apropriado para quando o cliente não tiver definido detalhadamente os requisitos, mas tiver prazo curto para o desenvolvimento. O protótipo dá maior assertividade ao projeto com relação às necessidades do cliente ou usuário. A figura a seguir dá uma visão do funcionamento do modelo de prototipagem. Obter requisitos Elaborar projeto rápido Avaliar protótipo Construir protótipo Refinamento do protótipo Figura 17 – Modelo de processo de prototipagem A função da atividade obter requisitos é permitir que desenvolvedor e cliente definam os objetivos gerais do software, identifiquem quais requisitos são conhecidos e as áreas que necessitam de definições adicionais; elaborar projeto rápido é aquela em que se faz a representação dos aspectos do software que são visíveis ao usuário por meio de abordagens de entrada e formatos de saída; a atividade construir 71 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 ENGENHARIA DE SOFTWARE I protótipo é a implementação rápida do projeto; avaliar protótipo é quando o desenvolvedor e o cliente avaliam o protótipo; e a atividade refinamento do protótipo é o momento em que o desenvolvedor refina os requisitos do software a ser desenvolvido na tecnologia final. Percebe-se claramente que a intenção desse modelo é apoiar o entendimento do software a ser construído e que o resultado da prototipagem não pode ser considerado a aplicação final que será colocada em produção ou operação. Quando todos os requisitos estiverem identificados e detalhados, e as interfaces, totalmente definidas, o protótipo deverá ser descartado, e a versão de produção, construída, considerando os critérios de qualidade. 4.2.5.2 O modelo espiral O modelo espiral foi proposto por Barry Boehm, em 1986, e tem como objetivo acoplar a natureza iterativa da prototipação aos aspectos controlados e sistemáticos do modelo em cascata; é dividido em uma série de atividades de trabalho ou regiões de tarefas e combina as características positivas da gerência de baselines (conjunto de documentos associados ao processo). A seguir, a figura apresenta o modelo de Boehm, de 1986, com quatro regiões de tarefas. Definir objetivos (planejamento) Avaliar e planejar próxima fase Desenvolvimento engenharia Analisar riscos Figura 18 – O modelo espiral adaptado de Barry Boehm O modelo espiral é uma evolução dos modelos clássicos e da prototipagem. Valoriza os pontos positivos desses modelos, desprezando os considerados negativos. Organiza o desenvolvimento como um processo iterativo em que vários conjuntos com quatro fases se sucedem, até que seja obtidoo sistema ou software final. Um novo ciclo se inicia (primeira fase) com a determinação de objetivos, alternativas e restrições, em que ocorre o comprometimento dos interessados e o estabelecimento de uma estratégia para alcançar os objetivos. Na segunda fase, a avaliação de alternativas, bem como a identificação e a solução de riscos se executam numa análise de riscos. Na terceira fase, ocorre o desenvolvimento do produto de 72 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 Unidade II software. Nesse quadrante, outros modelos podem ser empregados, inclusive, o modelo cascata. Na quarta e última fase, o produto é avaliado e prepara-se para iniciar um novo ciclo. 4.2.6 Os modelos especializados Um modelo de processo especializado leva em conta muitas das características de um ou mais modelos tradicionais, tais como o modelo em cascata, o espiral, o evolucionário, entre outros. Todavia, existe a necessidade de aplicação, em produtos de softwares muito específicos, de uma abordagem mais especializada de engenharia de software, ou, quando definida, de uma forma mais restritiva. Os autores organizam esses modelos especializados em modelo de desenvolvimento, baseado em componentes, e modelo de métodos formais. Com relação ao modelo de desenvolvimento baseado em componentes, tem-se: • o modelo baseado em componentes tem como ênfase criar sistemas de software que envolvam a composição de componentes, permitindo que sejam adicionadas, adaptadas, removidas e substituídas partes do sistema sem que seja necessária sua completa substituição; é a implementação do conceito da reusabilidade no desenvolvimento de software, tão comum em outras engenharias; • esse tipo de desenvolvimento auxilia a manutenção dos sistemas, visto que foca a integração de novos componentes já prontos ou, então, a atualização dos já existentes; • dessa forma, essa abordagem enfatiza a criação ou a adaptação de componentes para que sejam utilizados em diversos sistemas; com isso, temos como resultado a reutilização, que busca flexibilizar o desenvolvimento; • um tipo de desenvolvimento que utiliza essa filosofia é o formado pelos componentes de software comercial de prateleira, ou Commercial Off-The-Shelf (COTS), componentes desenvolvidos por vendedores que os oferecem como produtos e disponibilizam as suas funcionalidades juntamente com interfaces bem-definidas que permitem que esses componentes sejam integrados ao software a ser desenvolvido; • nesse caso, a equipe de desenvolvimento do sistema ou da aplicação conhece pouco ou nada sobre o funcionamento interno de um componente, porém é fornecida uma interface externa bem-definida com a qual se deve trabalhar; • esses componentes podem ser comprados, e a sua principal desvantagem, na maioria dos casos, é que não há código-fonte disponível; assim, a definição de como usar o componente é dada pelo fabricante e deve ser documentada, além de ser oferecido suporte na instalação e no uso desses componentes; • o que se procura em um componente é algo quase independente e uma parte substituível de um sistema que tem função bastante clara; os componentes possuem interface e, também, empregam 73 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 ENGENHARIA DE SOFTWARE I regras de herança oriundas da tecnologia de objetos; • o modelo de desenvolvimento baseado em componentes possui uma abordagem iterativa e evolucionária; a essência é desenvolver aplicações comerciais ou científicas a partir de componentes de software pré-empacotados; • uma característica importante nesse modelo é que as atividades de modelagem e construção começam com a identificação de possíveis candidatos a componentes, que podem ser projetados como módulos de software convencionais, como classes ou pacotes; • de acordo com Medeiros, E. (2004), o modelo de desenvolvimento baseado em componentes possui as seguintes etapas: diversos produtos baseados em componentes existentes no mercado são pesquisados e avaliados; os itens de integração de componentes são considerados; projeta- se uma arquitetura de software para acomodar os componentes; integram-se os componentes à arquitetura; e realizam-se todos os testes para assegurar a funcionalidade adequada; todas essas etapas são independentes da tecnologia utilizada para criar os componentes. Saiba mais Veja material interessante sobre os modelos especializados de software, com exemplo de uso do modelo de desenvolvimento baseado em componentes com a tecnologia Enterprise Java Beans (EJB). MEDEIROS, H. Modelos de desenvolvimento especializados. [s.d.]. Disponível em: <http://www.devmedia.com.br/modelos-de-processo- especializado-conceitos-e-principios/29898>. Acesso em: 13 fev. 2014. Com relação ao modelo de métodos formais, tem-se: • o modelo de métodos formais possui um conjunto de atividades que conduzem a uma especificação matemática formal do software e possibilita a especificação, o desenvolvimento e a verificação de um sistema baseado em computador por meio da aplicação de uma rigorosa notação matemática; • os métodos formais oferecem três diferentes níveis de atividades: — nível 0: em que o software é descrito por meio de uma especificação formal que será usada como base para a implementação do sistema; esse nível é opcional e deve ser de custo-benefício menor; — nível 1: em que o desenvolvimento e a verificação formal são utilizados para produzir um software de maneira mais formal; esse nível é mais apropriado para sistemas de alta integridade que necessitem de segurança ou confiança; 74 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 Unidade II — nível 2: em que provadores de teoremas ou simuladores podem ser utilizados, a fim de conduzir testes completos das propriedades de um sistema, de forma mais automatizada; esse nível é mais apropriado em sistemas nos quais o custo provocado por erros é extremamente alto. • a vantagem dos métodos formais durante o desenvolvimento é que eles oferecem a eliminação de diversos problemas encontrados em outros modelos, como a ambiguidade, a incompletude e a inconsistência; • todos esses problemas podem ser descobertos e corrigidos mais facilmente com a aplicação da análise matemática; os métodos formais, quando utilizados durante o projeto, servem para verificar a programação, possibilitando, assim, a descoberta e a correção de erros que poderiam passar despercebidos; • em razão da sua característica, os modelos de métodos formais são mais utilizados quando se desenvolvem softwares que possuem fator crítico de segurança, ou quando a empresa pode sofrer pesados problemas econômicos caso ocorram erros no software; • alguns exemplos de software em que os métodos formais são aplicados são os sistemas de controle de aeronaves, engenharia aeroespacial e equipamentos médicos. 4.2.7 O Unified Process (UP) O Processo Unificado (PU) ou Unified Process (UP) é um processo configurável de engenharia de software e um guia de como usar efetivamente a UML. A UML é uma linguagem unificada de modelagem de sistemas, abrangendo desde as funcionalidades até as soluções de implementação de códigos orientadas a objetos. O UP foi desenvolvido na década de 1990 pela empresa Rational, que hoje pertence à IBM. É caracterizado como um arcabouço (framework) que pode ser personalizado de acordo com as necessidades específicas e os recursos disponíveis para cada projeto. Todo UP deve descrever quem (papel) está fazendo o que(artefatos das atividades), como (execução das atividades) e quando (no tempo, representa a disciplina no processo). Artefato é qualquer documento ou modelo que precisa ser construído nas atividades do processo. Dentro do processo unificado, aparece a figura do trabalhador ou ator, que é alguém que desempenha um papel e é responsável pela realização de atividades para produzir ou modificar um artefato. Um trabalhador pode ser um analista de negócio, um analista de sistema, um programador, um testador etc. Atividade, no UP, representa uma tarefa a ser realizada por um trabalhador ou ator, a fim de produzir ou modificar um artefato. Como exemplos, podemos citar os requisitos do sistema, o plano do projeto, os códigos, os casos de testes etc. O UP apresenta, também, o conceito de disciplinas, que descrevem as sequências das atividades que produzem algum resultado significativo e mostram as interações dos participantes. As atividades 75 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 ENGENHARIA DE SOFTWARE I das disciplinas são realizadas a qualquer momento durante o ciclo de desenvolvimento, que, no UP, é denominado de fase do UP. Como exemplo de uma sequência de atividades, temos: requisitos, análise, projeto, implementação e teste. O modelo unificado UP apresenta os seguintes princípios básicos: desenvolvimento iterativo; baseado em casos de uso; e centrado em arquitetura. Com relação ao desenvolvimento iterativo, tem-se: • o desenvolvimento de um software é dividido em vários ciclos de iteração, cada qual produzindo um pedaço do sistema testado, integrado e executável; • em cada ciclo ocorrem as atividades de análise de requisitos, projeto, implementação e teste, bem como a integração dos artefatos produzidos com os artefatos já existentes. A figura a seguir mostra o funcionamento do modelo unificado em ciclos e incremental. Requisitos Requisitos Projetos Projetos Implementação e testes Implementação e testes Integração e testes de sistema Vinte dias, por exemplo O sistema cresce incrementalmente As iterações são de tamanho fixo ou limitadas pelo tempo Integração e testes de sistema Tempo Ciclo 1 Ciclo N Figura 19 – Desenvolvimento iterativo e incremental do modelo UP Com relação ao princípio baseado em casos de uso, tem-se: • um caso de uso ou use case da UML é uma sequência de ações executadas por um ou mais atores e pelo próprio sistema, que produz um ou mais resultados de valor para um ou mais atores; • o modelo unificado UP é dirigido por casos de uso, pois os utiliza para dirigir todo o trabalho de desenvolvimento, desde a captação inicial e a negociação dos requisitos até a aceitação do código (testes). • os casos de uso são centrais ao processo UP e a outros métodos iterativos, pois os requisitos funcionais são registrados, preferencialmente, por meio deles; ajudam a planejar as iterações, podem conduzir o projeto, e o teste é baseado neles. 76 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 Unidade II Com relação ao princípio centrado na arquitetura, tem-se: • arquitetura é a organização fundamental do sistema em sua totalidade; inclui elementos estáticos, dinâmicos, o modo pelo qual trabalham juntos e o estilo arquitetônico total que guia a organização do sistema; • a arquitetura também se refere a questões como desempenho, escalabilidade, reúso e restrições econômicas e tecnológicas; no UP, a arquitetura do sistema em construção é o alicerce fundamental sobre o qual ele se erguerá; • deve ser uma das preocupações da equipe de projeto; • a arquitetura, juntamente com os casos de uso, deve orientar a exploração de todos os aspectos do sistema; • a arquitetura é importante porque ajuda a entender a visão global e a organizar o esforço de desenvolvimento, facilita as possibilidades de reúso, facilita a evolução do sistema e guia a seleção e a exploração dos casos de uso. O processo unificado é apresentado em quatro fases, como mostra a figura a seguir. Concepção Elaboração Construção Transição Fases do processo unificado Entrega do produto para a produção Figura 20 – As quatro fases do modelo unificado Na fase de concepção se estabelece a viabilidade de implantação do software/sistema a ser desenvolvido, define-se o escopo do sistema, estimam-se os custos e o cronograma, identificam-se os potenciais riscos que devem ser gerenciados ao longo do projeto e se faz o esboço da arquitetura, que servirá como alicerce para sua construção. Na fase de elaboração se desenvolve a visão detalhada do sistema, contendo a definição dos requisitos funcionais, o detalhamento da arquitetura criada na fase de concepção e o gerenciamento dos riscos. Na construção, o sistema é efetivamente desenvolvido e já pode ser colocado em produção, mesmo que seja em ambiente de teste. 77 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 ENGENHARIA DE SOFTWARE I Na fase de transição, o sistema é entregue ao cliente para uso em produção; testes detalhados são realizados, e um ou mais incrementos são implantados; erros ou defeitos são corrigidos, caso apareçam nesse momento. Com relação às disciplinas que determinam as atividades de trabalho, são realizadas a qualquer momento no ciclo de desenvolvimento do UP e entrecortam todas as fases do processo unificado, podendo ter maior participação em uma fase e menor influência em outras, mas ocorrendo em qualquer uma delas. A próxima figura mostra uma visão da organização das disciplinas no modelo UP. O gráfico também é chamado de Gráfico das Baleias, em razão do seu formato peculiar. Concepção Análise Análise Implementação Testes Requisitos Elaboração Construção Transição Iter. nº 1 Iter. nº 1 Iter. nº 2 Iter. nº 2 Figura 21 – Visão da distribuição das disciplinas no UP nas fases O processo unificado propõe que as disciplinas ocorram em paralelo nas fases e que podem ocorrer a qualquer momento. Isso significa que diversas atividades ou trabalhos são realizados de forma simultânea, dependendo do momento em que estão ocorrendo e de acordo com o plano do projeto. Cada disciplina pode gerar um ou mais artefatos, que são documentos produzidos, modelos, diagramas, especificações, códigos, planos de testes etc. 4.2.8 O Rational Unified Process (RUP) O RUP é uma instância do Processo Unificado desenvolvido pela empresa Rational e hoje mantido pela IBM. Trata-se de um processo configurável de engenharia de software e serve como um guia de como se deve usar a linguagem de modelos UML no ciclo de desenvolvimento de software. Os objetivos do RUP são: • assegurar uma produção de alta qualidade de software, que realiza a necessidade do usuário seguindo os prazos e o orçamento; 78 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 Unidade II • com o advento do Capability Maturity Model/Capability Maturity Model Integration (CMM/CMMI), as organizações focalizam a qualidade em primeiro plano, e o RUP pode ser bastante útil quando se quer atingir níveis maiores. O RUP, como processo de desenvolvimento de software, tem quatro regras básicas, semelhantes ao processo unificado UP: • servir de guia; • especificar quais artefatos devem ser desenvolvidos e quando devem ser desenvolvidos; • dirigir as tarefas individuais e do time em sua totalidade; • oferecer critérios para monitorare medir os produtos e atividades do projeto. O RUP, semelhante ao processo unificado UP, apresenta os seguintes princípios: • é dirigido por casos de uso (use cases); • é baseado em componentes; • é centrado em arquitetura; • é iterativo e incremental (modelo espiral); • é framework genérico de um processo de desenvolvimento. Esse processo também apresenta as quatro fases semelhantes às do processo unificado: concepção ou iniciação, elaboração, construção e transição. As disciplinas, dentro das fases, são orientadas por modelos desenvolvidos com o uso da UML, como mostra a próxima figura. Requisitos Modelo de negócio, lista de requisitos, casos de uso, modelo de domínio, protótipo preliminar Modelo de classes, diagrama de atividades, diagrama de estados, e casos de testes Deployment, diagrama de componentes, diagramas de sequência e modelagem visual Design Implementação Análise Testes Modelo de use case Modelo de análise Modelo design Modelo de implementação Modelo de teste Figura 22 – O uso dos modelos da UML nas disciplinas do RUP 79 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 ENGENHARIA DE SOFTWARE I As disciplinas no RUP são atividades conduzidas em todas as fases de um ciclo, variando de intensidade conforme a fase. Dão origem aos artefatos do projeto. Em cada fase são desenvolvidas várias atividades do processo: • modelagem de negócio; • levantamento de requisitos; • análise e design; • implementação; • testes (entre outras). Saiba mais O artigo a seguir mostra como o processo RUP captura as seis melhores práticas do desenvolvimento moderno de software: desenvolver softwares interativamente; gerenciar requisitos; arquitetura baseada em componentes; modelagem visual de software; verificação da qualidade; e controle de mudanças para software. BLEAKLEY, G.; COLLYER, K.; SCOULER, J. Best practices for software development teams. IBM, 17 sept. 2013. Disponível em: <http://www. ibm.com/developerworks/rational/library/systems-software-lifecycle- development/systems-software-lifecycle-development-pdf.pdf>. Acesso em: 31 mar. 2014. 4.2.9 O processo Praxis É um processo de desenvolvimento de software, para uso educacional, com o objetivo de dar suporte ao treinamento em engenharia de software e à implantação de processos em organizações que desenvolvem, mantêm ou contratam softwares; é baseado na experiência do professor Wilson de Pádua Paula Filho, assim como em alguns dos mais importantes paradigmas da área (PAULA FILHO, 2003): • o modelo CMMI de maturidade em processos de software; • a notação orientada a objetos da linguagem de modelos UML; • o processo unificado (unified process); • os padrões do Institute Eletric Eletronic Engineering (IEEE) para a engenharia de software. 80 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 Unidade II O processo Praxis é desenhado para dar suporte a projetos realizados individualmente ou por pequenas equipes, com duração de seis meses a um ano. Com isso se pretende que ele seja utilizável para projetos de fim de curso de graduação e congêneres, ou similares de aplicação de disciplinas de engenharia de software. Abrange tanto métodos técnicos, como requisitos, análise, desenho, testes e implementação, quanto métodos gerenciais, como gestão de requisitos, gestão de projetos, garantia da qualidade e gestão de configuração. Propõe um ciclo de vida composto por fases que produzem um conjunto precisamente definido de artefatos (documentos e modelos). Para construir cada um desses artefatos, o usuário do processo (estudante ou engenheiro de software) precisa exercitar um conjunto de práticas recomendáveis da engenharia de software. Na construção desses artefatos, o usuário do processo é guiado por padrões e auxiliado pelos modelos de documentos e pelos exemplos constantes do material de apoio. Saiba mais Toda a estrutura do processo Praxis encontra-se definida no livro: PAULA FILHO, W. P. Engenharia de software: fundamentos, métodos e padrões. São Paulo: LTC, 2003. Leia uma breve apresentação em: PAULA FILHO, W. P. Processo Praxis 3.0. Disponível em: <http:// homepages.dcc.ufmg.br/~wilson/praxis/>. Acesso em: 31 mar. 2014. 4.2.10 O processo cleanroom (sala limpa) Esse processo é considerado como uma aplicação prática de matemática e da estatística para produzir software de alta qualidade. Também considera o conceito de hardware cleanroom. Aplica fortemente prevenção de erros versus remoção de erros, o design correto com certificação por teste e apresenta as metas: processo de desenvolvimento gerenciável mais prevenção de erros. Com relação ao gerenciamento dos projetos, o processo considera: • controle sobre o processo – progresso evidente mais garantia de integridade dos artefatos; • trabalho em equipe com processos de engenharia bem-definidos; • gerenciamento de complexidade, redução de riscos, eliminação do refazer e atendimento dos requisitos do negócio dentro de prazos e orçamentos estabelecidos; • controle depende da tecnologia empregada pelos times (tecnologia e processos adequados); 81 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 ENGENHARIA DE SOFTWARE I • métodos para especificação e projeto precisos, verificação de correção, teste e medidas de qualidade e confiabilidade; • completude e consistência matemática que leva à verificação de correção. De acordo com Linger e Trammell (1996), o cleanroom combina métodos formais de requisitos e desenho com uso no teste estatístico para produzir software com quase nenhum ou nenhum defeito. Passos para aplicação do processo cleanroom: • análise de requisitos: produzindo e revendo especificações informais; • desenho de alto nível: convertendo o requisito em máquinas de estado e funções; • desenho detalhado: refinamento das funções; • codificação por incremento: desenvolver código e verificá-lo usando métodos informais; compilar código ou efetuar teste às unidades é proibido; • pré-teste por incremento: geração de casos de teste; • teste estatístico por incremento: o código é compilado, linkado e testado; os resultados são validados. Linger e Trammell (1996) apontam, ainda, as razões para que uma organização adote a abordagem do cleanroom quando, com o mesmo trabalho, poderia usar sua estratégia tradicional de engenharia de software: • os métodos tradicionais de desenvolvimento de software já são tão usuais nas organizações em que o processo de descobrir defeitos nas aplicações é considerado como fato normal; • a organização que pretende adotar o cleanroom tem de estar preparada para uma mudança radical; adotar uma filosofia “sem erros na cultura da empresa”; • uma vez que o principal objetivo do cleanroom é prevenir erros, o produto final é praticamente sem erros, com um certificado de fiabilidade científica; • isso faz baixar o preço de produção e manutenção de um produto feito em grande escala; • os autores apontam, ainda, os mitos e as realidades em torno do processo cleanroom: — mito: o cleanroom irá substituir as técnicas de engenharia de software existentes. – Não. O cleanroom utiliza muitas das práticas existentes e, ao contrário do que dizem as críticas, não vai substituir todas as técnicas tradicionais. 82 AD S - Re vi sã o: V al ér ia /J ul ia na - D ia gr am aç ão : F ab io - 2 5/ 04 /2 01 4 Unidade II
Compartilhar