princípios e práticas para lidar com requisitos não-funcionais em desenvolvimento de software

96
Princípios e práticas para incorporar requisitos não- funcionais no desenvolvimento de software Danilo Sato @dtsato - www.dtsato.com Thursday, 27 June 13

Upload: danilo-sato

Post on 22-Dec-2014

3.642 views

Category:

Technology


0 download

DESCRIPTION

Slides of my Agile Brazil 2013 presentation on "Principles and practices to deal with non-functional requirements in software development"

TRANSCRIPT

Page 1: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Princípios e práticas para incorporar requisitos não-funcionais no desenvolvimento de softwareDanilo Sato@dtsato - www.dtsato.com

Thursday, 27 June 13

Page 2: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Danilo Sato@dtsato - www.dtsato.com

Desenvolvedor, Arquiteto, Coach, DevOps, Treinador

Thursday, 27 June 13

Page 3: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Thursday, 27 June 13

Page 4: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Estamos contratando!

join.thoughtworks.com

Thursday, 27 June 13

Page 5: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Princípios e práticas para incorporar requisitos não-funcionais no desenvolvimento de software

Thursday, 27 June 13

Page 6: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

HTTP://WWW.FLICKR.COM/PHOTOS/15436597@N05/2087454556

HEIN?

Thursday, 27 June 13

Page 7: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Princípios e práticas para incorporar requisitos não-funcionais no desenvolvimento de software

Thursday, 27 June 13

Page 8: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Princípios e práticas para incorporar requisitos não-funcionais no desenvolvimento de software

Thursday, 27 June 13

Page 9: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Princípios e práticas para incorporar requisitos não-funcionais no desenvolvimento de software

Thursday, 27 June 13

Page 10: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Requisitos funcionais

Thursday, 27 June 13

Page 11: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Requisitos funcionais

Comportamento esperado do sistema

Funcionalidades

“O que o sistema faz”

Thursday, 27 June 13

Page 12: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Requisitos não-funcionais

Comportamento não esperado do sistema?

Desfuncionalidades?

“O que o sistema não faz”?

Thursday, 27 June 13

Page 13: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Requisitos não-funcionais

Comportamento não esperado do sistema?

Desfuncionalidades?

“O que o sistema não faz”?

Thursday, 27 June 13

Page 14: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Requisitos transversais

Thursday, 27 June 13

Page 15: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Requisitos transversais

Comportamentos transversais do sistema

Restrições

Atributos de qualidade

“Como o sistema deve operar”

Thursday, 27 June 13

Page 16: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

NFR

Thursday, 27 June 13

Page 17: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

NFR CFRXFR

Thursday, 27 June 13

Page 18: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidadesegurança

disponibilidadeperformance

escalabilidadelocalização

configurabilidade

Exemplos:

Thursday, 27 June 13

Page 19: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidadesegurança

disponibilidadeperformance

escalabilidadelocalização

configurabilidade

Exemplos:

Thursday, 27 June 13

Page 20: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidadesegurança

disponibilidadeperformance

escalabilidadelocalização

configurabilidade

Exemplos:

Thursday, 27 June 13

Page 21: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Como (não) lidar com requisitos transversais?

Thursday, 27 June 13

Page 22: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

ESTRATÉGIA COMUM #1ESQUECIMENTO

HTTP://WWW.FLICKR.COM/PHOTOS/LASH9420/7004634470

Thursday, 27 June 13

Page 23: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

ESTRATÉGIA COMUM #2EXAGERO

HTTP://WWW.FLICKR.COM/PHOTOS/ANDISAWSPARKS/8069817816

Thursday, 27 June 13

Page 24: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

ESTRATÉGIA COMUM #3CAPTURAR E DOCUMENTAR

HTTP://WWW.FLICKR.COM/PHOTOS/VIDEOLUX/2390152100

Thursday, 27 June 13

Page 25: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

HTTP://WWW.FLICKR.COM/PHOTOS/MANDYLEH/6365813847

PQ É TÃO DIFÍCIL?

Thursday, 27 June 13

Page 26: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Por que é tão difícil?

Difícil de visualizar

Difícil de mensurar custos

Não só transversais no sistema, mas também entre papéis na equipe:

Desenvolvedores, Arquitetos, QAs, DevOps, Ops, BAs

Thursday, 27 June 13

Page 27: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Soa familiar?

