Buscar

curso-21590-aula-00-v2


Continue navegando


Prévia do material em texto

Livro Eletrônico
Aula 00
Engenharia de Software p/ TRF 2ª Região (Analista Judiciário - Informática -
Desenvolvimento)
Professor: Diego Carvalho
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 1 de 83 
 
 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 2 de 83 
AULA 00 
 
SUMÁRIO PÁGINA 
Apresentação 01 
- Metodologias Ágeis 12 
- Test-Driven Development (TDD) 30 
- Feature Driven Development (FDD) 39 
- Dynamic Systems Development Method (DSDM) 47 
- Desenvolvimento Adaptativo de Software (DAS) 60 
- Modelagem Ágil 56 
- Refatoração 60 
Lista de Exercícios Comentados 68 
Gabarito 82 
Olá, sejam bem-vindos! Galera, acaba de sair o edital do concurso do TRF.02 
– Rio de Janeiro e Espírito Santo! A prova será somente em março, um ótimo 
tempo de preparação. Mesmo em tempos de crise, não podemos deixar 
passar nenhuma chance, além de ser uma ótima oportunidade para se manter 
estudando. Vamos ficar ligados para não perder o foco e porque a 
concorrência não dorme! Estou aqui para ajudá-los. Vamos lá... 
 
 
 
 
 
 
 
 
 
 
 
 
DAS, DSDM, FDD e Modelagem Ágil. Test-driven development (TDD). Refatoração. Metodologias Ágeis de 
Desenvolvimento de Sistemas: Scrum, XP. Conhecimento em RUP. Processo Unificado Ágil. Engenharia de Requisitos: 
técnicas de levantamento de requisitos; Casos de uso; Gerência de requisitos; Verificação e validação de requisitos; 
Requisitos funcionais e não funcionais. Testes: tipos e estratégias de testes. Orientação a Objetos: abstração de 
dados, definição de classes, métodos e atributos, herança, polimorfismo, encapsulamento, reutilização de 
componentes. Tratamento de exceções e controle de erros. Engenharia de Software: Análise e Projeto orientado a 
objetos com UML 2.5: notações, diagramas, metodologia para utilização e ferramentas (Parte I). Orientação a 
Objetos: abstração de dados, definição de classes, métodos e atributos, herança, polimorfismo, encapsulamento, 
reutilização de componentes. Tratamento de exceções e controle de erros. Engenharia de Software: Análise e Projeto 
orientado a objetos com UML 2.5: notações, diagramas, metodologia para utilização e ferramentas (Parte II). Web 
Services: conceitos básicos, REST, SOAP, UDDI e WSDL. Mensuração de sistemas em Pontos de Função segundo o 
Manual de Práticas de Contagem (CPM versão 4.3 do IFPUG). 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 3 de 83 
 O PROFESSOR 
 
 
 
 
 
 
 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 4 de 83 
 A AVALIAÇÃO DOS PROFESSORES... 
 
 
 
 
 
 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 5 de 83 
 
 
 
 
 
 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 6 de 83 
 O CONCURSO. 
 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 7 de 83 
 O CURSO... 
 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 8 de 83 
 
 
CONHEÇA O 6º LUGAR – ISS/SALVADOR 
 
https://www.youtube.com/watch?v=b1w4H3l6mC4#t=1678 
 
 
 
 
CONHEÇA O 1º LUGAR – TRT/RJ 
https://www.facebook.com/video.php?v=790616534367672 
 
 
 
 
CONHEÇA O 2º LUGAR – ISS/SALVADOR 
https://www.youtube.com/watch?v=vmU1n1J-aqQ 
 
 
 
 
CONHEÇA O 1º LUGAR – DATAPREV 
http://www.estrategiaconcursos.com.br/blog/entrevista-andre-furtado-aprovado-em-1o-lugar-no-
concurso-dataprev-para-o-cargo-de-analistaarea-de-tecnologia-da-informacao 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 9 de 83 
 CRONOGRAM 
 
Aula Data Tópicos do Edital 
00 26/11 
Aula Demonstrativa: DAS, DSDM, FDD e Modelagem Ágil. Test-driven 
development (TDD). Refatoração. 
 
01 30/11 
Metodologias Ágeis de Desenvolvimento de Sistemas: Scrum, XP. 
 
02 16/12 
Conhecimento em RUP. Processo Unificado Ágil. 
 
03 29/12 
Engenharia de Requisitos: técnicas de levantamento de requisitos; 
Casos de uso; Gerência de requisitos; Verificação e validação de 
requisitos; Requisitos funcionais e não funcionais. 
 
04 13/01 
Testes: tipos e estratégias de testes. 
 
05 20/01 
Orientação a Objetos: abstração de dados, definição de classes, 
métodos e atributos, herança, polimorfismo, encapsulamento, 
reutilização de componentes. Tratamento de exceções e controle de 
erros. Engenharia de Software: Análise e Projeto orientado a objetos 
com UML 2.5: notações, diagramas, metodologia para utilização e 
ferramentas (Parte I). 
 
06 07/02 
Orientação a Objetos: abstração de dados, definição de classes, 
métodos e atributos, herança, polimorfismo, encapsulamento, 
reutilização de componentes. Tratamento de exceções e controle de 
erros. Engenharia de Software: Análise e Projeto orientado a objetos 
com UML 2.5: notações, diagramas, metodologia para utilização e 
ferramentas (Parte II). 
 
07 14/02 
Web Services: conceitos básicos, REST, SOAP, UDDI e WSDL. 
 
08 20/02 
Mensuração de sistemas em Pontos de Função segundo o Manual de 
Práticas de Contagem (CPM versão 4.3 do IFPUG). 
 
 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 10 de 83 
 AS AULAS E AS DICAS 
 
1 – Parágrafos pequenos: observem que os parágrafos 
têm, no máximo, cinco linhas. Isso serve para que a 
leitura não fique cansativa e para que vocês não 
desanimem no meio do material! Para tal, eu tento dividir 
as disciplinas de maneira que as aulas fiquem objetivas e 
pequenas (em termos de teoria), mas extensa (em 
termos de exercícios). 
2 – Visão Geral: não se atenham a detalhes antes de 
entender o básico. Por que? Ora, não há nada mais 
irritante do que ir para uma prova que vai cair, por 
exemplo, RUP, saber vários detalhes, mas não saber as 
fases e disciplinas. Portanto, caso estejam iniciando os 
estudos sobre uma matéria, foquem em saber o básico 
para depois se especializarem. 
3 – Destaques em vermelho: quase todos os 
parágrafos possuem alguma palavra ou frase destacada 
em negrito e em vermelho. Isso ocorre por suas razões: 
primeiro, para enfatizar alguma informação importante; 
segundo, para facilitar a leitura vertical, i.e., após uma 
primeira leitura, a segunda pode ser passando apenas 
pelos pontos em destaque. 
4 – Façam muitos exercícios: ler várias bibliografias é 
muito trabalhosoe, geralmente, não vale o custo-
benefício. Acredito que o que funciona mesmo é entender 
o básico, depois fazer muitos exercícios e, 
eventualmente, caso encontrarem algo que não 
souberem, pesquisem-no separadamente. Além disso, 
você vai pegando as “manhas” da banca. 
5 – Linguagem natural: essa é uma aula para ser lida, o 
que por si só já pode ser cansativo. Tentarei colocar a 
linguagem mais coloquial possível, simulando uma 
conversa. Portanto, caso virem frases ou palavras em 
itálico, ou é uma palavra estrangeira ou é a simulação de 
uma conversa com vocês. Pode dar um exemplo, 
professor? Acabei de dar! :-) 
6 – Façam resumos: essa dica somente serve caso 
vocês tenham disponibilidade. Caso haja pouco tempo 
para estudar ou pouco tempo até a prova, não compensa! 
Se não, façam resumos organizados, pois eles 
economizarão um bom tempo de estudo em suas 
próximas provas e sempre que descobrirem novas 
informações, insiram-nas no resumo. 
7 – Diversas figuras: essas aulas estarão em constante 
evolução, sempre à procura de explicar as matérias de 
maneira mais compreensível e com novas 
informações/questões. Para tal, na minha opinião, é 
fundamental a utilização de figuras, gráficos, painéis, etc. 
Em minha experiência, é bem mais fácil memorizar a 
partir de imagens. 
8 – Revisem antes da prova: não adianta querer 
estudar coisas novas até o último minuto antes da prova 
e não revisar o que estudou há um mês. Vocês irão 
esquecer e irão se irritar na hora da prova por não 
lembrarem de conceitos simples. Tirem uma semana 
para revisar seus resumos, decorarem algumas coisas 
e, certamente, irão mais confiantes para a prova. 
9 – Fazer Exercícios: muitos exercícios é o meio pelo 
qual vocês se situarão. Como assim, professor? É na hora 
de fazer os exercícios que vocês descobrirão se estão 
bem ou mal e avaliarão se precisam estudar mais ou 
menos. Para tal, há um quadrinho ao final de cada bloco 
de exercícios para vocês anotarem a quantidade de 
questões respondidas corretamente ou incorretamente. 
10 – Simulado Final: ora, fazer um bloco de questões 
depois de estudar a teoria é tranquilo. No entanto, 
lembrem-se que a memória de vocês não é infinita e 
vocês têm um milhão de outras coisas para estudar e 
decorar. Portanto, se possível, ao fim do curso faremos 
um simulado com questões escolhidas que foram 
comentadas dentro das aulas. 
 
