0
Extreme Programming Princípios, valores e práticas <ul><ul><li>CHRISTIANO MILFONT - cmilfont@gmail.com Fortaleza, Ceará. 2...
<ul><ul><li>ROTEIRO </li></ul></ul><ul><ul><li>HISTÓRICO. </li></ul></ul><ul><ul><li>AGILE SOFTWARE DEVELOPMENT. </li></ul...
1. HISTÓRICO
ANOS 80 <ul><li>Anos 80 - década Code-and-Fix. </li></ul><ul><li>Ausência de metodologias de desenvolvimento. </li></ul><u...
ANOS 90 <ul><li>Linguagem UML. </li></ul><ul><li>Processos unificados (UP). </li></ul><ul><li>Metodologias Orientadas a Ob...
1. HISTÓRICO <ul><ul><li>Os aspectos que destinguem o processo unificado são três conceitos chaves, as saber: </li></ul></...
PROCESSOS UNIFICADOS <ul><ul><li>Rational Unified Process (RUP). </li></ul></ul><ul><ul><li>Basic Unified Process (BUP). <...
PROJETOS COM PROCESSOS UNIFICADOS <ul><ul><li>Código complexo. </li></ul></ul><ul><ul><li>Manutenção difícil. </li></ul></...
2. AGILE SOFTWARE DEVELOPMENT
ORIGENS DOS METODOS AGEIS <ul><li>Lendário Projeto C3 - Comprehensive Compensation project – Payroll system (Chrysler). </...
MANIFESTO AGIL <ul><li>“ Estamos evidenciando maneiras melhores de desenvolver software fazendo-o nós mesmos e ajudando ou...
METODOS AGEIS <ul><li>Extreme Programming </li></ul><ul><li>Scrum </li></ul><ul><li>Pragmatic Programming </li></ul><ul><l...
3. EXTREME PROGRAMMING
EXTREME PROGRAMMING O XP é formado por um conjunto de valores, princípios e práticas.   Os princípios conectam os valores ...
<ul><li>VALORES </li></ul><ul><ul><li>Communication (Comunicação) </li></ul></ul><ul><ul><li>Simplicity (Simplicidade) </l...
Sit Together (Sentem-se juntos) Whole Team (Equipe completa) Energized Work (Trabalho energizado) Pair Programming (Progra...
Real Customer Involvement (Envolvimento real do cliente) Incremental Deployment (Disponibilização incremental) Team Contin...
 
 
4. METODOLOGIA
<ul><ul><li>Fase de exploração; </li></ul></ul><ul><ul><ul><ul><li>Compreender e estimar o possível </li></ul></ul></ul></...
JOGO DO PLANEJAMENTO
<ul><ul><li>Definição de Releases e marcos. </li></ul></ul><ul><ul><li>Iterações com os clientes em ciclos semanais (marco...
ITERAÇÕES
<ul><ul><li>Presença constante do cliente. </li></ul></ul><ul><ul><li>Histórias dos usuários em torno dos requisitos. </li...
Real Customer Involvement (Envolvimento Real do Cliente)
<ul><ul><li>ID#  005    Usuario  Fulano de tal  </li></ul></ul><ul><ul><li><Story name>   Correlação de atos  </li></ul></...
USER STORY CARD
USER STORY CARD
INFORMATIVE WORKSPACE AMBIENTE INFORMATIZADO
5. DESENVOLVIMENTO
RELEASE PLAN
ITERATION PLAN
INTEGRAÇÃO CONTÍNUA
INTEGRAÇÃO CONTÍNUA
<ul><ul><li>Condutor e navegador. </li></ul></ul><ul><ul><li>Condutor cria testes e refatora. </li></ul></ul><ul><ul><li>N...
MOVE PEOPLE AROUND MOVA AS PESSOAS PELO PROJETO <ul><ul><li>Revezamento de pares entre as histórias e iterações. </li></ul...
MOVE PEOPLE AROUND MOVA AS PESSOAS PELO PROJETO
<ul><ul><li>Todos desenvolvedores são responsáveis pelo código. </li></ul></ul><ul><ul><li>Utiliza-se SCM (Source Control ...
SHARED CODE CÓDIGO COMPARTILHADO
SHARED CODE CÓDIGO COMPARTILHADO
EXPLORAÇÃO DO DOMÍNIO DA RELEASE EM CRC CARDS
<ul><ul><li>Objetos que conhecem seus dados e comportamentos </li></ul></ul><ul><ul><li>Colaboram entre si e não pulam ent...
<ul><li>Usando C# </li></ul><ul><ul><li>using System; </li></ul></ul><ul><ul><li>using System.IO; </li></ul></ul><ul><ul><...
DOMAIN MODEL EXEMPLO
<ul><ul><li>FUNCTIONAL TESTS (TESTES FUNCIONAIS) </li></ul></ul><ul><ul><li>ACCEPTANCE TESTS (TESTES DE ACEITAÇÃO). </li><...
<ul><ul><li>Testes que cruzam os limites de uma classe, invariavelmente são testes que descrevem e definem processos. </li...
UNIT TESTS TESTES UNITÁRIOS
REFACTORINGS
6. CONCLUSÃO
<ul><ul><li>Problemas: </li></ul></ul><ul><ul><ul><ul><li>Saída de pessoal (Risco na implementação). </li></ul></ul></ul><...
REFLEXÃO:  MOÇOS BONITOS COMO NÓS DESENVOLVEM EM JAVA. DUVIDAS?
<ul><ul><li>Extreme Programming Explained - Kent Beck </li></ul></ul><ul><ul><li>Planning Extreme Programming - Kent Beck ...
Upcoming SlideShare
Loading in...5
×

Extreme Programming

4,283

Published on

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,283
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
258
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Transcript of "Extreme Programming"

  1. 1. Extreme Programming Princípios, valores e práticas <ul><ul><li>CHRISTIANO MILFONT - cmilfont@gmail.com Fortaleza, Ceará. 26/05/2006 </li></ul></ul>SEAD 2006
  2. 2. <ul><ul><li>ROTEIRO </li></ul></ul><ul><ul><li>HISTÓRICO. </li></ul></ul><ul><ul><li>AGILE SOFTWARE DEVELOPMENT. </li></ul></ul><ul><ul><li>EXTREME PROGRAMMING. </li></ul></ul><ul><ul><li>A METODOLOGIA. </li></ul></ul><ul><ul><li>DESENVOLVIMENTO. </li></ul></ul><ul><ul><li>CONCLUSÃO. </li></ul></ul>
  3. 3. 1. HISTÓRICO
  4. 4. ANOS 80 <ul><li>Anos 80 - década Code-and-Fix. </li></ul><ul><li>Ausência de metodologias de desenvolvimento. </li></ul><ul><li>Programação procedural e estruturada. </li></ul><ul><li>Evolução da programação linear. </li></ul><ul><li>Programas são: sequência, decisão e iteração. </li></ul><ul><li>Dificuldade de simular relações entre entidades em processos de negócios. </li></ul>
  5. 5. ANOS 90 <ul><li>Linguagem UML. </li></ul><ul><li>Processos unificados (UP). </li></ul><ul><li>Metodologias Orientadas a Objetos. </li></ul><ul><li>Fases bem definidas e controladas. </li></ul><ul><li>Analogia com a Engenharia Civil. </li></ul><ul><li>Concepção, Elaboração, Construção e Transição. </li></ul>
  6. 6. 1. HISTÓRICO <ul><ul><li>Os aspectos que destinguem o processo unificado são três conceitos chaves, as saber: </li></ul></ul><ul><ul><ul><ul><li>Direcionados a casos de usos; </li></ul></ul></ul></ul>PROCESSOS UNIFICADOS <ul><ul><li>Centrado na arquitetura; </li></ul></ul><ul><ul><li>Iterativo e incremental. </li></ul></ul>
  7. 7. PROCESSOS UNIFICADOS <ul><ul><li>Rational Unified Process (RUP). </li></ul></ul><ul><ul><li>Basic Unified Process (BUP). </li></ul></ul><ul><ul><li>Enterprise Unified Process (EUP). </li></ul></ul><ul><ul><li>Microsoft Solution Framework (MSF). </li></ul></ul>
  8. 8. PROJETOS COM PROCESSOS UNIFICADOS <ul><ul><li>Código complexo. </li></ul></ul><ul><ul><li>Manutenção difícil. </li></ul></ul><ul><ul><li>Baixa produtividade. </li></ul></ul><ul><ul><li>Cronograma sempre atrasado. </li></ul></ul><ul><ul><li>Insatisfação de todos. </li></ul></ul><ul><ul><li>Design degradado. </li></ul></ul><ul><ul><li>Documentação defasada, excessiva e ilegível. </li></ul></ul><ul><ul><li>Fracasso no projeto. </li></ul></ul>
  9. 9. 2. AGILE SOFTWARE DEVELOPMENT
  10. 10. ORIGENS DOS METODOS AGEIS <ul><li>Lendário Projeto C3 - Comprehensive Compensation project – Payroll system (Chrysler). </li></ul><ul><li>Melhores práticas (Design patterns). </li></ul><ul><li>Análise Orientada a Objetos. </li></ul><ul><li>Manifesto ágil. </li></ul><ul><li>Agile Alliance (http://www.agilealliance.org/). </li></ul>Ron Jeffries Kent Beck Ward Cunningham
  11. 11. MANIFESTO AGIL <ul><li>“ 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: </li></ul><ul><ul><li>Software em funcionamento MAIS QUE documentação abrangente; </li></ul></ul><ul><ul><li>Indivíduos e interação MAIS QUE processos e ferramentas; </li></ul></ul><ul><ul><li>Colaboração com o cliente MAIS QUE negociação de contratos; </li></ul></ul><ul><ul><li>Responder a mudanças MAIS QUE seguir um plano. </li></ul></ul><ul><li>Ou seja, mesmo tendo valor os itens à direita, valorizamos mais os itens à esquerda.” </li></ul>
  12. 12. METODOS AGEIS <ul><li>Extreme Programming </li></ul><ul><li>Scrum </li></ul><ul><li>Pragmatic Programming </li></ul><ul><li>Feature Driven Development (FDD) </li></ul><ul><li>Crystal </li></ul><ul><li>Adaptive Software Development </li></ul><ul><li>Dynamic Systems Development Method (DSDM) </li></ul><ul><li>Agile Lean Development (LD) </li></ul>
  13. 13. 3. EXTREME PROGRAMMING
  14. 14. EXTREME PROGRAMMING O XP é formado por um conjunto de valores, princípios e práticas. Os princípios conectam os valores (crenças fundamentais dos processos) às práticas (atividades concretas do cotidiano). O XP é uma metodologia rigorosa e disciplinada que requer o cumprimento de suas práticas para o sucesso na adoção. Ao contrário do que os gurus pregam, o XP pode ser usado com CMM e UPs como atestam alguns estudos especificos nos últimos anos. A preocupação não é com qualidade (que deve natural) e sim com a saúde do sistema (segundo Kent Beck).
  15. 15. <ul><li>VALORES </li></ul><ul><ul><li>Communication (Comunicação) </li></ul></ul><ul><ul><li>Simplicity (Simplicidade) </li></ul></ul><ul><ul><li>Feedback </li></ul></ul><ul><ul><li>Courage (Coragem) </li></ul></ul><ul><ul><li>Respect (Respeito) </li></ul></ul><ul><li>PRINCÍPIOS </li></ul><ul><ul><li>Humanity (Humanidade) </li></ul></ul><ul><ul><li>Economics (Economia) </li></ul></ul><ul><ul><li>Mutual Benefit (Benefício mútuo) </li></ul></ul><ul><ul><li>Self-Similarity (Similaridade própria) </li></ul></ul><ul><ul><li>Improvement (Progresso) </li></ul></ul><ul><ul><li>Diversity (Diversidade) </li></ul></ul><ul><ul><li>Reflection (Reflexão) </li></ul></ul><ul><ul><li>Flow (Fluxo) </li></ul></ul><ul><ul><li>Opportunity (Oportunidade) </li></ul></ul><ul><ul><li>Redundancy (Redundância) </li></ul></ul><ul><ul><li>Failure (Falha) </li></ul></ul><ul><ul><li>Quality (Qualidade) </li></ul></ul><ul><ul><li>Babe Steps (Passo-de-bêbê) </li></ul></ul><ul><ul><li>Acceptance (Aceite) </li></ul></ul><ul><ul><li>Responsibility (Responsabilidade) </li></ul></ul>
  16. 16. Sit Together (Sentem-se juntos) Whole Team (Equipe completa) Energized Work (Trabalho energizado) Pair Programming (Programação em par) Move People Around (Mova as equipes) Stories (Histórias) Weekly Cycle (Ciclo semanal) Quarterly Cycle (Ciclo trimestral) Slack (Folga) Ten-Minute Build (Construir em 10 minutos) Continuous Integration (Integração contínua) Test-First Integration (Teste primeiro) Incremental Design (Design incremental) Informative Workspace (Ambiente informatizado) PRÁTICAS PRIMÁRIAS
  17. 17. Real Customer Involvement (Envolvimento real do cliente) Incremental Deployment (Disponibilização incremental) Team Continuity (Continuidade da equipe) Shrinking Teams (Diminuição de equipes) Root-Cause Analysis (Análise da causa-origem) Daily Deployment (Disponibilização (entrega) diária) Negotiated Scope Contract (Contrato com escopo negociável) Shared Code (Código compartilhado) Code and Tests (Código e testes) Single Code Base (Código único) Metaphor (Metáforas) Refactoring (Refatoração) <ul><li>PRÁTICAS COROLÁRIAS (CONSEQUÊNCIA) </li></ul>Pay-per-Use (Pague-por-uso) Design Patterns (Padrões de projeto) 40 Hour Week (40 horas semanais) Planning Game (Jogo do planejamento) Stand Up Meetings (Reuniões em pé) Coding Standards (Padrões de codificação)
  18. 20. 4. METODOLOGIA
  19. 21. <ul><ul><li>Fase de exploração; </li></ul></ul><ul><ul><ul><ul><li>Compreender e estimar o possível </li></ul></ul></ul></ul><ul><ul><li>Fase de planejamento; </li></ul></ul><ul><ul><ul><ul><li>Comprometimento das escolhas. </li></ul></ul></ul></ul><ul><ul><li>Fase de gerenciamento; </li></ul></ul><ul><ul><ul><ul><li>Gerenciamento do progresso na construção. </li></ul></ul></ul></ul><ul><ul><li>O jogo do planejamento é um processo circular e iterativo com objetivos, partes jogadas, jogadores e regras para os movimentos permitidos. Cada fluxo circular contínuo apresenta as fases: </li></ul></ul>JOGO DO PLANEJAMENTO
  20. 22. JOGO DO PLANEJAMENTO
  21. 23. <ul><ul><li>Definição de Releases e marcos. </li></ul></ul><ul><ul><li>Iterações com os clientes em ciclos semanais (marcos). Não permite mudanças nessas versões. </li></ul></ul><ul><ul><li>Ciclo mensais para funcionalidades produtivas (Releases). Versões funcionais e correções de erros. </li></ul></ul><ul><ul><li>Ciclos trimestrais para sistemas ou módulos em produção. </li></ul></ul><ul><ul><li>Mudanças no escopo de forma simples. </li></ul></ul><ul><ul><li>Feedback rápido. </li></ul></ul><ul><ul><li>Agilidade no gerenciamento de mudanças. </li></ul></ul>ITERAÇÕES
  22. 24. ITERAÇÕES
  23. 25. <ul><ul><li>Presença constante do cliente. </li></ul></ul><ul><ul><li>Histórias dos usuários em torno dos requisitos. </li></ul></ul><ul><ul><li>Definição entre processos, casos e funções. </li></ul></ul><ul><ul><li>História definida a partir de um pedaço de negócio que possa ser testada, executada e entregue. </li></ul></ul><ul><ul><li>Divisão de Stories em Tasks caso necessário. </li></ul></ul><ul><ul><li>Documentação simplificada, clara e objetiva. </li></ul></ul><ul><ul><li>Definição de metáforas para claro entendimento. </li></ul></ul>USER STORY (HISTÓRIAS DOS USUÁRIOS)
  24. 26. Real Customer Involvement (Envolvimento Real do Cliente)
  25. 27. <ul><ul><li>ID# 005 Usuario Fulano de tal </li></ul></ul><ul><ul><li><Story name> Correlação de atos </li></ul></ul><ul><ul><li>Source:__________________________________________ _________ </li></ul></ul><ul><ul><li><Story texto> </li></ul></ul><ul><ul><li>Os atos após serem identificados e filtrados na consulta ao acervo do Diário Oficial devem ser correlacionados de forma que se identifique ... </li></ul></ul><ul><ul><li>Data início 01/02/2006 Data Fim 08/02/2006 </li></ul></ul><ul><ul><li>Teste de Aceitação: ID# 011 </li></ul></ul>USER STORY CARD
  26. 28. USER STORY CARD
  27. 29. USER STORY CARD
  28. 30. INFORMATIVE WORKSPACE AMBIENTE INFORMATIZADO
  29. 31. 5. DESENVOLVIMENTO
  30. 32. RELEASE PLAN
  31. 33. ITERATION PLAN
  32. 34. INTEGRAÇÃO CONTÍNUA
  33. 35. INTEGRAÇÃO CONTÍNUA
  34. 36. <ul><ul><li>Condutor e navegador. </li></ul></ul><ul><ul><li>Condutor cria testes e refatora. </li></ul></ul><ul><ul><li>Navegador avalia atrás de bugs. </li></ul></ul><ul><ul><li>Navegador critica código. </li></ul></ul><ul><ul><li>Sit Together (sentam-se juntos) </li></ul></ul><ul><ul><li>Parceiro força boas práticas. </li></ul></ul><ul><ul><li>Parceiro evita dispersão. </li></ul></ul><ul><ul><li>Menos prospecção a erros. </li></ul></ul><ul><ul><li>Disseminação dos conhecimentos e nivelamento. </li></ul></ul><ul><ul><li>Stand up meeting (Reuniões breves em pé). </li></ul></ul><ul><ul><li>Confiança no desenvolvimento. </li></ul></ul>PAIR PROGRAMMING PROGRAMAÇÃO EM PAR
  35. 37. MOVE PEOPLE AROUND MOVA AS PESSOAS PELO PROJETO <ul><ul><li>Revezamento de pares entre as histórias e iterações. </li></ul></ul><ul><ul><li>Maior revisão de códigos e disseminação. </li></ul></ul><ul><ul><li>Desenvolvedores podem alterar qualquer código. </li></ul></ul>
  36. 38. MOVE PEOPLE AROUND MOVA AS PESSOAS PELO PROJETO
  37. 39. <ul><ul><li>Todos desenvolvedores são responsáveis pelo código. </li></ul></ul><ul><ul><li>Utiliza-se SCM (Source Control Management). </li></ul></ul><ul><ul><li>SCM versionam, arquivam e controlam o projeto. </li></ul></ul><ul><ul><li>Versões continuam em paralelo sem interromper a evolução do sistema. </li></ul></ul>SHARED CODE CÓDIGO COMPARTILHADO
  38. 40. SHARED CODE CÓDIGO COMPARTILHADO
  39. 41. SHARED CODE CÓDIGO COMPARTILHADO
  40. 42. EXPLORAÇÃO DO DOMÍNIO DA RELEASE EM CRC CARDS
  41. 43. <ul><ul><li>Objetos que conhecem seus dados e comportamentos </li></ul></ul><ul><ul><li>Colaboram entre si e não pulam entre funções. </li></ul></ul><ul><ul><li>Só expõem o necessário. </li></ul></ul><ul><ul><li>Objetos ativos, e não passivos como tabelas. </li></ul></ul><ul><ul><li>Design simples </li></ul></ul><ul><ul><li>Implementam estritamente o que o processo define. </li></ul></ul><ul><ul><li>Representam os processos de negócios do cliente. </li></ul></ul><ul><ul><li>Não se preocupam com arquitetura do sistema. </li></ul></ul>DOMAIN MODEL
  42. 44. <ul><li>Usando C# </li></ul><ul><ul><li>using System; </li></ul></ul><ul><ul><li>using System.IO; </li></ul></ul><ul><ul><li>public class RemoveArquivosVelhos { </li></ul></ul><ul><ul><li>public static void Main(string[] args) { </li></ul></ul><ul><ul><li>foreach (FileInfo fi in (new DirectoryInfo (@“ empackup”)).GetFiles()) { </li></ul></ul><ul><ul><li>if (((TimeSpan) (DateTime.Now - fi.LastWriteTime)).Days > 7) { </li></ul></ul><ul><ul><li>fi.Delete(); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul>Usando BASH do sistema operacional LINUX -> find /usr -atime + 6 -exec rm -f “ {} ” “;” SIMPLICIDADE
  43. 45. DOMAIN MODEL EXEMPLO
  44. 46. <ul><ul><li>FUNCTIONAL TESTS (TESTES FUNCIONAIS) </li></ul></ul><ul><ul><li>ACCEPTANCE TESTS (TESTES DE ACEITAÇÃO). </li></ul></ul><ul><ul><ul><ul><ul><li>Os testes de aceitação descrevem as ações e definem o domínio dos processos que são necessários para validar a história. </li></ul></ul></ul></ul></ul><ul><ul><li>UNIT TESTS (TESTES DE UNIDADE). </li></ul></ul><ul><ul><ul><ul><ul><li>Os testes de unidade avaliam cada entidade participante no teste de aceitação usando refactoring para criar o código funcional. </li></ul></ul></ul></ul></ul>TEST-DRIVEN DEVELOPMENT
  45. 47. <ul><ul><li>Testes que cruzam os limites de uma classe, invariavelmente são testes que descrevem e definem processos. </li></ul></ul>ACCEPTANCE TESTS TESTES DE ACEITAÇÃO
  46. 48. UNIT TESTS TESTES UNITÁRIOS
  47. 49. REFACTORINGS
  48. 50. 6. CONCLUSÃO
  49. 51. <ul><ul><li>Problemas: </li></ul></ul><ul><ul><ul><ul><li>Saída de pessoal (Risco na implementação). </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Dificuldade cultural. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Indisciplina nas práticas da metodologia podem comprometer o sucesso. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Problemas estruturais na empresa. </li></ul></ul></ul></ul><ul><ul><li>Soluções: </li></ul></ul><ul><ul><ul><ul><li>. Projeto saudável. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Agilidade nas mudanças. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Menos pontos de manutenção. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Produtividade no ciclo de vida do produto. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Menor incidência de falhas. </li></ul></ul></ul></ul>
  50. 52. REFLEXÃO: MOÇOS BONITOS COMO NÓS DESENVOLVEM EM JAVA. DUVIDAS?
  51. 53. <ul><ul><li>Extreme Programming Explained - Kent Beck </li></ul></ul><ul><ul><li>Planning Extreme Programming - Kent Beck and Martin Fowler </li></ul></ul><ul><ul><li>Extreme Programming Installed - Ron Jeffries </li></ul></ul><ul><ul><li>Extreme Programming Explored - William C. Wake </li></ul></ul><ul><ul><li>Agile Software Development - Evaluating the Methods for Your Organization - Alan S. Koch </li></ul></ul><ul><ul><li>Agile Software Development - Alistair Cockburn </li></ul></ul><ul><ul><li>Agile Software Development Ecosystems - Jim Highsmith </li></ul></ul><ul><ul><li>Applying UML and Patterns - An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd) - Craig Larman </li></ul></ul><ul><ul><li>Test-Driven Development By Example - Kent Beck </li></ul></ul><ul><ul><li>Martin Fowler - Refactoring-Improving the Design of Existing Code </li></ul></ul><ul><ul><li>Domain-Driven Design - Tackling Complexity in the Heart of Software - Eric Evans </li></ul></ul>APÊNDICE BIBLIOGRAFIA
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×