“Arquitetura é tudo aquilo que é difícil de mudar depois”

Thursday, 27 June 13

Page 28: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Soa familiar?

“Arquitetura é tudo aquilo que é difícil de mudar depois”

Thursday, 27 June 13

Page 29: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Requisitos transversais são difíceis de mudar/introduzir depois!

Thursday, 27 June 13

Page 30: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Requisitos transversais influenciam a arquitetura do sistema

Thursday, 27 June 13

Page 31: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Design emergentevs.

Arquitetura evolutiva

Thursday, 27 June 13

Page 32: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Requisitos transversais restringem a evolução da arquitetura

Thursday, 27 June 13

Page 33: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Como definir?

Thursday, 27 June 13

Page 34: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Diferentes ângulos

Thursday, 27 June 13

Page 35: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Diferentes ângulos

Coisas que viram histórias

Thursday, 27 June 13

Page 36: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Diferentes ângulos

Coisas que viram histórias

Coisas que viram padrões

Thursday, 27 June 13

Page 37: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Diferentes ângulos

Coisas que viram histórias

Coisas que viram padrões

Coisas que geram mudanças operacionais

Thursday, 27 June 13

Page 38: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Diferentes ângulos

Coisas que viram histórias

Coisas que viram padrões

Coisas que geram mudanças operacionais

Coisas que influenciam o processo de entrega

Thursday, 27 June 13

Page 39: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Exemplo: Segurança

Coisas que viram histórias:

Processo de autenticação de usuário

Criptografia de senha

Armazenagem criptografada de dados sensíveis

Thursday, 27 June 13

Page 40: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Exemplo: Segurança

Coisas que viram padrões:

Autorização por funcionalidade

Definição de quais dados são sensíveis

Não salvar/comitar senhas em texto puro

Thursday, 27 June 13

Page 41: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Exemplo: Segurança

Coisas que geram mudanças operacionais:

Obter um certificado SSL

Configuração do firewall

Rotação de chaves SSH

Thursday, 27 June 13

Page 42: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Exemplo: Segurança

Coisas que influenciam o processo de entrega:

Testes de penetração

Gerenciamento de configuração para senhas

Validar assinatura de pacotes

Thursday, 27 June 13

Page 43: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Quais tipos?

Thursday, 27 June 13

Page 44: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Thursday, 27 June 13

Page 45: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

35+Thursday, 27 June 13

Page 46: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Thursday, 27 June 13

Page 47: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidade

Thursday, 27 June 13

Page 48: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidaderetenção

Thursday, 27 June 13

Page 49: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidaderetençãoaudição

Thursday, 27 June 13

Page 50: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidaderetençãoaudiçãosegurança

Thursday, 27 June 13

Page 51: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidaderetençãoaudiçãosegurançadisponibilidade

Thursday, 27 June 13

Page 52: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidaderetençãoaudiçãosegurançadisponibilidadecontinuidade

Thursday, 27 June 13

Page 53: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidaderetençãoaudiçãosegurançadisponibilidadecontinuidadepersonalização

Thursday, 27 June 13

Page 54: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidaderetençãoaudiçãosegurançadisponibilidadecontinuidadepersonalizaçãotolerância a falha

Thursday, 27 June 13

Page 55: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidaderetençãoaudiçãosegurançadisponibilidadecontinuidadepersonalizaçãotolerância a falhaconfiabilidade

Thursday, 27 June 13

Page 56: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidaderetençãoaudiçãosegurançadisponibilidadecontinuidadepersonalizaçãotolerância a falhaconfiabilidade

integridade de dados

Thursday, 27 June 13

Page 57: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidaderetençãoaudiçãosegurançadisponibilidadecontinuidadepersonalizaçãotolerância a falhaconfiabilidade

integridade de dados

localicação

Thursday, 27 June 13

Page 58: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidaderetençãoaudiçãosegurançadisponibilidadecontinuidadepersonalizaçãotolerância a falhaconfiabilidade

integridade de dados

localicaçãoajuda

Thursday, 27 June 13

Page 59: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidaderetençãoaudiçãosegurançadisponibilidadecontinuidadepersonalizaçãotolerância a falhaconfiabilidade

integridade de dados

localicaçãoajudalegal

Thursday, 27 June 13

Page 60: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidaderetençãoaudiçãosegurançadisponibilidadecontinuidadepersonalizaçãotolerância a falhaconfiabilidade

integridade de dados

