AULAS 02 e 03: Noções sobre processo de desenvolvimento de software e Papéis e Responsabilidades em Projetos de Software SUMÁRIO Análise e Projeto de Software Implementação, testes e implantação Papéis e responsabilidades em projetos de software Metodologias ágeis Exercícios Gabarito Exercícios Comentados Simulado PÁGINA 1 13 19 24 32 40 41 54 ANÁLISE E PROJETO DE SOFTWARE O levantamento de requisitos, a análise de requisitos e o projeto do software não são fases isoladas entre si. Ao elaborar diagramas e confeccionar documentos para buscar a melhor compreensão e entendimento dos requisitos de um sistema, já começa ali a fase de análise de requisitos. Tal imiscuidade entre fases também ocorrerá entre a análise e o projeto. O modelo de requisitos: entre a descrição do sistema e o projeto. Fonte: Pressman, 2011. Prof. Victor Dalton 1 de 55 ANÁLISE A fase de análise de requisitos, no contexto do desenvolvimento de um sistema, é aquela na qual são construídos modelos para representar o sistema a ser construído. Esta fase tem como característica não levar com conta o ambiente tecnológico a ser utilizado. Nesta atividade, o foco de interesse é tentar construir uma estratégia de solução sem se preocupar com a maneira como essa estratégia será realizada. Em resumo, a prioridade é saber o que o sistema proposto deve fazer, para, posteriormente (no projeto), definir como o sistema irá fazê-lo. A modelagem de requisitos possui duas visões clássicas: a análise estruturada e a análise orientada a objetos. A análise estruturada considera os dados e os processos que transformam os dados em entidades separadas. Esta técnica descreve o fluxo de informação e transformações que são aplicadas à medida que os dados se movimentam da entrada para a saída. O diagrama que melhor ilustra a análise estruturada é o Diagrama de Fluxo de Dados (DFD), que será visto adiante. A análise orientada a objetos, por sua vez, lança mão da abstração para representar coisas do mundo real, sob a forma de objetos. Os objetos podem ser uma entidade externa, uma coisa, uma ocorrência, um evento, uma unidade organizacional, um local, enfim, qualquer elemento que possa ser representado por um conjunto de atributos. Por exemplo, uma pessoa pode ser definida por um nome, endereço, telefone, número de CPF. Um pedido, por sua vez, pode ser definido pelo seu número, comprador, produtos, quantidade e preço total. Objetos serão exemplificados no diagrama de classes, visto adiante. PRINCIPAIS DIAGRAMAS DA FASE DE ANÁLISE Modelos baseados em cenários São os casos de usos e histórias de usuários, já detalhados na Engenharia de Requisitos. Prof. Victor Dalton 2 de 55 Modelos de Fluxo A modelagem orientada a fluxos considera os dados e os processos que os transformam entidades distintas. É a representação da análise estruturada, e seu principal diagrama é o Diagrama de Fluxo de Dados, ou DFD. Em um DFD, representam-se entidades externas por caixas, processos (ou tarefas) por circunferências (também podem ser elipses ou elipses achatadas), o fluxo dos dados por setas e depósitos de dados por traços duplos. Veja abaixo: Diagrama de Fluxo de Dados: meramente ilustrativo. Diagrama de Fluxos de Dados: meramente ilustrativo. Prof. Victor Dalton 3 de 55 Modelos de Comportamento Os modelos comportamentais indicam como o software irá responder a estímulos ou eventos externos. Os diagramas de estado e de sequência representam este tipo de modelo. Diagrama de estados: um exemplo. Diagrama de sequência: um exemplo. Prof. Victor Dalton 4 de 55 Modelos de classe A modelagem baseada em classes representa os objetos que o sistema irá manipular, as operações (também denominada métodos ou serviços) que serão aplicados aos objetos para efetuar a manipulação, alguns relacionamentos entre os objetos e as colaborações que ocorrem entre as classes definidas. Os elementos de um modelo baseado em classes são: classes e objetos, atributos, operações, modelos CRC (classe-responsabilidade-colaborador), diagramas de colaboração e pacotes. Diagrama de classes: exemplo Como dito anteriormente, não existe uma fronteira clara entre o término da fase de análise e o início da fase de projeto. Teoricamente, ao término da análise, os requisitos estão suficientemente detalhados para que modelagens mais refinadas possam ser empregadas. Prof. Victor Dalton 5 de 55 PROJETO O foco principal da análise são os aspectos lógicos e independentes de implementação de um sistema, ou seja, os requisitos. Na fase de projeto, determina-se o “como” o sistema funcionará, para atender aos requisitos. Os modelos de requisitos, apresentados por elementos baseados em cenários, baseados em classes, orientado a fluxos e comportamentais, alimentam a tarefa de projeto. A atividade de projeto engloba o conjunto de princípios, conceitos e práticas que conduzem ao desenvolvimento de um sistema ou produto com alta qualidade. Lembro que, lato sensu, este também é o objetivo de todo o processo de desenvolvimento de software. Para buscar a qualidade do software, o projeto deve possuir algumas características: O projeto deve implementar todos os requisitos explícitos contidos no modelo de requisitos e deve acomodar todos os requisitos implícitos desejados pelos interessados; O projeto deve ser um guia legível, compreensível para aqueles que geram código e para aqueles que testam, e, subsequentemente, dão suporte ao software; O projeto deve dar uma visão completa do software, trabalhando os domínios de dados, funcional e comportamental sob a perspectiva de implementação. Ainda, cabe destacar alguns conceitos que devem ser ponderados quando da elaboração de um projeto: Abstração: À medida que o nível de abstração migra de um nível mais alto para um nível mais baixo, a solução deixa de ser expressa na linguagem do domínio do problema para ser expressa em uma terminologia técnica. Arquitetura: Uma meta do projeto de software é derivar um quadro da arquitetura de um sistema, que representará a organização a partir da qual atividades mais detalhadas do projeto são conduzidas. Prof. Victor Dalton 6 de 55 Padrões: Os padrões de projeto são soluções comprovadamente eficazes que podem ser aproveitados em projetos de problemática recorrente. Por exemplo, um sistema de vendas online provavelmente possuirá um padrão de projeto consolidado. P.S.: não confundir o aproveitamento de um padrão de projeto com o aproveitamento de código (reuso de software). Separação por interesses (por afinidades): Esse conceito afirma que qualquer problema complexo pode ser tratado mais facilmente se decomposto em trechos a ser resolvidos e ou otimizados independentemente. Esse conceito aparece em outros conceitos, como modularidade, aspectos, independência funcional e refinamento. Modularidade: Dividir um software em poucos módulos o torna fácil de integrar, mas difícil de desenvolver e manutenir. Dividir demais o torna difícil de integrar, embora o custo do módulo seja baixo. O desafio do projeto é modularizar o problema da melhor forma possível, minimizando custos. Diagrama de classes ilustrando a modularidade. Modularizar “na medida certa” traz uma série de benefícios ao projeto e ao software. Encapsulamento de informações: O princípio do encapsulamento diz que os módulos devem ser capazes de ocultar suas características uns dos outros, disponibilizando apenas os itens que interessam aos outros módulos. Independência funcional: A independência funcional é atingida desenvolvendo-se módulos com função única e que pouco interagem com outros módulos. É medida qualitativamente pela coesão e pelo acoplamento. Um Prof. Victor Dalton 7 de 55 módulo coeso realiza poucas tarefas, interagindo o mínimo necessário com outros módulos. Quanto ao acoplamento, é desejável que ele seja fraco, ou seja, que cada módulo se comunique o mínimo possível com os demais. Refinamento: O refinamento gradual é uma estratégia top-down. Um programa é desenvolvido refinando-se níveis procedurais sucessivamente. Refatoração: Técnica de reorganização que simplifica o projeto ou código, sem mudar sua função ou comportamento. Em projetos de refabricação de software, deve-se examinar o projeto antigo, eliminar redundâncias, corrigir algoritmos eficientes ou desnecessários. Refatoração: um exemplo. Um atributo que estava mal esclarecido, “nome2”, agora passa a se chamar “mae”, explicitando a sua funcionalidade. Usando a notação, princípios e métodos adequados, o projeto produz um projeto de dados/classes, um projeto de arquitetura, um projeto de interfaces e um projeto de componentes. Prof. Victor Dalton 8 de 55 Projeto de dados/classes O projeto de dados/classes transforma os modelos de classes em realizações de classes de projeto e nas estruturas de dados dos requisitos necessários para implementar o software. Projeto de dados: um exemplo. Prof. Victor Dalton 9 de 55 Projeto de arquitetura O projeto arquitetural define os relacionamentos entre os principais elementos estruturais do software, os estilos arquiteturais e os padrões de projeto que podem ser usados para satisfazer os requisitos definidos para o sistema e as restrições que o afetam. Diagramas de implantação podem mostrar os componentes físicos de um sistema, assim como diagramas de componentes pode mostrar os principais componentes de um software. Diagrama de Implantação, materializando a arquitetura de um sistema Diagrama de Componentes, materializando a arquitetura de um sistema Prof. Victor Dalton 10 de 55 Projeto de componentes O projeto de componentes destrincha elementos estruturais da arquitetura, em uma descrição procedural dos componentes de software. Diagrama de classes, detalhando cada componente de um software Projeto de interface de usuário Conjunto de desenhos detalhados que representa fluxos de informação que entram em saem do sistema, como o sistema de comunica com sistemas externos e com as pessoas que o utilizam. Devem ser buscadas algumas características como: Familiaridade – usar termos e conceitos obtidos da experiência de pessoas que farão uso do sistema. Consistência – sempre que possível, operações similares devem ser ativadas da mesma maneira. Prof. Victor Dalton 11 de 55 Surpresa mínima – os usuários nunca devem ser surpreendidos pelo comportamento de um sistema. Deixar o usuário no comando – o usuário deve ser capaz de interromper o que está fazendo para fazer outra coisa, sem perder o trabalho já feito. Reduzir a memória do usuário – o sistema deve ser capaz de guiar o usuário, não precisando ele armazenar procedimentos na memória. Projeto de interface com o usuário: um exemplo. Em resumo, o projeto de interface com o usuário será a proposta de “tela”, ou “telas”, por meio das quais os usuários do sistema realização sua interação com o mesmo. Inevitavelmente o projeto de interface com o usuário será submetido à aprovação do cliente, podendo sofrer modificações antes da codificação. Prof. Victor Dalton 12 de 55 IMPLEMENTAÇÃO, TESTES E IMPLANTAÇÃO IMPLEMENTAÇÃO Na implementação, o sistema é codificado, ou seja, ocorre a tradução da descrição computacional obtida na fase de projeto em código executável, mediante o uso de uma ou mais linguagens de programação. Código de programa: ilustração Ao codificar um software, um programador poderá escrever código novo, ou reaproveitar código já existente. Esse reaproveitamento de código é chamado de reuso de software. O reuso de software pode trazer vários benefícios, como ganho de tempo (o código já está escrito), confiança, redução de risco (o código já foi utilizado com sucesso anteriormente), dentre outros fatores. Por fim, é interessante destacar que a maioria das bibliografias prevê que o teste de unidade acontece na etapa da implementação. O teste de unidade é o teste pontual, realizado pelo programador, que verifica que aquele componente Prof. Victor Dalton 13 de 55 ou módulo que ele desenvolveu realmente faz o que deveria fazer, atendendo às especificações do projeto. Uma vez que o sistema esteja codificado (e com seus módulos testados, a nível unidade), os códigos desenvolvidos pelos diversos programadores é integrado, e poderá ser submetido a uma bateria maior e mais complexa de testes. TESTES Teste de software é uma atividade realizada para descobrir erros que foram produzidos inadvertidamente no momento em que o software foi projetado e construído. Pode ser planejado antecipadamente e conduzido sistematicamente. Ainda, podem ser testes de baixo nível, no qual são verificados se pequenos segmentos de código-fonte foram corretamente implementados, bem como testes de alto nível, que validam as principais funções do sistema com base nos requisitos do cliente. Estratégias de teste de software As estratégias de teste de software fornecem um roteiro que descreve os passos a serem executados como parte do teste. Em um contexto macro, o teste de software é um elemento de um aspecto mais amplo, que é frequentemente referido como Verificação e Validação (V&V). Verificação se refere ao conjunto de atividades que garante que o software implementa corretamente uma função específica (estamos construindo o produto corretamente?), enquanto a Validação se certifica que o software construído corresponde aos requisitos do cliente (estamos construindo o produto certo?). O teste proporciona o último elemento a partir do qual a qualidade pode ser estimada, e, mais pragmaticamente, os erros podem ser descobertos. Conforme afirmado desde o início, a qualidade é incorporada ao software ao longo do processo de engenharia de software. Portanto, a motivação, por trás do teste, é a confirmação da qualidade. Se a qualidade não estiver lá antes do teste, não estará lá após a realização dele. Prof. Victor Dalton 14 de 55 Quanto à responsabilidade pela execução dos testes, cabe aos próprios desenvolvedores a realização dos testes de unidade e, em muitos casos, também os testes de integração. Os mais complexos, por sua vez, serão realizados por um grupo independente de teste. Este grupo também faz parte da equipe de desenvolvimento do software. Quanto à estratégia em si, a espiral da figura abaixo ilustra o processo. Estratégia de teste de software. Fonte: Pressman, 2011. Teste de unidade – se concentra em cada unidade: componente, classe ou módulo. Usa intensamente técnicas de teste com caminhos distintos, com o objetivo de descobrir erros dentro do módulo testado. Teste de integração – técnica sistemática para construir a arquitetura do software ao mesmo tempo que conduz testes para descobrir erros associados com as interfaces (comunicação entre os módulos, não confundir com interface com o usuário). A integração pode ocorrer de forma descendente (top-down) ou ascendente (bottom-up). Integração de módulos. No exemplo, M4 e M7 serão incorporados à arquitetura, e o sistema deverá ser testado com a presença desses dois novos módulos. Prof. Victor Dalton 15 de 55 Teste de validação – a validação de software é conseguida por meio de uma série de testes que demonstram conformidade com os requisitos. Um plano de testes poderá definir casos de teste específicos que atestem que os requisitos funcionais sejam satisfeitos, que os requisitos de desempenho sejam atendidos, que a documentação esteja correta, dentre outros. Desvios ou erros descobertos nesse estágio raramente podem ser corrigidos antes do prazo de entrega programado. Se um software é desenvolvido como um produto para ser usado por muitos clientes, é impraticável que todos eles realizem testes formais de aceitação. Muitos construtores de software, então, usam um processo chamado de teste alfa e beta para descobrir erros que apenas o usuário final é capaz de encontrar. O teste alfa é conduzido na instalação do desenvolvedor por um grupo representativo de usuários finais. Nele, o desenvolvedor monitora os usuários, registrando os erros e os problemas de uso. O teste beta é conduzido nas instalações dos usuários finais. Via de regra, o desenvolvedor não está presente, e os erros e problemas encontrados são reportados pelos usuários. Teste de sistema – o teste de sistema extrapola os limites da engenharia de software. Uma vez validado, o software deverá ser combinado com outros elementos do sistemas (como hardware, pessoas, base de dados). Ele verifica se todos os elementos se combinam corretamente e se a função/desempenho global do sistema é conseguida. Podem ser: Teste de recuperação: força o sistema a falhar de várias formas e verifica se a recuperação é executada corretamente; Teste de segurança: verifica se os mecanismos de proteção incorporados ao sistema protegem contra acesso indevido; Teste de esforço: coloca o programa em condições anormais. “Até onde podemos forçar o sistema até que ele falhe?” Teste de desempenho: testar o desempenho, em tempo de execução, do software em um contexto de sistema integrado. Pode ser feito em conjunto com testes de esforço; Teste de disponibilização: exercitar o software em cada ambiente no qual ele deve operar, como em vários sistemas operacionais, vários navegadores web, ou várias plataformas (PC, smartphone...). Depuração – Quando um erro é encontrado, o código deverá ser “futucado” para encontrar o pedaço de código que está escrito de maneira incorreta, para então ser corrigido. A esta etapa é dada o nome de depuração. Depurar o código não é testar o código, mas são processos que se relacionam. Prof. Victor Dalton 16 de 55 Técnicas de teste de software Realizar testes em software é um paradoxo de raciocínio. Os desenvolvedores devem “deixar” de construir o software e passar a trabalhar em casos de teste para “quebrá-lo”. O objetivo do teste é encontrar erros, e um bom este é aquele que tem alta probabilidade de encontrar um erro. Os testes devem ter uma série de características que permitam atingir o objetivo de encontrar o maior número de erros com um mínimo de esforço. São atributos desejáveis em um teste: Alta probabilidade de encontrar erros; Não ser redundante; O melhor de uma categoria (o mais completo de um grupo similar de testes);e Nem muito simples, nem muito complexo. Vejamos algumas técnicas de teste: Caixa-Branca - Também chamada de teste estrutural ou orientado à lógica, a técnica de caixa-branca avalia o comportamento interno do componente de software. Essa técnica trabalha diretamente sobre o código fonte do componente de software para avaliar aspectos tais como: teste de condição, teste de fluxo de dados, teste de caminho básico, teste de ciclos, teste de caminhos lógicos, códigos nunca executados, teste de estrutura de controle. Os aspectos avaliados nesta técnica de teste dependerão da complexidade e da tecnologia que determinarem a construção do componente de software, cabendo portanto avaliação de mais aspectos que os citados anteriormente. O testador tem acesso ao código fonte da aplicação e pode construir códigos para efetuar a ligação de bibliotecas e componentes. Este tipo de teste é desenvolvido analisando o código fonte e elaborando casos de teste que cubram todas as possibilidades do componente de software. Dessa maneira, todas as variações relevantes originadas por estruturas de condições são testadas. A técnica de teste de caixa-branca é recomendada para as fases de teste de unidade e teste de integração, cuja responsabilidade principal fica a cargo dos desenvolvedores do software, que por sua vez conhecem bem o código fonte produzido. Caixa-Preta Também chamada de teste funcional, teste comportamental, orientado a dado ou orientado a entrada e saída, a técnica de caixa-preta avalia o comportamento externo do componente de software, sem se considerar o comportamento interno do mesmo. Dados de entrada são fornecidos, o teste é executado e o resultado obtido é comparado a um resultado Prof. Victor Dalton 17 de 55 esperado previamente conhecido. Como detalhes de implementação não são considerados, os casos de teste são todos derivados da especificação. Quanto mais entradas são fornecidas, mais rico será o teste. Numa situação ideal todas as entradas possíveis seriam testadas, mas na ampla maioria dos casos isso é impossível. Outro problema é que a especificação pode estar ambígua em relação ao sistema produzido, e como resultado as entradas especificadas podem não ser as mesmas aceitas para o teste. Uma abordagem mais realista para o teste de caixa-preta é escolher um subconjunto de entradas que maximize a riqueza do teste. Pode-se agrupar subconjuntos de entradas possíveis que são processadas similarmente, de forma que testar somente um elemento desse subconjunto serve para averiguar a qualidade de todo o subconjunto. Por exemplo, em um sistema que aceita um inteiro como entrada, testar todos os casos possíveis pode gerar pelo menos dezenas de milhares de casos de testes distintos. Entretanto, a partir da especificação do sistema, podese encontrar um subconjunto de inteiros que maximizem a qualidade do teste. Depende do propósito do sistema, mas casos possíveis incluem inteiros pares, inteiros ímpares, zero, inteiros positivos, inteiros negativos, o maior inteiro, o menor inteiro. A aplicação de técnicas de teste leva o testador a produzir um conjunto de casos de teste (ou situações de teste). A aplicação combinada de outra técnica – técnica de particionamento de equivalência (ou uso de classes de equivalência) permite avaliar se a quantidade de casos de teste produzida é coerente. A partir das classes de equivalência identificadas, o testador construirá casos de teste que atuem nos limites superiores e inferiores destas classes, de forma que um número mínimo de casos de teste permita a maior cobertura de teste possível. Uma outra variação é a Análise do Valor Limite – na qual são testados valores nas fronteiras de um domínio. Por exemplo: se determinado campo só permite o preenchimento com números de 1 a 100, aplicam-se nos testes os valores 0,1,100 e 101. As técnicas caixa-preta podem ser aplicadas em todos as etapas de teste, embora mais apropriadas a partir dos testes de integração até a implantação. IMPLANTAÇÃO Na implantação, o sistema é empacotado, distribuído e instalado no ambiente do usuário. Os manuais do sistema são escritos, os arquivos são carregados, os dados são importados para o sistema, e os usuários são treinados para utilizar o sistema corretamente. Dependendo da situação, pode ocorrer também a migração de sistemas de do software e de dados preexistentes. Prof. Victor Dalton 18 de 55 PAPÉIS E RESPONSABILIDADES EM PROJETOS DE SOFTWARE Como você deve ter observado, o estudo do processo de desenvolvimento de software é “orientado a processos”, ou seja, preocupa-se com o avançar do processo em si. Para avaliar os papéis e responsabilidades em projetos de software é necessário realizar um estudo “transversal”, extraindo as participações dos diversos personagens ao longo do projeto de software. Vejamos: Patrocinador O patrocinador do projeto, via de regra, é alguém do alto escalão de uma organização, que “compra” a idéia do software. Em virtude de sua posição, é capaz de atribuir recursos e dinheiro ao projeto. Entretanto, além de financiar o projeto, os patrocinadores têm outras funções muito importantes para o sucesso dos projetos. Durante o ciclo de vida do projeto, o patrocinador atua como um decisor acima do gerente de projeto, podendo tomar decisões fora da alçada do gerente do projeto. Além disso, o patrocinador funciona como um ponto focal para a alta administração e também para outros stakeholders, eventualmente. À primeira vista, pode parecer que o patrocinador do projeto duplica os esforços do gerente de projeto. No entanto, um patrocinador do projeto experiente pode melhorar a comunicação e coordenação em questões além das responsabilidades do gerente de projeto. O papel do patrocinador está diretamente ligado à gerência sênior e inclui, mas não se limita a: Participar na seleção de projetos, categorização e priorização; Participar no estabelecimento de prioridades e alocação de recursos; Estabelecer objetivos estratégicos para o projeto; Alinhar os objetivos do projeto aos objetivos de negócio; Realizar acompanhamento e relatórios sobre o andamento do projeto para a alta administração; Auxilia a fixação da autoridade do gerente de projeto; Participa do comitê de controle de mudanças. Prof. Victor Dalton 19 de 55 Em geral, patrocinadores devem ter sólidos conhecimentos de negócio e boa capacidade de comunicação. Ele irá atuar mais como um líder visionário para o projeto, enquanto o gerente de projeto irá desempenhar funções de gestão e técnica a maioria dos o tempo. Especialmente em projetos complexos de grande porte, os gerentes de projetos precisam de muita ajuda de executivos de nível sênior. Sem patrocínio, a chance de fracasso é muito grande. Sendo o patrocinador um gerente sênior, ele possui autoridade e poder para tomar decisões que trazem grande agilidade e flexibilidade aos projetos, permitindo responder a riscos mais rapidamente e controlar mudanças. Desta forma, o patrocinador assegura, de uma maneira indireta, que a alta administração apoia o projeto. Um bom patrocinador é a ligação entre o gerente de projeto e gerentes seniores e executa diferentes funções durante o ciclo de vida do projeto, promover e proteger o projeto. Durante o início de um projeto, o patrocinador deve ser responsável pelo Termo de Abertura do Projeto e seu Business Case, alinhando os objetivos do projeto à estratégia corporativa. O patrocinador irá designar um gerente para o projeto, que pode ajudar neste planejamento inicial. O planejamento do projeto será responsabilidade do gerente de projeto designado e sua equipe, mas o patrocinador deve tomar conhecimento e aprovar planos de projeto. Ao longo da execução, o patrocinador irá monitorar o progresso e status do projeto, informando à gerência sênior. O patrocinador deve ter reuniões regulares com o gerente do projeto para reforçar a confiança e obter informações atualizadas. Finalmente, é o patrocinador o responsável pelo projeto perante a organização e à alta administração. Ele deve assegurar que os benefícios do projeto estão sendo entregues. Gerente de Projetos O gerente de projetos é o responsável pela gerência ou coordenação das atividades necessárias à construção do sistema. Deve fazer o orçamento do projeto de desenvolvimento, estimar o tempo necessário para o desenvolvimento do sistema, definir qual o processo de desenvolvimento, o cronograma de execução das atividades, a equipe de desenvolvimento, os recursos de hardware e software, etc. Prof. Victor Dalton 20 de 55 O monitoramento e controle das atividades realizadas também é de responsabilidade do gerente do projeto, bem como a realização dos ajustes necessários para a adequação dos recursos e gastos. O gerente deverá ser meticuloso em seus estudos, quando realizar o estudo de viabilidade, escolher a equipe de desenvolvimento e o processo de desenvolvimento de software. O gerente de projeto, por sua vez, presta contas ao patrocinador do projeto. Segundo Pressman, o gerente de projeto, ao gerenciar efetivamente o projeto de software, deve focar em 4Ps, e nessa sequência: Pessoas, Produto, Processo e Projeto. Pessoas O gerente de projeto deve ater-se a algumas práticas-chaves, como: formar a equipe, liderar sua equipe, estabelecer boa comunicação com a equipe e com os interessados no projeto. Produto O gerente de projeto também deve analisar detalhadamente os requisitos (junto com os analistas de requisitos), para estabelecer e delimitar o escopo, de modo a poder estimar recursos e prazo. Processo A equipe de software deve ser flexível ao escolher o processo de software mais adequado ao projeto e às tarefas de engenharia de software que fazem parte do modelo selecionado. Projeto É a abordagem de cuidar do projeto como um projeto em si, entendendo fatores críticos de sucesso, planejando, monitorando e controlando o projeto, por meio de métricas e ferramentas. Prof. Victor Dalton 21 de 55 Área de Negócio A área de negócio é o conjunto de stakeholders que será o principal beneficiado pelo projeto de software. Cabe a ela colaborar com a elicitação de requisitos, participar dos testes finais do software, e fornecer o feedback após a sua implantação. Pode-se destacar um personagem nesse contexto, o Especialista de Domínio. O especialista do domínio interage com o analista de requisitos para levantar os requisitos do sistema. Analista de Requisitos O analista de requisitos é o profissional que precisa ter conhecimento do domínio do negócio. Ele precisa compreender tal domínio para definir os requisitos do sistema a ser desenvolvido. Analistas devem estar aptos a se comunicar com especialistas do domínio para obter conhecimento acerca dos problemas e das necessidades envolvidas na empresa que necessita do sistema. Se, por um lado, ele não precisa ser um especialista, por outro, deve ter suficiente domínio do vocabulário da área de conhecimento na qual o sistema será implantado. Preferencialmente, este nível de domínio deve ser suficiente para que o especialista de domínio não precise, a todo momento, explicar conceitos básicos da área. O analista de requisitos precisará captar as necessidades dos clientes e repassar esse entendimento aos demais desenvolvedores do sistema, fazendo uma “ponte” entre os profissionais da computação e os profissionais do negócio. Em suma, os analistas de requisitos realizam o levantamento e a análise de requisitos. Inclusive, enxerga-se como uma progressão natural na carreira dos analistas de requisitos a gerência de projetos, uma vez que os analistas de requisitos adquirem experiência com a participação em diversos projetos. Equipe de desenvolvimento A equipe de desenvolvimento é fortemente atuante nas fases de projeto e implementação da solução de software. Destaque para: Projetistas: avaliam as alternativas de solução do problema resultante da análise e geram a especificação de uma solução computacional detalhada. Podem ser especializados em interface, redes, bancos de dados, etc; Prof. Victor Dalton 22 de 55 Arquitetos de software: especialista em elaborar a arquitetura do sistema como um todo; Programadores: codificação do sistema e testes; Equipe de sustentação A sustentação consiste no suporte e atendimento ao cliente, responsável por manter o produto. Logo, a equipe de sustentação é aquela responsável pela manutenção do sistema após a sua entrega. Via de regra, equipes de desenvolvimento de software são montadas sob medida, em virtude do talento de seus integrantes, e desfeitas após o término do projeto. Inclusive, pode ocorrer, por questões contratuais, que uma empresa diferente da que desenvolveu o sistema seja responsável por sua manutenção. A equipe de sustentação pode realizar suporte técnico e prestar consultoria aos cliente, se for o caso. A manutenção prestada por essa equipe pode ser corretiva, aquela que corrige defeitos no sistema, adaptativa, adaptando alguns aspectos do sistema, como hardware, plataforma de sistema operacional, etc, desde que não sejam muito complexas, ou evolutiva, que adiciona novas funcionalidades ao software. Destaco, ainda, que esse acréscimo de funcionalidade é pontual. Evolução significativa de software é tratada à parte, como um outro projeto de software. Dentre os integrantes da equipe de sustentação, destaca-se o analista de suporte, profissional capaz de interpretar a solicitação do cliente e analisar se o problema relatado é um defeito a ser corrigido no sistema ou não. Prof. Victor Dalton 23 de 55 METODOLOGIAS ÁGEIS DE DESENVOLVIMENTO DE SOFTWARE As metodologias ágeis surgiram como um esforço para sanar fraquezas reais e perceptíveis da engenharia de software tradicional. Entretanto, ela não pode ser aplicada a todos os projetos, produtos, pessoas e situações. Nos dias atuais, as necessidades dos usuários finais mudam rapidamente, e, em muitas situações, não será possível definir completamente os requisitos antes que se inicie um projeto. Porém, o conceito de “agilidade” vai além da rapidez para responder a mudanças. Ela incentiva a estruturação e as atitudes em equipe que tornam a comunicação mais fácil, a entrega rápida do software operacional; assume o cliente como parte da equipe de desenvolvimento, reconhece que o planejamento tem seus limites e que o plano de projeto tem que ser flexível. Quatro são os valores percebidos pela filosofia ágil: Indivíduos e interações, em vez de processos e ferramentas Software funcional, em vez de documentação abrangente Colaboração do cliente, em vez de negociação de contratos Responder mudanças, em vez de seguir um plano Com base nesses valores, a Agile Alliance estabelece 12 princípios de agilidade: 1. Garantir a satisfação do consumidor entregando rapidamente e continuamente softwares funcionais; 2. Softwares funcionais são entregues frequentemente (semanas, ao invés de meses); 3. Softwares funcionais são a principal medida de progresso do projeto; 4. Até mesmo mudanças tardias de escopo no projeto são bem-vindas. Os processos ágeis devem ser uma vantagem competitiva; 5. Cooperação constante entre pessoas que entendem do 'negócio' e desenvolvedores; 6. Projetos surgem através de indivíduos motivados, entre os quais existe relação de confiança. 7. Conversa aberta é a melhor maneira de transmitir informações para dentro e fora da equipe; 8. Atenção contínua para a excelência técnica; 9. Os processos ágeis promovem desenvolvimento sustentável. Desenvolvedores e usuários devem pode manter um ritmo constante de trabalho indefinidamente; 10. Simplicidade é essencial; Prof. Victor Dalton 24 de 55 11. As melhores arquiteturas, requisitos e projetos emergem de equipes que se auto organizam; 12. Colaboração com clientes mais do que negociação de contratos; Seguidos esses princípios, existem algumas metodologias ágeis bastante conhecidas, como o XP e o Scrum. Vejamos: XP, oriunda de eXtreme Programming, é uma filosofia de programação que segue algumas práticas genéricas, cujo conhecimento considero válido. São elas: Jogo de Planejamento (Planning Game): O desenvolvimento é feito em iterações semanais. No início da semana, desenvolvedores e cliente reúnem-se para priorizar as funcionalidades. Essa reunião recebe o nome de Jogo do Planejamento. Nela, o cliente identifica prioridades e os desenvolvedores as estimam. O cliente é essencial neste processo e assim ele fica sabendo o que está acontecendo e o que vai acontecer no projeto. Como o escopo é reavaliado semanalmente, o projeto é regido por um contrato de escopo negociável, que difere significativamente das formas tradicionais de contratação de projetos de software. Ao final de cada semana, o cliente recebe novas funcionalidades, completamente testadas e prontas para serem postas em produção. Pequenas Versões (Small Releases): A liberação de pequenas versões funcionais do projeto auxilia muito no processo de aceitação por parte do cliente, que já pode testar uma parte do sistema que está comprando. As versões chegam a ser ainda menores que as produzidas por outras metodologias incrementais, como o RUP. Metáfora (Metaphor): Procura facilitar a comunicação com o cliente, entendendo a realidade dele. O conceito de rápido para um cliente de um sistema jurídico é diferente para um programador experiente em controlar comunicação em sistemas em tempo real, como controle de tráfego aéreo. É preciso traduzir as palavras do cliente para o significado que ele espera dentro do projeto. Projeto Simples (Simple Design): Simplicidade é um princípio da XP. Projeto simples significa dizer que caso o cliente tenha pedido que na primeira versão apenas o usuário "teste" possa entrar no sistema com a senha "123" e assim ter acesso a todo o sistema, você vai fazer o código exato para que esta funcionalidade seja implementada, sem se preocupar com sistemas de autenticação e restrições de acesso. Um erro comum ao adotar essa prática é a confusão por parte dos programadores de código simples e código fácil. Nem sempre o código mais fácil de ser desenvolvido levará a solução mais simples por parte de projeto. Esse entendimento é fundamental para o bom andamento do XP. Código fácil deve ser identificado e substituído por código simples. Prof. Victor Dalton 25 de 55 Time Coeso (Whole Team): A equipe de desenvolvimento é formada por pessoas engajadas e de forma multidisclipinar (no sentido de incluir pessoas com cada uma das habilidades necessárias para o projeto). Testes de Aceitação (Customer Tests): São testes construídos pelo cliente e conjunto de analistas e testadores, para aceitar um determinado requisito do sistema. Ritmo Sustentável (Sustainable Pace): Trabalhar com qualidade, buscando ter ritmo de trabalho saudável (40 horas/semana, 8 horas/dia), sem horas extras. Horas extras são permitidas quando trouxerem produtividade para a execução do projeto. Outra prática que se verifica neste processo é a prática de trabalho energizado, onde se busca trabalho motivado sempre. Para isto o ambiente de trabalho e a motivação da equipe devem estar sempre em harmonia. Reuniões em pé (Stand-up Meeting): Reuniões em pé para não se perder o foco nos assuntos, produzindo reuniões rápidas, apenas abordando tarefas realizadas e tarefas a realizar pela equipe. Posse Coletiva (Collective Ownership): O código fonte não tem dono e ninguém precisa solicitar permissão para poder modificar o mesmo. O objetivo com isto é fazer a equipe conhecer todas as partes do sistema. Programação em Pares (Pair Programming): é a programação em par/dupla num único computador. Geralmente a dupla é formada por um iniciante na linguagem e outra pessoa funcionando como um instrutor. Como é apenas um computador, o novato é que fica à frente fazendo a codificação, e o instrutor acompanha ajudando a desenvolver suas habilidades. Desta forma o programa sempre é revisto por duas pessoas, evitando e diminuindo assim a possibilidade de defeitos. Com isto busca-se sempre a evolução da equipe, melhorando a qualidade do código fonte gerado. Padrões de Codificação (Coding Standards): A equipe de desenvolvimento precisa estabelecer regras para programar e todos devem seguir estas regras. Desta forma parecerá que todo o código fonte foi editado pela mesma pessoa, mesmo quando a equipe possui 10 ou 100 membros. Desenvolvimento Orientado a Testes (Test Driven Development): Primeiro crie os testes unitários (unit tests) e depois crie o código para que os testes funcionem. Esta abordagem é complexa no início, pois vai contra o processo de desenvolvimento de muitos anos. Só que os testes unitários são essenciais para que a qualidade do projeto seja mantida. Refatoração (Refactoring): É um processo que permite a melhoria continua da programação, com o mínimo de introdução de erros e mantendo a compatibilidade com o código já existente. Refabricar melhora a clareza (leitura) do código, divide-o em módulos mais coesos e de maior reaproveitamento, evitando a duplicação de código-fonte; Integração Contínua (Continuous Integration): Sempre que produzir uma nova funcionalidade, nunca esperar uma semana para integrar à versão atual do sistema. Isto só aumenta a possibilidade de conflitos e a possibilidade Prof. Victor Dalton 26 de 55 de erros no código fonte. Integrar de forma contínua permite saber o status real da programação. O Scrum é uma metodologia de desenvolvimento iterativo e incremental para gerenciamento de projetos e desenvolvimento ágil de software. Scrum não é um processo nem descreve o que se deve fazer em cada situação. Ele é usado para trabalhos complexos nos quais é difícil predizer tudo o que irá ocorrer. O Scrum é um conjunto de passos que contém grupos de práticas e papéis pré-definidos. Os únicos papéis são: 1. O Proprietário do Produto, ou Product Owner, que representa os stakeholders e o negócio; 2. o Scrum Master, que mantém os processos (normalmente no lugar de um gerente de projeto); 3. a Equipe, ou Team, um grupo multifuncional com cerca de 7 pessoas e que fazem a análise, projeto, implementação, teste, etc. Sprint Um sprint é a unidade básica de desenvolvimento em Scrum. Sprints tendem a durar entre uma semana e um mês, e são um esforço dentro de uma "caixa de tempo" (ou seja, restrito a uma duração específica) de comprimento constante. Cada sprint é precedido por uma reunião de planejamento, onde as tarefas para o sprint são identificadas e um compromisso estimado para o objetivo do sprint é definido e seguido por uma reunião de revisão ou de retrospectiva, onde o progresso é revisto e lições para os próximos sprints são identificadas. Durante cada sprint, a equipe cria um incremento de produto potencialmente entregável (por exemplo, software funcional e testado). O conjunto de funcionalidades que entram em um sprint vêm do backlog do produto, que é um conjunto de prioridades de requisitos de alto nível do trabalho a ser feito. Quais itens do backlog entram para o sprint são determinados durante a reunião de planejamento do sprint. Durante esta reunião, o Product Owner informa a equipe dos itens no backlog do produto que ele ou ela quer concluídos. A equipe então determina quantos eles podem se comprometer a concluir durante o próximo sprint, e registram isso no backlog do sprint. Durante um sprint, ninguém está autorizado a alterar o backlog do sprint, o que significa que os requisitos são congelados para esse sprint. O desenvolvimento de cada sprint deve terminar na "caixa de tempo" prevista. Se os requisitos não são completados por qualquer motivo, eles são deixados de fora e voltam para o backlog do produto. Depois que um sprint é completado, a equipe demonstra como usar o software. Prof. Victor Dalton 27 de 55 O Scrum permite a criação de equipes auto organizadas, encorajando a cooperação de todos os membros da equipe e a comunicação verbal entre todos os membros e disciplinas da equipe no projeto. Artefatos Product Backlog Um backlog é uma lista de itens priorizados a serem desenvolvidos para um software. O Product Backlog é mantido pelo Product Owner e é uma lista de requisitos que tipicamente vêm do cliente. O Product Backlog pode ser alterado a qualquer momento pelo Product Owner ou por decisão deste. Sprint backlog O Sprint backlog é uma lista de itens selecionados do Product backlog e contém tarefas concretas que serão realizadas durante o próximo sprint para implementar tais itens selecionados. O Sprint Backlog é uma representação em tempo real do trabalho que o Development Team planeja concluir na sprint corrente, e ele pertence unicamente ao Development Team. Planejamento de sprint Antes de todo sprint, o Product Owner, o Scrum Master e a Equipe decidem no que a equipe irá trabalhar durante o próximo sprint. O Product Owner mantém uma lista priorizada de itens de backlog, o backlog do produto, o que pode ser repriorizado durante o planejamento do sprint. A Equipe seleciona itens do topo do backlog do produto. Eles selecionam somente o quanto de trabalho eles podem executar para terminar. A Equipe então planeja a arquitetura e o design de como o backlog do produto pode ser implementado. Os itens do backlog do produto são então destrinchados em tarefas que se tornam o backlog do sprint. Reuniões Daily Scrum Cada dia durante o sprint, uma reunião de status do projeto ocorre. Isso é chamado de "scrum diário". Esta reunião tem diretrizes específicas: A reunião começa precisamente no horário marcado. Todos são bem-vindos, mas apenas "poucos" podem falar. O encontro tem duração determinada (TimeBox) e dura 15 minutos. A reunião deve acontecer no mesmo local e mesma hora todos os dias Durante a reunião, cada membro da equipe responde a três perguntas: O que você tem feito desde ontem? O que você está planejando fazer hoje? Prof. Victor Dalton 28 de 55 Você tem algum problema impedindo você de realizar seu objetivo? É papel do Scrum Master para facilitar a resolução desses impedimentos. Normalmente, isso deve ocorrer fora do contexto do Daily Scrum para que a reunião possa durar menos de 15 minutos. Reunião de Planejamento da Sprint (Sprint Planning Meeting) No início do ciclo de sprint (a cada 7-30 dias), um Sprint Planning Meeting é realizado. Selecione o trabalho que está a ser feito. Prepare o Sprint Backlog que detalha o tempo que levará para fazer esse trabalho, com toda a equipe. Identificar e comunicar o quanto o trabalho é susceptível de ser feito durante o sprint atual. Dividida em duas partes: Parte 1 (Primeiras quatro horas): Team Product Owner: diálogo para priorizar o Product Backlog. Parte 2 (Próximas quatro horas): Team apenas: hash de um plano para a Sprint, resultando na Sprint Backlog. No final de um ciclo de sprint, são realizadas duas reuniões: a "Sprint Review" e do "Sprint Retrospective". Reunião de Revisão da Sprint (Sprint Review) Rever o trabalho que foi concluído e não concluído. Apresentar o trabalho realizado para os interessados (ou "a demo"). Um trabalho incompleto não pode ser demonstrado. Retrospectiva da Sprint (Sprint Retrospective) Todos os membros da equipe refletem sobre a sprint passada. Três questões principais são feitas na retrospectiva sobre o sprint: O que deu errado? O que deu certo? O que poderia ser melhorado para o próximo sprint? Prof. Victor Dalton 29 de 55 Se você achou o Scrum um pouco utópico, eu posso garantir que não é. Utilizamos ele no Banco Central pra valer, e os projetos andam! Com reuniões diárias, sprints e tudo o mais! Entretanto, existem outras metodologias ágeis, como: Desenvolvimento de Software Adaptativo (ASD): O apoio filosófico do ASD concentra-se na colaboração humana e na auto-organização. A auto-organização aparece quando agentes individuais independentes cooperam para criar resultados emergentes. Um resultado emergente é uma propriedade além da capacidade de qualquer agente individual. Ciclo de vida: Especulação: iniciação do projeto e planejamento adaptativo. Colaboração: pessoal motivado trabalha junto de um modo que multiplica seus talentos e resultados criativos. Aprendizagem que pode ocorrer de três modos: foco nos grupos; revisão técnicas formais; pós-conclusão. Prof. Victor Dalton 30 de 55 ASD Método de Desenvolvimento de Sistemas Dinâmicos: É uma metodologia de desenvolvimento de software originalmente baseada em "Desenvolvimento Rápido de Aplicação" (RAD). DSDM é uma metodologia de desenvolvimento iterativo e incremental que enfatiza o envolvimento constante do usuário. DSDM Seu objetivo é entregar softwares no tempo e com custo estimados através do controle e ajuste de requisitos ao longo do desenvolvimento. DSDM é um dos modelos de Metodologia Ágil de desenvolvimento de software, e seu formato é propriedade da Agile Alliance. Processo Unificado Ágil (AUP):Versão simplificada do RUP, adaptada à metodologia ágil. Prof. Victor Dalton 31 de 55 EXERCÍCIOS 1ª Questão) (ESAF – TCU - Analista de Controle Externo – Análise de Sistemas - 2002) O paradigma do ciclo de vida clássico da engenharia de software requer uma abordagem sistemática, sequencial ao desenvolvimento do software, que se inicia no nível do sistema e avança ao longo da análise, projeto, codificação, teste e manutenção. A etapa deste ciclo, que se apresenta como um processo de múltiplos passos e se concentra em quatro atributos distintos do programa: estrutura de dados, arquitetura de software, detalhes procedimentais e caracterização da interface, é a atividade de a) codificação. b) análise de requisitos de software. c) análise de sistemas. d) engenharia de sistemas. e) projeto. 2ª Questão) (ESAF – MPOG – Analista de Planejamento e Orçamento – Tecnologia da Informação – 2008) Em Modelagem Orientada a objetos, objetos podem ser: a) Entidades externas. Coisas. Ocorrências ou eventos. Papéis. Unidades organizacionais. Lugares. Estruturas. b) Entidades internas. Coisas. Chaves de ocorrências. Papéis. Unidades organizacionais. Especialidades de estruturas. c) Atividades externas. Capacidades. Ocorrências ou eventos. Posições. Unidades organizacionais. Lugares. Unidades de entidades. d) Entidades externas. Coisas. Ocorrências ou eventos. Pastas. Unidades de recursos. Objetivos. Estruturas. e) Entidades de referência. Situações. Ocorrências ou eventos. Papéis. Diretrizes organizacionais. Lugares. Objetos inominados. 3ª Questão) (FCC – TST – Analista Judiciário – Análise de Sistemas – 2012) São características da análise estruturada e da análise orientada a objetos, respectivamente: Prof. Victor Dalton 32 de 55 a) a organização do código-fonte em pacotes e o uso de diagrama de classes. b) programas elaborados com o uso de funções e determinação do dicionário de dados. c) o uso de diagramas de sequência e o uso do diagrama de contexto. d) a modelagem do fluxo de dados e a abstração de conceitos do mundo real. e) a técnica de encapsulamento e a extensão de classes com a aplicação de herança. 4ª Questão) (ESAF – Receita Federal – Analista – Informática – 2012) Assinale a opção correta relativa a diagrama de fluxo de dados (DFD). a) Descreve graficamente o fluxo em depósitos de dados e as transformações dos processos que interferem nas entradas a partir de entidades externas. b) Modela os objetos relativos a fluxo de informações e as categorias de dados relevantes para as saídas. c) Descreve graficamente o fluxo de informações e as transformações que são aplicadas à medida que os dados se movimentam da entrada para a saída. d) Descreve graficamente a estrutura das informações em que se organizam os dados inerentes a processos. e) Descreve graficamente o fluxo de dados transformados segundo atributos das entidades externas. 5ª Questão) (ESAF – SEFAZ/CE – Analista de Tecnologia da Informação – 2006 - adaptada) Analise a descrição a seguir. O paradigma do ciclo de vida clássico da engenharia de software abrange seis atividades. Na atividade de _____________ são traduzidas as exigências de uma representação do software que podem ser avaliadas quanto à qualidade antes que se inicie a codificação. Escolha a opção que preenche corretamente a lacuna acima. a) projeto b) levantamento de requisitos Prof. Victor Dalton 33 de 55 c) teste d) implantação e) análise 6ª Questão) (CESPE – CNJ – Analista Judiciário – Análise de Sistemas – 2013) No ciclo de vida de software, a estrutura de dados, a arquitetura, os detalhes procedimentais e a caracterização da interface são atributos da etapa de análise e engenharia de software. 7ª Questão) (CESPE – Banco da Amazônia – Técnico Científico – Análise de Sistemas – 2012) O projeto foca na solução, consistindo em atividades de criação de um produto, enquanto a análise focaliza o problema. Na análise orientada a objetos, descrevem-se objetos ou conceitos como livros e usuários, que possuem atributos e responsabilidades. 8ª Questão) (CESPE – INPI – Analista – Desenvolvimento e Manutenção de Sistemas – 2012) A documentação da arquitetura de software de sistema facilita a comunicação entre os participantes do desenvolvimento do sistema. A respeito das práticas de arquitetura de software, julgue os itens a seguir. 1 A refatoração objetiva tornar o código mais claro e limpo. 2 Ao refatorar um código, altera-se a funcionalidade do sistema. 9ª Questão) (ESAF – SEFAZ/CE – Analista de Tecnologia da Informação - 2006) Na engenharia de software, o objetivo do processo de Teste de Software é a) encontrar defeitos. b) corrigir apenas os defeitos de alta criticidade. c) executar apenas os testes de caixa preta. d) demonstrar o correto funcionamento do software. e) provar que o software está 100% isento de defeitos. Prof. Victor Dalton 34 de 55 10ª Questão) (ESAF – Receita Federal - Técnico – Tecnologia da Informação - 2006) Analise as seguintes afirmações relacionadas a Teste de Software: I. O teste “caixa-preta” e o teste “caixa-branca” são os únicos tipos de testes possíveis quando não se dispõe do código-fonte. II. O teste “caixa-preta”, também chamado “teste funcional”, testa o sistema do ponto de vista do usuário, isto é, não considera a estrutura interna ou a forma de implementação do sistema. III. Ao adotar uma abordagem “top-down”, o executor de teste deve concentrar-se inicialmente no teste “caixa-branca”, que parte de uma visão externa do sistema. IV. O teste “caixa-branca” procura exercitar todas as partes do código de um sistema. Indique a opção que contenha todas as afirmações verdadeiras. a) II e IV b) II e III c) III e IV d) I e III e) I e II 11ª Questão) (ESAF – Prefeitura de Natal – Auditor do Tesouro Municipal – Informática - 2008) Com relação aos tipos de testes que podem ser considerados e executados em um projeto de software, é correto afirmar que o objetivo principal do Teste Funcional é assegurar que a) a interface forneça ao usuário o acesso e a navegação adequados através das funções do software. b) os objetos contidos na interface funcionam conforme o esperado e estejam em conformidade com padrões estabelecidos. c) foram exercitados um conjunto de funcionalidades para avaliar a navegação pelo software e a facilidade de uso do mesmo. d) houve uma correta implementação dos requisitos do sistema, como, por exemplo, regras de negócio, através da interface do usuário. Prof. Victor Dalton 35 de 55 e) foram executadas transações, variando as cargas de trabalho, para observar e registrar o comportamento do sistema. 12ª Questão) (ESAF – MPOG – Analista de Planejamento e Orçamento – Tecnologia da Informação - 2008) Uma estratégia de teste de software integra métodos de projeto de casos de teste em uma série planejada de passos. Em relação a estratégias de testes, é correto afirmar que: a) realizar testes para mostrar que não existem defeitos no software faz parte das estratégias de testes. b) demonstrar ao desenvolvedor e ao cliente que o software atende aos requisitos é uma meta de validação do software. c) o particionamento de equivalência é uma maneira estratégica de aplicar testes de software. d) o teste estrutural é uma estratégia que se baseia na análise da especificação de um programa para ajudar na seleção de casos de teste. e) funções ou métodos individuais de um objeto não são exemplos de estratégia da aplicação de teste de componentes. 13ª Questão) (ESAF – MPOG/ENAP – Analista de Sistemas - 2006) Na Engenharia de Software, a atividade de Teste tem vários objetivos, entre os quais não se encontra a) projetar testes que descubram sistematicamente diferentes classes de erros em um tempo e com um esforço mínimo. b) executar um programa com o objetivo de descobrir um erro. c) elaborar casos de teste que tem uma elevada probabilidade de revelar um erro ainda não descoberto. d) revelar um erro ainda não descoberto. e) desenvolver um produto de software sem erros. 14ª Questão) (ESAF – MPOG/ENAP – Analista de Sistemas - 2006) Analise as seguintes afirmações relacionadas às atividades de Teste de Software na Engenharia de Software. I. A Verificação refere-se a um conjunto de atividades que garante que o software implemente corretamente uma função específica. Prof. Victor Dalton 36 de 55 II. Os métodos de Engenharia de Software proporcionam a base a partir da qual a qualidade é construída. Se a qualidade não estiver presente antes de se testar um produto de software, ela não estará presente após a realização dos testes. III. A Verificação refere-se a um conjunto de atividades que garante que o software que foi construído atenda às exigências do cliente. IV. A Verificação visa garantir a resposta positiva da pergunta: “Estamos construindo o produto certo?”. Indique a opção que contenha todas as afirmações verdadeiras. a) I e II b) II e III c) III e IV d) I e III e) II e IV 15ª Questão) (ESAF – MPOG – Analista de Planejamento e Orçamento – Tecnologia da Informação - 2005) Analise as seguintes afirmações relativas às estratégias de teste de software: I. Teste é um conjunto de atividades antecipadamente e realizado sistematicamente. que pode ser planejado II. As atividades de teste e de depuração são atividades diferentes. III. Na atividade de teste a atividade de depuração não necessita ser considerada. IV. Apenas uma técnica de teste é apropriada a um projeto, independente do ponto do ciclo de vida em que se encontra o projeto. Indique a opção que contenha todas as afirmações verdadeiras. a) I e II b) II e III c) III e IV d) I e III e) II e IV Prof. Victor Dalton 37 de 55 16ª Questão) (ESAF – MPOG – Analista de Planejamento e Orçamento – Tecnologia da Informação - 2005) Analise as seguintes afirmações relativas às atividades de teste de software: I. O objetivo do processo Teste de Software é estabelecer e manter a integridade dos produtos do projeto de software e executar o teste denominado “Teste da caixa preta” ao longo de todo o ciclo de vida do projeto. II. É de responsabilidade da equipe de Teste de Software realizar, periodicamente, auditorias das configurações básicas para verificar se elas estão de acordo com a documentação que as define. III.Verificação de um software refere-se a um conjunto de atividades que garante que o software implemente corretamente uma função específica. IV.Validação de um software refere-se a um conjunto de atividades que garante que o software que foi construído atende às expectativas do cliente. Indique a opção que contenha todas as afirmações verdadeiras. a) I e II b) II e III c) III e IV d) I e III e) II e IV (CESPE – INCA – Analista em C&T Júnior – Gestão Pública - 2010) Julgue os itens que se seguem, relativos à gestão de projetos. 17 O cliente, o patrocinador, a equipe do projeto e demais interessados, conhecidos como stakeholders, são os responsáveis por determinar os requisitos do projeto. 18 Caso um gerente de projeto constate que há um membro da equipe que continuamente está prejudicando o trabalho, a solução correta a ser tomada será a de retirar esse membro da equipe de trabalho. 19º Questão)(CESGRANRIO – Petrobrás – Técnico de Exploração de Petróleo Júnior – Informática - 2011) A pessoa ou o grupo que fornece recursos financeiros para realizar um projeto é o a) cliente Prof. Victor Dalton 38 de 55 b) usuário c) patrocinador d) gerente de portfólio e) gerente de programas 20º Questão) (CESGRANRIO – Casa da Moeda do Brasil – Analista de Nível Superior – Negócios em TI - 2009) No projeto de análise de vulnerabilidades do ambiente Internet de uma empresa, João provê os recursos financeiros necessários para o projeto. Segundo o PMBOK, João desempenha o papel de a) patrocinador. b) analista financeiro. c) gerente de projeto. d) usuário final. e) auditor. 21º Questão) (ESAF – STN – Analista de Finanças e Controle – Governança e Gestão em TI - 2013) O desenvolvimento ágil de software fundamenta-se no Manifesto Ágil. Segundo ele deve-se valorizar: a) mudança de respostas em vez do seguimento de um plano. b) indivíduos e interações em vez de processos e ferramentas. c) documentação extensiva operacional em vez de software funcional. d) indivíduos e intenções junto a processos e ferramentas. e) seguimento de um plano em vez de resposta a mudança. 22º Questão) (FCC – Assembléia Legislativa do Estado de São Paulo – Agente Técnico Legislativo – Tecnologia da Informação – 2010) São consideradas metodologias ágeis de desenvolvimento de software: a) XP e UP. b) SCRUM e DSDM. c) SCRUM e RUP. Prof. Victor Dalton 39 de 55 d) DSDM e Cascata. e) Cascata e PRINCE2. GABARITO 1.e 11.d 21.b 2.a 12.b 22.b 3.d 13.e 4.c 14.a 5.a 15.a 6.e 16.c 7.c 17.c 8.c/e 18.c 9.a 19.c 10.a 20.a Prof. Victor Dalton 40 de 55 EXERCÍCIOS COMENTADOS 1ª Questão) (ESAF – TCU - Analista de Controle Externo – Análise de Sistemas - 2002) O paradigma do ciclo de vida clássico da engenharia de software requer uma abordagem sistemática, sequencial ao desenvolvimento do software, que se inicia no nível do sistema e avança ao longo da análise, projeto, codificação, teste e manutenção. A etapa deste ciclo, que se apresenta como um processo de múltiplos passos e se concentra em quatro atributos distintos do programa: estrutura de dados, arquitetura de software, detalhes procedimentais e caracterização da interface, é a atividade de a) codificação. b) análise de requisitos de software. c) análise de sistemas. d) engenharia de sistemas. e) projeto. Espero que não haja dúvidas nessa questão. A fase de análise é voltada para o detalhamento dos requisitos, enquanto o projeto aprofunda esse nível de detalhamento, orientado para a codificação do sistema. Suas quatro vertentes são: projeto de dados/classes, projeto de componentes, projeto de arquitetura e projeto de interface do usuário. Resposta certa, alternativa e). 2ª Questão) (ESAF – MPOG – Analista de Planejamento e Orçamento – Tecnologia da Informação – 2008) Em Modelagem Orientada a objetos, objetos podem ser: a) Entidades externas. Coisas. Ocorrências ou eventos. Papéis. Unidades organizacionais. Lugares. Estruturas. b) Entidades internas. Coisas. Chaves de ocorrências. Papéis. Unidades organizacionais. Especialidades de estruturas. c) Atividades externas. Capacidades. Ocorrências ou eventos. Posições. Unidades organizacionais. Lugares. Unidades de entidades. d) Entidades externas. Coisas. Ocorrências ou eventos. Pastas. Unidades de recursos. Objetivos. Estruturas. Prof. Victor Dalton 41 de 55 e) Entidades de referência. Situações. Ocorrências ou eventos. Papéis. Diretrizes organizacionais. Lugares. Objetos inominados. A ESAF, às vezes, enviesa para esse decoreba técnico, baseado em alguma bibliografia. A pergunta fica rasa e superficial. Caso você se depare com uma pergunta desse estilo, a melhor conduta é trabalhar por eliminação. Intencionalmente, a banca coloca termos sem sentido para confundir o candidato. “Chaves de ocorrências”, “Posições”, “Capacidades”, “Objetos inonimados” são alguns desses termos. E a alternativa a), a correta, é cópia literal da nossa bibliografia, o Pressman. 3ª Questão) (FCC – TST – Analista Judiciário – Análise de Sistemas – 2012) São características da análise estruturada e da análise orientada a objetos, respectivamente: a) a organização do código-fonte em pacotes e o uso de diagrama de classes. b) programas elaborados com o uso de funções e determinação do dicionário de dados. c) o uso de diagramas de sequência e o uso do diagrama de contexto. d) a modelagem do fluxo de dados e a abstração de conceitos do mundo real. e) a técnica de encapsulamento e a extensão de classes com a aplicação de herança. A análise estruturada considera os dados e os processos que transformam os dados em entidades separadas, destacando o fluxo dos dados pelo sistema. A análise orientada a objetos, por sua vez, lança mão da abstração para representar coisas do mundo real, sob a forma de objetos. Resposta certa, alternativa d). 4ª Questão) (ESAF – Receita Federal – Analista – Informática – 2012) Assinale a opção correta relativa a diagrama de fluxo de dados (DFD). a) Descreve graficamente o fluxo em depósitos de dados e as transformações dos processos que interferem nas entradas a partir de entidades externas. Prof. Victor Dalton 42 de 55 b) Modela os objetos relativos a fluxo de informações e as categorias de dados relevantes para as saídas. c) Descreve graficamente o fluxo de informações e as transformações que são aplicadas à medida que os dados se movimentam da entrada para a saída. d) Descreve graficamente a estrutura das informações em que se organizam os dados inerentes a processos. e) Descreve graficamente o fluxo de dados transformados segundo atributos das entidades externas. O Diagrama de Fluxo de Dados (DFD) descreve o fluxo de informação e transformações que são aplicadas à medida que os dados se movimentam da entrada para a saída. Resposta certa, alternativa c). 5ª Questão) (ESAF – SEFAZ/CE – Analista de Tecnologia da Informação – 2006 - adaptada) Analise a descrição a seguir. O paradigma do ciclo de vida clássico da engenharia de software abrange seis atividades. Na atividade de _____________ são traduzidas as exigências de uma representação do software que podem ser avaliadas quanto à qualidade antes que se inicie a codificação. Escolha a opção que preenche corretamente a lacuna acima. a) projeto b) levantamento de requisitos c) teste d) implantação e) análise Guarde essa ideia: na atividade de projeto são traduzidas as exigências de uma representação do software que podem ser avaliadas quanto à qualidade, antes que se inicie a codificação. Resposta certa, alternativa a). Prof. Victor Dalton 43 de 55 6ª Questão) (CESPE – CNJ – Analista Judiciário – Análise de Sistemas – 2013) No ciclo de vida de software, a estrutura de dados, a arquitetura, os detalhes procedimentais e a caracterização da interface são atributos da etapa de análise e engenharia de software. Errado. Esta é a fase de projeto. 7ª Questão) (CESPE – Banco da Amazônia – Técnico Científico – Análise de Sistemas – 2012) O projeto foca na solução, consistindo em atividades de criação de um produto, enquanto a análise focaliza o problema. Na análise orientada a objetos, descrevem-se objetos ou conceitos como livros e usuários, que possuem atributos e responsabilidades. Correto! 8ª Questão) (CESPE – INPI – Analista – Desenvolvimento e Manutenção de Sistemas – 2012) A documentação da arquitetura de software de sistema facilita a comunicação entre os participantes do desenvolvimento do sistema. A respeito das práticas de arquitetura de software, julgue os itens a seguir. 1 A refatoração objetiva tornar o código mais claro e limpo. 2 Ao refatorar um código, altera-se a funcionalidade do sistema. Analisando: 1 – Correto. A refatoração procura tornar o código mais claro e limpo, também eliminando redundâncias e tornando o código mais eficiente. 2 – Errado! Mesmo otimizando o código, a funcionalidade do sistema não deve ser modificada. 9ª Questão) (ESAF – SEFAZ/CE – Analista de Tecnologia da Informação - 2006) Na engenharia de software, o objetivo do processo de Teste de Software é Prof. Victor Dalton 44 de 55 a) encontrar defeitos. b) corrigir apenas os defeitos de alta criticidade. c) executar apenas os testes de caixa preta. d) demonstrar o correto funcionamento do software. e) provar que o software está 100% isento de defeitos. Como já foi falado, o Teste de Software difere um pouco do conceito “convencional” de teste. Normalmente testamos as coisas para verificar que elas realmente funcionam; em software, testamos o software para encontrar defeitos. Resposta certa, alternativa a). 10ª Questão) (ESAF – Receita Federal - Técnico – Tecnologia da Informação - 2006) Analise as seguintes afirmações relacionadas a Teste de Software: I. O teste “caixa-preta” e o teste “caixa-branca” são os únicos tipos de testes possíveis quando não se dispõe do código-fonte. II. O teste “caixa-preta”, também chamado “teste funcional”, testa o sistema do ponto de vista do usuário, isto é, não considera a estrutura interna ou a forma de implementação do sistema. III. Ao adotar uma abordagem “top-down”, o executor de teste deve concentrar-se inicialmente no teste “caixa-branca”, que parte de uma visão externa do sistema. IV. O teste “caixa-branca” procura exercitar todas as partes do código de um sistema. Indique a opção que contenha todas as afirmações verdadeiras. a) II e IV b) II e III c) III e IV d) I e III Prof. Victor Dalton 45 de 55 e) I e II Analisando as alternativas: I. Errada. O teste caixa-branca precisa do código-fonte para ser testado, pois analisa os componentes internos do software. Apenas o teste caixa-preta pode ser realizado sem o código-fonte, pois apenas são analisadas as reações do sistema. II. Correto. III. Errado. A pegadinha está em “visão externa”. Além disso, tanto nas abordagens top-down como bottom-up, em testes de integração, a técnica caixa-branca é a mais apropriada. IV. Correto. Resposta certa, alternativa a). 11ª Questão) (ESAF – Prefeitura de Natal – Auditor do Tesouro Municipal – Informática - 2008) Com relação aos tipos de testes que podem ser considerados e executados em um projeto de software, é correto afirmar que o objetivo principal do Teste Funcional é assegurar que a) a interface forneça ao usuário o acesso e a navegação adequados através das funções do software. b) os objetos contidos na interface funcionam conforme o esperado e estejam em conformidade com padrões estabelecidos. c) foram exercitados um conjunto de funcionalidades para avaliar a navegação pelo software e a facilidade de uso do mesmo. d) houve uma correta implementação dos requisitos do sistema, como, por exemplo, regras de negócio, através da interface do usuário. e) foram executadas transações, variando as cargas de trabalho, para observar e registrar o comportamento do sistema. O Teste Funcional é o teste “caixa-preta”, ou seja, analisa o sistema apenas por fora, verificando se o seu comportamento corresponde aos requisitos previamente acordados. Logo, não cabe outra alternativa que não seja a alternativa d). A propósito, a alternativa e) trata de testes de esforço. Prof. Victor Dalton 46 de 55 12ª Questão) (ESAF – MPOG – Analista de Planejamento e Orçamento – Tecnologia da Informação - 2008) Uma estratégia de teste de software integra métodos de projeto de casos de teste em uma série planejada de passos. Em relação a estratégias de testes, é correto afirmar que: a) realizar testes para mostrar que não existem defeitos no software faz parte das estratégias de testes. b) demonstrar ao desenvolvedor e ao cliente que o software atende aos requisitos é uma meta de validação do software. c) o particionamento de equivalência é uma maneira estratégica de aplicar testes de software. d) o teste estrutural é uma estratégia que se baseia na análise da especificação de um programa para ajudar na seleção de casos de teste. e) funções ou métodos individuais de um objeto não são exemplos de estratégia da aplicação de teste de componentes. Quanto às estratégias de teste, lembremos que existe o teste de unidade, teste de integração, teste de validação e teste de sistema. A alternativa a) está errada, porque já sabemos que os testes existem para encontrar defeitos; O particionamento de equivalência é uma variação dos testes caixa-preta, e o teste estrutural é o teste “caixa-branca”. Ambos são técnicas de teste e não estratégias de teste, o que tornam as alternativas c) e d) incorretas; Na alternativa e), fala-se em teste de componentes (teste de unidade). Funções ou métodos individuais de um objeto são utilizados para testar os mesmos, o que também torna a alternativa e) incorreta; A alternativa b) está correta, pois os testes de validação servem justamente para mostrar ao cliente que o sistema faz o que ele pediu. 13ª Questão) (ESAF – MPOG/ENAP – Analista de Sistemas - 2006) Na Engenharia de Software, a atividade de Teste tem vários objetivos, entre os quais não se encontra a) projetar testes que descubram sistematicamente diferentes classes de erros em um tempo e com um esforço mínimo. b) executar um programa com o objetivo de descobrir um erro. Prof. Victor Dalton 47 de 55 c) elaborar casos de teste que tem uma elevada probabilidade de revelar um erro ainda não descoberto. d) revelar um erro ainda não descoberto. e) desenvolver um produto de software sem erros. Não é objetivo da atividade de Teste desenvolver um produto sem erros. O objetivo dos testes é encontrar defeitos. Em uma visão macro, o objetivo dos testes é confirmar a qualidade do desenvolvimento do software. Nem mesmo o objetivo da Engenharia de Software é desenvolver um produto sem erros. A ES serve para fornecer métodos, princípios e ferramentas para produzir um software com alta qualidade. Isso não implica em erro zero. Alternativa errada, letra e). 14ª Questão) (ESAF – MPOG/ENAP – Analista de Sistemas - 2006) Analise as seguintes afirmações relacionadas às atividades de Teste de Software na Engenharia de Software. I. A Verificação refere-se a um conjunto de atividades que garante que o software implemente corretamente uma função específica. II. Os métodos de Engenharia de Software proporcionam a base a partir da qual a qualidade é construída. Se a qualidade não estiver presente antes de se testar um produto de software, ela não estará presente após a realização dos testes. III. A Verificação refere-se a um conjunto de atividades que garante que o software que foi construído atenda às exigências do cliente. IV. A Verificação visa garantir a resposta positiva da pergunta: “Estamos construindo o produto certo?”. Indique a opção que contenha todas as afirmações verdadeiras. a) I e II b) II e III c) III e IV d) I e III e) II e IV Prof. Victor Dalton 48 de 55 Todas as sentenças acima estariam corretas, se os conceitos de Verificação e Validação não estivessem trocados! Resposta certa, alternativa a). 15ª Questão) (ESAF – MPOG – Analista de Planejamento e Orçamento – Tecnologia da Informação - 2005) Analise as seguintes afirmações relativas às estratégias de teste de software: I. Teste é um conjunto de atividades antecipadamente e realizado sistematicamente. que pode ser planejado II. As atividades de teste e de depuração são atividades diferentes. III. Na atividade de teste a atividade de depuração não necessita ser considerada. IV. Apenas uma técnica de teste é apropriada a um projeto, independente do ponto do ciclo de vida em que se encontra o projeto. Indique a opção que contenha todas as afirmações verdadeiras. a) I e II b) II e III c) III e IV d) I e III e) II e IV Analisando as alternativas: I. Correto. Toda metodologia de desenvolvimento inclusive, preconiza o teste ao longo de seu ciclo. de software, II. Correto. Testar é buscar erros; Depurar é analisar o código para saber corrigi-lo. III. Errado. A depuração será consequência de testes bem sucedidos, ou seja, quando erros forem encontrados. IV. Errado. Testes caixa-branca serão mais apropriados na fase de implementação de um projeto, enquanto testes caixa-preta serão mais adequados em etapas mais próximas do usuário final, como testes e implantação. Além disso, nada impede a realização combinada das diferentes técnicas de teste. Prof. Victor Dalton 49 de 55 Resposta certa, alternativa a). 16ª Questão) (ESAF – MPOG – Analista de Planejamento e Orçamento – Tecnologia da Informação - 2005) Analise as seguintes afirmações relativas às atividades de teste de software: I. O objetivo do processo Teste de Software é estabelecer e manter a integridade dos produtos do projeto de software e executar o teste denominado “Teste da caixa preta” ao longo de todo o ciclo de vida do projeto. II. É de responsabilidade da equipe de Teste de Software realizar, periodicamente, auditorias das configurações básicas para verificar se elas estão de acordo com a documentação que as define. III.Verificação de um software refere-se a um conjunto de atividades que garante que o software implemente corretamente uma função específica. IV.Validação de um software refere-se a um conjunto de atividades que garante que o software que foi construído atende às expectativas do cliente. Indique a opção que contenha todas as afirmações verdadeiras. a) I e II b) II e III c) III e IV d) I e III e) II e IV Analisando: I. Errado. O objetivo do processo Teste de Software é encontrar defeitos no mesmo. II. Errado. Essa é uma responsabilidade do gerente do projeto e dos analistas de requisitos. III e IV. Descritos corretamente. Resposta certa, alternativa c). Prof. Victor Dalton 50 de 55 (CESPE – INCA – Analista em C&T Júnior – Gestão Pública - 2010) Julgue os itens que se seguem, relativos à gestão de projetos. 17 O cliente, o patrocinador, a equipe do projeto e demais interessados, conhecidos como stakeholders, são os responsáveis por determinar os requisitos do projeto. 18 Caso um gerente de projeto constate que há um membro da equipe que continuamente está prejudicando o trabalho, a solução correta a ser tomada será a de retirar esse membro da equipe de trabalho. Analisando: 17 – Correto. Todos os interessados no projeto devem participar da elaboração dos requisitos do sistema. 18 – Correto. O Gerente de projeto é o responsável por gerenciar sua equipe, podendo modificar membros se assim julgar necessário. 19º Questão)(CESGRANRIO – Petrobrás – Técnico de Exploração de Petróleo Júnior – Informática - 2011) A pessoa ou o grupo que fornece recursos financeiros para realizar um projeto é o a) cliente b) usuário c) patrocinador d) gerente de portfólio e) gerente de programas Isso não é dúvida para você, não é mesmo? Alternativa c). 20º Questão) (CESGRANRIO – Casa da Moeda do Brasil – Analista de Nível Superior – Negócios em TI - 2009) No projeto de análise de vulnerabilidades do ambiente Internet de uma empresa, João provê os recursos financeiros necessários para o projeto. Segundo o PMBOK, João desempenha o papel de Prof. Victor Dalton 51 de 55 a) patrocinador. b) analista financeiro. c) gerente de projeto. d) usuário final. e) auditor. Idem. Alternativa a). 21º Questão) (ESAF – STN – Analista de Finanças e Controle – Governança e Gestão em TI - 2013) O desenvolvimento ágil de software fundamenta-se no Manifesto Ágil. Segundo ele deve-se valorizar: a) mudança de respostas em vez do seguimento de um plano. b) indivíduos e interações em vez de processos e ferramentas. c) documentação extensiva operacional em vez de software funcional. d) indivíduos e intenções junto a processos e ferramentas. e) seguimento de um plano em vez de resposta a mudança. Analisando as alternativas: a) Responder a mudanças em vez de seguir um plano. Errada; b) Correta; c) Software funcional, em vez de documentação extensiva. Errada; d) Indivíduos e interações, em vez de processos e ferramentas. Errada; e) Responder mudanças, em vez de seguir um plano. Errada; 22º Questão) (FCC – Assembléia Legislativa do Estado de São Paulo – Agente Técnico Legislativo – Tecnologia da Informação – 2010) São consideradas metodologias ágeis de desenvolvimento de software: a) XP e UP. b) SCRUM e DSDM. c) SCRUM e RUP. Prof. Victor Dalton 52 de 55 d) DSDM e Cascata. e) Cascata e PRINCE2. A solução, nitidamente, é trabalhar por eliminação. UP e RUP não variações de uma metodologia que não é ágil (Processo Unificado), e você descarta alternativas a) e c). Cascata passa MUITO LONGE de ser ágil, e você descarta alternativas d) e e). XP e Scrum você conhece bem, mas DSDM realmente é mais difícil de lembrar. Eu não exigiria que você memorizasse Método de Desenvolvimento de Sistemas Dinâmicos, que realmente é uma metodologia de pouco destaque, mas, por eliminação, você marcaria a alternativa b) com segurança. Prof. Victor Dalton 53 de 55 SIMULADO 1º Questão) “Nas primeiras iterações, a versão do software pode ser um modelo ou um protótipo. Nas iterações posteriores, são produzidas versões cada vez mais completas do sistema”. Esta estratégia de desenvolvimento de software refere-se aos modelo a) cascata. b) espiral. c) de prototipação. d) ágil. e) incremental. 2º Questão) O ciclo de vida clássico prevê que o software é desenvolvido ao longo de etapas claras e bem definidas. A etapa na qual o software é submetido a testes de unidade é chamada de: a) análise. b) implantação. c) implementação. d) testes. e) engenharia de requisitos. 3º Questão) São etapas da Engenharia de Requisitos: a) Estudo de requisitos. Licitação e análise. Formalização. Priorização. Rastreabilidade. b) Estudo Implantação. de requisitos. Análise. Projeto. Implementação. Testes. c) Estudo de viabilidade. Análise. Projeto. Negociação. Valorização de requisitos. d) Análise de viabilidade. Priorização e Negociação. Documentação. Estudo. Gerenciamento. e) Estudo de viabilidade. Elicitação e análise. Especificação. Validação. Gerenciamento. Prof. Victor Dalton 54 de 55 4º Questão) Na fase de projeto a) Determina-se o como o sistema funcionará para atender aos requisitos. b) O foco principal são os aspectos implementação de um sistema. lógicos e independentes de c) Ocorre a tradução da descrição computacional obtida na fase de projeto em código executável. d) O sistema é empacotado, distribuído e instalado no ambiente do usuário. e) Erros são descobertos no sistema. 5º Questão) Em relação a Testes de Software, é incorreto afirmar que: a) teste é um conjunto de atividades antecipadamente e realizado sistematicamente. que pode ser planejado b) a Verificação visa garantir a resposta positiva da pergunta: “Estamos construindo o produto certo?”. c) quando um teste revela um erro ainda não descoberto, o teste é mal sucedido. d) demonstrar ao desenvolvedor e ao cliente que o software atende aos requisitos é uma meta de validação do software. e) encontrar defeitos é o objetivo dos Testes de Software. 6º Questão) É responsabilidade do analista de requisitos: a) designar um gerente para o projeto de software. b) coordenar as atividades necessárias para a construção do sistema. c) ter conhecimento do domínio do negócio. d) gerar a especificação de uma solução computacional detalhada. e) manutenir o sistema após a sua entrega. GABARITO DO SIMULADO 1.b 2.c 3.e 4.a 5.c 6.c Prof. Victor Dalton 55 de 55