Baixe o app para aproveitar ainda mais
Prévia do material em texto
Brasília-DF. Processos de desenvolvimento do Projeto Elaboração Márcio de Oliveira Miranda Lopes Max Bianchi Godoy Produção Equipe Técnica de Avaliação, Revisão Linguística e Editoração Sumário APRESENTAÇÃO ................................................................................................................................. 4 ORGANIZAÇÃO DO CADERNO DE ESTUDOS E PESQUISA .................................................................... 5 INTRODUÇÃO.................................................................................................................................... 7 UNIDADE I PROJETANDO SISTEMA ........................................................................................................................... 9 CAPÍTULO 1 DESENVOLVIMENTO DO MODELO DE DADOS ........................................................................... 9 CAPÍTULO 2 CODIFICAÇÃO DO SISTEMA ................................................................................................... 14 UNIDADE II TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO ...................................................................... 19 CAPÍTULO 1 REALIZAÇÃO TESTE EM EQUIPE TÉCNICA ................................................................................. 19 CAPÍTULO 2 TIPOS DE TESTE ....................................................................................................................... 26 CAPÍTULO 3 DESENVOLVIMENTO DE VERSÃO-PILOTO .................................................................................. 37 CAPÍTULO 4 REALIZAÇÃO DE TESTE EM USUÁRIO FINAL ............................................................................... 38 CAPÍTULO 5 ELABORAÇÃO DE SOLICITAÇÕES DE MUDANÇAS ................................................................... 40 CAPÍTULO 6 ELABORAÇÃO DE MANUAL DO USUÁRIO ................................................................................ 42 PARA (NÃO) FINALIZAR ..................................................................................................................... 48 REFERÊNCIAS .................................................................................................................................. 49 4 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 5 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. 6 Atenção Chamadas para alertar detalhes/tópicos importantes que contribuam para a síntese/conclusão do assunto abordado. 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. 7 Introdução O planejamento corresponde a uma tarefa racional com o intuito de ordenar os meios para consecução de resultados. Assim, planejar é organizar. Nesse aspecto, o gerenciamento de projetos consiste em antever ações, a fim de alocar recursos e processá-los, de modo a se obter resultados anteriormente definidos. Apesar de todo o esforço despendido na busca e na organização de informações e no aperfeiçoamento dos artefatos conceituais do projeto, o planejamento ainda corresponde a uma aposta no futuro. Somente os processos do grupo de processos de execução, monitoramento e controle, com o peso dos fatos e da complexidade das situações apresentadas, é que conferem validade ao planejamento. Dessa forma, mesmo o projeto tendo surgido com o termo de abertura é a execução que lhe confere a vida; e o monitoramento e o controle lhe testam o desenvolvimento rumo aos resultados que são esperados. Assim, ao se debruçarem sobre esse conteúdo teórico, lembrem-se de que buscamos inserir no presente trabalho um pouco da experiência da equipe de professores, em sua maioria gerentes de projeto, por termos a convicção de que, mesmo com a teoria, é a prática que nos ensina como executar um projeto de qualidade. Objetivos » Aprofundar conhecimentos sobre o desenvolvimento de Modelo de Dados. » Compreender os procedimentos para codificação de Sistema. » Conhecer testes em sistema e de desenvolvimento de versão piloto. » Conhecer especificações para elaboração de Manual do Usuário. 8 9 UNIDADE IPROJETANDO SISTEMA CAPÍTULO 1 Desenvolvimento do modelo de Dados O Modelo de Banco de Dados descreve todo o projeto de banco de dados do sistema e apresenta a descrição formal dos tipos de dados que estão armazenados em um banco de dados. Antes de desenvolvermos um modelo de dados é necessário conhecer os seguintes conceitos: » Objeto representa tudo que a mente de um indivíduo pode separar, podendo ser ele concreto ou abstrato. » Os mecanismos de abstração servem para que os objetos sejam identificados, conforme os exemplos a seguir: › Classificação – agrupa objetos com o mesmo conjunto de propriedades – “ser membro de”. › Agregação – define uma nova classea partir de outras que a compõem – “ser parte de”. › Generalização – define uma classe como subconjunto de outra, mais genérica – “pertencer/ser um” – ter características: podem herdar propriedades de outros objetos. Um possível artefato referente ao modelo de dados pode incluir diagramas entidade- relacionamento, dicionário de dados, relação de usuários, papéis e permissões no banco de dados, especificações de índices, triggers, Stored procedures e outros elementos específicos ao projeto de banco de dados. Devido à diversidade de projetos, não é viável termos um modelo (template) definido para esse artefato, podendo ser utilizada uma 10 UNIDADE I │PROJETANDO SISTEMA ferramenta de modelagem de banco de dados para sua geração. Tal ferramenta precisa ser selecionada/acordada previamente pela equipe de desenvolvimento. Os Triggers (ou gatilhos) correspondem a pequenos códigos de que são armazenados dentro de um banco de dados, em que podem ser definidos blocos de tarefas que podem ser executados automaticamente. Dessa forma, toda vez que uma instrução for aplicada a uma tabela específica, o trigger pode ser acionado e, a partir daí, executar automaticamente determinado evento. Esses triggers podem ser usados para garantir a execução de comandos para uma tabela específico; contudo, alguns cuidados devem ser tomados ao serem criados, tais como evitar criar triggers que dupliquem regras já definidas nas “CONSTRAINTS” do banco de dados; algumas linguagens de banco de dados (tais como o Oracle) recomendam que os códigos no trigger sejam limitados em até 60 linhas (utilizando as Stored Procedures para algo mais complexo); ter muito cuidado ao criar triggers que disparem sob uma instrução UPDATE em uma Tabela – não pode alterá-la porque isso iria disparar triggers mais de N vezes no sistema, e, nesses casos, poderiam ocorrer problemas de memória e/ou resultados errôneos serem gerados. Os Stored procedures são pequenos trechos de programa de computador, mais complexos que os triggers, armazenados diretamente em um SGBD e que podem ser chamados frequentemente por um programa principal, tornando mais ágeis os procedimentos. Normalmente, o responsável por modelar o banco de dados é conhecido como projetista de Banco de Dados. A atividade realizada por esse profissional, ou por quem estiver com essa função, tem por objetivo a elaboração do projeto de banco de dados e, para tanto, deverão ser especificados os elementos necessários a fim de suportar os possíveis cenários de casos de uso previamente selecionados. O modelo de Banco de Dados deverá ser desenvolvido com base no Diagrama de Classes, que foi elaborado pela equipe de analistas de sistemas, fundamentalmente descritos por meio do documento de arquitetura. Assim, o projeto do banco de dados precisa levar em consideração os requisitos não funcionais, sobretudo os referentes ao desempenho necessário e à segurança requerida, os quais devem estar estabelecidos na matriz de requisitos do projeto. Como já citamos, o modelo de banco de dados precisa definir claramente quais serão as tabelas do sistema e seus campos, os relacionamentos e seus tipos, as chaves primárias e estrangeiras, os possíveis índices, os papéis e tipos de usuários (adicionando informações 11 PROJETANDO SISTEMA│ UNIDADE I sobre suas permissões), a especificação de Stored Procedures, de triggers e o Dicionário de Dados. Este último apresenta uma descrição textual dos valores armazenados e das convenções utilizadas em cada um dos elementos, conforme veremos adiante. O projeto do banco de dados precisa realizar uma estimativa quanto ao tamanho da base de dados no momento da implantação do sistema e elaborar uma previsão de crescimento ao longo do tempo, em termos relativos ou absolutos. Dessa forma, o projeto do banco de dados precisa realizar uma estimativa quanto ao tamanho da base de dados no momento da implantação do sistema e elaborar uma previsão de crescimento ao longo do tempo, em termos relativos ou absolutos. Para desenvolvimento do modelo de banco de dados podemos descrever as seguintes etapas, que podem ser alteradas de acordo com as especificidades do projeto ou a ferramenta escolhida para realização desse artefato: » Analisar, mecanismos de projeto definidos no “documento de arquitetura”, “diagrama de classes”. Outros elementos importantes a serem considerados são os requisitos não funcionais do sistema, presentes na “matriz de requisitos” e as especificações dos casos de uso, que estão no “modelo de casos de uso”. » Identificar, a partir do Diagrama de Classes que foi elaborado, as tabelas necessárias para armazenamento dos dados persistentes do sistema. » Identificar os relacionamentos e as chaves primárias e estrangeiras das tabelas. » Com base nos cenários de casos de uso e nos métodos definidos para as classes do sistema, identificar as Stored Procedures e triggers necessárias. » Com base nos requisitos não funcionais de desempenho e nos acessos previstos às tabelas dos sistemas, identificar os índices necessários para cada tabela. » Com base nos requisitos de segurança e perfis de acesso do sistema, identificar os papéis e usuários do banco de dados, com a definição de suas permissões. » Elaborar o dicionário de dados do sistema. 12 UNIDADE I │PROJETANDO SISTEMA » Elaborar o Modelo de Banco de Dados contendo os elementos identificados. » Revisar o Dicionário de Dados e o Modelo de Banco de Dados junto às áreas de homologação. » Analisar a conformidade entre o Modelo de Banco de Dados, o diagrama de classes, os requisitos do sistema e os mecanismos de projeto definidos no Documento de Arquitetura. São, portanto, artefatos importantes necessários como input (entradas) desse processo de confecção do Modelo de Banco de Dados: o Diagrama de classes, o Documento de arquitetura e o Glossário. Dicionário de dados O Dicionário de Dados é o elemento que apresenta uma descrição textual dos valores armazenados e de todas as convenções que foram utilizadas em cada um dos elementos. Dessa forma, um dicionário de dados (data dictionary) corresponde a uma coleção de metadados, que apresenta definições e representações de todos os elementos de dados. Segundo Almeida (1998), são informações que descrevem completamente os dados que representam e, dessa forma, permitem que o usuário decida sobre a utilização desses dados da melhor forma possível. Assim, os metadados permitem informar as pessoas a respeito da existência de um conjunto de dados ligados às suas específicas necessidades. Conforme Howe (1996), a palavra metadados foi criada por Jack Myres a fim de denominar os dados que descrevem registros em arquivos convencionais. O Dicionário de Dados corresponde a um documento que apresenta a explicação a respeito de todos os objetos nele criados e permite que os analistas obtenham informações sobre os objetos do modelo de uma forma textual. Esse documento contém explicações que seriam difíceis de serem incluídas em diagramas. Portanto, ele precisa ser bastante claro e consistente. Dentro de um contexto de Sistema Gerenciador de Banco de Dados (SGBD), um dicionário de dados corresponde a um grupo de tabelas que foram habilitadas para leitura ou consulta, sendo uma base de dados que apresenta as informações sobre: a definição dos elementos de dados, os perfis de usuários, papéis e privilégios, a descrição de objetos, relações de integridade de restrições, Stored Procedures, informações de verificação, estruturas gerais da base de dados, alocações de espaço etc. 13 PROJETANDO SISTEMA│ UNIDADE I São benefícios de um dicionário de dados dar consistência entre os itens de dados, por meio de diferentes tabelas como, por exemplo, a formatação de campos, a ser obedecida em todas as tabelas do banco de dados, e também conferir padronização, como definições semânticas a serem adotadas, incluindo formas de representação para os elementos de dados. Nesse caso, os componentessemânticos estarão focados na criação do significado dos elementos de dados. As definições e as representações indicam como os elementos de dados serão armazenados na estrutura computacional, de acordo com seu tipo. Esses tipos de dados podem ser números inteiros, caracteres textuais ou datas. Podemos dizer que os dicionários de dados são mais precisos que glossários, pois estes apresentam apenas termos e definições e aqueles costumam apresentar várias representações de como o dado pode ser estruturado e, por isso, podem envolver ontologias completas e lógicas distintas, que podem ser aplicadas a definições de cada um desses elementos de dados. Os Dicionários de Dados são construídos de forma separada do Modelo de Dados, uma vez que esse modelo inclui as complexas formas de relacionamentos entre os diferentes elementos de dados. A seguir observaremos um possível modelo para a construção do Dicionário de Dados: Dicionário de Dados Definições [Esta seção define os dados que formam o conteúdo essencial do documento. Eles devem estar relacionados em ordem alfabética para maior acessibilidade, podendo ser agrupados por contexto, conforme o caso.]. Termo Definição [Dado 1] [Definição do Dado 1] [Dado 2] [Definição do Dado 2] [Dado 3] [Definição do Dado 3] [ATENÇÂO: Os textos em azul são para auxiliar o preenchimento do formulário, devendo ser excluídos ao final da elaboração do registro.] 14 CAPÍTULO 2 Codificação do sistema Esta fase consiste na criação do código-fonte, que tem por objetivo implementar as funcionalidades especificadas nos requisitos, de acordo com os modelos definidos nos artefatos do projeto. Assim, essa atividade envolve escrever código, depurá-lo e integrá-lo progressivamente. Para a realização dessa atividade, os desenvolvedores utilizam artefatos de requisitos e de projetos produzidos e interagem com as equipes responsáveis por eles. A atividade de codificar programas, ou seja, de escrever o código propriamente dito do sistema é de importância fundamental. É de responsabilidade dos programadores e tem como objetivo a geração de códigos-fontes para os diversos elementos e componentes do sistema, visando uma versão operacional do sistema. Podemos considerar também inclusa nas, atividades de codificação, a programação de scripts, Stored Procedures e triggers de banco de dados, sendo que elas, nesta fase do projeto, estariam ligadas ao esforço de codificação, que deve estar bastante focado na produtividade dos programadores, uma vez que os riscos inerentes ao escopo e a arquitetura do sistema já foram mitigados ao longo de todas as fases do projeto. Podemos caracterizar o código-fonte como sendo qualquer trecho de código implementado ao longo do desenvolvimento do sistema. Apesar de representar um artefato concreto (código e arquivo-fonte existem), sua representação tem a finalidade conceitual de representar a unidade fundamental de um sistema, a qual é desenvolvida pela equipe de programadores do projeto. Assim, o trabalho de codificação é realizado com base nas versões intermediárias do sistema, que são estabelecidas ao final da fase de elaboração, e contempla os possíveis cenários de casos de uso especificados e projetados. Dessa forma, a codificação deve estar calcada nas Especificações de Casos de Uso, no Diagrama de Classes, no Modelo de Banco de Dados e no Documento de Arquitetura. As versões do Sistema, também chamadas de release, representam a criação do sistema executável ao final da fase do projeto e, dessa forma, um dos marcos do ciclo de vida do projeto. Essa compilação do sistema deve ser formalmente estabelecida pelo gerente de configuração. A partir daí, transforma numa versão. 15 PROJETANDO SISTEMA│ UNIDADE I Assim, podem ser geradas várias versões intermediárias antes da versão que ficará em produção durante todo o ciclo de vida do desenvolvimento do projeto. Mesmo para a validação efetiva da arquitetura, pode ser gerada uma primeira versão do sistema. Ela é representada por um algoritmo executável e que possibilite a realização de testes. Essa validação da arquitetura de software definida pode ser citada na documentação como sendo a “versão para validação da arquitetura”. Por conseguinte, as versões posteriores podem conter expressões como: “versão xx - com arquitetura testada e validada”. Para fins didáticos, a primeira versão operacional do sistema aparece apenas na atividade denominada “estabelecer versão do sistema”, quando essa é testada e homologada e, após isso, colocada uma versão em produção, podendo ser utilizada pelos usuários finais. Às vezes, na prática, algumas versões são disponibilizadas com partes do sistema a fim de serem testadas previamente, porém isso depende do tipo de sistema desenvolvido e do que foi acordado pela equipe de desenvolvimento com os clientes. As fases de realização desse processo, não necessariamente nesta ordem são: – análise das especificações de casos de uso (artefato contendo os Modelos de Casos de Uso), - verificação dos mecanismos de projeto previamente definidos nos artefatos “Documento de Arquitetura”, “Diagrama de Classes” e no Modelo de Banco de Dados. Após isso, devem ser codificados os elementos do sistema, tais como os scripts, as Stored Procedures e os triggers do banco de dados, se esses forem requeridos. Para tanto, é necessário revisar atentamente o código-fonte e os demais componentes do código, preferencialmente em conjunto com a área responsável, a fim de homologar os elementos já codificados em conformidade com as especificações e requisitos do sistema. Assim, os documentos necessários (input) para a realização dessa fase são os seguintes artefatos: Modelo de Casos de Uso, Diagrama de Classes, Modelo de Banco de Dados e o Documento de Arquitetura, conforme já mencionado neste caderno. 16 UNIDADE I │PROJETANDO SISTEMA Exemplo de um trecho de codificação de um sistema: Dim dbsNorthwind As DAO.Database Dim rstOriginal As DAO.Recordset Dim rstDuplicate As DAO.Recordset Dim varBookMark As Variant Set dbsNorthwind = CurrentDb ‘Create the first Recordset. Set rstOriginal = dbsNorthwind.OpenRecordset(“Orders”, dbOpenDynaset) ‘Save the current record position. varBookMark = rstOriginal.Bookmark ‘Create a duplicate Recordset. Set rstDuplicate = rstOriginal.Clone() ‘Go to the same record. rstDuplicate.Bookmark = varBookMark rstOriginal.Close Compilação do Sistema (build) A Compilação do Sistema, também conhecida por build, representa a transformação do código fonte em um sistema executável compilado. Ao longo de todo o projeto de desenvolvimento podem ser geradas inúmeras compilações do sistema com o intento de testar, integrar e/ou validar. A última compilação do sistema será a versão final. Os responsáveis por essa importante etapa do processo são os programadores. Gerência de Versões É muito importante que as equipes desenvolvedoras do sistema possam seguir uma política de numeração das versões do sistema, de forma a permitir, com facilidade, que seja identificada a estabilidade dos itens constantes da configuração. Tal política deve ser aplicável principalmente no que diz respeito ao sistema completo. Contudo, poderão ocorrer situações em que seria necessária uma referência numérica em alguns componentes isolados de um determinado sistema. Dessa forma, essa diretriz poderá, em alguns casos, ser aplicada a ambos (sistema e determinados componentes), ressalvando formalmente sua utilização. 17 PROJETANDO SISTEMA│ UNIDADE I Formato do Número de Versão Podem ser atribuídos diferentes formatos. Contudo, convenciona-se a utilização do formato padronizado abaixo: » maior. menor [.correção] [-rótulo] » maior Corresponde ao número principal da versão, sendo que a atualização desse número sinaliza uma quebra de compatibilidade com a versão anterior. Tal situação normalmente ocorre mediante a realização de modificações significativas na arquiteturado sistema ou em componentes fundamentais. » menor Equivale ao número secundário da versão, sendo que a atualização desse número enseja a realização de alterações no sistema ou em componentes, com impacto suave ou relativo em suas funcionalidades, porém com a manutenção da compatibilidade com as versões secundárias anteriores. » correção (opcional) Representa o número de versões de correção disponibilizadas, ou seja, quando há a atualização desse número é indicado ao usuário que ocorreram correções de problemas detectados na versão anterior, porém sendo mantida a total compatibilidade com essa. » rótulo (opcional) Corresponde a um texto, normalmente em letras minúsculas, que descreve algumas especificidades da versão disponibilizada. É utilizado com as expressões, por exemplo: alfa, beta, data de geração da versão ou nome da fase em que está o projeto (quando de sua execução) etc. Evolução do Número de Versão Durante o desenvolvimento de um sistema/componente, convenciona-se chamar qualquer versão antes da disponibilização de “0.1” e a primeira a ser disponibilizada como “1.0”. 18 UNIDADE I │PROJETANDO SISTEMA Seguindo essa premissa, a evolução dos números ocorre de acordo com as regras que citamos anteriormente. Rótulos Comuns Os rótulos são opcionais, sendo os mais comumente utilizados no desenvolvimento de sistemas os seguintes: » Alfa É quando se trata de versão ainda instável, a qual foi disponibilizada para testes pelas equipes de testes, de desenvolvimento e/ou de homologação. » Beta Refere-se a uma versão ainda instável, que é disponibilizada para ser testada pelos usuários finais do sistema. » RC (ou Release Canditate) Trata-se de uma versão estável, podendo ser uma possível versão final do sistema, caso nela não sejam identificados, durante os testes, quaisquer erros graves ou mesmo que forem impeditivos de sua aceitação pelos usuários finais. 19 UNIDADE II TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO CAPÍTULO 1 Realização Teste em equipe técnica O teste de sistema valida os aspectos funcionais do sistema, incluindo a análise de desempenho, a adequação e a consistência das funcionalidades definidas que serão feitas. Apesar de ser comum a realização de testes não projetados devidamente (ad hoc) durante o processo de codificação, a atividade de teste envolve uma abordagem mais sistemática. Da mesma forma que o projeto, o teste em equipe pode ser descrito como uma atividade progressiva, indo, normalmente, do elemento de menor complexidade para o de maior. Dessa forma, por exemplo, enquanto os testes de unidade são utilizados para verificar as partes individuais do sistema, que são seus módulos, funções e o interfaceamento delas, o teste de integração é responsável por verificar o funcionamento dessas partes, uma vez combinadas. Segundo Reis (2003), entre as atividades fundamentais podem-se destacar como importantes do ponto de vista da realização dos testes, a fim de garantir a qualidade da peça final de software (sistema): » a revisão e auditoria de artefatos, incluindo código-fonte; » o levantamento e análise de métricas; » os testes (em alguns casos incluindo os testes públicos com grupo determinado de usuários); » a conformidade com a padronização interna (políticas e regras internas da empresa); » a padronização e certificação externa (em relação aos padrões estabelecidos no mercado). 20 UNIDADE II │TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO Antes de iniciar o processo de testes, como vimos, é necessário elaborar o “Plano de Testes”, onde são definidas as situações de teste para cada caso de uso, além de serem definidas as respostas esperadas em cada um deles. Além disso, outros testes específicos que devem ser realizados durante a atividade de teste, a fim de identificar comportamento do sistema em situações de estresse. Após essa atividade, poderão ser identificados novos requisitos, que serão propostos pela equipe de testes e poderão fazer parte de novo versionamento. Como citamos, deve ser verificado pelo programador se o código fonte está de acordo com os testes parciais definidos anteriormente. O engenheiro de testes ou outro que exerça esse papel deve estar munido dos artefatos previamente gerados e buscar prováveis inconsistências e erros na implementação dos requisitos presentes na iteração atual, o que poderá ajudar na identificação das atividades que restam para finalizar a iteração atual e a situação identificada no projeto. Além disso, posteriormente é realizado um teste global buscando quaisquer inconsistências e erros na implementação dos requisitos presentes nas iterações. Ao final desse teste, é avaliada se a versão realizada no sistema pode ou não ser disponibilizada para sua implantação e utilização pelos usuários, inicialmente como uma “versão-piloto”. Uma vez liberada a “versão-piloto”, o projeto pode passar para as atividades de desenvolvimento de manuais técnicos e de operação do usuário, elaboração de pacotes de instalação. Os testes unitários, realizados pelos programadores da equipe do projeto, têm como objetivo avaliar se os elementos do sistema, que foi codificado, realmente atendem as respectivas e especificações de requisitos predefinidos. Assim, a realização de testes unitários precisa considerar a criação de componentes de teste para cada um dos elementos do sistema implementado. Como prática recomendada, esses componentes de teste devem ser implementados antes da implementação dos elementos do sistema que estiverem associados a ele. Dessa forma, a criação de componentes de teste tende a facilitar os esforços futuros de realização de testes de regressão sobre todo o sistema. Tais testes são fundamentais a fim de garantir que as novas implementações, sejam por melhoria ou correção, não introduzam erros em trechos de código que já foram previamente testados. 21 TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO│UNIDADE II Além dos testes funcionais, algumas outras verificações podem ser também realizadas sobre os elementos do sistema, tais como as análises de: » cobertura dos testes; » código que não foi utilizado; » desempenho do código gerado (chamada de profiling); » alocações/desalocações de memória. No mercado existem disponíveis diversas plataformas e ferramentas que podem ser utilizadas para realizar testes unitários e de análise de código, sendo que algumas dessas ferramentas são ou podem ser integradas, a fim de obter melhores resultados. A atividade de testes deve ser desenvolvida com base nas especificações de Casos de Uso previamente definidos, no Diagrama de Classes, no Modelo de Banco de Dados e no Documento de Arquitetura. Como possíveis passos para a realização da atividade de testes, podemos destacar os seguintes: » Desenvolvimento de componentes de teste, feitos de acordo com as especificações dos elementos implementados. » Realização de testes funcionais a partir do código-fonte. » A realização de análises sobre o código-fonte dos elementos. » Correção de problemas identificados durante os testes e análises conforme a necessidade. » Disponibilização do elemento testado para integração e compilação. Objetivo do Processo O objetivo de um processo de testes é o de possibilitar a verificação do software que está sendo construído pela equipe de desenvolvedores. Esse processo tem o intuito de conceder maior qualidade ao sistema em desenvolvimento. Por meio de um relatório, chamado de “Relatório de Resultado dos Testes”, é possível que seja avaliada a conformidade do produto (sistema) em relação aos requisitos estabelecidos no projeto de teste, que foram especificados pelos solicitantes. 22 UNIDADE II │TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO A realização dos testes corresponde a uma das partes importantes do desenvolvimento de qualquer software. Um processo consistente de teste de software apresentado foi desenvolvido, baseado nos conceitos do RUP (RationalUnified Process). O Rational Unified Process corresponde a um processo de engenharia de software que oferece uma abordagem baseada em algumas disciplinas, de forma a atribuir tarefas e responsabilidades dentro de uma sistemática de desenvolvimento. Assim, a meta desse processo é a de garantir a produção de sistemas (software) com um alto nível de qualidade. O RUP apresenta-se com duas dimensões: o tempo (que apresenta os aspectos do ciclo de vida do processo à medida que esse se desenvolve) e as disciplinas (que agrupam as atividades de maneira lógica, tendo por base a natureza de cada uma). Em um processo de desenvolvimento de software, conforme o RUP, é necessarío haver as seguintes fases: » Dinâmica – define quando o sistema é aprovado e indica as fases, os marcos e as interações do processo. » Estática – indica como o processo está descrito, a partir de atividades, fluxos de trabalho, componentes, disciplinas, artefatos e dos papéis desempenhados. Assim, durante o ciclo de vida do projeto, há a necessidade da existência de pontos de verificação, que estão focados em conferir qualidade ao produto. Tais procedimentos preestabelecidos desenvolvem e mantêm um processo repetitivo, que é iterativo e incremental, em que o produto é constantemente avaliado. Caso necessário, alterações são realizadas ao longo do processo, até que o sistema esteja maduro e, assim, pronto para ser disponibilizado para o usuário final. Durante as fases, existem pontos de controle ou verificação, em que são realizados testes diversos, a fim de comparar a conformidade do produto com o que foi estabelecido e descrito na documentação do projeto. Métodos de Teste Basicamente, apesar de existirem diversas metodologias e classificações de testes, conforme descrito no modelo RUP, tais metodologias estão subdivididas nos métodos da: 23 TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO│UNIDADE II Caixa Branca (Estruturais) Tem por objetivo analisar e descobrir possíveis falhas ou defeitos na estrutura interna, ou seja, no código do software. Assim, os testes citados, como sendo de Unidade, geralmente são efetuados por programadores da equipe de desenvolvimento ou outra definida para tal a partir dos códigos gerados. Em testes da Caixa Branca podem ser realizados os referentes à unidade ou testes unitários e os testes de integração. Esse estágio está focado na verificação dos menores elementos que podem ser testáveis no software. Nesse caso, o implementador realiza os testes unitários durante o processo de desenvolvimento do sistema. Os testes de Integração são executados a fim de garantir que os componentes do modelo de implementação possam funcionar adequadamente quando esses forem combinados. Esse teste (de integração) é, também, responsável por verificar possíveis erros nas especificações estabelecidas para as interfaces. Caixa Preta (Funcionais) Apresenta como objetivo investigar se os requisitos estabelecidos foram satisfeitos pelo software. Tem como atribuição verificar os resultados produzidos e, assim, não requerem conhecimentos internos a respeito do sistema, apenas se preocupando com os requisitos do negócio. São exemplos desses testes os do tipo funcional, de usabilidade, de configuração, de instalação, de estresse, de desempenho, entre outros. Em Testes da Caixa Preta podem ser realizados os testes de sistema e os de aceitação. Os testes de Sistema são, normalmente, realizados no momento em que o software completo já está funcionando. Portanto, seu objetivo é o de verificar se o funcionamento de todos os elementos do sistema está de acordo e em perfeita integração. Já os testes de aceitação são realizados em momento anterior ao da implantação do sistema e têm como objeto a verificação se o software está pronto para ser disponibilizado aos usuários finais, a fim de executar as funções e as tarefas que foram previamente definidas. 24 UNIDADE II │TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO No próximo capítulo trataremos com mais detalhe dos tipos de testes acima descritos e de outros realizados em sistemas. Elaborar Casos e Procedimentos de Teste Todos os testes precisam ser executados com base nos artefatos “Casos e Procedimentos de Teste” (apresentados adiante), construídos previamente pela equipe de desenvolvimento, em conjunto com a equipe de realização dos testes e outros participantes que foram requeridos nesse processo. Neles são desenhados os possíveis testes aplicáveis ao sistema, a descrição dos procedimentos de teste e, em alguns casos, os scripts de teste a serem utilizados. O desenvolver dos casos e procedimentos de teste são realizados a fim de validar os requisitos nos possíveis cenários definidos nos Casos de Uso previstos para o sistema. Nesse aspecto, para a realização do preenchimento do artefato é necessário que, para construí-los, o profissional se baseie nos artefato onde foram definidos os casos de uso para o sistema. Cada um dos testes a ser realizado precisa estar definido no artefato “Casos e Procedimentos de Teste”. Nele, podem constar os possíveis exemplos das respostas corretas previstas para cada um dos testes estabelecidos. Assim, quando da realização dos testes, a equipe responsável precisa avaliar comparando o que foi previsto para cada teste com os resultados reais obtidos durante a sua realização, buscando a conformidade do sistema em teste com os requisitos estabelecidos na matriz de requisitos e nas especificações dos casos de uso, a fim de obter, futuramente, a aprovação dos representantes dos usuários quanto à validação realizada e à adequação da arquitetura aos requisitos estabelecidos. 25 TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO│UNIDADE II 26 CAPÍTULO 2 Tipos de Teste Testes realizados em Sistemas Testes de Funcionalidade Os testes de funcionalidade avaliam o conjunto de características, a capacidade, a segurança, e se existem regras que devem ser aplicadas somente a determinadas informações consideradas relevantes para a compreensão dos conteúdos ou da navegação do sistema. Tais testes compreendem a realização de teste funcional; teste de volume; de controle de segurança e acesso; e de acessibilidade. Teste Funcional O teste funcional tem por premissa verificar a aceitação dos dados, do processamento e da resposta a ele e da implementação apropriada das regras de negócio. Assim, esse tipo de teste está baseado em técnicas citadas como de “caixa-preta”, uma vez que tenciona verificar o sistema e seu processamento interno, por meio de sua interação, de sua interface com o usuário e da análise das saídas ou de seus resultados. Assim, para execução desses tipos de testes funcionais seriam utilizados os procedimentos anteriormente definidos como suficientes, nos Casos de Teste dessas respectivas funcionalidades. O objetivo desse tipo de teste é o de tentar assegurar a funcionalidade do sistema e, para tanto, inclui testes de entrada de dados, de resposta e de processamento. Como técnica/método, excuta cada caso de uso, seguindo o fluxo previsto nos casos de uso, ou ainda, segue as funções. Para tanto, são utilizados dados válidos e inválidos, a fim de verificar se os resultados esperados ocorrem quando dados válidos são usados; se as mensagens de erro de avisos apropriadas são exibidas quando dados inválidos são utilizados, e se cada regra de negócio é corretamente aplicada. vanderlei.santos Realce vanderlei.santos Realce 27 TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO│UNIDADE II Teste de Volume Nesse tipo de teste é submetida uma grande quantidade de dados (volume) no sistema a fim de se determinar quais seriam os limites de bom funcionamento e que quantidade poderia causar falhas no software. Assim, esse teste busca identificar a carga máxima persistente que o sistema poderia suportar em um dado período pré-estabelecido. Objetiva verificar se o sistema pode funcionar com sucesso sob alguns cenários críticos,com grande volume de dados. Por exemplo, determinar um número máximo de clientes que podem acessar ou estar conectado ao sistema conjuntamente com uma boa performance ou, mesmo, de verificar todos os usuários que podem realizar a mesma tarefa ou função e sobre que circunstâncias de desempenho. Além disso, por exemplo, esse teste pode buscar a visualização do tamanho máximo alcançado pelo banco de dados, sem comprometer o desempenho do sistema, ou mesmo, apurar a quantidade máxima de múltiplas consultas ou o número de transações que podem ser executadas simultaneamente. Para tanto, se utiliza de testes desenvolvidos para esse fim, chamados de testes de Desempenho ou testes de Carga. Os resultados são obtidos a partir da utilização de múltiplos clientes executando os mesmos testes ou fazendo testes complementares para produzir transações de pior desempenho ou transações mistas (de alto e baixo desempenho). Além disso, esse teste busca definir limites para o tamanho do banco de dados e para que múltiplos clientes possam executar consultas simultâneas e, até mesmo, reportar transações simultaneamente por períodos prolongados de tempo. Teste de Controle de Segurança e Acesso Os testes de controle de segurança e de acesso concentram-se, principalmente, nas áreas de segurança em nível de: » Sistema – que inclui o acesso ao sistema realizado de forma local ou remota. Prevê que apenas os usuários com permissão específica de acesso sejam capazes de adentrar ao sistema. No caso de sistemas integrados com outros, é necessário realizar testes de integração. » Aplicação – que inclui o acesso aos dados e/ou às funções do negócio. Para tanto, prevê que, baseado na segurança requerida/desejada para o sistema, os usuários estejam restritos as suas funções específicas definidas nos casos de uso, ou estejam limitados aos dados que possam ser a eles vanderlei.santos Realce vanderlei.santos Realce vanderlei.santos Realce vanderlei.santos Realce 28 UNIDADE II │TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO disponibilizados, de acordo com o perfil predefinido a eles. Para tanto, são identificados e listados cada tipo de usuário, bem como as funções ou dados aos quais cada um desses tipos tem permissão de acesso. A fim de realizar esses testes, são criados testes específicos para cada tipo de usuário e são verificados os acessos de cada permissão, criando transações específicas para cada um dos tipos possíveis. Também é necessário modificar o tipo de usuário e, a partir disso serem executados novamente os testes. Nesses casos, são verificadas as funções adicionais ou se os dados foram disponibilizados de forma correta ou não. Teste de Acessibilidade Os testes de acessibilidade são responsáveis por verificar se a interface do usuário está fornecendo acessos apropriados às funções do sistema e à navegação de forma adequada. Esses testes visam à garantia de que os objetos pertencentes à interface do usuário estejam funcionando de acordo com os padrões constantes dos artefatos do projeto, que foram definidos pelos clientes. O teste de acessibilidade tem por objeto verificar se a navegação do sistema está refletindo corretamente as funções e requisitos de negócio. Para tanto, busca verificar objetos e características da janela, tais como: menus, tamanho, posição, estado e foco, conforme os padrões. A fim de realizar esse teste é, normalmente, necessário criar ou modificar diferentes testes para cada uma das janelas de acesso. Dessa forma, busca-se verificar se a navegação está correta e se os estados de objeto de cada janela do sistema e dos objetos previstos também estão corretos, conforme os resultados esperados. Nesses casos, é requerida a realização da navegação janela a janela, campo a campo, e a utilização de métodos de acesso diversos (teclas de atalho, mouse, tecla de tabulação (TAB)). Testes de Usabilidade Os testes de usabilidade são responsáveis por verificar a estética, a acessibilidade humana, a consistência da interface de usuário e a pertinência de assistentes e telas de ajuda. Verificam a facilidade que o sistema apresenta de ser facilmente operado e vanderlei.santos Realce vanderlei.santos Realce 29 TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO│UNIDADE II entendido pelos usuários, assim como o claro entendimento das funções do sistema pelos usuários, por meio da utilização de assistentes eletrônicos, manuais, telas de ajuda (help on-line) etc. Como técnica de teste, pode-se, por exemplo, ser definida a execução de diferentes operações do sistema e, para tanto, é requerida a utilização de manuais e das telas de auxílio. Testes de Confiabilidade Testes de confiabilidade são os destinados a avaliar a confiança nos resultados obtidos pelo sistema, a frequência da ocorrência e da severidade de falhas e sua recuperação e o chamado MTBF (tempo entre a ocorrência das falhas). Com referência à confiabilidade dos sistemas, citamos os tipos de teste mais conhecidos: de estresse, de regressão, de integridade e de estrutura. Teste de Estresse Esse tipo de teste de confiabilidade intenta verificar o desempenho do sistema. Para tanto, programa e executa procedimentos a fim de entender o comportamento do sistema mediante situações-limite, ou mesmo fora da tolerância esperada. Tipicamente, envolve recursos baixos ou uma grande concorrência por eles. Assim, baixos recursos disponíveis revelariam possíveis defeitos que não são aparentes durante o uso do sistema em condições normais. Assim, outros defeitos podem resultar de tal concorrência de recursos compartilhados, tais como a possibilidade de ocorrer travamento em banco de dados, resultante da utilização de todas as bandas de rede de comunicações. Alguns desses defeitos são normalmente obtidos a partir de testes funcionais e de carga. Esse teste busca verificar se o sistema funcionaria sem apresentar problemas na ocorrência das condições de estresse predefinidas, tais como: » Quantidade máxima ou fisicamente suportada de clientes conectados ou por meio de simulação. » Pouca memória disponível no servidor. » Diversos usuários realizando as mesmas transações contra os mesmos dados ou contas. vanderlei.santos Realce vanderlei.santos Realce 30 UNIDADE II │TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO » Grande volume de transações. São utilizados diferentes testes desenvolvidos e acordados previamente a fim de verificar o desempenho ou estabelecer testes de carga de dados/usuários. A fim de poder testar a limitação de recursos, eles podem ser executados em uma máquina simples, com memória RAM e drives de disco no Servidor de tamanho mínimo requerido ou que sejam limitadas a condições passíveis de serem encontradas pelos usuários. Para que os testes de estresse sejam pertinentes, devem ser utilizados múltiplos clientes (de forma real ou simulada), executando os mesmos testes ou testes complementares, a fim de produzir volumes de transação limite ou de transações mistas (alto e baixo desempenho). Observamos que, para estressar redes, pode ser necessário o uso de ferramentas adicionais a fim de carregá-la com mensagens ou pacotes. Além disso, o armazenamento persistente a ser utilizado pelo sistema deve ser reduzido temporariamente a fim de que seja restringido o espaço disponível para o crescimento do banco de dados. Teste de Regressão O teste de regressão consiste em realizar um teste, com caráter seletivo, de um software que foi modificado ou de interações anteriores. Tem como propósito garantir que qualquer falha tenha sido reparada e que nenhuma operação que funcionava anteriormente tenha falhado após os reparos, ou seja, que as novas características adicionadas não criaram problemas com as versões anteriores ou com outros sistemas. Tal teste objetiva verificar que alguma das alterações que foram realizadas no software gerou qualquer tipo de inconsistência no aplicativo ou em outros sistemas que estejam integradosa ele. Como método, são utilizados scripts especialmente desenvolvidos para serem executados de forma progressiva a fim de verificar se alguma falha foi encontrada após terem sido realizadas alterações. Teste de Integridade O teste de integridade prevê que os bancos de dados e as regras de negócio precisam ser verificados de forma independente. Assim, esse tipo de teste não deve ser realizado por meio da interface de usuário definida para o acesso aos dados. vanderlei.santos Realce vanderlei.santos Realce 31 TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO│UNIDADE II Tem por objetivo executar os métodos de acesso à base de dados e regras de negócio de forma independente da interface do usuário, de forma que seja possível observar e registrar o comportamento funcional incorreto ou a corrupção de dados. Como técnica, busca que sejam examinados os bancos de dados a fim de garantir que os dados tenham sido povoados de acordo com o planejado e que todos os eventos possam ocorrer de forma própria e correta. Para tanto, são revisados os dados retornados a fim de verificar se estão corretos. Para que isso ocorra, são executados métodos de acesso e processos, utilizando, em cada um, dados válidos e inválidos ou solicitações de dados. Observa-se que os testes podem exigir disponibilização de ambiente específico, com drivers e sistema gerenciador de banco de dados próprio, para que os dados sejam diretamente incluídos na base e os resultados obtidos possam ser livremente comparados com os requeridos. Nesse caso, se existirem processos de suporte para a realização do teste, esses precisam ser acionados de forma manual. Teste de Estrutura São testes destinados a avaliar a adequação do objetivo do teste em relação a seu design e sua formação. Em geral, são realizados em aplicativos habilitados para a Web, garantindo que todos os links estejam conectados, que o conteúdo apropriado seja exibido e que não haja conteúdo órfão. Testes de Desempenho Os testes de desempenho avaliam a eficiência, o tempo de resposta, a vazão e o consumo de recursos pelo sistema. Compreendem a realização dos testes de desempenho, de carga, de contenção, de perfil de desempenho. Teste de Desempenho (propriamente dito) O teste de desempenho mede e avalia o tempo de resposta, o número de transações e outros requisitos sensíveis ao tempo. Esse teste intenta verificar o comportamento do sistema para funções de transações ou de negócio, designadas sob as condições em carga normal de trabalho e em caso de carga limite de trabalho. vanderlei.santos Realce vanderlei.santos Realce vanderlei.santos Realce 32 UNIDADE II │TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO Utiliza procedimentos de teste desenvolvidos para avaliar a funcionalidade em cada ciclo de negócio. Para tanto, modifica os arquivos de dados a fim de aumentar o número de transações ou de scripts com o propósito de aumentar o número de iterações em que cada transação pode ocorrer. Tais scripts precisam ser executados, normalmente, em uma máquina, (essa é a melhor forma de verificar) utilizando um simples usuário e por meio de transações simples, podendo ser repetido para múltiplos clientes de forma real ou virtual. Observamos que os testes de desempenho incluem a presença de uma carga de trabalho no servidor. Para tanto, existem muitos métodos que podem ser utilizados: as transações realizadas diretamente para o servidor, normalmente na forma de SQL; a criação de carga de usuário virtual a fim de simular muitos clientes; as ferramentas de Emulação de Terminais remotos são usadas para sobrecarregar a rede de mensagens; o uso de múltiplos clientes físicos executando scripts de teste a fim de aumentar a carga do sistema. Os testes de desempenho podem ser realizados em máquina ou tempo dedicados, permitindo o controle máximo e com medidas mais precisas. Recomenda-se, para testes de desempenho, a utilização de bancos de dados com tamanho real ou aproximado. Teste de Carga Este teste submete o sistema à grande variação de carga de trabalho a fim de verificar o comportamento de desempenho e a habilidade de continuar funcionando corretamente sob a exposição em diferentes cargas de trabalho. Além disso, avalia as características de desempenho, as taxas de transações, o tempo de resposta etc. Objetiva verificar o comportamento do sistema em condições de carga de trabalho variante e, para tanto, utiliza testes desenvolvidos para testes funcionais ou de ciclo de negócio, por meio de modificar arquivos de dados a fim de aumentar o número de transações, testes para aumentar o número de vezes que as transações ocorrem ou variações quanto ao número de usuários que estão conectados ao sistema. Observamos que tais testes, preferencialmente, devem ser realizados em máquina ou ambiente dedicado, simulando as condições reais de trabalho ou em determinado tempo dedicado. Tais procedimentos permitem o máximo controle e medidas mais precisas, preferencialmente apresentando bancos de dados de teste com tamanho real ou aproximado ao utilizado. vanderlei.santos Realce 33 TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO│UNIDADE II Teste de Contenção Esse tipo de teste está direcionado a verificar a habilidade de um componente em suportar demandas múltiplas por meio de um recurso. Teste Perfil de Desempenho Teste em que o perfil de andamento do seu objetivo é monitorado (inclusive fluxo de execução, acesso a dados e chamadas de função e de sistema), a fim de identificar e lidar com gargalos de desempenho e processos ineficientes. Testes de Suportabilidade Os testes de suportabilidade verificam a facilidade de instalação e os requisitos de configuração, de compatibilidade e de adaptabilidade. Tais testes comportam os testes de instalação e de configuração do sistema. Teste de Instalação O teste de instalação busca garantir que o software possa ser instalado completamente, de forma personalizada, ou ser atualizado (conforme o objetivo desses) sob condições apropriadas, e procura verificar que, uma vez instalado, o sistema funcionará corretamente. Seu objetivo é, portanto, verificar se o software é instalado corretamente em cada configuração de hardware exigida, sob a condição de que: » novas instalações em novas máquinas possam ser realizadas onde o sistema não tenha sido instalado antes (detecção de versões/instalações anteriores); » atualizações sejam efetuadas em máquinas onde o sistema tenha sido previamente instalado e a versão seja compatível com elas. São métodos de efetuar o teste: a realização da instalação e a observância dos resultados. Para tanto, podem ser utilizados conjuntos predeterminados de scripts de testes funcionais. Teste de Configuração do Sistema Esse tipo de teste verifica a operação do sistema em diferentes configurações de software e hardware, ou seja, se o sistema-alvo do teste pode funcionar corretamente nas vanderlei.santos Realce vanderlei.santos Realce vanderlei.santos Realce vanderlei.santos Realce vanderlei.santos Realce 34 UNIDADE II │TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO configurações de hardware e software exigidas. Para tanto, pode fazer uso de scripts de testes funcionais e pode abrir e fechar diferentes softwares relacionados e que não sejam os alvos de teste durante e antes da sua execução para avaliar o desempenho do sistema. Além disso, se for o caso, pode buscar a repetição desses processos e/ou diminuir a capacidade de memória disponível para avaliar situações extremas. Busca efetuar os testes nos ambientes definidos e em especificações que forem suplementares. Observa-se a viabilidade de se investigar quais seriam as aplicações adicionais que poderiam ser tipicamente utilizadas pelos usuários do sistema e quais dados essas aplicações estariam administrando, tais como planilhas, bancos de dados, documentos etc. Além disso, verificar quais serão os sistemas operacionais utilizados na rede onde o sistemairá funcionar, as informações sobre os servidores da rede, os bancos de dados, os sistemas gerenciadores de bancos de dados e aspectos relacionados às situações reais de uso do sistema, que precisam ser relacionados como parte desses testes. Como artefatos requeridos (input) para a realização dessa atividade citamos: o código-fonte; o Modelo de casos de uso; o Diagrama de classes; o Modelo de banco de dados e o Documento de arquitetura. A seguir, mostramos um exemplo de Artefato de “Relatório Final de Testes”. 35 TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO│UNIDADE II 36 UNIDADE II │TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO 37 CAPÍTULO 3 Desenvolvimento de Versão-Piloto Após terem sido realizados todos os testes predefinidos e obtidos os resultados esperados para a peça de software, alguns problemas ainda podem ser descobertos ou por não terem sido previstos ou devido a situações novas que poderão vir a surgir. Para tanto, é extremamente recomendável que se disponibilize uma “versão-piloto”, que deve ser submetida a um número selecionado de usuários, suficientes para oferecer uma prova real de como o sistema se comporta frente ao uso. Tal fase é importante e, em casos de sistemas que estejam sendo substituídos por outros ou de serviços que passarão a ser suportados pelo novo sistema, é fundamental que o sistema ou formato de realização dos serviços seja mantido em paralelo, seja pela continuidade do serviço em caso de problemas ou pela correta análise dos resultados fornecidos pelo sistema. A versão-piloto, uma vez aprovada, se não for detectada qualquer restrição ou problema, poderá passar a ser utilizada para uso definitivo e, a partir daí, distribuída para todos os usuários. Para esse teste piloto, é recomendável que seja estabelecido um tempo adequado de teste e, também, situações reais de utilização do sistema. Poderão ser simulados testes extremos e outros tipos que simulem períodos de picos e vales de utilização. Assim, as atividades do grupo de processos de monitoramento e controle são constituídas, também, pela verificação do escopo, ocorrendo de forma paralela à execução do projeto. 38 CAPÍTULO 4 Realização de Teste em usuário final Como já observado, antes de disponibilizar o teste para os usuários, normalmente, visando à qualidade do produto final, uma série de testes já foram realizados e algumas possíveis correções já foram feitas. O ato de testar o código significa verificar se as funcionalidades atendem ao que foi especificado pelos usuários e, por isso, trata-se de uma análise das pré-condições e pós-condições diante do contexto no qual está inserido o sistema ou módulo, objeto dos testes. É fundamental definir e realizar todos os testes julgados como necessários, aplicando-os em situações e condições próximas ao ambiente e à realidade que o sistema irá enfrentar, a fim de que seja garantida a qualidade, eficiência e, até mesmo, resguardar a imagem da equipe de desenvolvedores antes que seja disponibilizada uma versão de teste para os usuários finais. Essa é uma prática correta, seguida pela maioria das equipes de desenvolvimento e grandes empresas de software no mundo. Apesar de, aparentemente, todos os itens que foram solicitados pelos clientes já terem sido checados e todas as funcionalidades formalizadas já devem estar de acordo com o que foi pedido, em face dos testes já realizados e da comparação com o que está formalizado nos artefatos e em outros documentos assessórios do processo de desenvolvimento, nesse tipo de teste podem surgir outros problemas advindos de testes que não foram previamente estabelecidos – porém eram necessários, de aspectos que não foram considerados e até mesmo de problemas que não foram identificados nos testes previstos. Assim, normalmente, para a realização desses testes é escolhido um grupo de usuários finais que possam representar bem os diferentes tipos de usuários finais do sistema. Esse grupo começará a utilizá-lo – em condições normais, porém assistido e reportando sazonalmente suas observações à equipe de desenvolvimento ou à responsável pela consecução de tais testes. Esses testes, além de verificar a operacionalização normal do sistema, podem estar focados também na estrutura interna das funções de segurança do software, a fim de verificar se os subsistemas, módulos ou outros sistemas que estão integrados estão atendendo plenamente às especificações que foram definidas por esses usuários. Assim, o teste em usuários finais preconiza, também, a verificação de que o software está de acordo com o que era esperado por esses usuários. Se ele atende plenamente 39 TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO│UNIDADE II suas necessidades ou se ainda existe algo necessário que não foi inicialmente previsto quando da realização do projeto. Nesse ponto, com a utilização do sistema em condições reais, às vezes são verificadas novas funcionalidades que seriam necessárias e que não foram previstas ou são abertas novas possibilidades que não haviam sido vislumbradas pelos usuários e solicitantes do sistema. Nesses casos, deve ser avaliada a realização de correções, um versionamento (realização de nova versão) ou, mesmo, a confecção de novo projeto que contemple as novas necessidades apresentadas. Podem ser detectadas vulnerabilidades no sistema, que podem ser oriundas de uso de funcionalidades ou conduta de operação não prevista da realização de configurações diferentes das previstas e de outros aspectos que preconizem a realização de correções ou adaptações diversas, bem como a possibilidade de implementação de novos aspectos de segurança, permutacionais (senhas) etc. Podemos verificar que a realização desse teste com os usuários finais é fundamental a fim de buscar a garantia da qualidade do software e da boa aceitação do sistema junto aos usuários. 40 CAPÍTULO 5 Elaboração de solicitações de mudanças Uma vez realizados os testes, durante o processo podem surgir solicitações de alterações necessárias, de correções ou de mudanças tidas como importantes. Mesmo nos casos em que todas as solicitações formalizadas tenham sido plenamente atendidas, outras funcionalidades não previstas pelos usuários finais podem ter sido detectadas por eles quando tiveram contato com o sistema. Assim, como houve interesse desses usuários em realizar um pedido que venha a ensejar mudanças no sistema, elas deverão ser formalizadas com uma “Solicitação de Mudança”. Apesar de a metodologia que estamos tratando ter como fim aproximar bastante as requisições dos usuários das possibilidades de realização do corpo técnico são observados aspectos que antes não puderam ser planejados, que não foram lembrados ou, mesmo, de algumas alterações que poderiam melhorar significativamente a performance e operação do software. Alguns dos exemplos mais comuns de alterações que podem surgir, quando da disponibilização de testes com os usuários finais são as oriundas de situações mal previstas ou não previstas, tais como uma mera alteração na disposição de campos em telas de inserção de dados (que, ao serem submetidas às reais condições de uso, pelos usuários finais ou digitadores, com a interação com os clientes ou condições reais de inserção, verifica-se que uma disposição diferente dos campos facilitaria o uso e tornaria mais rápido o serviço); a inserção de dados faltantes que poderiam ser requeridos em estatísticas; e outras situações, derivadas da necessidade de novas funcionalidades, como a inserção de uma calculadora que transfira os valores para o sistema ou que localize CEPs, a partir da digitação de endereços etc. Em um projeto de desenvolvimento é fundamental a figura do cliente, nesse caso representado pelo usuário, uma vez que é para ele que o sistema está sendo desenvolvido. Este passa a ser o papel de maior importância em todo o processo de desenvolvimento. Assim, a participação ativa dos usuários, na maioria das atividades de um projeto dedesenvolvimento de um sistema, é extremamente benéfica e recomendável, seja na definição do escopo do produto, no levantamento de requisitos e, sobretudo, na validação do produto final. Sua concordância e satisfação quanto aos rumos de um projeto, assim como, o seu retorno quanto à realização dos testes de utilização e à velocidade de implementação 41 TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO│UNIDADE II dos ajustes por eles requeridos como necessários visam garantir que os objetivos sejam atendidos e melhoram a satisfação desses usuários com o resultado final. Dessa forma, as proposições de ajustes devem ser encaradas como oportunidades de melhorias no sistema e formas de aproximação desses usuários com os realizadores e, com isso, obter melhor índice de aprovação e sucesso do projeto. Um grupo muito importante nessa fase é a “gerência de mudanças”, que busca garantir que todas as mudanças realizadas no projeto ao longo do seu desenvolvimento possam seguir um processo formal de análise, avaliação de impacto e autorização/aprovação pelas partes interessadas ou por aquelas que estão de alguma forma envolvidas no projeto. Dessa forma, a equipe do projeto deve estabelecer um processo que propicie o acompanhamento de todas as requisições de mudança, desde a sua criação até a sua conclusão, sobretudo logo após a implementação dos diversos tipos de artefatos. Em um processo de melhoria contínua do desenvolvimento, esse contato deve ser encarado como um ciclo vivo dentro de um projeto, uma vez que vários aspectos estão em constante mudança, seja no que diz respeito à tecnologia, ao conhecimento ou aos usuários. Assim, todos os processos precisam ser analisados regularmente e avaliados quanto a eventuais problemas que possam vir a surgir, a fim de serem mitigados ou corrigidos. E, ainda, que novas necessidades que surgiram durante a realização do projeto possam ser eficazmente atendidas. 42 CAPÍTULO 6 Elaboração de manual do usuário Sabemos que qualquer usuário de um sistema precisa de informações exatas sobre a forma correta de usá-lo. Se a informação for disponibilizada de forma conveniente, e se for de fácil compreensão, os usuários poderão utilizar de forma adequada o produto e, consequentemente, ficarão mais satisfeitos. Assim, uma documentação bem produzida auxilia os usuários, proporciona redução de custos em treinamento e com suporte. Além disso, agrega valor ao produto (sistema) frente aos seus clientes. Normalmente, os usuários de software de aplicação conhecem (ou pelo menos deveriam conhecer) as regras de negócio e as tarefas destinadas ao sistema. Contudo, inicialmente, não dispõem de versatilidade ao operá-lo. Portanto, um projeto de documentação voltado para as necessidades e especificidades dos usuários pode ser fundamental para o sucesso de um projeto, tornando-se uma das primeiras referências concretas entre o usuário e o software. Oportunidade em que, são estabelecidas as primeiras impressões dos usuários em relação ao sistema. A documentação constitui uma parte fundamental, integrante de qualquer sistema criado, sendo muito importante também no que se refere à segurança, pois, sem a devida documentação, a localização e a correção de alguns pontos vulneráveis no sistema seriam prejudicadas. A estrutura de uma documentação de usuário do software, impressa ou eletrônica, inclui sua segmentação, organização e forma de apresentação. Pode ser organizada em um único volume ou em módulos que auxiliem o usuário a localizar e a compreender como operar o sistema e por que tais funcionalidades são disponibilizadas, para que elas sejam corretamente exploradas e utilizadas. Para tanto, a documentação técnica manuais, apostilas ou referências on-line (Help ou telas de ajuda) deve estar voltada para as necessidades dos usuários, para seu nível de conhecimento e linguagem e estar direcionada ao usuário final e/ou administradores do sistema. Precisam informar como o software deve ser usado, o que se pode esperar dele e como devem ser recebidas as informações necessárias. Assim, como vemos, um dos aspectos fundamentais da realização do projeto de um sistema é sua documentação. Esse aspecto ainda hoje é, por vezes, negligenciado ou é 43 TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO│UNIDADE II dada pouca prioridade. Porém, mesmo no caso do manual do usuário, além de permitir uma melhor exploração e uso dos recursos do sistema pelos usuários, são fundamentais para a realização de versionamentos (novas versões) por outros que não os realizadores do sistema. Nossa metodologia prevê, para tanto, a utilização do artefato “Documentação de Usuário”, que representa um conjunto de documentos que são elaborados com foco no usuário final do sistema. Eles incluem os manuais, a ajuda (nas telas do sistema), os guias rápidos, os releases notes, entre outros. O processo de Documentação de Sistemas precisa ser realizado por uma equipe capacitada e que utilize ferramentas adequadas para a elaboração desses artefatos. Produtos que envolvem o processo de documentação de sistemas » Visão Geral Apresenta os objetivos e funcionalidades principais do sistema. Precisa descrever as características que sustentam as funcionalidades do software desenvolvido. Um cuidado nesse aspecto é o de adequar a linguagem ao nível de entendimento dos usuários (não podendo ser a de técnicos da área de sistemas) e não entrar em detalhes muito técnicos. » Manual de Operação Esse documento precisa mostrar, em maior nível de detalhamento, as funcionalidades disponíveis ao usuário, sendo que as tais funcionalidades do sistema podem estar agrupadas de forma lógica em Manuais de Operação. Considerando que esse tipo de documento é visto como um dos mais importantes pelos usuários e demais partes envolvidas no sistema, a seguir, apresentamos uma sugestão de modelo, a fim de auxiliá-lo na construção do “Manual de Operação” de um sistema: 44 UNIDADE II │TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO » Manual de Relatórios Busca descrever quais as informações que podem ser apresentadas em cada um dos relatórios disponíveis pelo software. 45 TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO│UNIDADE II » Manual de Instalação e de Administração Apresenta informações importantes, tais como as de instalar, configurar e manter o produto de software operacional. » Release Note Tem por objetivo descrever de forma sucinta a versão do produto que está sendo liberada, relacionando as novidades dessa nova versão, que são oriundas de requisitos funcionais e não funcionais. Esse documento relaciona, também, as correções que foram efetuadas. Corresponde a uma fonte primária de informação que permite que se tenha uma ideia do histórico da evolução do sistema. Assim, o que estiver descrito nesse documento precisa refletir com detalhes a documentação do produto, caracterizando-se, dessa forma, a atividade de manutenção e evolução da documentação desse software. » Guia Rápido Trata-se de um manual de referência rápida. Nele são descritos os comandos e conceitos principais do sistema, de forma bem sucinta, que facilitem ao usuário a utilização ou resolução de problemas de forma mais rápida que na leitura de outros manuais. Documentos de Apoio Alguns documentos caracterizados são apoio para auxiliar no desenvolvimento do projeto. Podem ser oriundos de diversas fontes ou, mesmo serem externos ao processo. De forma contrária aos artefatos, esses documentos de apoio não necessitam de preenchimento, uma vez que podem servir de padrão para qualquer projeto e, por isso, se enquadram nas necessidades dos desenvolvedores. Plano de Gerência de Configuração Tem por objetivo descrever todas as atividades relacionadas com a gerência de configuração e ao controle das mudanças do projeto, que são realizadas durante o ciclo de vida do produto. Esse documento precisa relacionar as responsabilidades dos membros da equipe do projeto e, também,os recursos necessários de software, hardware e de usuários. 46 UNIDADE II │TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO Perfis de Segurança Os perfis de segurança são os que descrevem os requisitos funcionais de segurança que precisam estar implementados nos sistemas e que tenham sido classificados pelos usuários, de acordo com seu nível de segurança e acesso aos dados do sistema. Tipos de Sistemas Os principais tipos de sistemas podem ser classificados como operacionais, financeiros e os gerenciais: Operacionais São os tipos de sistemas que lidam com informações a respeito de usuários do sistema e dos procedimentos associados. O principal objetivo da segurança nesse perfil é garantir o sigilo das informações e a privacidade dos usuários, bem como o acesso dos usuários apenas às informações necessárias para sua operação, ou de acordo com seu nível de acesso previamente definido pelos administradores. Financeiros São sistemas com a função específica de administrar os valores financeiros, os estoques, o patrimônio. São utilizados na gestão de empresas e apresentam como principal objetivo da segurança o de garantir o sigilo máximo das informações financeiras e cadastrais apenas a um seleto grupo de usuários da empresa, definidos pela alta administração. Gerenciais Tem como finalidade o suporte à tomada de decisão dos gestores e, portanto, fornecem informações de forma condensada e ágil. Para tanto, apresentam perfil extremamente restrito, pois têm acesso a informações sigilosas da empresa, sendo acessados pela alta administração ou funcionários designados por ela para esse fim. Tais sistemas, segundo o seu tipo, apresentam características específicas. Ao se construir o sistema com as características específicas a quem ele se destina deve-se ter o cuidado de adequar seus manuais a ele (por exemplo: um sistema gerencial apresenta menos detalhes e relatórios mais concisos e com um número reduzido de informações muito relevantes apresentadas de forma sintética, enquanto nos sistemas operacionais deve ser ter, conforme o caso, muito detalhamento e relatórios analíticos). 47 TESTANDO SISTEMA E DESENVOLVENDO VERSÃO PILOTO│UNIDADE II Possíveis documentos de Apoio Internos São os sistemas de apoio e infraestrutura das empresas ou internos e administrativos em geral. Recomendações de Segurança para Web Services Os Web Services (serviços disponibilizados via Internet) são os que definem uma nova tecnologia criada com o objetivo de permitir a troca de informações em formato padronizado entre diferentes aplicações. Tal troca realiza-se utilizando a rede, podendo esta ser a intranet da empresa, um canal protegido por criptografia em rede aberta ou, mesmo, pela Internet. O objetivo desse documento é mostrar os requisitos de segurança corporativos na implementação de Web Services (WS). Diante dessa necessidade, foram descritos alguns cenários possíveis de uso e evolução dessa tecnologia, buscando orientar sua implantação de forma segura no ambiente corporativo. Além disso, o documento apresenta as principais vulnerabilidades encontradas na utilização dessa tecnologia, e as recomendações (opcionais e mandatórias) para cada uma delas, com o intuito de prevenir ataques em cada um dos cenários apresentados. 48 Para (não) Finalizar O conteúdo apresentado neste Caderno teve o propósito de aprofundar seus conhecimentos sobre o desenvolvimento de Modelo de Dados, a codificação de Sistema, a realização de testes e, ainda, entre outros de grande valor nesta disciplina, os procedimentos para elaboração do Manual do Usuário, considerados de fundamental importância para o manuseio do Sistema e o alcance dos objetivos pretendidos. Esperamos que os conhecimentos aqui trabalhados tenham contribuído no sentido de incrementar suas habilidades no trato com Processo de Desenvolvimento do Projeto, bem como acirrado seu desejo de buscar outras fontes de pesquisa com vista ao seu aprimoramento profissional. Boa sorte! 49 Referências ALMEIDA, Luís Fernando Barbosa. A metodologia de disseminação da informação geográfica e os metadados. Rio de Janeiro: UFRJ, 1999 CARDOSO, Caíque. UML na prática: do problema ao sistema, ciência moderna: Rio de Janeiro, 2003. COAD, Peter; YOURDON, Edward. Análise baseada em objetos. Rio de Janeiro: Campus, l992. COCKBURN, Alistair. Escrevendo casos de uso eficazes: Um guia prático para desenvolvedores de software. São Paulo: Bookman, 2005. DAVENPORT, Thomas H.; MARCHAND, Donald A.; DICKSON, Tim et al. Dominando a gestão da informação. 1. ed. Porto Alegre: Bookman, 2004. DINSMORE, Paul Campbell; supervisão. CAVALIERI, Adriane; Coordenação. Como se tornar um profissional em gerenciamento de projetos: livro-base de “Preparação para Certificação PMP – Project Management Professional”. 1. ed. Rio de Janeiro: Qualitymark, 2003. JORDAN, Lee; tradução Edson Furmankiewicz; Carlos Schafranski. Gerenciamento de projetos com dotProject: guia de instalação, configuração, customização e administração do dotProject. Revisão técnica Diego Viegas. São Paulo: Pearson Prentice Hall, 2008. HELDMAN, Kim. Gerência de projetos: guia para o exame oficial do PMI. 2. ed. Rio de Janeiro: Elsevier, 2005. HOWE, D. Free on-line dictionary of computing (foldoc). Url: <htto://wombat. doc.ic.ac.uk>. Acessado em: 20.11.2009. LIMA, Adilson da Silva. UML 2.0 – Do requisito à solução. São Paulo: Érica, 2007. PAULA FILHO, Wilson de Pádua. Engenharia de software – Fundamentos, Métodos e Padrões. 2. ed. Livros Técnicos e Científicos, 2002. PRESSMAN, Roger. Engenharia de software. 6. ed. Editora: McGraw-Hill Interamericana do Brasil, 2006. 50 REFERÊNCIAS REIS, Christian Robottom. Caracterização de um modelo de processo para projetos de software livre. São Paulo: USP, 2003. SOMMERVILLE, Ian. Engenharia de software. 8. ed. Prentice-Hall: São Paulo, 2002. VALERIANO, Dalton L. Gerenciamento estratégico e administração por projetos. 1. ed. São Paulo: Makron Books, 2001.
Compartilhar