localicaçãoajudalegal

localização

Thursday, 27 June 13

Page 61: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidaderetençãoaudiçãosegurançadisponibilidadecontinuidadepersonalizaçãotolerância a falhaconfiabilidade

integridade de dados

localicaçãoajudalegal

localizaçãoperformance

Thursday, 27 June 13

Page 62: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidaderetençãoaudiçãosegurançadisponibilidadecontinuidadepersonalizaçãotolerância a falhaconfiabilidade

integridade de dados

localicaçãoajudalegal

localizaçãoperformance

escalabilidade

Thursday, 27 June 13

Page 63: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

acessibilidaderetençãoaudiçãosegurançadisponibilidadecontinuidadepersonalizaçãotolerância a falhaconfiabilidade

integridade de dados

localicaçãoajudalegal

localizaçãoperformance

escalabilidadeusabilidade

Thursday, 27 June 13

Page 64: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

É MUITA COISA!

HTTP://WWW.FLICKR.COM/PHOTOS/JMW125/4630264860Thursday, 27 June 13

Page 65: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Como incorporar?

Thursday, 27 June 13

Page 66: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

É mais difícil lidar de uma só vez ao invés de pagar pouco a pouco

Thursday, 27 June 13

Page 67: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Thursday, 27 June 13

Page 68: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Decida com a equipe e o cliente quais os principais

Thursday, 27 June 13

Page 69: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Thursday, 27 June 13

Page 70: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Thursday, 27 June 13

Page 71: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Escalabilidade

Performance

Segurança

Thursday, 27 June 13

Page 72: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Risco?

Impacto?

Nível de entendimento?

Thursday, 27 June 13

Page 73: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Thursday, 27 June 13

Page 74: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Decida com a equipe e o cliente como acompanhar

Thursday, 27 June 13

Page 75: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Capture e priorize histórias com base no risco e impacto

Thursday, 27 June 13

Page 76: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Avalie padrões como critérios de aceitação por história

Thursday, 27 June 13

Page 77: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Use métricas de acompanhamento

Thursday, 27 June 13

Page 78: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Tempo de resposta ideal: < 20msExemplo:

Thursday, 27 June 13

Page 79: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Tempo de resposta ideal: < 20ms

Média? Mediana?

Exemplo:

Thursday, 27 June 13

Page 80: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Tempo de resposta ideal: < 20ms

Média? Mediana? 99 percentil

Exemplo:

Thursday, 27 June 13

Page 81: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Tempo de resposta ideal: < 20ms

Média? Mediana?

Para tudo?

99 percentil

Exemplo:

Thursday, 27 June 13

Page 82: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Tempo de resposta ideal: < 20ms

Média? Mediana?

Para tudo?

99 percentil

Pro que importa

Exemplo:

Thursday, 27 June 13

Page 83: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Tempo de resposta ideal: < 20ms

Média? Mediana?

Para tudo?

Quanto custa se passar?

99 percentil

Pro que importa

Exemplo:

Thursday, 27 June 13

Page 84: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Inclua testes automatizados na pipeline de entrega

Thursday, 27 June 13

Page 85: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Exemplos:

Thursday, 27 June 13

Page 86: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Testes de Performance

Exemplos:

Thursday, 27 June 13

Page 87: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Testes de Performance

Testes de Carga

Exemplos:

Thursday, 27 June 13

Page 88: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Testes de Performance

Testes de Carga

Testes de Stress

Exemplos:

Thursday, 27 June 13

Page 89: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Testes de Performance

Testes de Carga

Testes de Stress

Exemplos:

Testes de Usabilidade

Thursday, 27 June 13

Page 90: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Testes de Performance

Testes de Carga

Testes de Stress

Exemplos:

Testes de Usabilidade

Teste de Longevidade

Thursday, 27 June 13

Page 91: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Incorpore feedback e aprendizado de produção

Thursday, 27 June 13

Page 92: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Monitore, monitore, monitore

Thursday, 27 June 13

Page 93: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Início Durante Depois

Ensaie cenários esperados

Thursday, 27 June 13

Page 94: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

E quando não fiz isso?

Thursday, 27 June 13

Page 95: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

HTTP://BIT.LY/MANAGE-TECH-DEBTThursday, 27 June 13

Page 96: Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvimento de software

Perguntas?Danilo Sato@dtsato - www.dtsato.com

Thursday, 27 June 13