Bem, pessoal! É isso... sejam bem-vindos! Espero que vocês curtam e tenham uma 
leitura leve e despojada da aula, mas com muito foco, atenção e dedicação. 
Qualquer dúvida, podem entrar em contato comigo – ficarei feliz em ajudá-los. Bons 
estudos, estou torcendo por vocês! Fiquem agora com algumas mensagens 
incentivo para animá-los ;-) 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 11 de 83 
R$ 10.119,93 
R$ 10.119,93 
R$ 10.119,93 
R$ 10.119,93 
R$ 10.119,93 
 
 
 
 
 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 12 de 83 
 METODOLOGIAS ÁGEIS 
 
Em meados de 2001, dezessete especialistas 
proeminentes da área de desenvolvimento de software 
se reuniram em um resort em Utah para discutir sobre 
suas pesquisas e métodos de desenvolvimento de 
software. Entre eles, estava Martin Fowler (foto ao 
lado). Após diversos debates, eles redigiram o famoso 
documento intitulado de Manifesto Ágil para 
Desenvolvimento de Software, que trazia um conjunto 
de definições a respeito sobre essa abordagem. 
 
 
 
Por que valorizar mais indivíduos e suas interações do que processos e 
ferramentas? 
 
Porque, em última instância, quem gera produtos e serviços são os indivíduos, que 
possuem características únicas, como talento e habilidade. A programação de 
computadores é uma atividade humana e, assim, depende de questões humanas 
para seu sucesso. Highsmith afirma que são críticas para o sucesso dos projetos: as 
habilidades, as personalidades e as peculiaridades dos indivíduos. 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 13 de 83 
 
Eles são, muitas vezes, desorganizados e difíceis de entender, mas também são 
inovadores, criativos e apaixonados. Vale dizer que quanto melhor a equipe 
interage, mais fácil será a resolução dos problemas no desenvolvimento. O feedback 
contribui bastante para melhorar essa interação. As habilidades individuais e o 
trabalho em equipe são inseparáveis em projetos de desenvolvimento de software. 
 
E quanto às ferramentas e aos processos? Ora, ambos são importantes para guiar e 
apoiar o desenvolvimento, mas é a capacidade e o conhecimento dos indivíduos 
que ajudam a tomar decisões críticas no projeto. Desde quando seguir processos e 
usar ferramentas, apenas, é suficiente para criar bons softwares? Pois é, sempre são 
necessárias as habilidades do indivíduo! 
 
Por que valorizar mais software em funcionamento do que documentação 
abrangente? 
 
Porque clientes se interessam por resultados que entreguem valor ao negócio e, 
não, por documentos abrangentes. O software em funcionamento é o único 
indicador do que, de fato, a equipe construiu. Claro, não se exclui a necessidade de 
documentação, que é bastante útil para o desenvolvimento, mas deve-se produzir 
somente a documentação necessária e suficiente para a realização do trabalho. 
 
Vou repetir, porque esse assunto cai em prova! No ágil, documentação é 
descartável? Não! Ela é útil para ajudar a comunicação e colaboração na equipe, 
melhorar a transferência de conhecimento, preservar informações históricas, 
satisfazer necessidades contratuais ou legais, etc. A documentação é importante, 
sim; mas valoriza-se mais o software em funcionamento. 
 
Por que valorizar mais colaboração com o cliente do que negociação de 
contratos? 
 
Porque é importante envolvimento contínuo do cliente. Aliás, desenvolvedores e 
clientes devem estar sempre lado a lado, visto que possuem interesses em comum, 
i.e., produzir um software que traga valor aos clientes. Galera, ambos são 
fundamentais, o projeto não sai sem a colaboração com o cliente. Ambos devem 
tomar decisões em conjunto – colaborativamente –, sem disputas contratuais. 
 
Por que valorizar mais a resposta a mudanças do que seguir um 
planejamento específico? 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 14 de 83 
 
Porque, em geral, é necessário obter respostas rápidas a mudanças e seguir um 
desenvolvimento contínuo do software. Todo projeto deve balancear o 
planejamento com a mudança, dependendo do nível de incerteza inerente a ele. 
Projetos são inerentemente incertos, logo manter-se preso a um planejamento 
ultrapassado pode ser nocivo ao andamento do projeto. 
 
Estamos no século 21! Uma empresa líder de mercado pode acabar de uma hora 
para outra – a única certeza é a instabilidade! Logo, a equipe deve estar preparada 
para mudanças no escopo, tempo, custo, tecnologia, arquitetura, entre outros. 
Iterações curtas de desenvolvimento permitem que mudanças possam ser 
rapidamente inseridas no projeto, de forma que atendam às novas necessidades. 
 
Por fim, o manifesto enfatiza que os itens à direita têm seu valor, entretanto os itens 
à esquerda são mais valorizados! A charge abaixo brinca com os mitos sobre 
desenvolvimento ágil. Muitos acreditam que é um desenvolvimento caótico, sem 
ordem, mambembe, improvisado,sem planejamento e sem documentação, mas 
com foco em rapidez. 
 
 
 
Isso é um enorme equívoco! Primeiro, agilidade é diferente de velocidade. A 
agilidade é a capacidade de responder adequadamente a mudanças (de software, 
tecnologia, equipes). Quem realiza um desenvolvimento, de fato, veloz ou rápido é 
o RAD (Desenvolvimento Rápido de Aplicações). Portanto, a agilidade está 
relacionada a flexibilidade e capacidade de resposta. 
 
Para entender essa diferença, eu gosto de utilizar dois exemplos! O Usain Bolt é 
tricampeão olímpico, mundial, etc... ou seja, ele é geralmente o mais rápido, mas 
ele tem um problema: sua largada! Ele reage mais lento que seus adversários 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 15 de 83 
quando ouve o disparo de início da corrida (mudança), logo podemos dizer que ele 
é o mais rápido, mas é menos ágil, i.e., ele demora mais a responder a mudanças. 
 
Isso ocorre também quando você tem em disputa um carro muito potente e pesado 
e um carro menos potente e mais leve. É provável que o carro mais leve, mesmo 
sendo menos potente, tenha uma arrancada melhor, ou seja, ele é mais ágil. Apesar 
de ser mais lento no decorrer da corrida, ele será mais ágil. Claro, pessoal, que esses 
são exemplos genéricos – apenas para entender a ideia. 
 
Pressman afirma que a agilidade pode ser aplicada a qualquer processo de software. 
Entretanto, para obtê-la, é essencial que seja projetado para que a equipe possa 
adaptar e alinhar (racionalizar) tarefas; possa conduzir o planejamento 
compreendendo a fluidez de uma abordagem do desenvolvimento ágil; possa 
eliminar tudo, exceto os artefatos essenciais, conservando-os enxutos. 
 
Além disso, deve enfatizar a estratégia de entrega incremental, conseguindo 
entregar ao cliente, o mais rapidamente possível, o software operacional para o tipo 
de produto e ambiente operacional. Essa são as diretivas para que um processo de 
software possa ser, também, ágil. Vocês podem notar que segue todos os princípios 
que nós já vimos em aula. 
 
Métodos ágeis são mais dinâmicos, adaptativos, interativos e colaborativos, eles se 
adaptam às necessidades de um projeto e às suas mudanças no decorrer do 
desenvolvimento; os tradicionais são mais preditivos/prescritivos, processuais, 
formais, documentais e contratuais, eles valorizam mais o planejamento de todos 
os aspectos do processo de desenvolvimento de software como um todo. 
 
Entre os princípios do desenvolvimento ágil de software, nós temos: simplicidade; 
rápida adaptação a mudanças; quaisquer mudanças no projeto são bem-vindas; 
softwares ou partes de softwares são entregues frequentemente; cooperação 
constante entre a área de negócio e a área técnica; excelência técnica, entre outros. 
Galera, já entraram no site do Manifesto Ágil? Entrem aí: www.agilemanifesto.org. 
 
 
NÓS SEGUIMOS ESSES PRINCÍPIOS... 
 
Nossa maior prioridade é satisfazer o cliente através da entrega contínua e adiantada de 
software com valor agregado. As Metodologias Tradicionais preconizavam planos detalhados 
do projeto; o Ágil busca se adaptar às necessidades dos clientes e entregar valor 
continuamente. 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 16 de 83 
Mudanças nos requisitos são bem-vindas, mesmo tardiamente no desenvolvimento. Processos 
ágeis tiram vantagem das mudanças visando vantagem competitiva para o cliente. As 
Metodologias Tradicionais são preditivas – já vimos que esse cenário é ilusório. 
 
Entregar frequentemente software funcionando, de poucas semanas a poucos meses, com 
preferência à menor escala de tempo. As Metodologias Tradicionais realizam, em geral, uma 
única entrega – ao final do projeto, 
 
Pessoas de negócio e desenvolvedores devem trabalhar diariamente em conjunto por todo o 
projeto. As Metodologias Tradicionais não valorizavam essa colaboração intensa entre clientes 
e desenvolvedores, como faz o Ágil. 
 
