Baixe o app para aproveitar ainda mais
Prévia do material em texto
Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital Autores: Diego Carvalho, Fernando Pedrosa Lopes Aula 03 23 de Agosto de 2020 Curso adquirido no site www.rateiobarato.com 1 121 Sumário 1 – Metodologias Ágeis ................................................................................................................... 4 1.1 – Conceitos Básicos ................................................................................................................ 4 1.2 – Agilidade x Velocidade ......................................................................................................... 8 1.3 – Princípios Ágeis ................................................................................................................. 10 1.4 – Método Ágil x Método Lean ............................................................................................... 14 2 – Scrum..................................................................................................................................... 15 2.1 – Conceitos Básicos .............................................................................................................. 15 2.2 – Pilares Fundamentais......................................................................................................... 19 2.3 – Papéis .............................................................................................................................. 22 2.3.1 – Product Owner (PO)..................................................................................................... 23 2.3.2 – Development Team (DT) .............................................................................................. 23 2.3.3 – Scrum Master (SM)...................................................................................................... 24 2.4 – Artefatos .......................................................................................................................... 27 2.4.1 – Product Backlog .......................................................................................................... 27 2.4.2 – Sprint Backlog ............................................................................................................. 29 2.4.3 – Product Increment ...................................................................................................... 30 2.5 – Eventos ............................................................................................................................ 33 2.5.1 – Planejamento da Sprint ............................................................................................... 34 2.5.2 – Reunião Diária ............................................................................................................ 37 2.5.3 – Revisão da Sprint ........................................................................................................ 38 2.5.4 – Retrospectiva da Sprint ................................................................................................ 38 2.6 – Novidades: Scrum 2017 ..................................................................................................... 42 Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 2 121 3 – Extreme Programming (XP) ...................................................................................................... 47 3.1 – Conceitos Básicos .............................................................................................................. 47 3.2 – Principais Práticas ............................................................................................................. 50 3.3 – Valores Fundamentais ....................................................................................................... 52 3.4 – Princípios Básicos .............................................................................................................. 53 Exercícios Comentados ................................................................................................................. 55 Lista de Exercícios ......................................................................................................................... 99 Gabarito .................................................................................................................................... 121 Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 3 121 APRESENTAÇÃO Faaaaaaaaaaaala, galera... animação que essa aula é sensacional! Vamos ver agora um novo paradigma de desenvolvimento de software bem interessante, muda bastante coisa em relação às metodologias tradicionais e adivinha... essa parada não cai na prova, essa parada despenca! Eu juro para você que eu teria coragem de apostar dinheiro que vai ter pelo menos uma questãozinha sobre esse assunto na sua prova. Então, vem na fé que vocês vão gostar :) PROFESSOR DIEGO CARVALHO - www.instagram.com/professordiegocarvalho Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 4 121 1 – METODOLOGIAS ÁGEIS 1.1 – Conceitos Básicos Em meados de 2001, dezessete especialistas proeminentes da área de desenvolvimento de software se reuniram em um resort em Utah (foto acima) para conversar, esquiar, discutir e encontrar um terreno comum para suas ideias sobre métodos de desenvolvimento de software. Essa galera pegou uma mesa, se sentaram, tomaram umas cervejas e começaram a desabafar sobre seus projetos de desenvolvimento de software que estavam falhando por diversos motivos. Imagem - 17 Engenheiros de Software Foi quando um deles levantou a mão e disse que usou o Modelo em Cascata e o projeto estourou o orçamento; o outro disse que isso também já aconteceu com ele, mas recentemente um projeto falhou porque estourou o prazo; aí outro se compadeceu e disse que os projetos dele viviam falhando porque ele não conseguia construir todo o escopo que foi pedido pelos usuários do sistema. E assim foi... Eles foram compartilhando suas experiências ruins com o uso das metodologias tradicionais, mas depois cada um desses caras foi dizendo: “para remediar isso, agora eu uso iterações”; aí o outro disse que não usa mais tanta documentação como antigamente; aí o outro levantou a mão e falou que não faz mais tanto planejamento; e assim por diante. Então, no decorrer da reunião, foi sendo criado um consenso entre os participantes. Foi aí que alguns acharam que era o momento de formalizar e elevar aquela reunião em um patamar maior. Eles decidiram escrever um documento que serviria de grito de guerra contra Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 5 121 os processos tradicionais de desenvolvimento de software que vigoravam naquela época. Para isso, eles pensaram: “Nós precisamos de um nome que expresse bem o significado dessa reunião e das nossas ideias comuns”. Na discussão, eles decidiram que a palavra “leve” não expressava tão bem o que eles queriam dizer e decidiram trocar pela palavra “ágil”, que captava melhor a abordagem que eles estavam propondo.Em um segundo momento, eles começaram a escrever um documento bem pequeno, bem objetivo, bem claro e que conteria as crenças, valores e princípios daqueles dezessete engenheiros de software. Foi então que surgiu o documento chamado Manifesto Ágil Para Desenvolvimento De Software, que definia bem o que era ágil, o que não era ágil e o que essas pessoas defendiam. Além disso, eles passaram a se autodenominar como Aliança Ágil, que era um grupo de pensadores independentes sobre desenvolvimento de software e muitas vezes concorrentes entre si, mas que concordaram em um documento chamado Manifesto Ágil. Isso se tornou uma organização sem fins lucrativos que procura promover conhecimento e discussões sobre os vários métodos ágeis que existem hoje em dia. A partir daí, galera... esses caras – que eram os líderes do movimento ágil – começaram a escrever artigos, fazer palestras e disseminar esse novo paradigma. Como vocês sabem, esse negócio explodiu e hoje a imensa maioria dos projetos de software são feitos utilizando metodologias ágeis. Bem, para aqueles que não conhecem, nós trazemos na imagem a seguir quais são os fundamentos do Manifesto Ágil. Vejamos... “Estamos evidenciando maneiras melhores de desenvolver software fazendo-o nós mesmos e ajudando outros a fazê-lo. Através desse trabalho, passamos a valorizar:“ INDIVÍDUOS E INTERAÇÃO > PROCESSOS E FERRAMENTAS SOFTWARE EM FUNCIONAMENTO > DOCUMENTAÇÃO ABRANGENTE COLABORAÇÃO COM CLIENTE > NEGOCIAÇÃO DE CONTRATOS RESPONDER A MUDANÇAS > SEGUIR UM PLANO “Isto é, mesmo os itens da direita tendo valor, valorizamos mais os itens da esquerda“. Notem que a coluna da esquerda representa os anseios das metodologias ágeis, enquanto a coluna da direita representa o que as metodologias tradicionais costumavam vigorar! Agora prestem atenção: o manifesto ágil afirma que, mesmo havendo valor nos itens à direita, valorizam-se mais os itens à esquerda. Uma pegadinha comum de prova é dizer que os métodos ágeis não possuem documentação. Isso está correto? Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 6 121 Não, isso evidentemente está errado! O manifesto ágil preconiza que se valorize mais software em funcionamento do que documentação abrangente, logo isso não significa que não tenha documentação. E isso serve para os outros três fundamentos, isto é, os itens da direita tem o seu valor, por outro lado se valoriza mais os itens da esquerda. Tudo certo até aqui? Agora vamos detalhar um pouco mais... 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. Pessoal, programar é uma atividade humana e, como tal, depende de questões humanas para que obtenha sucesso. Jim Highsmith, um dos signatários do manifesto ágil, afirma que as habilidades, as personalidades e as peculiaridades de cada indivíduo são críticas para o sucesso dos projetos. Ele diz também que pessoas muitas vezes são desorganizadas e difíceis de entender, por outro lado elas também são inovadoras, criativas, apaixonadas, entre outros. E quanto às ferramentas e aos processos, professor? Galera, ambos são importantíssimos 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. Dessa forma, basta eu ensinar um conjunto de processos para a minha equipe, assim como um conjunto de ferramentas para garantir que a equipe criará bons softwares? Claro que não! Uma equipe possui características intrínsecas à personalidade, habilidades e capacidades de cada um dos seus integrantes e isso deve ser considerado e valorizado na construção de um software. Entendido, pessoal? Seguindo... Por que valorizar mais software em funcionamento do que documentação abrangente? Porque o que gera valor para o cliente é o resultado que você entrega e, não, a documentação em si. Respondam-me uma pergunta: quando você compra um carro, você olha o motor, o design, o painel, o interior ou você sai correndo loucamente para ler o manual do carro e outras documentações? Imagino que vocês tenham respondido a primeira opção! Dito isso, concluímos que 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 é recomendável produzir somente a documentação necessária e suficiente para a realização do trabalho em si. Nada de burocratizar demais e construir trezentas páginas de documentação com quatrocentos diagramas diferentes para representar o software. Tudo certo? Eu vou repetir, porque esse assunto cai bastante em prova! No ágil, documentação é descartável? Não, ela é útil para ajudar a comunicação e a colaboração dos integrantes da equipe, além de melhorar a transferência de conhecimento, preservar informações históricas, satisfazer necessidades contratuais ou legais, entre outros. A Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 7 121 documentação é importante, sim; mas valoriza-se mais o software em funcionamento, que é o que de fato agrega valor ao cliente. Belê? Por que valorizar mais colaboração com o cliente do que negociação de contratos? Porque é importante o envolvimento contínuo do cliente! Aliás, desenvolvedores e clientes devem estar sempre lado a lado, visto que ambos possuem interesses em comum. Qual? Um software que agregue valor! No Modelo em Cascata, vocês devem se lembrar que o cliente até colaborava com a equipe no início do projeto (em geral, na fase de levantamento de requisitos), mas – depois disso – o cliente saía de cena e só aparecia novamente para ver o software já pronto. E pior: muitas vezes, o cliente saía insatisfeito, porque o resultado não era o que ele esperava. Dessa forma, o manifesto ágil afirma que você tem que valorizar mais a sua relação com o cliente do que ficar discutindo itens de contrato: “Isso não estava previsto no contrato”; “Isso não estava combinado previamente”; “Vou cobrar a mais porque você mudou tal coisa”; entre outros. Professor, então contratos não são importantes? Claro que são! Contratos regulam essa relação entre cliente e fornecedor, mas não se deve ser excessivamente rigoroso, porque isso pode acabar com a relação com seu cliente. Por falar em contrato, existem várias maneiras de fazer contratos de desenvolvimento ágil. Uma maneira comum é fixar o tempo e deixar o escopo variar. É o famoso: “Tempo Fixo e Escopo Variável”! Você fala para o seu cliente: “É o seguinte: eu faço tudo que você pedir desde que seja possível fazer no prazo tal”. Por que valorizar mais a resposta a mudanças do que seguir um planejamento específico? 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 do projeto. Manter-se preso a um planejamento ultrapassado pode ser nocivo ao andamento do projeto. Galera, nós estamos no século 21! Uma empresa líder de mercado pode acabar de uma hora para outra – nós vemos isso o tempo todo. Cadê o Orkut? Cadê o MSN? Cadê a Nokia? Cadê a Kodak? Cadê a BlockBuster? Todas essas empresas foram gigantes pouco tempo atrás e simplesmente morreram! Logo, a única certeza que você tem em um projeto é a instabilidade! Logo, a equipe deve estar preparada para mudanças no escopo, tempo, custo, tecnologia,arquitetura, no paradigma de programação, regulamentações, leis, regras de conformidade, entre outros. Não tem como fazer um planejando e achar que ele vai ficar fixo ali ao longo do tempo – isso é pensamento do século passado (se muito!). Acreditem: mudanças vão ocorrer! Planejar é bom demais. É tão bom que é recomendável refazer o planejamento a todo momento, de forma contínua e, não, fazer um planejamento estático e simplesmente segui-lo com todo rigor ignorando mudanças externas que venham a ocorrer. Fechou? Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 8 121 1.2 – Agilidade x Velocidade Pessoal, agora vamos falar rapidamente sobre uma diferença importante! Vocês sabem qual a diferença entre agilidade e velocidade? Antes de explicá-la no contexto de desenvolvimento de software, eu vou explicar como uma metáfora em outros dois contextos para facilitar o entendimento. Vamos pensar no atleta Usain Bolt! O Usain Bolt é um cara veloz ou um cara ágil? Bem, em comparação com seres humanos normais, ele é mais ágil e mais veloz que todo mundo! No entanto, vamos pensar só no grupo dos grandes atletas que disputam mundiais e olimpíadas de atletismo. Nesse contexto, ele é absurdamente veloz, mas menos ágil que a maioria dos seus concorrentes. Como é, professor? Vejam as imagens a seguir! Observem que à esquerda nós temos cerca de vinte metros de corrida e o Bolt é o atleta de azul. Notem também que ele está mais ou menos em quarto lugar na corrida. Por que? Porque agilidade é a capacidade de reagir ou responder adequadamente a mudanças e o Bolt sempre teve problemas de largada, uma vez que ele ele é mais alto e pesado que os outros. Logo, ele acaba reagindo de forma mais lenta que seus adversários quando o tiro de início da corrida é disparado. Vejam: todos estão parados e, ao disparar o tiro, nós temos uma mudança. Essa mudança faz com que o os atletas reajam e saiam da inércia. O Bolt demora mais que seus concorrentes a sair da inércia, uma vez que ele não responde tão bem quanto os outros a mudança. Nesse sentido, ele evidentemente é ágil, mas não destoa dos outros pela sua agilidade. Se nós tivéssemos corridas de 50 metros em vez de 100 metros, talvez ele não fosse tricampeão olímpico. Por outro lado, vejam o final da corrida quando ele não tem mais que reagir a mudanças, ele só tem que correr até o fim dos 100 metros. Ele termina muito distante do segundo lugar! Por que? Porque ele é um cara extremamente veloz, logo ele destoa de todos Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 9 121 os outros com muita facilidade. Entenderam que agilidade não é velocidade? É a capacidade de reagir a mudanças! A velocidade trata de quão rápido é possível entregar um software para o cliente. E, para isso, nós temos outras metodologias de desenvolvimento (Ex: Rapid Application Development (RAD) é capaz de desenvolver softwares em poucos meses). Utilizando outra metáfora, isso ocorre também quando você tem uma disputa entre 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 que o carro mais potente, logo ele é mais ágil. Ele é mais rápido? Não, o carro mais potente é mais rápido, mas ele é mais potente! Claro, pessoal, que esses são exemplos genéricos – apenas para entender a ideia. Diego, e como esse conceito de agilidade pode ser utilizado no contexto de um desenvolvimento de software? No contexto de projetos de software, podemos imaginar: eu estou gerenciando meu projeto de um novo sistema e, de repente, descubro que vou ter que mudar a arquitetura do software – não tem problema; se eu descubro que, por conta de cortes de gastos, eu terei que reduzir o tamanho a minha equipe – não tem problema; se eu tiver que trocar a tecnologia utilizada porque ela se tornou defasada – mais uma vez, não tem problema. Pressman afirma que a agilidade pode ser aplicada a qualquer processo de software. No entanto, para obtê-la, é essencial que o processo de software seja projetado para que a equipe possa adaptar e racionalizar suas tarefas; para que a equipe possa conduzir o planejamento compreendendo a fluidez de uma abordagem do desenvolvimento ágil; e para que a equipe possa eliminar tudo, exceto os artefatos essenciais do processo. Além disso, deve enfatizar a estratégia de entrega incremental, entregando para o cliente o software operacional o mais rapidamente possível para o tipo de produto e ambiente operacional. Essa são as diretivas para que um processo de software qualquer possa ser, também, ágil. Métodos ágeis são ágeis porque partem do princípio de que tem que responder adequadamente a mudanças que venham a ocorrer durante o ciclo de vida do projeto. Eles 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 métodos 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. Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 10 121 1.3 – Princípios Ágeis A seguir, nós vamos conhecer quais são os princípios do Manifesto Ágil. Eles vêm expressamente no manifesto e vocês podem encontra-lo no site oficial: 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 Modelo Ágil busca se adaptar às necessidades dos clientes e entregar valor continuamente. 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 capazesde 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. 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. 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. Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 11 121 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”. Diego, você concorda com essa afirmação? Não, eu discordo! 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. Legal? Vamos ver agora alguns exemplos de metodologias ágeis de desenvolvimento de software: METODOLOGIAS ÁGEIS SCRUM CRYSTAL XP TDD ATDD BDD FDD DDD MDD DSDM ASD KANBAN LEAN AUP AGILE MODELING OSSD SCRUMBAN BADM Agora vamos ver algumas diferenças básicas entre metodologias de desenvolvimento software tradicionais e metodologias ágeis: CRITÉRIO MODELOS TRADICIONAIS MODELOS ÁGEIS 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 Equipe multidisciplinar, multifuncional e auto- organizada. Ela decide como fazer e atua de forma colaborativa. Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 12 121 Gerente de Projetos conforme o plano estabelecido. 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 aprovações formais de um ou mais níveis hierárquicos. 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 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 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ÕES 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. Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 13 121 PAPÉIS Claros e definidos. Conforme a confiança na equipe e ambiente colaborativo. 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. Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com14 121 1.4 – Método Ágil x Método Lean Galera, muitas pessoas me perguntam se Método Ágil é idêntico ao Método Lean! Apesar de serem conceitos semelhantes, são diferentes! O Método Lean é uma filosofia de gestão inspirada em práticas e resultados do Sistema Toyota e se caracteriza por uma estrutura de processos em que há uma tentativa de minimizar o desperdício. O Lean serve de base para o Ágil. Ele apresenta sete princípios... Os princípios são: (1) Eliminar desperdício: O que seria um desperdício, professor? Trabalho parcialmente feito (que você vai acabar tendo que terminar em algum momento); processos extras (como documentação pesada); funcionalidades extras (entregue valor com qualidade e ponto); alternação de tarefas ou multitarefas (trocar de tarefa toda hora acumula desperdícios). Acabou? Não, tem mais... Evitar esperas (ex: cliente não tem tempo de homologar); esforços de comunicação (equipes geograficamente distribuídas podem gerar problemas de gestão); defeitos (entregar um software cheio de bugs). Enfim... tudo isso é considerado desperdício. (2) Amplificar conhecimento: trata-se de priorizar a comunicação e o feedback contínuos entre equipes e usuários durante o desenvolvimento. (3) Fortalecer o time: criar um ambiente onde a equipe trabalhe de forma autoorganizada e autodirigida, evitando microgerenciamento; (4) Entregas rápidas: maximizar o ROI (Return Of Investiment) do projeto, entregando software de valor de forma rápida e contínua; (5) Construir qualidade: garantir qualidade no desenvolvimento do software utilizando técnicas como TDD, Refatoração, etc. (6) Otimizar o todo: entender que o software concluído é muito mais que a soma das partes entregues e verificar como ele está alinhado com os objetivos da empresa. (7) Adiar decisões! Deixar as decisões e comprometimentos para o último momento possível, permitindo coletar informações e ter experiências para fortalecer a tomada de decisão. Enfim, galera... isso é o Método Lean! Ele serviu de base para o método ágil e tem várias características em comum, mas são diferentes. A tabela abaixo organiza um comparativo para vocês terem noção das diferenças. CARACTERÍSTICA LEAN ÁGIL Obcecado com... Desperdício Clientes e Mercados Gerencia... Processos Incertezas Entrega de... Valor Produto em Funcionamento Aplica... Heurísticas Princípios Foca no processo de... Padronização e Conformidade Autogerenciamento p/ maximizar autonomia Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 15 121 2 – SCRUM 2.1 – Conceitos Básicos Galera, alguém de vocês sabe de onde vem esse nome? Então, eu vou contar para vocês! Esse nome vem do Rugby e é utilizado como uma metáfora para refletir o alto grau de cooperação necessária para obter sucesso no alcance de algum objetivo. Imagino que poucos de vocês entendam as regras desse esporte, portanto vou explicar de forma bastante rápida e objetiva o porquê dessa metáfora ser utilizada. No Rugby, um time pontua sempre que a bola cruza a linha de gol e toca o chão – sendo carregada ou por meio de passes. Caso o jogador seja derrubado, ele deve soltar a bola, e a jogada se reiniciará! Além disso, deve haver intensa troca de passes entre os jogadores, de modo a deixá-los menos vulneráveis a serem derrubados por outros jogadores. Calma que tudo isso que estou dizendo fará sentido... Bem... cada jogada se inicia quando um scrum é realizado, isto é, forma-se uma parede de força entre os jogadores, como pode ser visto nas imagens acima. Observem que os jogadores se reúnem de forma bastante próxima e coesa, unindo suas forças e habilidades para trabalhar Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 16 121 em conjunto e harmonicamente a fim de conseguir recuperar a bola. Percebam, portanto, que o time inteiro deve trabalhar para que a equipe possa pontuar. Diferentemente do Futebol Americano, não há um quarterback ou uma estrela no time – todos têm suas funções e responsabilidades, e são igualmente importantes! Acredito que agora ficou mais fácil entender de onde vem esse nome. Chega de papo e vamos à teoria... antes de iniciarmos, eu gostaria de fazer uma observação importante: o guia oficial do Scrum é um documento de apenas 19 páginas! Logo, eu recomendo que vocês o leiam por inteiro, porque ele é a fonte de praticamente tudo que veremos aqui! Tem versão em português, é gratuito, é enxuto, então não tem desculpas :) Scrum é um framework leve, simples de entender e extremamente difícil de dominar, para desenvolver e manter produtos complexos e adaptativos, enquanto entrega produtiva e criativamente produtos com o mais alto valor possível. Na minha época de concurso, eu decorava essa definição – sim, eu recomendo decorar algumas definições! Fiquem calmos porque nós vamos esmiuçar cada parte desse conceito. Em primeiro lugar, percebam que ele é um framework – isso significa dizer que ele agrega processos, métodos e técnicas. Fundamentalmente, ele possui pressupostos, conceitos, valores e práticas, mas quem utilizá-lo pode incluir outras novidades (Ex: Pair Programming, do XP). Ele não te dirá tudo o que fazer, logo você tem a liberdade para fazer o que melhor funcionar dentro das suas necessidades. Em segundo lugar, ele é um documento bastante enxuto conforme acabamos de ver! Vocês verão que, oficialmente e obrigatoriamente, ele é composto por três papeis (Product Owner, Scrum Master e Development Team); por quatro eventos (Sprint Planning, Daily Meeting, Sprint Review e Sprint Retrospective); por três artefatos (Product Backlog, Sprint Backlog e Product Increment); e por um fluxo (chamado Sprint). Aqueles que já conhecem devem estar um pouco confusos! Professor, o Gráfico Burndown não é um artefato? O Documento de Visão não é um artefato? Calma, galera! São, todos esses também Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 17 121 são artefatos! No entanto, oficialmente é possível utilizar o framework sem nada isso! Essas coisas são espécies de “plug-ins” que podem ser adicionados ao framework para ajudar no processo, mas eles são opcionais. Seguindo... O Scrum é um framework para gerenciar projetos, produtos e processos, focado na adaptação em vez de planejamento, que não utiliza muita documentação e que adota processos mais simplificados, facilitando a adaptação às mudanças de requisitos e permitindo entregas rápidas e menores. Ele é usado em ambientes complexos, onde os requisitos e as prioridades mudam constantemente. Diego, o que seria exatamente um ambiente complexo? Existe uma coisa chamada Modelo Cynefin que explica bem os tipos de ambientes. Existem os ambientes simples, complicados, complexos e caóticos. O que vocês precisam saber é que um ambiente complexo é aquele que não é muito bem definido, não é muito acoplado, há muitas mudanças, apresenta muitas formas de realizar um trabalho. Vamos ver um exemplo: O McDonalds é um ambiente complexo? Não, é um ambiente simples! Ele é muito bem definido, extremamente acoplado, não tem liberdade e não existem muitas opções de como realizar um trabalho. Em qualquer lugar do mundo, o cardápio será praticamente o mesmo; o cara que faz o sanduba realiza os mesmos passos; não há mudanças; não há várias formas de realizar um trabalho. Diego Carvalho, FernandoPedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 18 121 O Scrum é um framework em que podem ser empregados vários processos e técnicas. Pode ser definido como um conjunto de papéis, eventos, artefatos e regras associadas a uma equipe. Ele é fundamentado em teorias empíricas de controle de processo e emprega uma abordagem iterativa e incremental (maximizando as oportunidades de feedback) para aperfeiçoar a previsão e controle de riscos. Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 19 121 2.2 – Pilares Fundamentais O empirismo afirma que o conhecimento vem da experiência e da tomada de decisões com base naquilo que é verdadeiro e conhecido. Para tal, ele emprega uma abordagem iterativa e incremental para aperfeiçoar e otimizar a previsibilidade e controle de riscos, fundamentando- se – para tal – em três pilares fundamentais: Transparência, Inspeção e Adaptação (é o famoso TIA). Vejamos em detalhes: – Transparência: aspectos significativos (e padronizados) devem estar visíveis aos responsáveis pelos resultados. Deve haver transparência dentro e fora da equipe, permitindo a qualquer pessoa compreender o que realmente está ocorrendo, ocasionando melhor comunicação e confiança. Ken Schwaber diz: “Scrum é igual sogra: chega na sua casa e esfrega todos os seus problemas na sua cara“. Se uma iteração falhar, todos devem ficar sabendo; se os feedbacks forem ruins, todos devem ficar sabendo; se o projeto atrasou, todos devem ficar sabendo. O objetivo é encarar as dificuldades de forma honesta e chegar a um consenso sobre como estes podem ser ultrapassados. Os erros são inevitáveis e a equipe deve ser incentivada a encarar esta premissa como uma base para aprender com os erros que são cometidos. – Inspeção: também chamada de verificação, os usuários devem frequentemente inspecionar os artefatos produzidos e o progresso para detectar variações indesejáveis (claro, não pode ser extremamente frequente ao ponto de atrapalhar a execução das tarefas). Uma vez que todos os problemas sejam transparentes, esse é o momento de inspecionar o processo e o produto em busca de resolver o problema. Galera, a ideia aqui é identificar rapidamente qualquer desvio em relação à meta que deve ser atingida. Nós veremos mais à frente que, tanto na Reunião de Revisão quanto na Reunião de Retrospectiva, os produtos e os processos serão devidamente inspecionados. Essas inspeções em geral são mais benéficas quando realizadas de forma diligente e cuidadosa por inspetores especializados no trabalho a se verificar. – Adaptação: se um inspetor determina que um ou mais aspectos de um processo desviou para fora dos limites aceitáveis, e que o produto resultado será inaceitável, o processo ou o artefato sendo produzido deve ser ajustado. O ajuste deve ser realizado o mais breve possível para minimizar mais desvios. Como mudanças sempre ocorrem, é recomendável se adaptar a mudanças em vez de evitar mudanças. Legal, então vamos resumir os três pilares que sustentam o nosso framework! Tudo no Scrum deve ser transparente e facilmente acessível. Partindo dessa premissa, podemos inspecionar e identificar problemas e oportunidades de melhoria do produto e/ou processo – em geral, por meio de eventos (também chamados de reuniões ou cerimônias). Feito isso, deve-se Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 20 121 buscar ajustar e adaptar produto e/ou processo para minimizar desvios. Calma que ficará mais claro... Pessoal, lembrem-se que o Scrum é um framework para gerenciar projetos! Em algum momento eu falei aqui sobre desenvolvimento de software? Não, ele é capaz de gerenciar qualquer projeto que vise aumentar a agilidade e qualidade da sua execução. Embora tenha sido concebido inicialmente como uma metodologia de desenvolvimento de software, ele contém elementos que podem ajudar a formar uma equipe de alto desempenho para qualquer projeto. O Scrum apenas fornece um framework estruturado para executar alguns princípios. As equipes de desenvolvimento de software seguem essa metodologia porque seu trabalho é altamente complexo, interdependente e acelerado. No entanto, se ele funciona para essas equipes, certamente pode funcionar para outros casos. Se você é um líder de uma equipe que gerencia projetos complexos, é interessante pensar na aplicação do Scrum! Dito isso, notem que todos os conceitos que veremos daqui para frente podem ser aplicados a qualquer projeto, apesar de ter sido concebido para desenvolvimento de software. O primeiro e talvez principal conceito seja a Sprint! O que é uma Sprint? Trata-se de uma unidade de trabalho que satisfaz um requisito de negócio. Em outras palavras, é um ciclo completo de desenvolvimento de um incremento potencialmente entregável de um produto. Pensem comigo: estou em um projeto cujo objetivo é criar uma página de e-commerce para uma empresa de varejo. Eu tenho que realizar diversas tarefas para construir essa página, como por exemplo criar uma funcionalidade que permita o pagamento via cartão de crédito e débito. Essa funcionalidade pode ser (em conjunto com outras) a unidade de trabalho que satisfaz um requisito de negócio, logo pode ser realizada em uma sprint. O Scrum prega que, ao fim de cada sprint, deve-se entregar um incremento potencialmente funcional do produto ao cliente. O que seria potencialmente funcional? É aquilo que tem potencial de entrar ser utilizado pelo cliente em seu ambiente. As sprints têm duração de até um mês, permitindo feedbacks constantes quanto ao que está sendo desenvolvido. Ela é como um contêiner para todos os outros eventos e cerimônias que veremos à frente. Eu sei que está um pouco abstrato, então vamos pensar em uma metáfora! Imagina que você contrate um marceneiro para construir os armários do apê novo que você comprou logo após passar em um concurso público. Há duas maneiras de fazer isso: se fôssemos utilizar um método tradicional, ele perguntaria como você quer os armários, passaria alguns meses construindo e algum dia montaria todos os armários na sua casa de uma só vez – sem interações com você. No método ágil, nós vamos dividir esse projeto de construção dos armários em vários ciclos de tempo fixo. Por exemplo: nós vamos combinar com o marceneiro que a cada quinze dias eu quero que ele entregue um incremento dos armários já potencialmente funcional, ou seja, que você já possa utilizar na sua casa. Nos primeiros quinze dias, ele deve entregar os armários do banheiro prontinhos para você utilizar. Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 21 121 Nos próximos quinze dias, ele deve entregar os armários da área de serviço também prontos para utilizar. Nos outros quinze, não será possível entregar todos os armários do quarto, mas ele deve entregar pelo menos o guarda-roupa já pronto para você utilizar. Vocês conseguem notar que a cada intervalo regular de quinze dias, você vai recebendo incrementos potencialmente funcionais? Com o software é a mesma coisa... Qual é a grande vantagem dessa segunda opção em relação à primeira? Bem, primeiro você não morre de ansiedadede receber os móveis somente ao final; a segunda vantagem é que você pode mudar de ideia no meio do caminho e pedir para ele mudar o projeto. Enfim, o que importa disso tudo que eu disse? Importa que esses ciclos regulares de tempo fixo de desenvolvimento de um incremento potencialmente funcional são conhecidos também como Sprint! Clareou agora? ���� Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 22 121 2.3 – Papéis O Scrum possui poucos papeis, mas eles são muito bem definidos! O Scrum Team (Equipe Scrum) é formado por três papeis: Product Owner (PO), Scrum Master (SM) e Development Team (DT). As pessoas que desempenham esses papeis são igualmente responsáveis e responsabilizadas pelos resultados do trabalho e, assim, se comprometem com o projeto. Eles são membros de um mesmo time, e trabalham juntos, de forma colaborativa, para alcançarem seus resultados. Aqui é importante não confundir Development Team com Scrum Team – vejam na hierarquia apresentada abaixo! A Equipe Scrum que é um time auto-organizável e multifuncional! Ser auto-organizável significa que ela é capaz de escolher qual a melhor forma para realizar seu próprio trabalho em vez de serem dirigidos por outros de fora do Time. Ser multifuncional significa que ela possui todas as competências e não depende de outros de fora da equipe. Em outras palavras, os times de desenvolvimento não contêm subtimes dedicados a domínios específicos de conhecimento (Ex: testadores, analistas de negócio, entre outros). A Equipe Scrum é o responsável por entregar produtos de forma iterativa e incremental, maximizando as oportunidades de realimentação (feedback). Uma dúvida comum é: professor, pode existir uma sobreposição nesses papeis, isto é, uma mesma pessoa desempenhando dois papeis diferentes? Sim, em tese o Scrum Master e o Product Owner podem fazer parte do Development Team, mas um Scrum Master jamais pode ser simultaneamente Product Owner! Essa última afirmação não está explícita no Guia Scrum, mas é possível inferir que pode haver um conflito de interesses. Quanto à primeira afirmação: “The Product Owner and Scrum Master roles are not included in this count unless they are also executing the work of the Sprint Backlog”. SC RU M T EA M ( E QU IP E SC RU M ) DEVELOPMENT TEAM ( EQUIPE DE DESENVOLVIMENTO ) PRODUCT OWNER ( DONO DO PRODUTO ) SCRUM MASTER ( MESTRE SCRUM ) Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 23 121 2.3.1 – Product Owner (PO) O Product Owner é uma pessoa e não um comitê. Ele pode representar o desejo de um comitê no Product Backlog (veremos adiante), mas aqueles que quiserem uma alteração nas prioridades dos itens de backlog devem convencer o Product Owner. Para que ele tenha sucesso, toda a organização deve respeitar as suas decisões e elas devem ser visíveis no conteúdo e na priorização do Backlog do Produto. Vejamos a seguir suas responsabilidades e características: RE SP ON SA BI LI DA DE S E CA RA CT ER ÍS TI CA S: PR OD UC T OW NE R (P O) Ele é responsável pela macro-gestão e pela gestão do produto. Ele é o responsável por maximizar o valor do produto e do trabalho da equipe de desenvolvimento, sendo o único que pode gerenciar o Product Backlog. Ele pode até delegar as atividades de gerenciamento para o time de desenvolvimento, mas ainda será considerado o responsável pelos trabalhos. Ele é responsável por priorizar/ordenar os itens do Product Backlog e seleciona aqueles que serão implementados. Ele é responsável por garantir o ROI (Returno On Investment ou Retorno sobre Investimento). Ele é responsável por expressar claramente os itens do Product Backlog. Ele é responsável por garantir que o Backlog do Produto seja visível, transparente, claro para todos, e mostrar o que a Equipe Scrum vai trabalhar a seguir. Ele é responsável por garantir que o Time de Desenvolvimento entenda os itens do Product Backlog no nível necessário. 2.3.2 – Development Team (DT) O Development Team consiste de profissionais que realizam o trabalho de entregar uma versão usável que potencialmente incrementa o produto “pronto” ao final de cada sprint. Somente integrantes do Time de Desenvolvimento criam incrementos. Ninguém tem permissão para falar com o Time de Desenvolvimento sobre diferentes configurações de prioridade, e o Time de Desenvolvimento não tem permissão para agir sobre o que outras pessoas disserem. O Time de Desenvolvimento só responde ao Product Owner. Além disso, só ele pode cancelar uma sprint. Perfeito? Ele deve ser pequeno o suficiente de forma a se manter ágil e produtivo, e grande o suficiente de forma que a coordenação dos membros não cause problemas. Com menos de três pessoas, há menor interação e pode haver problemas em relação ao conhecimento durante a execução da sprint. Com mais de nove, há muita complexidade no gerenciamento. Dessa forma, recomenda-se que a equipe tenha entre 3 e 9 integrantes (excluídos o Product Owner e Scrum Master – exceto se eles também executarem o trabalho da sprint), de modo que não seja pequena demais que haja restrições de habilidades nem grande demais que seja Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 24 121 complicado de gerenciar. E, para finalizar, vou enfatizar mais uma vez: não confundam Equipe de Desenvolvimento (Development Team) com Equipe Scrum (Scrum Team)! RE SP ON SA BI LI DA DE S E CA RA CT ER ÍS TI CA S: DE VE LO PM EN T TE AM (d t) Responsável pela micro-gestão e pela criação do produto. Eles são auto-organizados. Ninguém (nem mesmo o SM) diz ao Time de Desenvolvimento como transformar o Product Backlog em incrementos de funcionalidades potencialmente utilizáveis. Times de Desenvolvimento são multifuncionais, possuindo todas as habilidades necessárias, enquanto equipe, para criar o incremento do Produto. O Scrum não reconhece títulos para os integrantes do Time de Desenvolvimento que não seja Desenvolvedor, independentemente do trabalho que está sendo realizado pela pessoa; Individualmente, os integrantes do Time de Desenvolvimento podem ter habilidades especializadas, mas a responsabilidade pertence aos desenvolvedores como um todo. Times de Desenvolvimento não contém sub-times dedicados a domínios específicos de conhecimento, tais como teste ou análise de negócios. Os Times de Desenvolvimento são estruturados e autorizados pela organização para organizar e gerenciar seu próprio trabalho. 2.3.3 – Scrum Master (SM) O Scrum Master é responsável por garantir que o Scrum seja entendido e aplicado! Ele faz isso para garantir que a Equipe Scrum adira à teoria, práticas e regras do Scrum. O Scrum Master é um servo-líder para a Equipe Scrum. Ele ajuda aqueles que estão fora da a Equipe Scrum a entender quais as suas interações com a Equipe Scrum são úteis e quais não são. Ademais, ele ajuda todos a mudarem estas interações para maximizar o valor criado pela Equipe Scrum. RE SP ON SA BI LI DA DE S E CA RA CT ER ÍS TI CA S: sc ru m m as te r (s m ) Responsável pela gestão de pessoas e gestão do processo. Ele deve garantir que o Scrum seja entendido e aplicado. O Scrum Master faz isso para garantir que a Equipe Scrum adere à teoria,práticas e regras do Scrum. O Scrum Master ajuda aqueles que estão fora da Equipe Scrum a entender quais as suas interações com a Equipe Scrum são úteis e quais não são. O Scrum Master ajuda todos a mudarem estas interações para maximizar o valor criado pela Equipe Scrum. Ele é responsável por orientar o Product Owner na criação e ordenação do Product Backlog. Ele é responsável por garantir que as regras do Scrum estejam sendo cumpridas e seus valores estejam sendo seguidos. Ele é responsável por ajudar a remover impedimentos que o time enfrente, fazendo isso sem o uso de qualquer autoridade. Ele utiliza técnicas de facilitação e coaching para que os membros do time consigam visualizar os problemas e encontrem a melhor solução. Durante eventos, ele é responsável por fazer com que a reunião flua adequadamente, utilizando técnicas de facilitação, embora não seja o responsável pela condução. Ele ajuda a treinar o time de desenvolvimento em autogerenciamento e interdisciplinaridade. Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 25 121 Ele treina o time de desenvolvimento em ambientes organizacionais nos quais o Scrum não é totalmente adotado e compreendido. Ele ensina a Equipe Scrum a criar itens do Product Backlog de forma clara e concisa. Ele comunica claramente a visão, objetivo e itens do Product Backlog para o time de desenvolvimento. Galera, eu só consigo explicar por metáfora, então vamos tentar entender esses papeis! Imaginem que João Canabrava deseja construir uma casa. Para tal, ele contrata uma renomada empresa de engenharia. A empresa irá fornecer todo seu know-how por meio de uma Equipe de Construção de Casas, que será composta por uma Equipe de Pedreiros, um Mestre de Obras e... por você! Sim, você fará parte da Equipe de Construção de Casas como principal parte interessada. Vamos dar um nome para você? Você ocupará o cargo de Dono da Casa. Portanto, a Equipe de Construção de Casas será composta por uma Equipe de Pedreiros, pelo Mestre de Obras e pelo Dono da Casa. E como será a organização e a função de cada um desses papeis? Bem, a Equipe de Pedreiros é composta por 3 a 9 pedreiros multidisciplinares, isto é, todos dominam todas as atividades de um pedreiro. Galera, esses caras são os responsáveis por colocar a mão na massa, levantar parede, fazer o concreto, alinhar o piso, entre outras atividades. Já o Mestre de Obras é o grande facilitador! Como assim, professor? Ele é o cara que vai retirar os impedimentos que aparecem no decorrer do nosso projeto. Um pedreiro faltou? Ficou doente? Se machucou? Ele irá buscar uma maneira de reduzir os impactos dessa ausência. Os pedreiros estão desmotivados, distraídos, descuidados? Ele irá arrumar uma maneira de solucionar isso. Um pedreiro saiu na porrada com outro? Ele vai tentar intermediar o conflito. Além disso, ele que vai trazer a demanda do Dono da Casa, entender o que ele quer e passar de maneira simples, clara e objetiva para a Equipe de Pedreiros. Ele é o cara que mais deve conhecer os fundamentos da construção de uma casa! Imaginem ele como um grande estudioso da construção de casas com bastante experiência adquirida em anos de empreendimentos. Ele saca tudo sobre como se faz para se construir uma casa, qual é o papel de cada um, qual é a melhor ordem, quais são as melhores técnicas e é um grande professor, capaz de ensinar a todos os outros integrantes quais são os melhores princípios para a construção de casas. Em outras palavras, ele é um grande mestre! Por fim, ele também é capaz de treinar a equipe de construção para que ela seja auto-gerenciável e interdisciplinar. Legal, mas está faltando um papel nessa história. E qual é? É o seu papel! Qual a sua função? Você é o Dono da Casa! Logo, você que gerencia o que será feito e o que não será feito, sendo também o responsável pelo que será entregue. A Equipe de Pedreiros responde a você! Até o Mestre de Obras responde somente a você! Viu a sua importância? Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 26 121 Você é o cara que tem que tentar fazer essa casa ficar da melhor forma possível – com máximo valor agregado). Você é o cara que vai priorizar o que deve ser feito primeiro; você é o cara que coloca ou tira tarefas da lista tarefas a serem realizadas; você é o único cara que pode cancelar determinada tarefa; você é o cara que fiz expressamente o que deve ser feito; enfim... você ocupa um papel importantíssimo para o sucesso do projeto de construir uma casa. Galera, toda metáfora possui suas limitações, mas acho que vocês conseguiram captar a mensagem aqui! A Equipe de Construção de Casas é o Scrum Team; a Equipe de Pedreiros é o Development Team; o Mestre de Obras é o Scrum Master; e o Dono da Casa é o Product Owner. Além disso, cada um desses tem atividades bem definidas e o controle sobre essas atividades é descentralizado. Entendido? Seeeeeegue o jogo... Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 27 121 2.4 – Artefatos Segundo o Guia do Scrum, o framework possui apenas três artefatos oficiais: Product Backlog, Sprint Backlog e Product Increment. Vejamos cada um deles... 2.4.1 – Product Backlog Antes de tudo, o que é um backlog? Galera, um backlog é basicamente uma lista, um resumo histórico, de acumulação de trabalho num determinado período de tempo, pode ser uma pilha de pedidos que devem ser produzidos. Já o Product Backlog é uma lista ordenada (por valor, risco, prioridade, entre outros) de requisitos ou funcionalidades que o produto deve conter2 criada pela Equipe Scrum. O Product Backlog é a origem única dos requisitos para qualquer mudança a ser feita no produto. Costuma-se dizer que ele é um artefato dinâmico que nunca estará completo e existirá enquanto o produto também existir. Por que? Porque sempre haverá novos requisitos, novas necessidades e mudanças a serem incorporadas. Logo, trata-se de um artefato vivo – sempre em movimento. O Product Backlog evolui tanto quanto o produto e o ambiente no qual ele será utilizado evoluem. Ele muda constantemente para identificar o que o produto necessita para ser mais apropriado, competitivo e útil para as partes interessadas. Lembrando que somente o Product Owner pode inserir, remover ou reordenar esses itens, incluindo seu conteúdo, disponibilidade e ordenação. Rafael Prikladnicki afirma que o formato mais utilizado para os itens são Histórias de Usuário (User Stories) ordenadas de acordo com o critério escolhido pelo Product Owner. O que são histórias de usuário? É basicamente uma especificação de uma ou mais frases na linguagem de negócio ou cotidiana do usuário do sistema que captura o que um usuário faz ou necessita fazer como parte de sua função de trabalho. Enfim... em geral, itens mais importantes ficam no topo do Product Backlog e são implementados primeiro. Na maioria das vezes, esses são os itens sobre os quais há maior conhecimento, logo são mais detalhados e refinados. Itens que precisem de maior refinamento geralmente têm uma importância menor e ficam mais abaixo. Não existe, no entanto, uma forma única para materializar esse artefato e descrever seus itens. Além das Histórias de Usuário, podem ser utilizadas descrições textuais de funcionalidades, cenários de casos de uso, entreoutros. Galera, o Product Backlog pode apresentar itens 2 Apesar de o Scrum Team (PO, SM, DT) ser o responsável pela criação do Product Backlog, o responsável pelo artefato e o único que pode priorizar suas funcionalidades é o Product Owner. Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 28 121 funcionais, não-funcionais, arquiteturais ou de infraestrutura – além de itens que representem riscos a serem removidos. É claro que, durante o andamento do projeto, algumas funcionalidades podem acabar perdendo a importância – não importando sob que circunstâncias isso ocorreu. Isso é totalmente normal na maioria dos projetos, uma vez que é impossível saber, desde o início, os detalhes de tudo o que queremos no produto. Assim, algumas funcionalidades podem acabar até mesmo desaparecendo. Da mesma forma, novas funcionalidades também podem ser adicionadas de acordo com a necessidade. Vejam o exemplo retirado do livro Métodos Ágeis para Desenvolvimento de Software: Vocês conseguiram entender? O Product Backlog é onde eu vou armazenar todas as necessidades que eu desejo no meu projeto, entre outras coisas. No exemplo acima, deseja- se poder tanto tuitar quanto remover um tuite – são duas histórias de usuário diferentes que eu desejo que sejam implementadas na minha aplicação. Legal, mas quando eu sei quando um desses itens pode realmente ser considerado pronto (também chamado ready)? Para que um item possa ser incluído em uma sprint, ele deve ser pequeno o suficiente para que caiba em uma única sprint e deve deixar tudo claro e transparente quanto à expectativa do Product Owner (geralmente através de um critério de aceite). Mas até que ponto estes requisitos precisam ser detalhados? Eles devem ser detalhados até atender ao conceito de Definition of Ready (DoR). O que é isso, Diego? Isso significa que o requisito tem informações suficientes para começar a ser desenvolvido imediatamente. Esta definição é bastante específica de cada organização – não há um padrão. Vou dar um exemplo para melhor entendimento... eu já trabalhei em um projeto em que as histórias de usuário eram entregues aos desenvolvedores de forma muito pobres, pouco refinadas e demasiadamente confusas. Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 29 121 O Product Owner estava rejeitando a conclusão das sprints, declarando que não havia sido feito o que ele havia pedido. Os desenvolvedores reclamavam que a especificação era péssima e que nem o próprio Product Owner sabia o que queria. A partir daí, modificamos nosso processo! A equipe combinou critérios explícitos e visíveis do que uma história de usuário deveria conter para ser aceita para entrar em uma sprint. Como diz o ditado, combinado não sai caro! Dessa forma, uma vez que todos haviam concordado, as brigas reduziram bastante. Por que? Porque eles nos disseram exatamente (por meio de um checklist) o que a história de usuário deveria conter para que elas pudessem ser aceitas para entrar no Product Backlog e serem de fato implementadas pelos desenvolvedores. A partir daí, essa definição de “pronto” nos ajudou a mitigar falhas de comunicação. 2.4.2 – Sprint Backlog O Sprint Backlog é o conjunto de itens selecionados para serem implementados durante a sprint mais o plano para transformá-los em um incremento. Assim, ao final de cada Reunião de Planejamento, um novo Sprint Backlog é criado. Normalmente, o plano é composto por tarefas técnicas necessárias para transformar o item em um incremento do produto. Vamos diferenciar Product Backlog e Sprint Backlog? Essa é uma pegadinha comum em prova! O primeiro é uma lista ordenada dos requisitos ou funcionalidades que o software deverá possuir. O segundo é uma lista de tarefas a serem executadas durante uma sprint para atingir a sua meta. Trata-se do desmembramento de cada item selecionado do Product Backlog em pequenas tarefas. O Sprint Backlog torna visível todo o trabalho que o time de desenvolvimento identifica como necessário para atingir a meta da sprint. Aliás, os membros do time de desenvolvimento (e somente eles) podem adicionar novas tarefas caso descubram, no decorrer da sprint, que mais trabalho será necessário. Da mesma forma, também podem remover tarefas caso estas se mostrem desnecessárias. Conforme o trabalho é realizado ou completado, a estimativa do trabalho restante é atualizada. Em qualquer ponto do tempo na sprint, o total do trabalho remanescente dos itens pode ser somado. O Sprint Backlog é altamente visível, uma imagem em tempo real do trabalho que o time de desenvolvimento planeja completar durante a sprint, e pertence exclusivamente ao time de desenvolvimento. O time de desenvolvimento monitora o total do trabalho restante pelo menos a cada Reunião Diária. O time de desenvolvimento acompanha estes resumos diários e projeta a probabilidade de alcançar o objetivo da sprint. Com o rastreamento do trabalho restante em toda a sprint, o time de desenvolvimento é capaz de gerenciar o seu progresso. Exemplo: Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 30 121 2.4.3 – Product Increment Ao final de cada sprint, a equipe de desenvolvimento entrega um incremento do produto – resultado do que foi produzido ao final do trabalho realizado na sprint. Esse é um dos principais conceitos do framework e vai ao encontro da sua natureza empírica, já que permite ao Product Owner perceber o valor do investimento realizado e também vislumbrar outras possibilidades de novos incrementos. Para a equipe de desenvolvimento, é importante entender que o incremento deve ser algo potencialmente entregável. Por que potencialmente? Porque o cliente pode optar por disponibilizar de imediato o incremento ou não. A equipe, portanto, deve produzir código que tenha qualidade – e, então, chegamos à Definition of Done (DoD). O que seria isso, professor? Calma, eu vou explicar... Pronto significa pronto mesmo! Quando uma equipe ágil diz que uma funcionalidade está pronta, isso significa que não tem aquele “veja bem…” ou “só falta uma coisinha, mas já está pronto…”. O DoD é um acordo formal que define claramente quais são os passos mínimos para a conclusão de um item ou funcionalidade potencialmente entregável. Em outras palavras, é uma lista de verificação de atividades necessárias para que um incremento seja considerado como completo. Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 31 121 Ele serve, mais ou menos, como um contrato entre a Equipe de Desenvolvimento e o Product Owner, garantindo que todo produto gerado pelo projeto estará dentro dos padrões de qualidade estabelecidos anteriormente. Vocês devem se lembrar que a Definition of Ready (DoR) é um checklist de critérios acordados para que a equipe de desenvolvimento possa aceitar um requisito. Correto? Aqui acontece exatamente o contrário: trata-se de um checklist de critérios acordados para que o Product Owner possa aceitar uma funcionalidade. Ambos tratam de critérios de aceite, mas o primeiro trata dos critérios de aceite das histórias de usuário pela equipe de desenvolvimento e o segundo trata dos critérios de aceite dasfuncionalidades pelo Product Owner. Em suma: toda a Equipe Scrum deve entender o que significa “pronto” para ambos os casos. Uma funcionalidade só é considerada “pronta” se tiver passado por todas as etapas definidas pela equipe de desenvolvimento (Ex: codificado, passado por todos os testes unitários, passado pelos testes de aceitação, entre outros). Uma funcionalidade que não esteja “pronta” ao final da sprint deve retornar ao Product Backlog para que seja incluída em uma próxima sprint. Esse critério é bastante específico, cada um escolhe o seu! Por outro lado, é uma boa prática revisar essas definições de “pronto” a cada sprint porque elas podem mudar ao longo do tempo. O amadurecimento organizacional e a habilidade da equipe de resolver impedimentos podem fazer com que alguns itens sejam acrescentados com o passar do tempo. Sempre lembrando que o Definition of Ready é opcional, já o Definition of Done é obrigatório. Compreenderam? Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 32 121 Por fim, é interessante mencionar outros artefatos que não estão explícitos no guia como o Gráfico Burndown, que torna visível a evolução diária do trabalho da equipe de desenvolvimento, na medida em que mostra a comparação entre o trabalho estimado inicialmente com a quantidade restante estimada de trabalho. Via de regra, as unidades utilizadas são de esforço (em horas) planejado pelo tempo decorrido. Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 33 121 2.5 – Eventos Vamos falar agora sobre os eventos – também conhecidos como reuniões ou cerimônias! No entanto, uma vez que agora nós já temos mais subsídios teóricos, é interessante falar um pouco mais sobre sprints. Bem, uma sprint dura um mês ou menos! Além disso, uma sprint se inicia imediatamente após a conclusão da sprint anterior. Durante a sprint é proibido realizar mudanças que coloquem em risco os objetivos da própria sprint. Na nossa metáfora, se eu planejei que nessa sprint eu vou construir os armários do banheiro utilizando madeira do tipo Cedro, eu não posso no meio do caminho alterar para madeira do tipo Mogno porque isso coloca em risco os objetivos da minha sprint, isto é, essa mudança pode inviabilizar a entrega na data acordada e a sprint pode falhar! Além disso, é proibido mudar a composição da equipe ou diminuir as metas de qualidade. Apesar disso, o escopo pode ser sempre clarificado e renegociado entre o Product Owner e a Equipe de Desenvolvimento durante a sprint. Aliás, nada impede que uma sprint seja cancelada antes de seu time-box terminar e isso somente pode ser feito pelo Product Owner (sob influência de stakeholders, equipe de desenvolvimento, entre outros). Professor, por que alguém faria esse cancelamento? A Sprint poderá ser cancelada se o objetivo da Sprint se tornar obsoleto. Isto pode ocorrer se a organização mudar sua direção ou se as condições do mercado ou das tecnologias mudarem. Geralmente a Sprint deve ser cancelada se ela não faz mais sentido às dadas circunstâncias. No entanto, devido a curta duração da Sprint, raramente cancelamentos fazem sentido. Se uma parte do trabalho estiver potencialmente utilizável, tipicamente o Product Owner o aceita. Todos os itens de Backlog do Produto incompletos são reestimados e colocados de volta no Backlog do Produto. O trabalho feito se deprecia rapidamente e deve ser frequentemente reestimado. O cancelamento de Sprints consome recursos, já que todos tem que se reagrupar em outra reunião de planejamento da sprint para iniciar outra sprint. Cancelamentos de sprints são frequentemente traumáticos para a Equipe Scrum, e são muito incomuns. Por falar em planejamento da sprint, vamos falar agora sobre os eventos. Por que eu fiz essa pausa para falar um pouco mais sobre as sprints? Porque os quatro eventos que serão detalhados a seguir compõem uma sprint – além, é claro, do próprio trabalho de desenvolvimento. Galera, Eventos Scrum são eventos time-boxed – o que significa apenas que eles possuem uma duração máxima predefinida. Eles são utilizados para criar uma rotina e minimizar a necessidade de reuniões não definidas pelo Scrum. Esses eventos que compõem a sprint são: (1) Reunião de Planejamento da Sprint; (2) Reunião Diária; (3) Revisão da Sprint; e (4) Retrospectiva da Sprint. Veremos nas próximas Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 34 121 páginas em detalhes cada um desses eventos, mas já deixo a dica de que não é possível ir para a prova sem saber pelo menos o básico sobre cada um deles. Ok? Vamos lá... 2.5.1 – Planejamento da Sprint O trabalho a ser realizado na Sprint é planejado na Reunião de Planejamento da Sprint. Este planejamento é criado com o trabalho colaborativo de toda a Equipe Scrum. Ela possui um time- box com no máximo oito horas para uma sprint de um mês de duração – para sprints menores, a duração é menor. O Scrum Master garante que o evento ocorra e que os participantes entendam seu propósito. Ela consiste em duas partes e devem responder adequadamente as perguntas: 1. O que será entregue como resultado do incremento da próxima Sprint? 2. Como o trabalho necessário para entregar o incremento será realizado? Na primeira parte, a Equipe de Desenvolvimento tenta prever as funcionalidades que serão desenvolvidas durante a sprint. O Product Owner apresenta as histórias de usuário mais priorizados do Product Backlog à Equipe de Desenvolvimento. Como ele faz isso? Em geral, ele dá um valor de negócio para cada item do backlog, organizando-os em forma decrescente de valor de negócio. Como assim, professor? Imaginem que exista um item que o Product Owner deseja muito que seja implementado – ele pode dizer que esse item tem o valor de negócio de 1000. Agora imagine que exista outro item no Product Backlog que o Product Owner não liga tanto – ele dá um valor de negócio de 10. Dessa forma, o Product Owner consegue ordenar os itens de acordo com o valor de negócio. Feito isso, é hora de estimar o esforço de desenvolvimento de cada item do backlog. Quando nós utilizamos histórias de usuário, é comum utilizarmos uma outra unidade de medida para medir esforço, em vez do tempo – utilizado frequentemente em metodologias tradicionais. No caso de Histórias de Usuário (User Stories), nós utilizamos Pontos de História (Story Points). Trata-se de uma unidade de medida relativa que leva em consideração o esforço3 necessário para realizar uma determinada funcionalidade. Se uma funcionalidade requerer o dobro de esforço para ser implementada, ela receberá aproximadamente o dobro de Story Points. Para fazer essa estimativa, a equipe de desenvolvimento realiza uma comparação com outras histórias já estimadas. Caso não haja 3 Há uma polêmica danada: alguns afirmam que ela estima complexidade e, não, esforço; outros dizem que é uma combinação de complexidade, esforço, risco, etc. Diego Carvalho, Fernando Pedrosa Lopes Aula 03 Engenharia de Software p/ BASA (Técnico Científico - TI) 2021 - Pré-Edital www.estrategiaconcursos.com.br 1658294 Curso adquirido no site www.rateiobarato.com 35 121 ainda nada estimado no Product Backlog, a equipe localiza a história de usuário com o menor esforço para desenvolvimento
Compartilhar