Baixe o app para aproveitar ainda mais
Prévia do material em texto
Brasília-DF. EngEnharia dE SoftwarE Elaboração João Gilberto Pinho Produção Equipe Técnica de Avaliação, Revisão Linguística e Editoração Sumário APRESENTAÇÃO .................................................................................................................................. 5 ORGANIZAÇÃO DO CADERNO DE ESTUDOS E PESQUISA ..................................................................... 6 INTRODUÇÃO ..................................................................................................................................... 8 UNIDADE I OBJETIVO DA ENGENHARIA DE SOFTWARE .......................................................................................... 11 CAPÍTULO 1 CONCEITOS DE SOFTWARE E ENGENHARIA DE SOFTWARE ...................................................... 11 CAPÍTULO 2 EVOLUÇÃO DO SOFTWARE.................................................................................................... 16 CAPÍTULO 3 PROCESSO ........................................................................................................................... 22 CAPÍTULO 4 ENGENHARIA DE REQUISITOS ................................................................................................. 28 CAPÍTULO 5 PROCESSO DE ENGENHARIA DE REQUISITOS .......................................................................... 33 CAPÍTULO 6 MODELOS ÁGEIS .................................................................................................................. 35 UNIDADE II GESTÃO DA ENGENHARIA DE SOFTWARE ............................................................................................ 39 CAPÍTULO 1 MANUTENÇÃO E REENGENHARIA .......................................................................................... 39 CAPÍTULO 2 PROJETOS DE SOFTWARE ...................................................................................................... 42 CAPÍTULO 3 MÉTRICAS DE SOFTWARE ....................................................................................................... 45 CAPÍTULO 4 VALIDAÇÃO .......................................................................................................................... 50 CAPÍTULO 5 DEFEITOS E FALHAS DE SOFTWARE ......................................................................................... 57 CAPÍTULO 6 GARANTIA DE QUALIDADE DE SOFTWARE ............................................................................... 61 PARA (NÃO) FINALIZAR ...................................................................................................................... 66 REFERÊNCIAS .................................................................................................................................... 69 5 Apresentação Caro aluno A proposta editorial deste Caderno de Estudos e Pesquisa reúne elementos que se entendem necessários para o desenvolvimento do estudo com segurança e qualidade. Caracteriza-se pela atualidade, dinâmica e pertinência de seu conteúdo, bem como pela interatividade e modernidade de sua estrutura formal, adequadas à metodologia da Educação a Distância – EaD. Pretende-se, com este material, levá-lo à reflexão e à compreensão da pluralidade dos conhecimentos a serem oferecidos, possibilitando-lhe ampliar conceitos específicos da área e atuar de forma competente e conscienciosa, como convém ao profissional que busca a formação continuada para vencer os desafios que a evolução científico-tecnológica impõe ao mundo contemporâneo. Elaborou-se a presente publicação com a intenção de torná-la subsídio valioso, de modo a facilitar sua caminhada na trajetória a ser percorrida tanto na vida pessoal quanto na profissional. Utilize-a como instrumento para seu sucesso na carreira. Conselho Editorial 6 Organização do Caderno de Estudos e Pesquisa Para facilitar seu estudo, os conteúdos são organizados em unidades, subdivididas em capítulos, de forma didática, objetiva e coerente. Eles serão abordados por meio de textos básicos, com questões para reflexão, entre outros recursos editoriais que visam a tornar sua leitura mais agradável. Ao final, serão indicadas, também, fontes de consulta, para aprofundar os estudos com leituras e pesquisas complementares. A seguir, uma breve descrição dos ícones utilizados na organização dos Cadernos de Estudos e Pesquisa. Provocação Textos que buscam instigar o aluno a refletir sobre determinado assunto antes mesmo de iniciar sua leitura ou após algum trecho pertinente para o autor conteudista. Para refletir Questões inseridas no decorrer do estudo a fim de que o aluno faça uma pausa e reflita sobre o conteúdo estudado ou temas que o ajudem em seu raciocínio. É importante que ele verifique seus conhecimentos, suas experiências e seus sentimentos. As reflexões são o ponto de partida para a construção de suas conclusões. Sugestão de estudo complementar Sugestões de leituras adicionais, filmes e sites para aprofundamento do estudo, discussões em fóruns ou encontros presenciais quando for o caso. Praticando Sugestão de atividades, no decorrer das leituras, com o objetivo didático de fortalecer o processo de aprendizagem do aluno. Atenção Chamadas para alertar detalhes/tópicos importantes que contribuam para a síntese/conclusão do assunto abordado. 7 Saiba mais Informações complementares para elucidar a construção das sínteses/conclusões sobre o assunto abordado. Sintetizando Trecho que busca resumir informações relevantes do conteúdo, facilitando o entendimento pelo aluno sobre trechos mais complexos. Exercício de fixação Atividades que buscam reforçar a assimilação e fixação dos períodos que o autor/ conteudista achar mais relevante em relação a aprendizagem de seu módulo (não há registro de menção). Avaliação Final Questionário com 10 questões objetivas, baseadas nos objetivos do curso, que visam verificar a aprendizagem do curso (há registro de menção). É a única atividade do curso que vale nota, ou seja, é a atividade que o aluno fará para saber se pode ou não receber a certificação. Para (não) finalizar Texto integrador, ao final do módulo, que motiva o aluno a continuar a aprendizagem ou estimula ponderações complementares sobre o módulo estudado. 8 Introdução Ao passar do tempo, ninguém imaginava que o software se tornaria um elemento muito importante para o mundo e teria a capacidade de manipular a informação. Muitos elementos computacionais tiveram mudanças e continuam tendo. Com este crescimento computacional, eleva-se a criação de sistemas perfeitos e problemas para quem desenvolve softwares complexos. As preocupações dos engenheiros de software para desenvolverem os softwares sem defeitos e entregarem estes produtos no tempo marcado leva à aplicação da disciplina de engenharia de software. Com o crescimento desse segmento, muitas empresas possuem mais especialistas em TI, em que cada um tem sua responsabilidade no desenvolvimento de software e é diferente de antigamente que era um único profissional de software que trabalhava sozinho numa sala (PRESSMAN, 2006). O software é o conjunto de vários artefatos e não apenas o código fonte (SOMMERVILLE, 2003). Realizando uma comparação entre o software e hardware chegamos à seguinte conclusão: O software apenas pode ser desenvolvido e realizar a manutenção (mudança) no software é uma tarefa complicada, exige grande esforço da equipe de engenheiro de software. Ao passar do tempo o software fica deteriorado. Já para o hardware apenas pode ser fabricado e realizar a manutenção no hardware é simplesmente trocar à peça que esta em desgaste. Ao passar do tempo o hardware desgasta por vários motivos (PRESSMAN, 2006). Engenharia de software é uma abordagem sistemática e disciplinada para o desenvolvimento de software (PRESSMAN, 2006). Uma das grandes dificuldades da engenharia do software é resolver o problema e deixar o cliente satisfeito com o software(JALOTE, 2005). A engenharia de software foca no software como produto. Não entra neste escopo o softwares construídos apenas para passarem o tempo dos programadores (PAULA FILHO, 2009). No desenvolvimento de um projeto de software quanto mais complexo é o software, maior é o empenho que o engenheiro de software deve fazer para desenvolver e tem que ter maior gerenciamento (JALOTE, 2005). Objetivos » Promover a formação de profissionais com ética capazes de produzir e manter software de alta qualidade e disponibilidade. 9 » Analisar as necessidades do mercado e identificar as melhores opções abordadas pela Engenharia de Software visando projetar, implementar e manter as aplicações disponíveis e sem falhas. » Compreender os padrões que estabelecem uma identificação de processos e atividades a serem executados para o desenvolvimento de software. 11 UNIDADE I OBJETIVO DA ENGENHARIA DE SOFTWARE CAPÍTULO 1 Conceitos de software e engenharia de software O estabelecimento e uso dos princípios da Engenharia a fim de obter software de baixo custo que seja confiável e trabalhe com eficiência em máquinas reais. Fratz Bauer, 1969. Por que não construir um software como se fosse uma ponte? Introdução Ao passar do tempo, ninguém imaginava que o software se tornaria um elemento muito importante para o mundo e teria a capacidade de manipular a informação e como muitos elementos computacionais tiveram mudanças até hoje e continuam tendo. Com este crescimento computacional leva-se à criação de sistemas perfeitos e problemas para quem desenvolve softwares complexos. As preocupações dos engenheiros de software para desenvolverem os softwares sem defeitos e entregarem estes produtos no tempo marcado, leva à aplicação da disciplina de engenharia de software. Com o crescimento desse segmento muitas empresas possuem mais especialistas em TI, em que cada um tem sua responsabilidade no desenvolvimento de software,o que é diferente de antigamente,em que era um único profissional de software que trabalhava sozinho numa sala (PRESSMAN, 2006). Software O software é o conjunto de vários artefatos e não apenas o código fonte (SOMMERVILLE, 2003). Realizando uma comparação entre o software e hardware, chegamos à seguinte conclusão. 12 UNIDADE I │ OBJETIVO DA ENGENHARIA DE SOFTWARE O software apenas pode ser desenvolvido e realizar a manutenção (mudança) no software é uma tarefa complicada, exige grande esforço da equipe de engenheiro de software. Ao passar do tempo o software fica deteriorado. Já o hardware apenas pode ser fabricado e realizar a manutenção neste é simplesmente trocar a peça que está em desgaste. Ao passar do tempo o hardware desgasta por vários motivos (PRESSMAN, 2006). De acordo Pressman (2006) o software está categorizado nos seguintes tipos, tais como: » Software de sistema: São programas que apóiam outros programas, como o software que realiza a comunicação com o hardware (sistema operacional) e software que ajuda na construção de outro software (compiladores). » Software de aplicação: São programas que são desenvolvidos para serem executados no negócio de uma empresa determinada. » Software científico e de engenharia: São algoritmos que processam números. » Software embutido: São programas construídos para executarem dentro de um produto específico como as teclas digitais de um forno micro-ondas. » Software para linhas de produtos: São os softwares conhecidos como software de prateleiras. » Software de web: São aplicativos que são executados via internet. » Software de inteligência artificial: São softwares que fazem usos de algoritmos não numéricos. Estes tipos de software se encaixam na robótica. » Computação ubíqua: São softwares que realizam a verdadeira computação distribuída. » Software aberto: São softwares que disponibilizam a visualização do código fonte da aplicação para o engenheiro de software modificar da maneira que desejar. » Software legado: Um programa de computador que foi desenvolvido há muito tempo. Aplicações do software Segundo sua aplicação, podemos caracterizar o software em categorias sendo: » Embutido (Embarcado), quando utilizado para controlar produtos e sistemas para os mercados industriais e de consumo. » Computador pessoal, quando envolve processamento de textos, planilhas eletrônicas, diversões etc. 13 OBJETIVO DA ENGENHARIA DE SOFTWARE │ UNIDADE I » Web, páginas de internet, hipertexto, imagens, áudio e vídeo. » Inteligência artificial, quando faz uso de algoritmos não numéricos para resolver problemas que não sejam favoráveis à computação ou à análise direta. Figura 1. Inteligência Artificial. Figura adaptada e disponível em: <http://zonadigital.pacc.ufrj.br/ /foto-inteligencia-artificial/>. Acesso em: 1 Set. 2013. Evolução do software Para analisarmos a evolução do software podemos dividir sua evolução em quatro fases: 1950 – 1965 (início) Hardware com contínuas mudanças poucos métodos sistemáticos aplicações específicas, distribuição limitada e nenhuma documentação. 1965 – 1975 (Segunda Era) Inicia a multiprogramação e sistema multiusuário, propiciando técnicas interativas; aplicações em tempo real, banco de dados e produto Software – software houses. 1975 – 1985 (Terceira Era) Por meio da evolução e padronização dos processos de comunicação, surgem os sistemas distribuídos, interligados pelas redes locais, permitindo a criação de produtos inteligentes que passam a ser mais populares pela redução de custo do hardware. 14 UNIDADE I │ OBJETIVO DA ENGENHARIA DE SOFTWARE 4a Geração (1985 – ... ) Sistemas desktop poderosos com maior capacidade de processamento e armazenamento, tecnologia orientada a objetos, surgem sistemas especialistas, redes neurais artificiais, computação paralela, redes de alta velocidade, impacto do consumidor que se torna usuário dos recursos computacionais. Engenharia de software Engenharia de software envolve a aplicação prática de conhecimento científico para o projeto e construção de programas de computador e a documentação associada necessária para desenvolvê- los, operá-los e mantê-los. É uma abordagem sistemática e disciplinada para o desenvolvimento de software (PRESSMAN, 2006). Engenharia de software é uma abordagem sistemática para o desenvolvimento, operação, manutenção de software, que como já vimos, são programas de computador, procedimentos, regras, documentação possivelmente associada, e dados sobre sua operação. A engenharia de software abrange um conjunto de três elementos fundamentais: » Métodos. » Ferramentas. » Procedimentos. Metas: melhorar a qualidade de produtos de software, aumentar a produtividade do pessoal técnico e aumentar a satisfação do cliente. Métodos proporcionam os detalhes de como fazer para construir o software: » Planejamento e estimativa de projeto. » Análise de requisitos de software e de sistemas. » Projeto da estrutura de dados. » Algoritmo de processamento. » Codificação. » Teste. » Manutenção. Ferramentas dão suporte automatizado aos métodos, existem atualmente ferramentas para sustentar cada um dos métodos, quando as ferramentas são integradas é estabelecido um sistema de suporte ao desenvolvimento de software chamado CASE - Computer Aided Software Engineering. 15 OBJETIVO DA ENGENHARIA DE SOFTWARE │ UNIDADE I Procedimentos constituem o elo entre os métodos e ferramentas: » Sequência em que os métodos serão aplicados. » Produtos que se exige que sejam entregues. » Controles que ajudam a assegurar a qualidade e coordenar as alterações. » Marcos de referência que possibilitam administrar o progresso do software. Ciclo de Vida de Software ou Processo de Software é o conjunto de etapas que envolve, Métodos, Ferramentas e Procedimentos. Figura 2. Impacto da Mudança. Fonte: Pressman, Roger S. Software Engineering 5th Edition. New York: McGraw-Hill, 2001. O software é o fator de diferenciação de muitos produtos e sistemasbaseados em computador. Identifique exemplos de dois ou três produtos e de pelo menos um sistema em que o software, não o hardware, é o elemento que faz a diferença. 16 CAPÍTULO 2 Evolução do software Ciência - Conjunto organizado de conhecimentos relativos a um determinado objeto, especialmente os obtidos mediante a observação, a experiência dos fatos e um método próprio. Engenharia - Arte de aplicar conhecimentos científicos e empíricos e certas habilitações específicas à criação de estruturas, dispositivos e processos que se utilizam para converter recursos naturais em formas adequadas ao atendimento das necessidades humanas. Vê-se que, pelas definições acima, a Ciência focaliza acumulação do conhecimento por meio do método científico, com base em experimentos e observações. Já a Engenharia aplica esses conhecimentos “ao atendimento das necessidades humanas”. Embora o conhecimento seja certamente uma necessidade humana, trata-se de uma entre várias outras, sejam necessidades materiais, como alimentação, moradia, segurança, ou imateriais, como afeição ou autoestima. A tudo aquilo que satisfaz as necessidades, atribui-se um valor. A Engenharia está, portanto, ligada à noção de valor, e a Engenharia de Software busca gerar valor com o processamento de informação. A noção de valor tem muitas consequências práticas importantes, e, de fato, a teoria conhecida como “Engenharia de Software Baseada em Valor” representa uma importante escola de pensamento dentro da área. Evolução A Engenharia de Software visa a criação de produtos de software que atendam às necessidades de pessoas e instituições, e portanto, tenham valor econômico. Para isso, usam-se conhecimentos científicos, técnicos e gerenciais, tanto teóricos quanto empíricos. Eles atingem seus objetivos de produzir software com alta qualidade e produtividade quanto é praticado por profissionais treinados e bem informados, utilizando tecnologias adequadas, dentro de processos que tirem proveito tanto da criatividade quanto da racionalização do trabalho. Primeiros anos - características No início o desenvolvimento do software era feito virtualmente, sem administração, até que os prazos começassem a se esgotar e os custos a subir abruptamente, utilizando a orientação batch (em lote) para a maioria dos sistemas. 17 OBJETIVO DA ENGENHARIA DE SOFTWARE │ UNIDADE I Na maior parte, entretanto, o hardware dedicava-se à execução de um único programa que, por sua vez, dedicava-se a uma única aplicação específica, o software, por outro lado, era projetado sob medida para cada aplicação e tinha uma distribuição relativamente limitada. No ambiente de software personalizado o projeto era processo implícito realizado no cérebro de alguém e a documentação muitas vezes não existia. Segunda Era – características Por meio da multiprogramação e dos sistemas multiusuários surgiram novos conceitos de interação homem-máquina, avanços da armazenagem on-line levaram à primeira geração de sistemas de gerenciamento de banco de dados. Com o surgimento das “software houses” as aplicações passam a ser distribuídas com maior facilidade popularizando sua utilização em um mercado em expansão, fornecendo programas para mainframes e minicomputadores. Surge a “manutenção de software”. Terceira Era – características Surgem as redes globais, as comunicações digitais de largura de banda elevada e a crescente demanda de acesso “instantâneo” a dados exigem muito dos desenvolvedores de software. A terceira Era é caracterizada pelo advento e o generalizado uso de microprocessadores, computadores pessoais e poderosas estações de trabalho “workstations” de mesa, conceitos de interação do homem. Quarta Era – características As tecnologias orientadas a objetos, orientadas a documentos, estão ocupando o lugar das abordagens mais convencionais para o desenvolvimento de software em muitas áreas de aplicação. As técnicas de “quarta geração” para o desenvolvimento de software já estão mudando a maneira segundo a qual alguns segmentos da comunidade de software constroem programas de computador. Os sistemas especialistas e o software de inteligência artificial finalmente saíram do laboratório para a aplicação prática em problemas de amplo espectro do mundo real. Classificação de software Segundo Verzello podemos classificar software em três tipos, sendo: 18 UNIDADE I │ OBJETIVO DA ENGENHARIA DE SOFTWARE » Software de sistema - programas escritos para controlar e coordenar o software. » Software de linguagens - são programas que traduzem outros programas escritos em linguagens de programação mais ou menos semelhantes à língua inglesa, para a forma binária que é a linguagem utilizada pelos componentes do sistema computacional e, além disso, os programas escritos para ajudar os desenvolvedores a escrever seus programas e a manter os programas já escritos a salvo, em bancos de dados especiais. » Software de aplicação - são programas escritos para resolver problemas comerciais ou prestar outros serviços de processamento de dados aos usuários. Já Pressman, amplia esta classificação de software para sete categorias, comentando ser uma tarefa um tanto difícil desenvolver categorias genéricas para aplicações de software, pois à medida que a complexidade do software cresce, desaparece a clara visão em compartimentos. Seguem-se as categorias sugeridas: Software básico – é uma coleção de programas escritos para dar apoio a outros programas. A área do software básico é caracterizada por: Forte interação com o hardware de computador; intenso uso por múltiplos usuários; Operações concorrentes que exigem escalonamento “schedule”; compartilhamento de recursos e sofisticada administração do processo; Estruturas de dados complexas e múltiplas interfaces externas. Software de tempo real – monitora, analisa e controla eventos do mundo real. Entre os elementos do software de tempo real incluem-se: um componente de coleta de dados que obtém as informações provenientes de um ambiente externo, um componente de análise que transforma as informações conforme a aplicação exige; um componente de controle / saída que responde ao ambiente externo e um componente de monitoração que coordena todos os demais componentes de forma a resposta em tempo real. Software comercial – é a maior área particular de software. As aplicações dessa área reestruturam os dados de uma forma que facilita as operações comerciais e as tomadas de decisões administrativas. Além da aplicação de processamento de dados convencional, as aplicações de software comerciais abrangem a computação interativa. Software científico e de engenharia – tem sido caracterizado por algoritmos de processamento de números. As aplicações variam da astronomia à vulcanologia da análise de fadiga mecânica de automóveis, à dinâmica orbital de naves espaciais recuperáveis e da biologia molecular à manufatura automatizada. Software embutido – é usado para controlar produtos e sistemas para os mercados industriais e de consumo. 19 OBJETIVO DA ENGENHARIA DE SOFTWARE │ UNIDADE I O software embutido (“embedded Software”) reside na memória só de leitura “read only” e pode executar funções limitadas e particulares (por exemplo, controle de teclado para fornos de microondas) ou oferecer recursos funcionais de controle significativos (por exemplo, funções digitais em automóveis, tais como controle, mostradores no painel, sistemas de freio etc.). Software de computador pessoal – são os softwares para computadores pessoais que entraram em efervescência na última década, tais como processamento de textos, planilhas eletrônicas, computação gráfica, diversões,gerenciamento de dados, aplicações financeiras pessoais e comerciais, redes externas ou acesso a banco de dados, são apenas algumas das centenas de aplicações. Software de inteligência artificial – faz uso de algoritmos não numéricos para resolver problemas complexos que não sejam favoráveis à computaçãoou à análise direta. Figura 3. Categorias de Software Outras categorias: » Software para rede de computadores. » Software de controle de tráfego aéreo. » Software “Robô”, que são os sistemas desenvolvidos para navegar na rede mundial de computadores, a Internet, em que a sua principal atividade é sair vasculhando os computadores de todo o mundo, procurando trabalhos desenvolvidos por pesquisadores ou profissionais para depois poder referenciá-los em uma busca qualquer, por exemplo, o site da “Google” ou “Yahoo”, que tem vários “robosoft” que saem pela rede “Internet” buscando assuntos para depois poder fazer referência em suas pesquisas. » Software aplicativo, efetuar tarefas que sirvam diretamente ao usuário, tipos de Software Aplicativo: › Processador de textos. › Dicionários eletrônicos. › Desenhos técnicos e artísticos. › Editoração eletrônica (publisher). 20 UNIDADE I │ OBJETIVO DA ENGENHARIA DE SOFTWARE › Edição de imagens. › Administração/Contabilidade. › Matemática. › Engenharia e Arquitetura. › Planilhas Eletrônicas. › Medicina. › Jogos. › Periódicos. » Software utilitário, tem como função administrar o ambiente, fornece ao usuário ferramentas para organizar os discos de dados, verificar disponibilidade de memória, corrigir falhas de processamento, úteis ao sistema computacional, Exemplos de utilitários: › Compactadores. › Formatadores. › Backup. › Desfragmentadores. › Antivírus. » Software básico, tem como função fornecer uma interface básica entre hardware e usuário, exemplos: › MSDOS › OS2, Unix, AIX, Linux, Android. › Windows 3.11, Windows 95, Windows 98, Windows NT, Windows XP, Windows 7, Windows 8. Linguagem de máquina A linguagem de máquina é uma representação simbólica do conjunto de instruções da Unidade Central de Processamento (CPU). 21 OBJETIVO DA ENGENHARIA DE SOFTWARE │ UNIDADE I Figura 4. Processador Intel Core I7. Figura adaptada e disponível em: <http://www.intel.com.br/content/www/br/pt/processors/core/core-i7-processor.html/>. Acessado em: 10 Out. 2013. As linguagens de alto nível permitem que o desenvolvedor de software e o programa sejam independentes da máquina. Exemplo: Pascal, C, C++, C#, JAVA etc. No decorrer da última década, um grupo de linguagens de quarta geração ou não procedimentais foi introduzido. Em vez de exigir que o desenvolvedor de software especifique detalhes de procedimentos, a linguagem não procedimental subentende um programa especificando o resultado desejado em vez de especificar a ação exigida para se conseguir esse resultado. O software de apoio converte a especificação do resultado num programa executável em máquina. 22 CAPÍTULO 3 Processo Existem vários processos de desenvolvimento de software, porém algumas atividades fundamentais são comuns a todos eles (SOMMERVILE, 2007). A engenharia de software baseada em componentes baseia-se na existência de um numero significativo de componentes reusáveis. O processo de desenvolvimento do sistema foca a integração desses componentes, em vez de desenvolvê-los a partir do zero. Ela tem a vantagem óbvia de reduzir a quantidade de software a ser desenvolvido e, desta maneira, reduzir os custos e riscos. Isto também leva a uma entrega mais rápida de software. No entanto, compromissos com os requisitos são inevitáveis e isso pode levar a um sistema que não atenda às reais necessidades dos usuários. Além disso, algum controle sobre a evolução do sistema será perdido se novas versões dos componentes reusáveis não estiverem sob controle da organização que os utiliza (SOMMERVILLE, 2007). O Processo do software A Engenharia de Software engloba o processo do software e as tecnologias utilizadas neste processo. O Processo do software é a base para a definição das tarefas requeridas para “construir” um software de alta qualidade. Tecnologia em camadas Tecnologia em camadas é a aplicação de uma abordagem sistemática, disciplinada e quantitativa para o desenvolvimento, operação e manutenção do software (IEEE Standards Collection: Software Engineering, IEEE Standard 610.12-1990, IEEE, 1993) , Engenharia de Software é uma tecnologia em camadas como podemos ver na figura a seguir: Figura 5. Tecnologia em Camadas 23 OBJETIVO DA ENGENHARIA DE SOFTWARE │ UNIDADE I Tecnologia em camadas Foco em qualidade: » É a base fundamental da Engenharia de Software. Processo: » Estabelece as fundações. » Une as camadas tecnológicas. » Define um conjunto de Áreas Chave do Processo – KPAs (KPA – Key Process Area). » KPAs formam a base do controle de gerenciamento do projeto do software. » KPAs definem. » Contexto da aplicação dos métodos. » Como os Produtos são produzidos (modelos, documentos etc.). » Quais bases são estabelecidas. » Como a qualidade é garantida. » Gerenciamento das mudanças. Métodos: » Detalhes de como fazer. » Definem as características de cada etapa do desenvolvimento do software. Ferramentas: » Apoio automatizado ou semi-automatizado para as camadas de Processo e Métodos. » Sistema de apoio ao desenvolvimento de software: CASE – Computer-Aided Software Engineering. » Ferramenta integrada cuja informação criada pode ser utilizada por outra ferramenta. » Combina hardware e Software. » Similar as ferramentas CAD/CAE (Computer-Aided Design/Engineering). 24 UNIDADE I │ OBJETIVO DA ENGENHARIA DE SOFTWARE Engenharia é Análise, Projeto, Construção, Verificação e Gerenciamento. Figura 6. Fases do Processo » Qual o problema a ser resolvido? » Quais as características do software que será utilizado para resolver o problema? » Como o software (solução) será obtido? » Como o software será construído? » Qual método será utilizado para corrigir erros de projeto e construção do software? » Como o software será mantido (manutenção) a longo prazo quando correções, adaptações e melhorias serão solicitadas pelos usuários? Reengenharia de software O software se deteriora devido às mudanças do ambiente em que é aplicado, para antecipar estes problemas temos a manutenção preventiva também chamada Reengenharia de Software, podemos dividir sua atuação em: » Revisões Técnicas - garantia de qualidade. » Documentação - garantir informações completas. » Controle de Mudança - aprovação e acompanhamento. Para mantermos a qualidade no processo de software é preciso observar os problemas comuns do software: » Complexidade. 25 OBJETIVO DA ENGENHARIA DE SOFTWARE │ UNIDADE I » Conformidade. » Invisibilidade. Como forma de garantira melhoria do processo podemos utilizar os seguintes modelos: » CMM. » ISO 9000. » ISO/IEC 15504 (SPICE). Ciclos de vida de software Ciclos de vida de software, os ciclos de vida mais conhecidos são: Ciclo de vida clássico (Cascata), modelo mais antigo e o mais amplamente usado na engenharia de software, modelado em função do ciclo da engenharia convencional, requer uma abordagem sistemática, sequencial ao desenvolvimento de software. Figura 7. Ciclo de Vida Clássico (Cascata) Prototipação, processo que possibilita que o desenvolvedor crie um modelo do software que deve ser construído, idealmente, o modelo (protótipo) serve como um mecanismo para identificar os requisitos de software apropriado para quando o cliente definiu um conjunto de objetivos gerais para o software, mas não identificou requisitos de entrada, processamento e saída com detalhes. 26 UNIDADE I │ OBJETIVO DA ENGENHARIA DE SOFTWARE Figura 8. Prototipação Ciclo de vida em espiral; Evolução dos Ciclos de Vida Clássico e Prototipação com acréscimo da Análise de Risco, o processo é representado por uma espiral de atividades, cada contorno da espiral representa uma fase do processo. Cada fase é precedida de alternativas e análise de risco seguida de avaliação e planejamento para a próxima fase. Figura 9. Ciclo de Vida em Espiral Ciclo de vida em espiral – Atividades. Planejamento- determinação dos objetivos, alternativas e restrições. Análise de Risco - análise das alternativas e identificação/resolução dos riscos. Construção (Protótipos) - desenvolvimento do produto no nível seguinte. Avaliação do Cliente - avaliação do produto e planejamento de novas fases. 27 OBJETIVO DA ENGENHARIA DE SOFTWARE │ UNIDADE I Modelo baseado em componentes, direcionado para o reuso de software propiciando a redução no tempo do ciclo de desenvolvimento, redução no custo total do projeto; aumento da produtividade, os benefícios são obtidos em função da robustez da biblioteca de componentes. O UP – Unified Process é o representante de inúmeros processos baseados em componentes que: » Usam a UML – Unified Modeling Language. » Uma combinação de desenvolvimento Iterativo e Incremental. » Baseiam-se em uma abordagem de cenários. » Associam funções com um framework de arquitetura. Técnicas de 4a Geração (4GT) Ferramentas de software que possibilitam: Especificar o sistema em uma linguagem de alto nível. Gerar o código fonte automaticamente a partir das especificações. Escolha de um ciclo de vida Diferentes modelos de ciclo de vida, cada um tem suas vantagens, cada um tem suas desvantagens, os critérios para escolher um modelo incluem: » A organização. » Seu gerenciamento. » Capacitação da equipe do projeto. » Natureza do produto. » Melhor Sugestão. » Modelo de Processo “Misture-e-Ajuste”. 28 CAPÍTULO 4 Engenharia de requisitos Análise de requisitos Processo de descobrir, analisar, documentar e verificar serviços requeridos para um sistema e suas restrições operacionais. Desenvolver software é uma atividade complexa por natureza. Uma das razões para esta afirmação é que não existe uma única solução para cada cenário de desenvolvimento. Além disso, lidamos o tempo todo com pessoas, o que torna o sucesso do projeto bastante relacionado à competência da equipe e à forma como trabalham, e, para dificultar ainda mais, muitas vezes não fazemos uso de um processo bem definido para apoiar as atividades do projeto. Cada vez mais procuramos o apoio dos fundamentos da engenharia de software no desenvolvimento de sistemas. Entendemos engenharia de software como sendo, de acordo com o IEEE, a aplicação de uma abordagem sistemática, disciplinada e quantificável no desenvolvimento, operação e manutenção de software. Sistemática porque parte do princípio de que existe um processo de desenvolvimento definindo as atividades que deverão ser executadas. Disciplinada porque parte do princípio de que os processos definidos serão seguidos. Quantificável porque se deve definir um conjunto de medidas a serem extraídas do processo durante o desenvolvimento de forma que as tomadas de decisão relacionadas ao desenvolvimento do software (por exemplo, melhoria de processo) sejam embasadas em dados reais, e não em “achismos”. Requisito O requisito pode variar de uma declaração abstrata de alto nível de um serviço ou de uma restrição de sistema para uma especificação matemática funcional, isto é inevitável quando os requisitos podem servir uma função dual. Pode ser a base para uma proposta de um contrato – portanto deve ser aberta para interpretação. Pode ser a base para o contrato em si – portanto deve ser definido em detalhe. Ambas as declarações podem ser chamadas requisitos. 29 OBJETIVO DA ENGENHARIA DE SOFTWARE │ UNIDADE I Tipos de requisitos Requisitos de usuário Declarações em linguagem natural mais diagramas de serviços que o sistema fornece e suas restrições operacionais. Escritos para os usuários. Requisitos de sistema Um documento estruturado estabelecendo descrições detalhadas das funções, serviços e restrições operacionais do sistema. Define o que deve ser implementado e assim, pode ser parte de um contrato entre o cliente e o desenvolvedor. O sistema libsys Sistema de biblioteca que fornece uma interface única para uma série de banco de dados de artigos em bibliotecas diferentes. Os usuários podem pesquisar, baixar e imprimir estes artigos para estudo pessoal. 30 UNIDADE I │ OBJETIVO DA ENGENHARIA DE SOFTWARE Classificação dos requisitos Requisitos funcionais e não funcionais. Requisitos funcionais são declarações de serviços que o sistema deve fornecer, como o sistema deve reagir a entradas específicas e como o sistema deve se comportar em determinadas situações, descrevem a funcionalidade ou serviços de sistema, dependem do tipo de software, dos usuários esperados e o tipo de sistema em que o software é usado, requisitos funcionais de usuário podem ser declarações de alto nível do que o sistema deve fazer mas os requisitos funcionais de sistema devem descrever os serviços de sistema em detalhe. Exemplo de requisito funcional: O usuário deve ser capaz de pesquisar em todo o conjunto inicial de banco de dados ou selecionar um subconjunto a partir dele. O sistema deve fornecer telas apropriadas para o usuário ler os documentos no repositório de documentos, para todo pedido deve ser alocado um identificador único (ORDER_ID) no qual o usuário deve ser capaz de copiar para a área de armazenamento permanente da sua conta. Requisitos não funcionais, são restrições sobre serviços ou funções oferecidas pelo sistema tais como restrições de timing, restrições sobre o processo de desenvolvimento, padrões; definem propriedades e restrições de sistema, por exemplo, confiabilidade, tempo de resposta e requisitos de armazenamento, restrições são capacidade de dispositivos de E/S, representações de sistema, podem ainda estar relacionados à portabilidade de SO e de BD. Requisitos de processo podem também ser especificados impondo uma ferramenta CASE particular, linguagem de programação ou método de desenvolvimento, requisitos não funcionais podem ser mais críticos do que os requisitos funcionais, se estes não forem atendidos, o sistema é inútil. Exemplo de requisito não funcional: 31 OBJETIVO DA ENGENHARIA DE SOFTWARE │ UNIDADE I Requisitos de domínio: requisitos que vêm do domínio de aplicação do sistema e que refletem as características desse domínio, são derivados do domínio de aplicação e descrevem características de sistema que refletem o domínio. Podem restringir os requisitos funcionais existentes ou estabelecer como cálculos específicos devem ser realizados, se os requisitos de domínio não forem satisfeitos, o sistema pode não funcionar. Documento de requisitos de software O documento de requisitos do software deve ser composto por sentenças em linguagem natural, seguindo determinados padrões: 1. Use ‘deve’ para requisitos obrigatórios, e ‘deveria’ para requisitos desejáveis. Exemplo: “O sistema deve rodar em microcomputadores da linha IBM PC que possuam microprocessador 486 DX ou superior.” 1. Os requisitos devem estar organizados logicamente, como por exemplo, inicialmente todos os requisitos de entrada, depois os de processamento e por último os requisitos de saída, o documento de requisitos do software deve ser composto por sentenças em linguagem natural, seguindo determinados padrões. 2. Cada requisito deve ter um identificador único, por exemplo, um identificador numérico, para posterior referência. 3. Os requisitos do software devem estar divididos em requisitos funcionais e não funcionais (de qualidade). 4. Evitar o uso de jargões de computação. Existem vários padrões de especificações de requisitos. Um exemplo: I. Visão Geral do Sistema. II. Requisitos Funcionais. III. Requisitos de Qualidade. IV. Apêndice. Padrão IEEE/ANSI 830/1998. A Especificação pode ser acompanhada de um PROTÓTIPO executável (ou em papel). 32 UNIDADE I │ OBJETIVO DA ENGENHARIA DE SOFTWARE Formato sugerido pelo padrão IEEE 1. Introdução: › Propósito do documento de requisitos. › Escopo do produto. › Definições, acrônimos e abreviaturas. › Referências. › Visão geral do restante do documento. 2. Descrição geral: › Perspectiva do produto.› Funções do produto. › Características dos usuários. › Restrições gerais. › Suposições de dependências. 3. Requisitos específicos (requisitos funcionais e não funcionais): › Apêndices. › Índice. 1. A análise de requisitos de software é inquestionavelmente a etapa mais intensiva em termos de comunicação no processo de engenharia de software. Por que a rota de comunicação frequentemente se fecha? 2. Frequentemente existem graves repercussões políticas quando a análise de requisitos de software (e/ou análise de sistemas) se inicia. Por exemplo, os trabalhadores podem achar que a segurança do emprego está ameaçada por um novo sistema automatizado. O que causa tais problemas? Como a tarefa de análise pode ser realizada de forma que o aspecto político seja minimizado? 3. O que é um requisito e qual a função da análise de requisitos? 33 CAPÍTULO 5 Processo de engenharia de requisitos Processo de engenharia de requisitos Usuário sabe pedir o quê realmente quer? 1. Como saber se vale a pena ou não gastar tempo e esforço com o sistema proposto. Engenharia de requisitos Quatro fases: Estudo de viabilidade. Elicitação e análise de requisitos. Validação dos requisitos. Gerenciamento dos requisitos. Estudo de viabilidade Um estudo de viabilidade decide se vale a pena ou não gastar tempo e esforço com o sistema proposto. É um estudo breve e focalizado que verifica: Se o sistema contribui para os objetivos da organização. Se o sistema pode ser implementado usando tecnologia atual e dentro do orçamento. Se o sistema pode ser integrado a outros. Elicitação e análise de requisitos Engenheiros de software, clientes e usuários finais do sistema e outros envolvidos (stakeholders) trabalham para aprender: » Sobre o domínio da aplicação. » Quais serviços/funcionalidades o sistema deve fornecer. 34 UNIDADE I │ OBJETIVO DA ENGENHARIA DE SOFTWARE » O desempenho esperado. » As restrições de hardware, do ambiente, do negócio. » Processo interativo com realimentação contínua (cíclico). Atividades: » Obtenção de requisitos (coleta de dados). » Classificação e organização de requisitos. » Priorização e negociação de requisitos. » Documentação de requisitos. Validação dos requisitos Dedica-se a mostrar que os requisitos definem o sistema que o cliente realmente deseja, custos de erros de requisitos são altos e, desse modo, a validação é muito importante, o custo da reparação de um erro de requisitos depois da entrega pode equivaler a 100 vezes o custo de reparação de um erro de implementação. Gerenciamento dos requisitos Gerenciamento de requisitos é o processo de gerenciamento de mudanças de requisitos, novos requisitos surgem durante o processo, à medida que as necessidades de negócio mudam e uma melhor compreensão do sistema é desenvolvida, os diferentes pontos de vista têm requisitos diferentes e estes são frequentemente contraditórios. A validação de requisitos está relacionada às verificações de validade, consistência, completeza, realismo e facilidade de verificação. Mudanças de negócio levam, inevitavelmente, às mudanças de requisitos. O gerenciamento de requisitos inclui planejamento e gerenciamento de mudanças. 1. Um analista de sistemas pode prover de uma de três áreas: de desenvolvimento de sistemas, de uma área usuária ou de alguma organização externa. Discuta os prós e contras de cada área. Descreva o analista “ideal”. 2. Elementos de sistema comuns são hardware, software e pessoas. Quais outros elementos são frequentemente encontrados em sistemas baseados em computador? 35 CAPÍTULO 6 Modelos ágeis Metodologia ágil para equipes pequenas e médias desenvolvendo software com requisitos vagos ou que mudam constantemente. O que podemos aprender com os modelos ágeis? Modelos ágeis Os modelos ágeis fazem parte de um movimento global de profissionais, empresas e instituições, chamado de “Manifesto Ágil”, que buscam estabelecer os novos paradigmas para as empresas fornecedoras de software, em que a “entrega rápida do software encomendado” é o principal objetivo desta abordagem. Os modelos ágeis surgem como uma reação natural à expansão do CMMI no mercado mundial, atingindo não apenas as grandes organizações, mas também as pequenas e médias empresas de TI. Dessa forma, estas passam também a conviver com a pressão de organizarem toda sua cadeia produtiva, sob o risco de serem simplesmente excluídos do mercado. As constantes fusões corporativas favoreceram o surgimento das megacorporações globalizadas, que necessitam de fornecedores que consigam garantir níveis de serviços em escalas nunca antes imaginadas. Sem possuir tantos recursos financeiros disponíveis e prevendo uma dificuldade de adequar-se aos padrões estabelecidos pelo mercado mundial, as pequenas e médias empresas observam suas oportunidades no mercado serem gradativamente reduzidas. Trabalhando com modelos ágeis Neste cenário, a abordagem ágil torna-se uma interessante estratégia de sobrevivência das pequenas e médias organizações que não conseguem adequar-se aos rígidos padrões de excelência estabelecidos pelo mercado mundial. Para isto, é necessário convencer o mercado de que seguir os “métodos tradicionais” tornarão suas empresas mais lentas e caras, que a área de TI segue um processo evolutivo diferente de outros setores da economia, e que adotar padrões industriais é um grande equívoco estratégico. De certa forma, os modelos ágeis ressuscitam a ideia da área de desenvolvimento como o centro da organização TI. Na abordagem ágil, tudo passa a girar em torno dos desenvolvedores, tudo é organizado para dar poder de decisão a estes profissionais que irão encontrar os meios mais 36 UNIDADE I │ OBJETIVO DA ENGENHARIA DE SOFTWARE adequados para implementar as mudanças no código-fonte e gerar os benefícios esperados no projeto, no menor prazo e custo possível. As abordagens ágeis chamam atenção de muitas empresas e profissionais pela sua simplicidade de implementação, pois suas regras são simples de serem seguidas. O sucesso da adoção do modelo ágil está intimamente ligado ao comprometimento dos profissionais, pois sua forma de condução dos trabalhos possui um alto grau de informalidade. A abordagem ágil possui um discurso leve, pautado na redução drástica da complexidade dos projetos de desenvolvimento e de toda a estrutura da TI, reduzindo em poucos elementos gerenciáveis e trabalhando com profissionais com atuação multidisciplinar. Sua filosofia reforça e incentiva a atuação livre dos profissionais para decidirem como será a melhor forma de implementação, apesar de existirem poucas, mas rígidas regras de controle sobre o projeto. Incentiva a simplicidade do software e uma estrutura mínima para mantê-lo em funcionamento, adicionando flexibilidade e eliminando complexidades ao longo de todo o ciclo de vida deste. Desta maneira, a abordagem ágil torna-se então um modelo viável de atuação no mercado mundial. Possibilitando criar um novo nicho de oportunidades, atraindo investidores que estarão dispostos a enfrentar os riscos e as condições impostas pelo modelo ágil. Os pontos fracos dos modelos ágeis O modelo ágil possui algumas fraquezas que impedem sua adoção de forma corporativa e podem comprometer sua credibilidade e implementação no mercado mundial. Falta de uma avaliação para atestar empresas com abordagens ágeis A abordagem ágil não possui um modelo de avaliação que garanta ao mercado que os projetos serão efetivamente guiados por esta filosofia. Isto significa que qualquer empresa pode pleitear o título de empresa ágil, sem necessariamente seguir esta abordagem em seus projetos. Mesmo que no futuro exista um modelo de avaliação para empresas ágeis, a informalidade do modelo tornará qualquer avaliação altamente subjetiva, sem quaisquer evidências de que determinadas ações estão realmente acontecendo dentro da filosofia ágil. As certificações existentes apenas atestamque determinados profissionais estão aptos a aplicar as técnicas estabelecidas pelos modelos ágeis. Porém, não existem garantias que estes as aplicam adequadamente dentro dos projetos das empresas, ou mesmo se esta filosofia é seguida como uma estratégia empresarial ou apenas uma iniciativa isolada de uma equipe dentro da empresa, acentuando ainda mais a fragilidade deste modelo. 37 OBJETIVO DA ENGENHARIA DE SOFTWARE │ UNIDADE I Foco excessivo nos prazos e custos inviabiliza o modelo financeiro de longo prazo Nos modelos controlados, o valor da organização é medida pelo total de controles operacionais que uma empresa efetivamente consegue gerenciar em seus projetos, possibilitando que esta seja auditada e facilmente avaliada nestes requisitos. Quanto mais controles forem efetivamente gerenciados, maior será o valor da organização no mercado. Nos modelos ágeis, o valor de uma organização é medida por meio de sua capacidade em realizar entregas rápidas a um baixo custo operacional. Para destacarem-se no mercado, as empresas irão concorrer de forma cada vez mais agressiva, oferecendo prazos e custos sucessivamente mais apertados. No médio e longo prazo, a lucratividade dos projetos será gradualmente reduzida e a pressão no aumento da produtividade das equipes será cada vez maior. Além disso, os salários deverão ser reduzidos para manter uma margem de lucro que compense as organizações seguirem este modelo. Há cada novo projeto, as empresas estarão trabalhando mais próximas de seu limite operacional e financeiro, devendo necessariamente rever sua estratégia de posicionamento no mercado. Portanto, as abordagens ágeis possuem uma inconsistência estratégica que impedem que suas organizações sejam viáveis financeiramente no longo prazo. Isto não significa que os princípios ágeis não são bons nem interessantes, porém demonstram apenas que, a ênfase exclusiva na agilidade pode levar as organizações a uma estratégia equivocada. O pensamento enxuto para o desenvolvimento ágil Uma das recentes discussões que habitam as organizações que desenvolvem ou consomem software é o seguinte: “Esse negócio de processos ágeis realmente funciona? Ou então, como iniciar um projeto, usando as ideias de modelo ágil?” Muitos de nós já usamos processos ágeis, porém, muitas vezes, o fazemos sem uma filosofia maior, e acabamos apenas usando o caráter operacional dos processos ágeis existentes e isso limita o resultado que o processo em questão pode oferecer, pois enquanto as ideias inerentes não forem institucionalizadas, em todos os níveis de uma organização (operacional, tático e estratégico), haverá um forte descompasso de resultados. Na verdade, existe uma solução proposta para isso, imagine uma empresa alinhada às ideias dos processos ágeis para área de desenvolvimento de software e para as demais áreas, seus pensamentos estejam alinhados como os ideais de modelo enxuto de trabalho, semelhante ao proposto pela Toyota, isso seria um verdadeiro paraíso ou então uma grande utopia para quem almeja bons resultados para sua companhia. Bem, isso não é nada do outro mundo, nem impossível de acontecer, uma vez que existe uma grande correlação entre os processos ágeis e modelos gerenciais enxutos que muitas organizações têm usado (Just-in-time, Lean, kaizen) 38 UNIDADE I │ OBJETIVO DA ENGENHARIA DE SOFTWARE Pensado dessa forma, fica muito fácil para visualizar a aplicação da mesma linha de ideias em todos os níveis da empresa, criando uma forte cultura ágil na organização voltada para soluções efetivamente que agreguem valor ao universo da corporação. 1. O que é a metodologia ágil e como ela se enquadra no mercado hoje? 2. Em sua opinião quais são as vantagens e desvantagens da metodologia ágil? 39 UNIDADE II GESTÃO DA ENGENHARIA DE SOFTWARE CAPÍTULO 1 Manutenção e reengenharia A manutenção, a última fase do processo de engenharia de software, é responsável pela maior parte de todos os gastos em software de computador. À medida que mais programas são desenvolvidos, uma perturbadora tendência tem aparecido, a quantidade do esforço e recursos despendidos em manutenção de software tem crescido. Manutenção em sistemas Quatro tipos de manutenção são executados no software de computador. A manutenção corretiva atua no sentido de corrigir erros que aparecem depois que o software encontra-se em uso. A manutenção adaptativa é aplicada quando mudanças no ambiente externo precipitam modificações no software. A manutenção perfectiva incorpora ampliações que são solicitadas pela comunidade de usuários. Finalmente, a manutenção preventiva melhora a manutenibilidade e confiabilidade futuras, e constitui uma base para as próximas ampliações. As abordagens técnicas e administrativas à fase de manutenção podem ser implementadas com pouca sublevação. Porém, as tarefas executadas durante o processo de engenharia de software definem a manutenibilidade e causam um importante impacto sobre o sucesso de qualquer abordagem à manutenção. Manutenção de software é, sem dúvida, mais do que consertar erros. Ela pode ser definida pela identificação de quatro diferentes atividades: Manutenção corretiva. Manutenção adaptativa. 40 UNIDADE II │ GESTÃO DA ENGENHARIA DE SOFTWARE Manutenção perfectiva ou de melhoria. Manutenção preventiva ou reengenharia. Atividades típicas do mantenedor: » Estudar especificações e projetos do sistema. » Interagir com os usuários. » Examinar programas e sua documentação. » Descobrir erros e deficiências nos programas fontes. » Projetar uma alteração em programa. » Modificar um programa. » Revalidar um programa. » Atualizar a documentação do programa. Reengenharia As ferramentas e técnicas de engenharia reversa e de reengenharia tornar-se-ão uma parte significativa do processo de manutenção no decorrer da década de 1990. A engenharia reversa extrai informações de projeto do código-fonte quando nenhuma outra documentação encontra-se à disposição. A reengenharia pega as informações obtidas e reestrutura o programa para conseguir uma qualidade mais alta e, por conseguinte, melhor manutenibilidade para o futuro. Os métodos e técnicas apresentados neste livro têm muitas metas, mas uma das mais importantes é construir um software que seja receptivo à mudança. Poucas pessoas/hora serão empregadas em cada pedido de modificação ou manutenção. As pessoas serão liberadas para desenvolver os novos softwares que serão exigidos nos sistemas cada vez mais complexos do século XXI. O software é frequentemente a realização das regras de negócio. À medida que essas regras se modificam, o software também deve ser modificado. À medida que os gerentes trabalham para modificar as regras, a fim de conseguir maior eficiência e competitividade, o software deve acompanhar o ritmo. Em alguns casos, isso significa a construção de novos sistemas importantes baseados em computador. Mas em muitos outros, significa a modificação ou a reconstrução de aplicações existentes. Razões para reengenharia: » Frequentes falhas de produção. » Problemas de desempenho. 41 GESTÃO DA ENGENHARIA DE SOFTWARE │ UNIDADE II » Tecnologia obsoleta. » Problemas de integração de sistemas. » Qualidade técnica ruim. » Dificuldades para testar e caro para manter. » Problemas crescentes no sistema. Engenharia progressiva X reversa Engenharia progressiva, processo tradicional de engenharia de software, caracterizado pelas atividades progressivas do ciclo de vida, que partem de um alto nível de abstração, para um baixo nível de abstração. Engenharia reversa, o processo inverso à engenharia progressiva, caracterizado pelas atividades retroativas do ciclo de vida, que partem de um baixo nível de abstração para um alto nível de abstração. 1. Manutenção corretiva e depuração são a mesma coisa? Explique a sua resposta. 2. Discuta o impacto das linguagens de alto nível sobre a manutenção adaptativa. Sempre é possíveladaptar um programa? 3. Os custos de manutenção devem ser incorporados ao passo de planejamento do software? Eles são incorporados? 42 CAPÍTULO 2 Projetos de software O planejamento é uma atividade de administração de projetos de software que combina as técnicas de métricas e os métodos de estimativa discutidos nos capítulos anteriores com a analise de riscos, determinação de um cronograma e outras atividades de tomada de decisão. A decisão de produzir ou comprar um software pode ser abordada por meio de um conjunto de diretrizes simples que são ampliadas com técnicas de tomada de decisão. Planejamento O planejamento é uma atividade de administração de projetos de software que combina as técnicas de métricas e os métodos de estimativa discutidos nos capítulos anteriores com a análise de riscos, determinação de um cronograma e outras atividades de tomada de decisão. O risco é parte inerente de todos os projetos de software e, por essa razão, deve ser analisado e administrado. A análise dos riscos inicia-se com a definição e é seguida pela projeção e avaliação. Essas atividades definem cada risco, sua probabilidade de ocorrência e seu impacto projetado. Assim que essas informações são definidas, as atividades de administração e a monitoração dos riscos podem ser levadas a efeito, ajudando a controlar os riscos. Usando o esforço humano que foi estimado para o projeto, inicia-se a determinação do plano com a criação de uma rede que represente cada etapa de desenvolvimento, sua dependência de outras tarefas e a duração projetada. A rede de tarefas é usada para computar o caminho crítico do projeto, o gráfico de Gantt e uma variedade de informações sobre projeto. Usando o cronograma como guia, o gerente de projetos pode rastrear e controlar cada passo do processo de engenharia de software. O Plano de Projetos de Software combina informações geradas como consequência de todas as atividades de estimativas e planejamento. Ele oferece um “mapa rodoviário” para a administração de projetos. Gerenciamento do projeto O gerenciamento de projeto preocupa-se com atividades envolvidas em garantir que o software será entregue no tempo e no prazo determinados, e de acordo com os requisitos das organizações desenvolvendo e adquirindo o software. 43 GESTÃO DA ENGENHARIA DE SOFTWARE │ UNIDADE II O gerenciamento do projeto é necessário, pois o desenvolvimento de software é sempre assunto de restrições de orçamento e cronograma que são estabelecidos pela organização desenvolvendo o software. Objetivos: » Introduzir o gerenciamento de projeto de software e descrever suas características distintivas. » Discutir o planejamento de projeto e o processo de planejamento. » Mostrar como representações gráficas de cronograma são usados pelo gerenciamento do projeto. » Discutir a noção de riscos e o processo de gerenciamento de risco. Atividades de Gerenciamento: » Escrita da proposta. » Planejamento e cronograma do projeto. » Custos do projeto. » Monitoramento do projeto e revisões. » Seleção e avaliação de pessoal. » Relatório escrito e apresentações. Quadro 1. Tipos de Planos de Projeto 44 UNIDADE II │ GESTÃO DA ENGENHARIA DE SOFTWARE Cronograma do projeto O cronograma do projeto busca dividir o projeto em tarefas e estimar tempo e recursos necessários para completar cada tarefa, organizar as tarefas concomitantemente para um uso otimizado da força de trabalho, minimizar as dependências de tarefas pra evitar atrasos causados por uma tarefa esperando pela finalização de outra. 1. O risco de projeto é apenas um dos muitos tipos de riscos que são encontrados quando sistemas baseados em computador são desenvolvidos e usados no mundo real. Relacione categorias genéricas adicionais de risco que devem ser consideradas quando são usados sistemas para atividades comerciais, pessoais e governamentais. 2. Por que é “útil tentar eliminar o risco”? Considere isso, primeiramente, a partir de um ponto de vista técnico e, a partir de um ponto de vista econômico. 45 CAPÍTULO 3 Métricas de software A medição possibilita que gerentes e profissionais entendam melhor o processo de engenharia de software e o produto que ele produz. O risco é a parte inerente de todos os projetos de software e, por essa razão, deve ser analisado e administrado. Medição Quanto tempo leva para construir uma casa? Qual o tamanho da casa? Quais são as características da casa? Qual será o custo da casa? Estas são perguntas importantes a serem feitas no projeto de construção de uma casa ou apartamento. No desenvolvimento de software não é muito diferente da construção civil, ao se iniciar um projeto de desenvolvimento de software é extremamente importante ter conhecimento destas variáveis, o tempo de desenvolvimento do projeto, o tamanho do projeto, os requisitos do projeto e o custo do projeto; neste ponto que entra a técnica de métricas de software. Métricas de software O gerenciamento de projetos de software representa a primeira camada do processo de engenharia de software. O gerenciamento de projetos compreende atividades que envolvem medição, estimativa, análise de erros, programação de atividades, monitoração e controle. A medição possibilita que gerentes e profissionais entendam melhor o processo de engenharia de software e o produto (software) que ele produz. Usando medidas diretas e indiretas, as métricas de produtividade e qualidade podem ser definidas. Métricas orientadas tanto ao tamanho quanto à função são usadas em toda a indústria de software. As métricas orientadas ao tamanho fazem uso das linhas de código como fator normalizante para outras medidas, tais como as medidas de pessoas-mês ou defeitos. O ponto-por-função deriva de medidas do domínio da informação e da avaliação subjetiva da complexidade do problema. Métricas de qualidade de software, como a métrica de produtividade, concentram-se tanto no processo como no produto. Ao desenvolver e analisar uma linha básica para a qualidade, uma organização pode tomar providências para corrigir aquelas áreas do processo de engenharia de software que são a causa principal dos defeitos do software. Neste capítulo, quatro métricas da 46 UNIDADE II │ GESTÃO DA ENGENHARIA DE SOFTWARE qualidade-corretitude, manutenibilidade, integridade e usabilidade – foram discutidas. Métricas adicionais de qualidade serão descritas posteriormente neste livro. A medição resulta em mudança cultural. A coleta de dados, computação das métricas e avaliação dos dados são os três passos que devem ser implementados para se começar um programa de métricas. Ao criar uma linha básica (um banco de dados contendo medições do processo e do produto), os engenheiros de software e seus gerentes podem obter uma melhor visão do trabalho que realizam e do produto que produzem. O controle é impossível sem medições e feedback. Não se pode controlar o que não se pode medir, a extensão do controle depende da precisão da medição, qualquer coisa que não se pode medir está fora de controle. Medições e métricas ajudam a entender: » O processo técnico usado para se desenvolver um produto. » O próprio produto. » Produto, medido para avaliar a sua qualidade. » Processo, medido para melhorá-lo. » Medição, documentação de efeitos passados. » Uso, previsão de quantificação de efeitos futuros (as estatísticas não podem prever, mas podem deduzir). A medição e a inferência estatística são usadas em várias áreas para projetar o desempenho futuro. Medição pode levar a controvérsias e discussões: » Que métricas usar? » Como os dados compilados devem ser usados? » É justo usar medições para se comparar pessoas, processos e produtos? Estimativa é uma das principais atividades do planejamento de software, estima-se: » Esforço humano exigido. » Duração cronológica do projeto. » Custo. Estimativa é a essência da dificuldade em controlar projetos de software. 47 GESTÃO DA ENGENHARIADE SOFTWARE │ UNIDADE II Causas de estimativas de software mal feitas: » Falta de especialização em estimativas (falta de treino). » Falta de se fazer provisões adequadas para contrabalançar o efeito das distorções. » É preciso muito pouco envolvimento do ego para estimativas mais realistas. » Falta de conhecimento exato sobre o que vem a ser uma estimativa. » Falta de habilidade com os problemas políticos. » Norma: estimativas devem ser usadas para criarem incentivos. » Falta de informações úteis para o processo de estimativas. Atributos comuns de técnicas de estimativas: » O escopo do software deve ser estabelecido antecipadamente. » Métricas de software são utilizadas. » Histórico de medidas passadas é usado como uma base. » O projeto é particionado em pequenas partes que são estimadas individualmente. A métrica de software, é uma técnica fundamental para o planejamento do desenvolvimento do software, com as métricas consegue-se mensurar o custo e prazo, além de ser uma boa partida para realizar os contratos de software. Existem vários tipos de métricas, porém neste artigo irei focar somente na técnica de Pontos de Função. Os Pontos de Função têm como objetivo medir o tamanho funcional do software, ou seja, é a medida das funcionalidades do software que foram descobertas a partir do levantamento de requisitos, assim pode-se apresentar um feedback palpável para o usuário. Supondo que depois de termos levantados todos os requisitos e realizado a contagem de pontos de função, descobrimos que a aplicação tem o valor de 130PF. A partir desse valor pode-se realizar outras estimativas, por exemplo, se existe uma equipe de 6 desenvolvedores que trabalham por 8 horas por dia, então a partir desta fórmula consegue-se obter o tempo estimado de desenvolvimento da aplicação: ESFORÇO = PF * HORAS/PF = 130/6 = 21,66 HORAS (ESFORÇO/HORAS TRABALHADAS)/RECURSOS = (21,66/8)/6 = 0,45 dias Agora que se sabe o tempo estimado para o desenvolvimento do projeto, podemos calcular o preço por hora, também existe outra possibilidade de calcular o preço do desenvolvimento de um software, que é a partir dos pontos de função. Defini-se um valor por ponto, neste exemplo cada ponto de 48 UNIDADE II │ GESTÃO DA ENGENHARIA DE SOFTWARE função valerá 50 reais, então é só realizar a multiplicação do total de pontos de função pelo valor de cada ponto de função, como no exemplo abaixo: PF*valor= 130 * 50 = 6.500,00 reais Análise dos riscos A análise dos riscos inicia-se com a identificação e é seguida pela projeção e avaliação. Essas atividades definem cada risco, sua probabilidade de ocorrência e seu impacto projetado. Assim que essas informações são definidas, as atividades de administração e a monitoração dos riscos podem ser levadas a efeito, ajudando a controlar os riscos. Usando o esforço humano que foi estimado para o projeto, inicia-se a determinação do plano com a criação de uma rede que represente cada etapa de desenvolvimento, sua dependência de outras tarefas e a duração projetada. A rede de tarefas é usada para computar o caminho crítico do projeto, o gráfico de Gantt e uma variedade de informações sobre o projeto. Usando o cronograma como guia, o gerente de projetos pode rastrear e controlar cada passo do processo de engenharia de software. Em certos casos, talvez seja possível adquirir um pacote de software existente ou subcontratar seu desenvolvimento em vez de construí-lo in-house. A decisão de produzir ou comprar pode ser abordada por meio de um conjunto de diretrizes simples que são ampliadas com técnicas de tomada de decisão. O plano de projeto de software combina informações geradas como consequência de todas as atividades de estimativa e planejamento. Ele oferece um “mapa rodoviário” para a administração de projetos. Aspecto crucial para um bom gerenciamento de projeto de software: » Riscos técnicos. » Riscos em extrapolar o tempo previsto. » Desvio do cronograma e custo. Gerenciamento de projeto eficaz envolve identificar as áreas de risco e administrá-las adequadamente: » Avaliação dos riscos. » Colocá-los em ordem de prioridade. » Estabelecer estratégias de administração dos riscos. » Resolução dos riscos. » Monitoração dos riscos. 49 GESTÃO DA ENGENHARIA DE SOFTWARE │ UNIDADE II Determinação de prazos Determinação de prazos determina o objetivo das tarefas de forma que se possa acompanhar o andamento da execução das várias atividades envolve os seguintes tópicos: » Planejamento da programação a ser realizada. » Identificação do conjunto de tarefas de projeto. » Estabelecimento das interdependências entre as tarefas. » Estimativa do esforço associado a cada tarefa. » Atribuição de pessoas e outros recursos para a realização e tarefas específicas. Monitoração e controle Monitoração e controle são atividades de acompanhamento que iniciam logo após o estabelecimento da programação de desenvolvimento, propiciando o rastreamento de cada tarefa no programa de desenvolvimento, apontando o impacto do não cumprimento dos prazos, desta forma podemos redirecionar recursos, reorganizar tarefas, atendendo os compromissos de entrega. A medição torna as questões de estimativas de projeto, a garantia de qualidade e produtos mais econômicos e desenvolvidos no prazo mais administrável. A nível técnico, medições são importantes para determinar parâmetros como quantidade de teste necessário e impacto de mudanças. Figura 10. Monitoração e Controle Suponhamos que você seja o gerente de uma empresa de projetos de uma empresa que constrói software para produtos de consumo. Você foi contratado para construir o software para um sistema de segurança doméstico sofisticado. Desenvolva um esboço detalhado (seja tão específico quanto possível) dos passos que deveria realizar para administrar esse projeto. Suponhamos que você ainda tenha de se reunir com seu cliente. Qual paradigma de engenharia de software escolheria? 50 CAPÍTULO 4 Validação O objetivo principal da validação é derivar um conjunto de testes que tenha uma alta probabilidade de revelar defeitos no software. Por meio da validação podemos antecipar qualquer problema na aplicação? Validação O objetivo principal do projeto de casos de testes é derivar um conjunto de testes que tenha uma alta probabilidade de revelar defeitos no software. Para atingir esse objetivo, duas categorias diferentes de técnicas de projeto de casos de teste são usadas: o teste de caixa preta e o teste de caixa branca. Os testes de caixa branca focalizam a estrutura de controle do programa. Os casos de teste são derivados para garantir que todas as instruções do programa tenham sido exercitadas pelo menos uma vez durante os testes e que todas as condições lógicas tenham sido exercitadas também. Os testes de caminho básico, uma técnica de caixa branca, fazem uso de grafos programa (ou matrizes de grafo) para derivar o conjunto de testes linearmente independentes que garantirão cobertura. Os testes de fluxo de dados e das condições põem à prova a lógica do programa, e os testes de laços complementam outras técnicas de caixa branca ao proporcionar um procedimento para exercitar laços de vários graus de complexidade. Os testes de caixa branca são aplicados a componentes de programa pequenos (por exemplo, os módulos ou pequenos grupos de módulos). Os testes de caixa preta, por outro lado, ampliam o nosso foco e poderiam ser denominados “testes em grande porte” (testing in the large). Os testes de caixa preta são projetados para validar os requisitos funcionais, sem se preocupar com o funcionamento interno de um programa. As técnicas de teste de caixa preta concentram-se no domínio de informações do software, derivando os casos de teste ao dividir a entrada e saída de uma maneira que proporcione uma satisfatória cobertura de teste. O particionamento de equivalência divide o domínio de entrada em classes de dados que provavelmente exercitarão umafunção de software específica. A análise do valor de fronteira prova a capacidade que um programa tem de manipular dados nos limites da aceitabilidade. O grafo de causa-efeito é uma técnica que possibilita que o analista valide conjuntos complexos de ações e condições. 51 GESTÃO DA ENGENHARIA DE SOFTWARE │ UNIDADE II Verificação Verificação do software, o aplicativo cumpre com suas especificações. Inspeções de software - preocupadas com a análise estática das representações do sistema para descobrir problemas (verificação estática), podem ser complementadas por alguma análise automática do texto de origem de um sistema ou dos documentos associados. Teste de software - preocupado com a execução e observação do comportamento do produto (verificação dinâmica). O sistema é executado com dados de teste e o seu comportamento operacional é observado. Figura 11. Verificação Testes de programas: » Podem revelar a presença de erros e NÃO a ausência. » Um teste bem sucedido é um teste que descobre um ou mais erros. » Os testes de defeito: » Testes projetados para descobrir inconsistências entre o programa e sua especificação. » Um teste bem sucedido é aquele que revela a presença de defeitos em um sistema. Testes estatísticos: » Usado para testar o desempenho e a confiabilidade do programa. » Confiabilidade: número de falhas no sistema etc. » Desempenho: Tempo de execução, tempo de resposta etc. 52 UNIDADE II │ GESTÃO DA ENGENHARIA DE SOFTWARE » Deve ser usado em conjunto com a verificação estática para uma cobertura total das atividades. Metas de V & V Verificação e validação devem estabelecer a confiança de que o software é “adequado a seu propósito”. Isso não significa que o programa tenha que ser livre de defeitos. Ao invés disso, significa que o sistema deve ser suficientemente bom para o uso pretendido. O tipo de uso irá determinar o grau de confiança que será necessário. Confiança de V & V Depende do propósito do sistema, as expectativas do usuário e o ambiente de mercado. Função do software, o nível de confiança depende do tipo de sistema e o quanto é importante para a organização. Expectativas do usuário, usuários tinham poucas expectativas de certos tipos de software, hoje eles são mais exigentes. Ambiente de mercado, colocar um produto no mercado pode ser mais importante do que encontrar todos os defeitos no programa. Testes e depuração. Testar e depurar um programa são atividades distintas. Verificação e validação de teste estão preocupadas em estabelecer a existência de defeitos em um programa. Depuração está preocupada com a localização e remoção desses defeitos. Depuração envolve a formulação de uma hipótese sobre o comportamento do programa e testar essa hipótese para encontrar o erro no sistema. O teste ocorre antes e descobre a ocorrência do erro. Figura 12. Depuração 53 GESTÃO DA ENGENHARIA DE SOFTWARE │ UNIDADE II Planejamento de V & V Planejamento cuidadoso é necessário para obter sucesso nos processos de inspeção e teste. O planejamento deve iniciar no começo do processo de desenvolvimento. O processo de planejamento deve decidir sobre o equilíbrio entre as abordagens estáticas e dinâmicas. O planejamento de testes se ocupa em estabelecer os padrões para o processo de testes. Estrutura de um plano de testes » O processo de teste. » Facilidade de rastreamento dos requisitos: › Testar individualmente os requisitos. » Itens a serem testados: › O que vai ser testado. » Cronograma de testes. » Procedimentos de registros de testes: › Como o resultado dos testes vai ser documentado. » Requisitos de hardware e de software. » Restrições. Inspeções x testes » Inspeções e testes são técnicas de verificação complementares. » Ambas devem ser utilizadas no processo de V&V. » Inspeções podem verificar a conformidade com uma especificação, mas não a conformidade com os reais requisitos do usuário. » Inspeções não podem verificar as características não funcionais tais como desempenho, usabilidade etc. Inspeções no programa » Revisão cuidadosa, linha por linha, do código fonte do programa. » Objetivo é a Detecção de defeitos (não correção). 54 UNIDADE II │ GESTÃO DA ENGENHARIA DE SOFTWARE » Defeitos podem ser erros lógicos, anomalias no código que podem indicar uma condição errônea (por ex. uma variável não inicializada) ou a não conformidade com padrões organizacionais. Pré-condições para a inspeção de programa » Uma especificação precisa deve estar disponível. » Os membros da equipe de inspeção devem estar familiarizados com os padrões organizacionais. » Código sintaticamente correto deve estar disponível. » Uma lista de erros deve ser preparada. » Gerente deve aceitar que a inspeção aumentará os custos no começo do processo de software. Checklist de inspeção de programa » Lista de erros comuns deve ser usada para dirigir a inspeção. » Listas de erros são dependentes da linguagem de programação. » Quanto mais “fraca” é a checagem de tipos pela linguagem, maior é a lista de erros mais comuns. » Exemplos: inicialização, nomeação de constantes, término de laços, limites de vetores etc. Taxa de inspeção (IBM) » Cerca de 500 declarações/hora durante revisão geral. » 125 declarações/hora durante preparação individual. » 90-125 declarações/hora podem ser inspecionadas durante a reunião. » Inspeção é portanto, um processo caro. » Contudo, o esforço requerido para a inspeção é menor do que a metade o esforço de teste exigido para defeitos equivalentes. Análise estática automatizada » Analisadores estáticos são ferramentas de software para o processamento do código fonte. » Percorrem o texto do programa e tentam descobrir potenciais condições erradas e chamar a atenção da equipe de v&v. 55 GESTÃO DA ENGENHARIA DE SOFTWARE │ UNIDADE II » São bastante eficazes como um auxílio às inspeções de programas. É um complemento, porém não substitui as inspeções. Quadro 2. Checagem da Análise Estática Uso da análise estática » Útil quando a linguagem não faz checagem adequada de tipos e, por isso, muitos erros não são detectados pelo compilador (C). » Menos eficaz para linguagens que possui forte checagem de tipos e podem, portanto, detectar muitos erros durante a compilação (Java). Desenvolvimento de Software Cleanroom » Filosofia de desenvolvimento que tem como base evitar defeitos pelo uso de um rigoroso processo de inspeção. » Objetivo: conseguir um software sem nenhum defeito. » Processo de desenvolvimento baseado em: › Especificação formal. › Desenvolvimento incremental. › Programação estruturada. › Verificação estática usando rigorosas inspeções de software. › Teste estatístico do sistema. 56 UNIDADE II │ GESTÃO DA ENGENHARIA DE SOFTWARE Especificação formal e inspeções » O modelo baseado em estados é a especificação e o processo de inspeção checa o programa com relação a esse modelo. » A abordagem utilizada para o desenvolvimento tem como base transformações bem definidas, que tentam preservar a exatidão em cada transformação, para uma representação mais detalhada. » Argumentos matemáticos (não provas) são usados para aumentar a confiança no processo de inspeção. Equipes no processo Cleanroom » Equipe de especificação. Responsável pelo desenvolvimento e pela manutenção da especificação do sistema. » Equipe de desenvolvimento. Responsável por desenvolver e verificar o software. O software não é executado durante esse processo. » Equipe de certificação. Responsável pelo desenvolvimento de um conjunto de testes estatísticos para exercitar o software após o seu desenvolvimento (certificação da confiabilidade do software). Avaliação do processo Cleanroom » Resultados na IBM têm mostrado que os softwares possuem bem menos erros (2,3 erros para mil linhas de código). » Avaliação mostra que o processo não é mais caro do que outras abordagens. » Menos erros do que
Compartilhar