Construa projetos em torno de indivíduos motivados. Dê a eles o ambiente e o suporte 
necessário e confie neles para fazer o trabalho. As Metodologias Tradicionais se apoiavam 
fortemente em processos e ferramentas, em detrimento das pessoas que, de fato, construíam 
o software. 
O método mais eficiente e eficaz de transmitir informações para e entre uma equipe de 
desenvolvimento é através de conversa face a face. As Metodologias Tradicionais utilizam 
documentos, diagramas, relatórios, telefonemas para promover a comunicação no projeto. 
 
Software funcionando é a medida primária de progresso. As Metodologias Tradicionais 
propunham a entrega de artefatos (Ex: Documentação) que, em geral, não agregavam valor 
algum aos clientes, como também uma forma de medir o progresso do projeto. 
 
Os processos ágeis promovem desenvolvimento sustentável. Os patrocinadores, 
desenvolvedores e usuários devem ser capazes de manter um ritmo constante 
indefinidamente. As Metodologias Tradicionais, muitas vezes, patrocinavam horas-extras de 
forma a fazer a equipe produzir mais em menos tempo. 
Contínua atenção à excelência técnica e bom design aumenta a agilidade. As Metodologias 
Tradicionais acreditavam que, para se obter máxima velocidade e flexibilidade no 
desenvolvimento de software, poder-se-ia sacrificar a qualidade deste software. 
 
Simplicidade – a arte de maximizar a quantidade de trabalho não realizado – é essencial. As 
Metodologias Tradicionais, algumas vezes, recorriam a implementações desnecessariamente 
complexas, a planejamentos exageradamente detalhados, entre outros1. 
 
1 Esse princípio parece não fazer sentido, mas é simples! Deve-se maximizar a quantidade de trabalho não 
realizado, ou seja, se determinado trabalho não é essencial, não deve ser feito - e isso tem que ser maximizado. 
A negação dessa frase seria: minimizar a quantidade de trabalho realizado. Ou seja, fazer o mínimo que resolve 
determinado problema. 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 17 de 83 
 
As melhores arquiteturas, requisitos e designs emergem de equipes auto-organizáveis. As 
Metodologias Tradicionais geralmente precisam de um gerente de projetos responsável por 
organizar o trabalho da equipe como um todo, sendo também responsável pela tomada de 
decisões. 
Em intervalos regulares, a equipe reflete sobre como se tornar mais eficaz e então refina e 
ajusta seu comportamento de acordo. As Metodologias Tradicionais muitas vezes são 
engessadas, i.e., não revisitam frequentemente seu comportamento. 
 
 
Professor, metodologias ágeis são recomendadas para projetos de qualquer tamanho 
e complexidade? Segundo Sommerville: “Todos os métodos têm limites, e os métodos 
ágeis são somente adequados para alguns tipos de desenvolvimento de sistema. Na 
minha opinião, eles são mais adequados para o desenvolvimento de sistemas de 
pequenas e médias empresas e produtos para computadores pessoais”. 
 
Eu discordo dessa afirmação! Acredito que ela já foi válida tempos atrás, mas hoje 
não é mais! Projetos Ágeis já são suficientemente maduros para serem aplicados a 
projetos complexos e de grande porte. Pessoal, essa é só a minha opinião! Não é 
possível saber ainda a posição das bancas caso isso seja questionado em provas de 
concurso. Bacana? Vamos lá... 
 
Professor, você pode citar algumas metodologias e frameworks de desenvolvimento 
de software? Claro, vejam uma lista abaixo: 
Agora vamos ver algumas diferenças básicas entremetodologias de 
desenvolvimento software tradicionais e metodologias ágeis: 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 18 de 83 
 
CRITÉRIO 
 
TRADICIONAL 
 
ÁGIL 
 
PLANEJAMENTO 
Comumente realizado em 
detalhe para todo o projeto em 
sua fase inicial. 
Planejamento de alto nível no início 
do projeto e os detalhes são 
realizados durante o projeto. Não é 
necessário possuir um 
planejamento detalhado de todo o 
projeto. A restrição se dá apenas 
em possuir os detalhes do trabalho 
para a próxima iteração. 
RISCOS 
Pode exigir um grande esforço e 
equipe para atuar com os riscos 
de todo o projeto. 
Prioriza os riscos gerais do 
projeto, mas foca principalmente 
nos riscos das próximas iterações, 
atuando assim em um escopo bem 
reduzido. A própria equipe atua 
com os riscos e pode obter apoio 
externo. 
 
EQUIPE 
Possui profissionais com papéis 
bem definidos, quantificada e 
mobilizada conforme o 
planejamento do projeto. A 
equipe executa o projeto guiado 
pelo Gerente de Projetos 
conforme o plano estabelecido. 
 
Equipe multidisciplinar, 
multifuncional e auto-organizada. 
Ela decide como fazer e atua de 
forma colaborativa. 
 
 
 
 
TEMPO DE ENTREGA 
É realizado conforme o plano 
estabelecido e pode durar 
semanas, meses ou até mesmo 
anos. 
 
 
 
 
Fixo e é conforme a definição de 
duração das iterações que 
comumente varia entre 1 e 4 
semanas. 
ACEITAÇÃO DE 
MUDANÇAS 
Gerenciamento formal de 
mudanças, pois exige alteração 
do planejamento já realizado e 
geralmente precisa passar por 
Mudanças são bem-vindas. Evita-
se mudar o escopo da iteração em 
andamento, mas o escopo das 
futuras iterações podem ser 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 19 de 83 
aprovações formais de um ou 
mais níveis hierárquicos. 
 
 
replanejado conforme a 
necessidade do cliente. 
PREVISIBILIDADE 
Depende do intervalo de 
monitoramento e controle do 
projeto. Quanto mais curto, 
maior a chance de prever as 
ocorrências futuras. Quanto 
maior o intervalo, menor a 
chance de prever as 
ocorrências futuras. 
Tende a ter uma grande 
previsibilidade futura devido à 
constante análise e feedback 
através das oportunidades de 
inspeção e adaptação providas 
pelo método. 
RESULTADOS AO 
LONGO DO TEMPO 
Tende a demorar a dar 
resultados a curto prazo, pois 
as entregas são geralmente 
realizadas ao final do projeto. 
Melhores resultados são 
apresentados em projetos de 
maior duração. 
 
Gera resultados a curto, médio e 
longo prazo, pois atua com 
entregas antecipadas e de valor 
agregado e contínuo ao cliente. 
APRESENTAÇÃO DE 
INFORMAÇÕES DO 
PROJETO 
Geralmente de uma 
apresentação formal 
previamente agendada com os 
stakeholders em intervalos de 
tempo. As informações podem 
ser detalhadas ou não conforme 
a necessidade do público 
envolvido. 
Geralmente informal e utiliza 
radiadores de informação no 
ambiente de trabalho durante todo 
o projeto, de modo que as 
informações do projeto fiquem 
visíveis e transparentes a toda 
equipe e envolvidos. 
PRAZO DE ENTREGA 
Conforme estabelecido no 
planejamento do projeto. No 
caso de mudanças aprovadas, 
varia conforme os impactos das 
solicitações e podem ser 
traumáticas aos envolvidos 
quanto às suas expectativas. 
 
Conforme o tamanho da iteração e 
o planejamento das releases para 
as entregas significativas. 
DOCUMENTAÇÃO 
Detalhada desde o início do 
projeto. 
Abrangente no início e detalhada 
somente o necessário durante o 
0
00000000000 - DEMO
0
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 20 de 83 
projeto conforme os objetivos das 
iterações e releases. 
 
 
 
 
ATUAÇÃO DO 
CLIENTE 
Nas fases iniciais e nas 
principais validações do 
produto. 
Durante todo o projeto, o cliente 
faz parte da equipe. 
 
 
 
 
 
 
DISCUSSÃO E 
MELHORIAS 
Geralmente em prazos longos 
através da realização de 
reuniões após uma grande etapa 
ou grande entrega do projeto. 
 
 
 
Em prazos curtos, sempre ao final 
das iterações. 
 
 
 
 
 
 
COMANDANTE 
Gerente de Projetos. 
 
 
 
 
 
 
Equipe do Projeto. 
 
 
 
 
 
 
 
PAPÉIS 
Claros e definidos. 
 
 
 
 
 
 
Conforme a confiança na equipe e 
ambiente colaborativo. 
 
 
 
 
 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 21 de 83 
PROCESSO 
Guiado conforme o 
planejamento do projeto e nos 
processos estabelecidos no 
plano. 
 
 
 
 
Empírico e guiado ao produto e às 
pessoas. Orientado à geração de 
valor e conforme priorização dos 
riscos. 
RESULTADO 
Melhor resultado em projetos 
com escopo muito bem definido 
e orientado a planejamento. 
 
 
 
 
 
Melhor resultado em projetos cujo 
escopo é dinâmico e construído 
durante a execução do projeto. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 22 de 83 
 
 
 (CESPE – 2012 – TCE/E – Auditor de Controle Externo – Tecnologia da 
Informação) Em virtude de as metodologias ágeis gerarem excessiva 
documentação, a gestão do conhecimento depende diretamente dos 
programadores envolvidos no projeto. 
 
Comentários: 
 
Por que valorizar mais software em funcionamento do que documentação 
abrangente? 
 
Vou repetir, porque esse assunto cai em prova! No ágil, documentação é descartável? 
Não! Ela é útil para ajudar a comunicação e colaboração na equipe, melhorar a 
transferência de conhecimento, preservar informações históricas, satisfazer 
necessidades contratuais ou legais, etc. A documentação é importante, sim; mas 
valoriza-se mais o software em funcionamento. 
 
Conforme vimos em aula, o Manifesto Ágil valoriza: Software em Funcionamento 
mais do que Documentação Abrangente, portanto não é correto dizer que 
metodologias ágeis geram excessiva documentação. 
 
Gabarito: E 
 
 (CESPE – 2011 – EBC – Analista de Sistemas) O que os métodos ágeis buscam é 
como evitar as mudanças desde o início do projeto e não a melhor maneira de 
tratar essas mudanças. 
 
Comentários: 
 
 
NÓS SEGUIMOS ESSES PRINCÍPIOS... 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 23 de 83 
Mudanças nos requisitos são bem-vindas, mesmo tardiamente no desenvolvimento. Processos 
ágeis tiram vantagem das mudanças visando vantagem competitiva para o cliente. As 
Metodologias Tradicionais são preditivas – já vimos que esse cenário é ilusório. 
 
 
Conforme vimos em aula, Metodologias Ágeis são extremamente afeitas a 
mudanças de requisitos, adaptando-se a novos contextos e respondendo a cada 
modificação. 
 
Gabarito: E 
 
 (CESPE – 2010 – BASA – Técnico Científico – Arquitetura de Tecnologia) 
Desenvolvimento ágil de software (Agile Software Development) ou método ágil 
é aplicado, principalmente, a grandes corporações, uma vez que permite 
produzir grandes sistemas de forma ágil. 
 
Comentários: 
 
Professor, metodologias ágeis são recomendadas para projetos de qualquer tamanho 
e complexidade? Segundo Sommerville: “Todos os métodostêm limites, e os métodos 
ágeis são somente adequados para alguns tipos de desenvolvimento de sistema. Na 
minha opinião, eles são mais adequados para o desenvolvimento de sistemas de 
pequenas e médias empresas e produtos para computadores pessoais”. 
 
A questão afirma que ela é aplicada principalmente a grandes corporações. De fato, 
isso está errado! Ela ainda é aplicada principalmente a aplicações pequenas e 
médias, mas permite – sim – produzir grandes sistemas de forma ágil. 
 
Gabarito: E 
 
 (CESPE – 2010 – TCU – Auditor Federal de Controle Externo – Tecnologia da 
Informação) A agilidade não pode ser aplicada a todo e qualquer processo de 
software. 
 
Comentários: 
 
Pressman afirma que a agilidade pode ser aplicada a qualquer processo de software. 
Entretanto, para obtê-la, é essencial que seja projetado para que a equipe possa 
adaptar e alinhar (racionalizar) tarefas; possa conduzir o planejamento 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 24 de 83 
compreendendo a fluidez de uma abordagem do desenvolvimento ágil; possa 
eliminar tudo, exceto os artefatos essenciais, conservando-os enxutos. 
 
Conforme vimos em aula, a agilidade pode – sim – ser aplicada a qualquer processo 
de software. 
 
Gabarito: E 
 
 (CESPE – – UNIPAMPA – Analista de Sistemas) XP, Scrum e Cristal são 
exemplos de modelos ágeis de desenvolvimento de sistemas. 
 
Comentários: 
 
Conforme vimos em aula, está perfeito! 
 
Gabarito: C 
 
 (CESPE - 2011 - EBC - Analista - Engenharia de Software) Considerando o 
conceito de metodologia ágil em apreço, é correto afirmar que as seguintes 
metodologias são ágeis: XP (Extreme Programming), Scrum, Crystal, FDD 
(Feature Driven Development), DSDM (Dynamic Systems Development Method) 
e Open Source Software Development. 
 
Comentários: 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 25 de 83 
 
 
Conforme vimos em aula, está perfeito! 
 
Gabarito: C 
 
 (CESPE - 2013 - CNJ - Técnico Judiciário - Programação de Sistemas) O 
desenvolvimento ágil de sistemas consiste em uma linguagem de modelagem 
que permite aos desenvolvedores visualizarem os produtos de seu trabalho em 
gráficos padronizados. 
 
Comentários: 
 
Não, desenvolvimento ágil de sistemas não é uma linguagem de modelagem. Quem 
pode me dizer um exemplo de linguagem de modelagem? UML! 
 
Gabarito: E 
 
 (CESPE - 2011 - EBC - Analista - Engenharia de Software) É conveniente que o 
contrato, entre cliente e fornecedor, para o desenvolvimento de um sistema 
computacional, contenha a lista de requisitos para o software. Contudo, os 
métodos ágeis de desenvolvimento preconizam que o referido contrato 
estabeleça o preço, a ser pago pelo cliente, com base no tempo necessário para 
o desenvolvimento do sistema e não com base no conjunto de requisitos. 
 
Comentários: 
 
Segundo Martin Fowler, pode-se fixar um orçamento para o software antes de 
desenvolvê-lo. A abordagem ágil comum é fixar tempo e preço, deixando o escopo 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 26 de 83 
variar (os requisitos são variáveis) de forma controlada. É o famoso: “Tempo fixo, 
escopo variável”. 
 
Gabarito: C 
 
 (CESPE - 2015 – MPOG/ATI - Analista de Sistemas) Metodologias de 
desenvolvimento ágil enfocam atividades de projeto e implementação, 
desconsiderando as atividades de elicitação de requisitos e a produção de 
documentação. 
 
Comentários: 
 
Por que valorizar mais software em funcionamento do que documentação 
abrangente? 
 
Porque clientes se interessam por resultados que entreguem valor ao negócio e, não, 
por documentos abrangentes. O software em funcionamento é o único indicador do 
que, de fato, a equipe construiu. Claro, não se exclui a necessidade de documentação, 
que é bastante útil para o desenvolvimento, mas deve-se produzir somente a 
documentação necessária e suficiente para a realização do trabalho. 
 
Vou repetir, porque esse assunto cai em prova! No ágil, documentação é descartável? 
Não! Ela é útil para ajudar a comunicação e colaboração na equipe, melhorar a 
transferência de conhecimento, preservar informações históricas, satisfazer 
necessidades contratuais ou legais, etc. A documentação é importante, sim; mas 
valori -se mais o software em funcionamento. 
 
Conforme vimos em aula, é absurdo pensar que se desconsidera atividades de 
elicitação de requisitos – não há o que se discutir nesse ponto. Além disso, o 
Manifesto Ágil afirma que, mesmo havendo valor na documentação extensa de 
software, valoriza-se mais o software em funcionamento. Em outras palavras, é 
errado afirmar que se desconsidera a produção de documentação, tendo em vista 
que há uma codificação não formal. 
 
Gabarito: E 
 
10. (CESPE - 2016 – TRE/PI - Analista de Sistemas) No que se refere a métodos ágeis 
de desenvolvimento de sistemas, assinale a opção correta. 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 27 de 83 
a) A aplicação de método ágil para desenvolvimento de grandes sistemas pode 
enfrentar dificuldades que o tornem inviável. 
 
b) O documento de requisitos, apesar de abordar um conjunto pequeno de 
funcionalidades, deve especificar toda a necessidade do usuário. 
 
c) O sistema é construído em pequenos blocos, que irão compor uma versão a 
ser entregue aos usuários. 
 
d) A documentação de projeto deve ser feita pelo próprio desenvolvedor, 
seguindo padrões simplificados. 
 
e) Para atingir os objetivos de agilidade exigidos, os desenvolvedores devem 
seguir processos simplificados para a construção do software. 
 
Comentários: 
 
a) Correto. Aqui temos a teoria e a prática: no início, tanto a teoria quanto a prática 
não recomendavam que as metodologias ágeis fossem aplicadas a sistemas 
grandes. No entanto, atualmente, isso já não é mais uma limitação. Hoje em dia, as 
metodologias ágeis adquiriram maturidade suficiente para desenvolver sistemas 
grandes e complexos. Porém, isso ainda está na teoria, por isso as questões ainda 
cobram. 
 
b) Errado. Em metodologias ágeis, há uma documentação abrangente no início e 
detalhada somente o necessário durante o projeto conforme os objetivos das 
iterações e releases. No entanto, não existe um "Documento de Requisitos" - isso é 
coisa de metodologias tradicionais. Além disso, nenhum documento nunca 
conseguirá especificar todas as necessidades dos usuários. 
 
c) Correto. Não vislumbro qualquer erro nesse item. Ora, metodologias ágeis são 
iterativas e incrementais, dividindo o sistema em pequenas partes e sempre 
entregando versões que agreguem valor aos usuários. Se você errou esse item, fique 
tranquilo - o vacilo foi da banca! 
 
d) Errado. Documentação de Projeto? Isso é coisa de metodologias tradicionais. E, 
pensa comigo, o Product Backlog (do Scrum) é feito pelo desenvolvedor? Não, as 
histórias de usuário são escritas pelo Product Owner (Cliente). 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 28 de 83 
e) Errado. Não existe esse negócio de "objetivos de agilidade exigidos". Isso soa como 
se existissem métricas de agilidadeque tivessem que ser atingidas. 
 
Gabarito: A 
 
11. (CESPE - 2016 – TCE/PR - Analista de Sistemas) Os métodos ágeis para o 
desenvolvimento de software representam uma evolução da engenharia de 
software tradicional, uma vez que são aplicáveis a todos os tipos de projetos, 
produtos, pessoas e situações. 
 
Comentários: 
 
É um erro comum achar que metodologias ágeis servem para todas as ocasiões. 
 
Gabarito: E 
 
12. (CESPE - 2016 – TCE/PR - Analista de Sistemas) Para que um projeto 
fundamentado em métodos ágeis de desenvolvimento tenha sucesso, a situação 
ou o problema a ser resolvido deve-se manter inalterado enquanto durar o 
projeto. 
 
Comentários: 
 
Estamos no século 21! Uma empresa líder de mercado pode acabar de uma hora para 
outra – a única certeza é a instabilidade! Logo, a equipe deve estar preparada para 
mudanças no escopo, tempo, custo, tecnologia, arquitetura, entre outros. Iterações 
curtas de desenvolvimento permitem que mudanças possam ser rapidamente 
inseridas no projeto, de forma que atendam às novas necessidades. 
 
Pelo contrário, métodos ágeis aceitam bem mudanças. 
 
Gabarito: E 
 
13. (CESPE - 2016 – TCE/PR - Analista de Sistemas – Um dos princípios de 
agilidade da Agile Alliance dispõe que a entrega completa de um software 
garante a satisfação do cliente. 
 
Comentários: 
 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 29 de 83 
NÓS SEGUIMOS ESSES PRINCÍPIOS... 
 
Nossa maior prioridade é satisfazer o cliente através da entrega contínua e adiantada de 
software com valor agregado. As Metodologias Tradicionais preconizavam planos detalhados 
do projeto; o Ágil busca se adaptar às necessidades dos clientes e entregar valor 
continuamente. 
 
Percebam que não existe entrega completa, mas contínua – logo, errado! 
 
Gabarito: E 
 
ACERTEI ERREI 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 30 de 83 
 TEST-DRIVEN DEVELOPMENT (TDD) 
 
O Test-Driven Development (TDD2) é um método ágil de desenvolvimento de 
software que se baseia na repetição de um ciclo de desenvolvimento curto, focado 
em testes unitários, em que os casos de teste que verificam uma nova funcionalidade 
são escritos antes mesmo da própria funcionalidade. Escreve-se o teste, encontre 
uma falha e refatore-o, ciclicamente – conhecido como Red, Green e Refactor. 
 
Vamos lá! Para cada parte da aplicação, adiciona-se um teste escrito antes mesmo 
do desenvolvimento do código em si. Por que? Porque eles podem ajudar a reduzir 
riscos de possíveis problemas no código. Executamos o teste e ele... falha! Ele deve 
necessariamente falhar! Por que? Ora, porque ele é o primeiro teste e você nem 
criou a funcionalidade ainda, logo ele não irá funcionar! 
 
Então nós adicionamos uma nova funcionalidade ao sistema apenas para que ele 
passe no teste e execute novamente (agora ele deve passar no teste). Então 
adicionamos um novo teste e rodamos o teste anterior e esse novo teste. Se algum 
deles falhar, modifica-se o código da funcionalidade e rodam-se todos os testes 
novamente, e assim por diante – a imagem abaixo mostra como funciona. 
 
Galera, vocês percebem que o feedback sobre a nova funcionalidade é bem rápido? 
Ademais, cria-se um código mais limpo, visto que o código para passar nos testes 
deve ser bastante simples. Há mais segurança na correção de eventuais bugs; 
 
2 Eventualmente chamado de Test-Driven Programming (TDP). 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 31 de 83 
aumenta-se a produtividade, visto que se perde menos tempo com depuradores; e 
o código se torna mais flexível, menos acoplado e mais coeso. 
 
 
Em geral, utilizam-se Testes Unitários, Testes de Integração ou Testes de Aceitação 
– sendo os primeiros os mais comuns. Algumas ferramentas que podem ser 
utilizadas para implementar o processo de desenvolvimento orientado a testes: 
JUnit, TesteNG, PHPUnit, SimpleTest, NUnit, Jasmine, CUnit, PyUnit, etc. Enfim, 
pessoal, essa abordagem permite diminuir eventuais riscos. 
 
 
 
 
 
 
 
IMPORTANTE 
 
O Test Driven Development (TDD) não é uma abordagem para realizar testes, é uma 
abordagem para desenvolver softwares. Entenderam? Se alguma questão disser que trata-
se de uma técnica para realização de testes de software, está errado! É um processo para 
desenvolvimento de software! Ok? 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 32 de 83 
 
Professor, isso já caiu em prova discursiva? Sim, a prova pedia para dizer as 
vantagens do emprego do TDD em relação a outras metodologias ágeis. 
Poderíamos responder essa pergunta afirmando que o software desenvolvido, em 
geral, apresenta maior qualidade, na medida em que é implementado direcionado 
às expectativas do cliente; 
Há a possibilidade de se testar todo o código desenvolvido, o que oferece maior 
confiabilidade ao sistema; por fim, em geral, o código é mais modularizado, flexível 
e extensível, visto que a metodologia requer que os desenvolvedores imaginem o 
software como pequenas unidades que podem ser reescritas, desenvolvidas e 
testadas de forma independente e integradas em momento posterior. 
A prova também perguntava como os princípios da Metodologia XP apoiados pelo 
TDD. Poderíamos afirmar que O Extreme Programming (XP) apresenta diversas 
práticas que podem ser relacionadas com o TDD; a mais óbvia é o “Teste Primeiro”, 
ratificando a característica básica recomendada veementemente pelo 
desenvolvimento orientado a testes. 
 
O TDD pode apoiar esse princípio por fornecer detalhes para a realização dos testes 
de unidade e de funcionalidade, que são importantes e necessários. Ademais, o 
desenvolvimento orientado a testes apresenta relação intrínseca com a Refatoração, 
tendo em vista que confere ao programador maior segurança para identificar e 
remover o código duplicado, e permite, assim, a melhoria contínua do programa. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 33 de 83 
 
 
 (CESPE – – INMETRO – Analista Executivo em Metrologia e Qualidade – 
Desenvolvimento de Sistemas) A rotina diária dos desenvolvedores, ao empregar 
processos baseados no TDD (Test-Driven Development), é concentrada na 
elaboração de testes de homologação. 
 
Comentários: 
 
A rotina dos desenvolvedores é concentrada, na verdade, na elaboração de testes 
unitários e, não, de homologação. Lembrem-se: constrói o teste, constrói a 
funcionalidade e refatora a funcionalidade. 
 
Gabarito: E 
 
 (CESPE – 2013 – INPI – Analista de Planejamento – Desenvolvimento e 
Manutenção de Sistemas) Usando-se o TDD, as funcionalidades devem estar 
completas e da forma como serão apresentadas aos seus usuários para que 
possam ser testadas e consideradas corretas. 
 
Comentários: 
 
Pelo contrário, primeiro são feitos os testes e depois desenvolvem-se as 
funcionalidades. 
 
Gabarito: E 
 
 (CESPE – 2013 – ANCINE – Analista de Sistemas) No desenvolvimentode 
software conforme as diretivas do TDD (Test-Driven Development), deve-se 
elaborar primeiramente os testes e, em seguida, escrever o código necessário 
para passar pelos testes. 
 
Comentários: 
 
Perfeito! Primeiro, criam-se os testes, depois cria-se o software ou componente. 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 34 de 83 
 
Gabarito: C 
 
 (CESPE – – INMETRO – Analista de Sistemas) Considerando uma 
organização na qual a abordagem de Test Driven Development (TDD) esteja 
implementada, assinale a opção correta. 
 
a) Nessa organização, ocorre a execução de iterações com ciclo longo, isto é, 
com duração de alguns meses. 
 
b) No início de cada iteração, a primeira atividade realizada pela equipe de 
desenvolvimento é produzir o código que será validado através de testes. 
 
c) O refactoring é uma das primeiras atividades realizada no início de cada 
iteração. 
 
d) Entre as atividades finais de cada iteração, o desenvolvedor escreve casos de 
teste automatizados, cuja execução verifica se houve a melhoria desejada ou se 
uma nova funcionalidade foi implementada. 
 
e) Há coerência e inter-relação com os princípios promovidos pela prática da 
extreme programming (XP). 
 
Comentários: 
 
(a) Não, são ciclos curtos; (b) Não, são produzidos primeiramente os testes e, depois, 
os códigos; (c) Não, a refatoração é uma das últimas atividades realizadas em uma 
iteração; (d) Escrever casos de testes é uma das atividades iniciais; (e) Perfeito, TDD 
é uma das práticas recomendadas pelo XP. 
 
Gabarito: E 
 
 (CESPE – 2013 – MPOG – Analista de Sistemas) Ao realizar o TDD (test-driven 
development), o programador é conduzido a pensar em decisões de design 
antes de pensar em código de implementação, o que cria um maior 
acoplamento, uma vez que seu objetivo é pensar na lógica e nas 
responsabilidades de cada classe. 
 
Comentários: 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 35 de 83 
Em Engenharia de Software, há dois conceitos importantíssimos: coesão e 
acoplamento. Quando eu estudava, eu decorava uma frase pequena para entender: 
"Coesão é a divisão de responsabilidades e Acoplamento é a dependência entre 
componentes". Há outra que dizia assim: "Uma boa arquitetura de software deve ter 
componentes de projeto com baixo acoplamento e alta coesão". 
 
O Acoplamento trata do nível de dependência entre módulos ou componentes de 
um software. Por que é bom ter baixo acoplamento? Porque se os módulos pouco 
dependem um do outro, modificações de um não afetam os outros, além de não 
prejudicar o reúso. Se esse princípio não for observado durante a construção da 
arquitetura de um sistema de software, pode haver problemas sérios de 
manutenção futura! 
 
Voltando à questão! Se o programador pensa em decisões de design antes de 
pensar em código de implementação, isso diminui o acoplamento - os 
componentes ficam menos dependentes tornando a arquitetura bem mais flexível. 
 
Gabarito: E 
 
 (CESPE – 2013 – MPU – Analista de Sistemas) Na metodologia TDD, ou 
desenvolvimento orientado a testes, cada nova funcionalidade inicia com a 
criação de um teste, cujo planejamento permite a identificação dos itens e 
funcionalidades que deverão ser testados, quem são os responsáveis e quais os 
riscos envolvidos. 
 
Comentários: 
 
Perfeito, essa metodologia permite um aprendizado maior sobre o problema a ser 
resolvido, permitindo (não é obrigatório) a identificação de itens, funcionalidades, 
responsáveis e riscos. 
 
barito: C 
 
 (CESPE – 2013 – STF – Analista de Sistemas) No TDD, o primeiro passo do 
desenvolvedor é criar o teste, denominado teste falho, que retornará um erro, 
para, posteriormente, desenvolver o código e aprimorar a codificação do 
sistema. 
 
Comentários: 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 36 de 83 
Perfeito, é exatamente isso! 
 
Gabarito: C 
 
 (CESPE – 2013 – TRT/17 – Analista de Sistemas) TDD consiste em uma técnica de 
desenvolvimento de software com abordagem embasada em perspectiva 
evolutiva de seu desenvolvimento. Essa abordagem envolve a produção de 
versões iniciais de um sistema a partir das quais é possível realizar verificações 
de suas qualidades antes que ele seja construído. 
 
Comentários: 
 
Galera! O CESPE afirma que esta questão está errada e, para uma questão estar 
errada, é preciso que haja algum erro nela. Óbvio, não?! Pois é, o problema é que 
eu não acho que haja nenhum erro no item. TDD é uma técnica? Sim! De 
desenvolvimento de software? Sim! Com abordagem embasada em perspectiva 
evolutiva? Sim, criam-se testes que vão encontrando erros e melhorando um código. 
Essa abordagem envolve a produção de versões iniciais de um sistema? Sim. A partir 
das quais é possível realizar verificações de suas qualidades antes que ele seja 
construído? Sim, a partir dos testes e do entendimento do software, é possível 
verificar a qualidade do sistema a ser construído. Enfim, discordo do gabarito! 
 
Gabarito: E 
 
 (CESPE – 2013 – AL/RN – Analista de Sistemas) Um típico ciclo de vida de um 
projeto em TDD consiste em: 
 
I. Executar os testes novamente e garantir que estes continuem tendo sucesso. 
II. Executar os testes para ver se todos estes testes obtiveram êxito. 
III. Escrever a aplicação a ser testada. 
IV. Refatorar (refactoring). 
V. Executar todos os possíveis testes e ver a aplicação falhar. 
VI. Criar o teste. 
 
A ordem correta e cronológica que deve ser seguida para o ciclo de vida do TDD 
está expressa em: 
 
a) IV − III − II − V − I − VI. 
b) V − VI − II − I − III − IV. 
c) VI − V − III − II − IV − I. 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 37 de 83 
d) III − IV − V − VI − I − II. 
e) III − IV − VI − V − I − II. 
 
Comentários: 
 
Pessoal, acredito que essa questão não possui resposta! Percebam que a opção que 
melhor se encaixa é a Letra C (VI − V − III − II − IV – I), no entanto o item V afirma: 
Executar todos os possíveis testes e ver a aplicação falhar. Acredito que o correto 
seria dizer: Executar os possíveis testes e ver se algum deles falha. 
 
Gabarito: C 
 
10. (FGV – 2013 – AL/MT – Analista de Sistemas) Com relação ao desenvolvimento 
orientado (dirigido) a testes (do Inglês Test Driven Development – TDD), analise 
as afirmativas a seguir. 
 
I. TDD é uma técnica de desenvolvimento de software iterativa e incremental. 
 
II. TDD implica escrever o código de teste antes do código de produção, um 
teste de cada vez, tendo certeza de que o teste falha antes de escrever o código 
que irá fazê-lo passar. 
 
III. TDD é uma técnica específica do processo XP (Extreme Programming), 
portanto, só pode ser utilizada em modelos de processos ágeis de 
desenvolvimento de software. 
 
Assinale: 
 
a) Se somente as afirmativas I e II estiverem corretas. 
b) Se somente as afirmativas I e III estiverem corretas. 
c) Se somente as afirmativas II e III estiverem corretas. 
d) Se somente a afirmativa III estiver correta. 
e) Se somente a afirmativa I estiver correta. 
 
Comentários: 
 
(I) Perfeito, é iterativo e incremental (lembrando que, em sua imensa maioria, 
metodologias ágeis são iterativas/incrementais); (II) Perfeito, escrevem-se os testes 
antes, fá-lo falhar e só depois escreve-se o código da aplicação;(III) Não, ele é uma 
metodologia independente. 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 38 de 83 
 
Gabarito: A 
 
11. (FCC – 2015 – TRT/MG – Analista de Sistemas) Um analista de TI está participando 
do desenvolvimento de um software orientado a objetos utilizando a plataforma 
Java. Na abordagem de desenvolvimento adotada, o código é desenvolvido de 
forma incremental, em conjunto com o teste para esse incremento, de forma 
que só se passa para o próximo incremento quando o atual passar no teste. 
Como o código é desenvolvido em incrementos muito pequenos e são 
executados testes a cada vez que uma funcionalidade é adicionada ou que o 
programa é refatorado, foi necessário definir um ambiente de testes 
automatizados utilizando um framework popular que suporta o teste de 
programas Java. 
 
A abordagem de desenvolvimento adotada e o framework de suporte à criação 
de testes automatizados são, respectivamente, 
 
a) Behavior-Driven Development e JTest. 
b) Extreme Programming e Selenium. 
c) Test-Driven Development e Jenkins. 
d) Data-Driven Development and Test e JUnit. 
e) Test-Driven Development e JUnit. 
 
Comentários: 
 
A questão trata do TDD e JUnit. 
 
Gabarito: E 
 
ACERTEI ERREI 
 
 
 
 
 
 
 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 39 de 83 
 FEATURE DRIVEN DEVELOPMENT (FDD) 
 
Vamos falar agora sobre o Feature Driven Development (ou Desenvolvimento 
orientado a Funcionalidades/Características). Essa é uma das seis implementações 
de metodologias ágeis originais preconizadas pelo Manifesto Ágil – a ela se juntam 
eXtreme Programming (XP), Adaptative Software Development (ASD), Dynamic 
Systems Development Method (DSDM), Scrum e Crystal Clear. 
 
O FDD foi criado em 1997 por Peter Coad e Jeff de Lucca como um grande projeto 
de um United Overseas Bank – um banco local de Singapura. Ela oferece um 
conjunto coeso de princípios e práticas tanto para a Gestão de Projetos quanto para 
a Engenharia de Software, e se harmoniza bem com abordagens mais especialistas, 
como Scrum. 
 
Ela se fundamenta em técnicas de gerenciamento de projetos e de modelagem 
orientada a objetos, equilibrando vantagens das metodologias rígidas 
(contemplando – por exemplo – planejamento e modelagem) e das metodologias 
ágeis (ciclos curtos, orientação ao cliente, ênfase em programação, etc). Eu diria que 
ele é um meio-termo entre XP e RUP. 
 
Professor, mas o que seria um Feature? Trata-se de uma funcionalidade ou 
característica valorizada pelo cliente, que pode ser implementada em duas semanas 
ou menos. Alguns dizem ser similar a um requisito funcional que gera valor ao 
cliente. À medida que há participação ativa do cliente no projeto, os resultados têm 
bastante e rápida visibilidade. 
 
O método oferece algumas características importantes: 
 
 Fornece uma estrutura adequada para equipes maiores; 
 Enfatiza a produção de software de qualidade; 
 Fornece informação de estado e progresso de forma simples; 
 Agradam clientes, gerentes e desenvolvedores; 
 Entrega resultados frequentes, tangíveis e funcionais; 
 Planejamento detalhado e guiado para medição; 
 Rastreabilidade e relatórios com precisão; 
 
Ele recomenda também a adoção de um conjunto de melhores práticas para que o 
método atinja seus objetivos principais, são eles: modelagem de objetos de domínio; 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 40 de 83 
desenvolvimento por feature; posse individual do código; equipes de features; 
inspeções; builds regulares; gerenciamento de configuração; relatório e visibilidade 
de resultados. 
 
Possui duas grandes fases: Concepção & Planejamento (ou Modelagem) – com três 
processos; e Construção (ou Implementação) – com dois processos. 
 
 Concepção & Planejamento: é uma parte crítica do processo, pois é nessa fase 
que são listadas as características (Features) que serão desenvolvidas, e em um 
primeiro momento é nessa fase que são definidas todas as características e fases 
do sistema e projetos, respectivamente. Seus processos são: 
 
 Desenvolver um Modelo Abrangente: abrangendo todo o projeto, realiza-se 
um estudo dirigido sobre o escopo do sistema e seu contexto. Então, são 
realizados estudos mais detalhados para cada área a ser modelada. Assim, 
pequenos grupos são formados por membros do domínio do negócio e por 
desenvolvedores, que comporão seus próprios modelos. 
 
Os pequenos grupos apresentam seus modelos para serem revisados por 
parceiros e para discussão. Um dos modelos propostos é selecionado por 
consenso, tornando-se, assim, o modelo para aquela área do domínio do 
negócio. Realiza-se, então, uma combinação do modelo da área do domínio 
dentro de um modelo abrangente. 
 
 Construir uma Lista de Funcionalidades: abrangendo todo o projeto, 
identificam-se todas as funcionalidades que satisfaçam os requisitos. Uma 
equipe é formada para decompor funcionalmente o domínio em áreas de 
negócio, atividades de negócio dentro delas e passos dentro de cada 
atividade de negócio, formando uma lista categorizada de funcionalidades. 
 
 Planejar por Funcionalidade: abrangendo todo o projeto, busca-se produzir 
o plano de desenvolvimento. O gerente de projeto, o gerente de 
desenvolvimento e os programadores-líderes planejam a ordem de 
implementação, baseado nas dependências entre elas, na carga de trabalho 
da equipe e na complexidade das funcionalidades a serem implementadas. 
 
As principais atividades neste processo não são uma sequência estrita. Como 
muitas atividades de planejamento, elas são consideradas em conjunto, com 
refinamentos feitos a partir de uma ou mais atividades e então considerando 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 41 de 83 
os outros novamente. Após isso, a posse das classes estará completada (além 
das classes principais que já foram consideradas para posse). 
 
 Construção: a implementação inicia agrupando features relacionadas e 
agrupando dentro de uma pacote de trabalho, que deve ser completada dentro 
de uma iteração. Um pacote de trabalho completo representa uma parte do 
sistema que já pode ser utilizada pelo cliente. 
 
 Detalhar por Funcionalidade: abrangendo cada funcionalidade, busca-se 
produzir o pacote de projeto para ela. Certo número de funcionalidades são 
agendadas para desenvolvimento ao atribuí-las a um programador-líder. Ele 
seleciona as funcionalidades para desenvolvimento a partir de sua caixa de 
entrada de funcionalidades atribuídas. 
 
Ele pode escolher diversas funcionalidades que utilizem as mesmas classes (e 
portanto, desenvolvedores). Operacionalmente, com frequência acontece o 
caso de conjuntos de funcionalidades serem agendados para 
desenvolvimento de uma vez pelo programador-líder. Tal conjunto é 
chamado de Pacote de Trabalho do Programador-Líder (PTPL). 
 
O programador-líder forma uma equipe de funcionalidades, identificando os 
proprietários das classes que provavelmente serão envolvidos no 
desenvolvimento das funcionalidades que ele selecionou. Esta equipe produz 
diagrama de sequência para as funcionalidades atribuídas. O programador-
líder, então, refina o modelo de objetos e realiza-se uma inspeção no projeto. 
 
 Construir por Funcionalidade: abrangendo cada funcionalidade,busca-se 
produzir uma função com valor para o cliente. Começando com o pacote de 
projeto, os proprietários de classes implementam os itens necessários para 
que suas classes suportem o projeto para esta funcionalidade. O código passa 
por testes e inspeções. Após isso, é promovido à versão atual (build). 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 42 de 83 
 
 
O FDD pode facilitar imensuravelmente o fardo de reportar o status do projeto. Ele 
permite que o rastreio do progresso do desenvolvimento possa ser feito através de 
marcos definidos por funcionalidade, o que facilita a visualização do projeto como 
um todo. Os marcos começam a ser monitorados pelo gerente do projeto a partir 
da fase de construção. São eles: 
 
 Walkthroughs do projeto; 
 Projeto; 
 Inspeção do projeto; 
 Código; 
 Inspeção de código; 
 Progressão para construção. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 43 de 83 
 
 
 (FCC - 2010 – TRF/4 - Analista de Sistemas) A Feature Driven Development (FDD) 
é uma metodologia ágil de desenvolvimento de software, sobre a qual é correto 
afirmar: 
 
a) Não pode ser combinada a outras técnicas para a produção de sistemas. 
 
b) Possui cinco processos: Desenvolver um Modelo Abrangente, Construir a Lista 
de Funcionalidades, Planejar por Funcionalidade, Detalhar por Funcionalidade e 
Implementar por Funcionalidade. 
 
c) Divide os papéis em dois grupos: papéis chave e papéis de apoio. Dentro de 
cada categoria, os papéis são atribuídos a um único participante que assume a 
responsabilidade pelo papel. 
 
d) Mantém seu foco apenas na fase de modelagem. 
 
e) Mantém seu foco apenas na fase de implementação. 
 
Comentários: 
 
(a) Como não? O próprio modelo é a combinação de ferramentas de diferentes 
metodologias – elas interagem bem com outros modelos; (b) Perfeito, esses são de 
fato os cinco processos; (c) Na verdade, há diversos cargos e responsabilidades 
entre as categorias principais (ou chave), de apoio e adicionais; (d) Não, o foco é 
tanto na Modelagem quanto na Implementação; (e) Não, o foco é tanto na 
Modelagem quanto na Implementação. 
 
Gabarito: B 
 
 (FCC - 2014 – TRF/3 - Analista de Sistemas) Os modelos ágeis de desenvolvimento 
de software têm menos ênfase nas definições de atividades e mais ênfase na 
pragmática e nos fatores humanos do desenvolvimento. Um destes modelos 
enfatiza o uso de orientação a objetos e possui apenas duas grandes fases: 1 − 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 44 de 83 
Concepção e Planejamento e 2 − Construção. A fase de Concepção e 
Planejamento possui três disciplinas (chamadas de processos): Desenvolver 
Modelo Abrangente, Construir Lista de Funcionalidades e Planejar por 
funcionalidade. Já a fase de Construção incorpora duas disciplinas (processos): 
Detalhar por Funcionalidade e Construir por Funcionalidade. 
 
O texto acima apresenta a metodologia ágil conhecida como: 
 
a) XP. 
b) SCRUM. 
c) Crystal Clear. 
d) ASD. 
e) FDD. 
 
Comentários: 
 
Trata-se evidentemente do FDD. 
 
Gabarito: E 
 
 
 (FCC - 2013 – TRT/9 - Analista de Sistemas) Os modelos de processos tradicionais 
surgiram em um cenário muito diferente do atual, baseado em mainframes e 
terminais remotos. Já os modelos de processos ágeis são adequados para 
situações atuais nas quais a mudança de requisitos é frequente. Dentre os 
modelos de processos ágeis mais comuns temos: Extreme Programming (XP), 
Scrum e Feature Driven Development (FDD). 
 
Algumas das práticas e características desses modelos de processo são descritas 
a seguir: 
 
I. Programação em pares, ou seja, a implementação do código é feita em dupla. 
 
II. Desenvolvimento dividido em ciclos iterativos de até 30 dias chamados de 
sprints. 
 
III. Faz uso do teste de unidades como sua tática de testes primária. 
 
IV. A atividade de levantamento de requisitos conduz à criação de um conjunto 
de histórias de usuários. 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 45 de 83 
 
V. O ciclo de vida é baseado em três fases: pre-game phase, game-phase, post-
game phase. 
 
VI. Tem como único artefato de projeto os cartões CRC. 
 
VII. Realiza reuniões diárias de acompanhamento de aproximadamente 15 
minutos. 
 
VIII. Define seis marcos durante o projeto e a implementação de uma 
funcionalidade: walkthroughs do projeto, projeto, inspeção do projeto, 
codificação, inspeção de código e progressão para construção. 
 
IX. Os requisitos são descritos em um documento chamado backlog e são 
ordenados por prioridade. 
 
A relação correta entre o modelo de processo ágil e a prática/característica é: 
 
 SCRUM FDD 
 II, V e VII II, IV e VIII VII e IX 
 I, III, IV e VI II, V, VII e IX VIII 
 II, VII e VIII III, IV, VI e IX I e V 
 II, VII e VIII I, III, IV e V VI e IX 
 I, III, IV e VI II, VIII, VII e IX V 
 
 
Comentários: 
 
(I) XP; (II) Scrum; (III) XP; (IV) XP; (V) Scrum; (VI) XP; (VII) Scrum; (VIII) FDD; (IX) Scrum. 
Vamos comentar apenas a que nos interessa: FDD define seis marcos durante o 
projeto e implementação de uma funcionalidade: walkthroughs (travessia) do 
projeto, projeto, inspeção do projeto, codificação, inspeção de código e progressão 
para construção. 
 
Gabarito: B 
 
 (FCC - 2011 – TRT/23- Técnico Judiciário) FDD (Feature Driven Development) é 
uma metodologia muito objetiva, possuindo apenas duas fases: 
 
a) Concepção & Planejamento e Construção. 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 46 de 83 
b) Decomposição Funcional e Construção. 
c) Análise dos Requisitos e Desenvolvimento. 
d) Planejamento Incremental e Desenvolvimento por Funcionalidade. 
e) Planejamento por Funcionalidade e Construção por Funcionalidade. 
 
Comentários: 
 
Trata-se da Concepção & Planejamento e Construção. 
 
Gabarito: A 
 
 (FCC - 2010 - TRE- - Técnico Judiciário - Programação de Sistemas) São 
algumas das metodologias de desenvolvimento de software consideradas ágeis 
(Agile Software Process Models): 
 
a) RUP, XP e DSDM. 
b) Waterfall, RUP e FDD. 
c) XP, FDD e RUP. 
d) Scrum, XP e FDD. 
e) Scrum, Waterfall e DSDM. 
 
Comentários: 
 
Fácil, não?! Scrum, XP e FDD. 
 
Gabarito: D 
 
ACERTEI ERREI 
 
 
 
 
 
 
 
 
 
 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 47 de 83 
 DYNAMIC SYSTEMS DEVELOPMENT METHOD (DSDM) 
 
O Método de Desenvolvimento de Sistemas Dinâmicos (DSDM) é uma abordagem 
de desenvolvimento de software ágil que oferece uma metodologia para construir 
e manter sistemas que atendem restrições de prazo apertado através do uso da 
prototipagem incremental em um ambiente controlado. A filosofia DSDM baseia-se 
em uma versão modificada do Princípio de Pareto. 
 
Como assim? 80% de uma aplicação pode ser entregue em 20% do tempo para 
entregar a aplicação completa (100%). O DSDM é um processo de software iterativo 
em que cadaiteração segue a regra dos 80%. Ou seja, somente o trabalho suficiente 
é requisitado para cada incremento, para facilitar o movimento para o próximo 
incremento. Funcionalidades atendem aos prazos fixos; e, não, o contrário. 
 
Os detalhes remanescentes podem ser completados depois, quando outros 
requisitos de negócio forem conhecidos ou alterações tiverem sido solicitadas e 
acomodadas. O Consórcio DSDM é um grupo mundial de empresas-membro que 
coletivamente assume o papel de mantenedor do método. Esse consórcio definiu 
um modelo de processos ágeis, chamado Ciclo de Vida DSDM. 
 
Esse ciclo de vida define três ciclos iterativos diferentes, precedidos por duas 
atividades de ciclo de vida adicionais: 
 
Estudo da 
Viabilidade 
Estabelece os requisitos básicos de negócio e restrições associados à 
aplicação a ser construída e depois avalia se a aplicação é ou não um 
candidato viável para o processo de Método de Desenvolvimento de 
Sistemas Dinâmicos (DSDM). 
 
 
Estudo do 
Negócio 
Estabelece os requisitos funcionais e de informação que permitirão à 
aplicação agregar valor de negócio; define também a arquitetura básica 
da aplicação e identifica os requisitos de facilidade de manutenção para 
a aplicação. 
 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 48 de 83 
Iteração de 
Modelos 
Funcionais 
Produz um conjunto de protótipos incrementais que demonstram 
funcionalidade para o cliente.3 Durante esse ciclo iterativo, o objetivo é 
juntar requisitos adicionais ao se obter feedback dos usuários, conforme 
testam o protótipo. 
 
Iteração de 
Projeto e 
Desenvolvimento 
Revisita protótipos desenvolvidos durante a iteração de modelos 
funcionais para assegurar-se de que cada um tenha passado por um 
processo de engenharia para capacitá-los a oferecer, aos usuários 
finais, valor de negócio em termos operacionais. Em alguns casos, a 
Iteração de Modelos Funcionais e a Iteração de Projeto e 
Desenvolvimento ocorrem ao mesmo tempo. 
Implementação 
Aloca a última versão do incremento de software (um protótipo 
“operacionalizado”) no ambiente operacional. Deve-se notar que: (1) o 
incremento pode estar 100% completo ou (2) alterações podem vir a ser 
solicitadas conforme o incremento seja alocado. Em qualquer dos casos, 
o trabalho de desenvolvimento do DSDM contínua, retornando-se à 
atividade de iteração do modelo funcional. 
 
O DSDM pode ser combinado com o XP para fornecer uma abordagem 
combinatória que define um modelo de processos consistente (o ciclo de vida do 
DSDM) com as práticas básicas (XP) necessárias para construir incrementos de 
software. Além disso, os conceitos de colaboração e de equipes auto-organizadas 
do ASD podem ser adaptados a um modelo de processos combinado. 
 
 
 
 
 
 
 
 
 
 
 
 
3 Todos os protótipos DSDM são feitos com a intenção de que evoluam para a aplicação final entregue ao cliente. 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 49 de 83 
 
 
 (CONSULPLAN - – TRE/MG – Analista de Sistemas) As metodologias ágeis 
de desenvolvimento surgiram em meados de 1990, como reação aos chamados 
métodos pesados de desenvolvimento, que eram caracterizados por muita 
formalidade nas documentações e regulamentações. Muitos eram gerenciados 
pelo tradicional modelo em cascata. Em 2001, de fato, após uma reunião no 
estado de Utah, surgiu, definitivamente, e foi propagado o paradigma de 
desenvolvimento de softwares ágeis. Muitos foram os motivos que levaram a 
essa concepção, por exemplo: gestão orientada a pessoas, adaptabilidade de 
processos, design e construção de software usando uma metodologia 
adaptativa, entre outros. Uma dessas metodologias ágeis é “centrada em 
estabelecer os recursos e o tempo fixo para o desenvolvimento de um projeto, 
ajustando suas funcionalidades de maneira a atender os prazos estipulados”. A 
respeito dessa metodologia, assinale a alternativa correta. 
 
a) SCRUM. 
b) Extreme Programming (XP). 
c) Adaptive Software Development (ASD). 
d) Dynamic Systems Development Methodology (DSDM). 
 
Comentários: 
 
Como assim? 80% de uma aplicação pode ser entregue em 20% do tempo para 
entregar a aplicação completa (100%). O DSDM é um processo de software iterativo 
em que cada iteração segue a regra dos 80%. Ou seja, somente o trabalho suficiente 
é requisitado para cada incremento, para facilitar o movimento para o próximo 
incremento. Funcionalidades atendem aos prazos fixos; e, não, o contrário. 
 
Conforme vimos em aula, trata-se do DSDM! 
 
Gabarito: D 
 
ACERTEI ERREI 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 50 de 83 
 DESENVOLVIMENTO ADAPTATIVO DE SOFTWARE (DAS) 
 
O Adaptative Software Development (ASD) é uma técnica para a construção de 
softwares e de sistemas complexos. Seus fundamentos filosóficos se concentram na 
colaboração humana e na auto-organização da equipe. Eu vou repetir essa parte 
porque, muitas vezes, isso é capaz de matar uma questão: seu foco é na 
colaboração humana e na auto-organização da equipe! 
 
Trata-se de uma abordagem de desenvolvimento ágil e adaptável baseada em 
colaboração é tanto uma fonte de ordem nas interações humanas complexas como 
uma disciplina e engenharia. Seu criador, Jim Highsmith, define o ciclo de vida dessa 
metodologia de desenvolvimento de softwares e sistemas incorporando três fases: 
Especulação, Colaboração e Aprendizado. 
 
 
 
0
00000000000 - DEMO
Analista Judiciário – Especialidade Informática/TRF.02 
Curso de Engenharia de Software 
Prof. Diego Carvalho – Aula 00 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 51 de 83 
Na fase de Especulação, ocorre o planejamento do ciclo adaptativo, a declaração 
da missão, as restrições de projeto (datas de entrega, descrições de usuários, etc), 
os requisitos básicos e o plano de lançamento em um período fixo de tempo (time-
boxed). Na fase de Colaboração, ocorre a reunião dos requisitos, que são levantados 
por técnicas como JAD e mini-especificações. 
 
Pessoas motivadas usam a colaboração de uma forma que multiplica seu talento e 
criatividade além de seus números absolutos. Esta abordagem é um tema recorrente 
em todos os métodos ágeis, mas a colaboração não é fácil. Ela engloba 
comunicação e trabalho em equipe, mas também enfatiza o individualismo, porque 
a criatividade individual executa um papel importante no pensamento colaborativo. 
 
É, acima de tudo, uma questão de confiança. Pessoas trabalhando juntas precisam 
confiar um no outro para (1) criticar sem animosidade, (2) ajudar sem ressentimento, 
(3) trabalhar tão duro quanto ou mais do que já trabalham, (4) ter um conjunto de 
habilidades para contribuir para o trabalho na mão, e (5) comunicar problemas ou 
preocupações em um caminho que conduz à ação efetiva. 
 
Rapaziada, à medida que os membros de uma equipe começam a desenvolver os 
componentes que fazem parte de um ciclo adaptativo, a ênfase está tanto no 
aprendizado quanto no progresso em direção a um ciclo completo. As Equipes de 
Desenvolvimento Adaptativo de Software aprendem de três modos: Foco nos 
Grupos; Revisões Técnicas Formais; e Pós-Conclusão. 
 
 Foco nos Grupos: o cliente/usuário fornecem feedback sobre os incrementos de 
software que são entregues, indicando se o produto está ou não satisfazendo às 
necessidades do negócio; 
 
 Revisões Técnicas Formais: os membros