Pular para o conteúdo

QA de acessibilidade: cotidiano e curiosidades

Testes de acessibilidade são parte integrante da disciplina de qualidade de software.

Entretanto, a forma de atuação e ferramentas são bem diferentes dos outros perfis de testes.

Neste artigo, irei mostrar os desafios, oportunidades e curiosidades que enfrentamos todos os dias.

Além disso, vou dar algumas dicas bônus, vamos lá?


Quais as diferenças de um QA de acessibilidade?

Nós QA’s de acessibilidade temos algumas diferenças em comparação com outros QA’s. Irei listar algumas importantes.

Base de conhecimento

Diferentemente de outros analistas de qualidade, nós devemos conhecer muito bem as Diretrizes de Acessibilidade para Conteúdos na Web, ou WCAG.

Podemos também ter conhecimentos da CTFL, entretanto, o conhecimento especifico é muito mais valioso nesse aspecto.

Tecnologias especificas

Outro ponto importante são as tecnologias que envolvem nosso trabalho. Devemos ter um bom conhecimento de tecnologias assistivas, como por exemplo, o leitor de telas.

Outras tecnologias assistivas são importantes, todavia, o leitor de telas é mais utilizado devido a sua abrangência.

Como é nossa rotina?

Geralmente um QA de acessibilidade atua de forma cross. Ele não fica fixo em um única squad, assim, ele pode contribuir em contextos diferentes, mas sempre focado em garantir o acesso a todas as pessoas.

Como validamos acessibilidade?

Foto de Athena

Para validarmos acessibilidade usamos a WCAG , um documento da W3C, que contém as diretrizes de acessibilidade. Nossos testes são baseados em:

  • testes exploratórios;
  • testes manuais;
  • testes semi automatizados;
  • testes automatizados.

Os testes manuais são realizados com o auxílio de leitores de telas. Usavamos três leitores distintos:

  • NVDA: para testar páginas web;
  • Talkback para dispositivos Android;
  • VoiceOver para dispositivos iOS.

Formas de validação

Cada leitor de tela disponibiliza uma série de alternativas de navegação. As mais comuns são:

  • navegação por palavras;
  • navegação por TAB e gestos;
  • navegação por setas e gestos;
  • navegação por teclas e gestos de atalhos.

Vale uma ressalva para os testes automatizados, eles contribuem em cerca de 57% para previnir possíveis inconsistências de acessibilidade. Esse número é resultado de uma pesquisa da Deque Systems.

Existem diversas possibilidades de automação em testes de acessibilidade. Este é um outro tema que prometo surgir por aqui.

Habilidades são necessárias

Como um QA de acessibilidade, alguns pontos valem a pena ser destacados como:

  • boa comunicação verbal e escrita;
  • ser preciso;
  • entender os conceitos de agilidade;
  • ter flexibilidade;
  • conhecer sobre tecnologias assistivas;
  • uma noção de tecnologias web (HTML, CSS e JS).

Curiosidades

Essas características nos auxiliam e deixam nosso trabalho mais tranquilo em relação ao time que trabalhamos.

Existem algumas curiosidades bem interessantes sobre nossa atuação e como lidamos com os problemas do cotidiano:

  • trabalhamos em dupla;
  • utilizamos a todo tempo, tecnologias assistivas (leitores de tela);
  • realizamos testes de contraste;
  • o reporte de bugs de acessibilidade é um pouco diferente;
  • validamos a estrutura do HTML.

Outro fato legal, a acessibilidade é considerada desde a concepção do design. Isso contribui consideravelmente para nosso trabalho.

Bônus: Testes automatizados

Conclusão

Ser um QA de acessibilidade é olhar de uma forma mais humana e contribuir com o acesso igualitário para todas as pessoas, independente de sua deficiência.

E sair de uma zona de conforto e se importar pelo outro, talvez seja por isso que a acessibilidade me encanta tanto.

5 livros de acessibilidade digital

Recentemente a acessibilidade digital ganhou os holofotes devido a pandemia. Entretanto, ainda é um assunto muito imaturo para profissionais do meio digital.

Boa parcela deles necessitam de treinamentos e materiais de consulta.

Dessa forma, nada melhor do que recorrer a bons livros não é mesmo?

Pensando nisso, separei os 5 melhores livros de acessibilidade digital. Assim, você pode se aprofundar e destacar em uma área que cada vez mais cresce.

Existem vários livros sobre o tema, porém, escolhi somente 5 para indicar.

Você pode conferir uma lista completa na categoria de livros no Awesome A11y.

Vamos as indicações!

Garoto comemorando na arquibancada de um time de futebol. Ele está vestido com uma blusa azul e boné. Gesticula com as mãos vibrando e dizendo "Sim, vamos lá"

Acessibilidade na web

Autor: Reinaldo Ferraz

A leitura é bem tranquila e prazerosa, Reinaldo consegue unir a teoria e prática.

Escrevi uma resenha sobre o livro onde conto todos os aspectos e minhas impressões.

Além disso, a obra traz diversas barreiras de acessos e as principais soluções para corrigí-las.


GAIA: Um Guia de Recomendações Sobre Design Digital Inclusivo para Pessoas com Autismo

Autor: Talita Pagani

GAIA é um guia de recomendações sobre design digital inclusivo para pessoas com autismo traz, ele contém diretrizes sobre como desenvolver websites e aplicativos mais acessíveis a pessoas com Transtorno do Espectro do Autismo.

A obra busca equalizar aspectos psicopedagógicos sobre o autismo, mais conhecidos por profissionais de educação e saúde, com requisitos tecnológicos para desenvolver soluções acessíveis, domínio dos profissionais de tecnologia.


Inclusive Design Patterns

Autor: Heydon Pickering

Podemos não perceber, mas, construímos sites inacessíveis o tempo todo. Porém, não é por falta de cuidado ou talento – é uma questão de fazer as coisas da maneira errada.

O livro explora como podemos criar interfaces acessíveis sem esforço extra – e quais padrões de design de front-end podemos usar para criar experiências inclusivas.


Agile Accessibility Handbook

Autor: Dylan Barrel

A proposta desse livro é como um guia de consulta rápida para: orientar, estimular e aconselhar profissionais que querem implementar acessibilidade dentro das organizações.

Barrel, traz uma abordagem clara e objetiva para alcançar esse pontos. Não encontrei dificuldade quanto a leitura.

Outro ponto importante é a junção de agilidade com a acessibilidade, no curso da leitura podemos identificar que são temas extremamente compatíveis e possíveis de viverem em harmonia.

O e-book é disponibilizado gratuitamente pela Deque System.


Accessibility for Everyone

Autor: Laura Kalbag

Você torna a web mais inclusiva para todos, em qualquer lugar, quando projeta tendo em mente a acessibilidade. Deixe Laura Kalbag guiá-lo através do panorama da acessibilidade: entenda os desafios da deficiência e deficiência; obter um controle sobre leis e diretrizes importantes; e aprender como planejar, avaliar e testar design acessível.

Aproveite as ferramentas e técnicas, como redação clara, IA bem estruturada, HTML significativo e design inteligente, para criar um conjunto sólido de melhores práticas. Quer você seja novo no campo ou um profissional experiente, certifique-se de seguir o caminho do design com acessibilidade.

Conclusão

Acredito que, esses livros irão te ajudar bastante no crescimento profissional de acessibilidade. Vale lembra que, acessibilidade é uma disciplina viva e evolui constantemente.

O maior inimigo do conhecimento não é a ignorância, é a ilusão do conhecimento
Stephen Hawking

Acessibilidade para iniciantes


Importante

Este artigo foi originalmente escrito por Karina Chow e traduzido e adaptado por mim. Houve a autorização da autora para realizar a tradução.


No mundo atual da computação ubíqua e no desejo de todo o setor de melhorar a diversidade e inclusão de empresas e produtos, não há mais uma desculpa para não investir em acessibilidade na web. Dito isso, começar a acessibilidade na web pode ser uma tarefa difícil. É difícil saber por onde começar e o que você pode fazer agora para melhorar seu produto!

Quando eu estava começando, estava muito confusa e sentia que estava constantemente pesquisando definições no Google. Felizmente para mim, eu tinha uma colega que era muito qualificado e respondeu implacavelmente a muitas das minhas perguntas. Agora, se você me permitir, gostaria de ser seu colega e apresentar uma introdução abrangente à acessibilidade na web.

Se você trabalha com produtos e gostaria de defender a acessibilidade na web, mas não sabe por onde começar, este é o guia para você!

Se você – ou a liderança da sua empresa – ainda precisa ser convencido de por que vale a pena gastar tempo ou dinheiro em acessibilidade, recomendo a leitura do guia sobre Como convencer a liderança da empresa a se preocupar com a acessibilidade.

O que é acessibilidade web?

Ser acessível significa que sites, ferramentas e tecnologias são projetados e desenvolvidos para que pessoas com deficiência possam usá-los. Dizemos que deve ser P.O.U.R .: Perceptível, Operável, Compreensível e Robusto. Voltaremos ao que tudo isso significa mais profundamente em um momento!

O que é a11y?

Existem onze letras entre o A e Y na palavra accessibility, então as pessoas começaram a abreviá-la como a11y. Tem a vantagem adicional de se parecer com a palavra aliado, por isso as pessoas às vezes a usam como tal. Na maioria das vezes, ouço as pessoas dizerem em voz alta como “a-eleven-y”, mas nesse ponto você também pode dizer “acessibilidade”!

A palavra a11y é o termo usado em inglës para 'accessibility'

Fonte: The A11y Project

Quem define o que é acessível ou não?

As Diretrizes de Acessibilidade de Conteúdo da Web (WCAG) são o norte quando se trata em medir quão acessível o seu produto digital é. Elas foram criadas pelo  World Wide Web Consortium (W3C), o mesmo grupo que define os padrões web para interatividade, internacionalização, segurança, computação mobile e muito mais. Estes são os padrões internacionais que todos os nossos navegadores seguem.

No contexto americano, se você receber uma ação judicial da ADA, muitas vezes será citada que seu site não está em conformidade com a WCAG como evidência objetiva de sua falta de acessibilidade.

No Brasil, temos a Lei Brasileira de Inclusão, ou LBI, que regulamenta as questões que envolvem acessibilidade no contexto digital.

Como as pessoas podem tentar interagir com meu site?

Assim como a conformidade com HIPAA é um padrão em constante mudança conforme o setor de saúde e a Internet se expandem, a conformidade com WCAG também está sempre evoluindo e não está confinada a uma pequena lista de TODOs do tipo definir e esquecer. Uma equipe não pode “resolver” a acessibilidade em uma empresa; em vez disso, eles devem se comprometer a lidar com isso continuamente.

O padrão WCAG mais recente (no momento da redação deste artigo em 2021) é WCAG 2.1. A WCAG é medida com três níveis de conformidade, de A (mais baixo), AA, a AAA (mais alto). Para medir a acessibilidade do seu site, você mede o quão compatível ele é com qualquer um desses níveis WCAG.

“Conformidade WCAG 2.1 AA” significa “Precisamos aderir ao padrão WCAG 2.1, com conformidade duplo A”

Por exemplo, para mídia baseada em tempo, aqui estão alguns exemplos das diferenças entre os níveis de conformidade:

  • A – “Conformidade mínima” – Legendas para vídeo/áudio pré-gravado, alternativas fornecidas para vídeo/áudio pré-gravado (por exemplo, transcrições);
  • AA – “Conformidade aceitável” – Tudo em A legendas para vídeo/áudio ao vivo, narrações adicionais fornecidas durante o vídeo pré-gravado;
  • AAA – “Optimal Compliance” – Tudo em AA e interpretação em linguagem de sinais para vídeo, narrações mais detalhadas fornecidas durante e em pausas para vídeo pré-gravado, transcrições ao vivo
    Ao estabelecer metas de acessibilidade, pode ser aconselhável definir o nível de conformidade que você gostaria de atender, para que todos que trabalham no projeto possam trabalhar para a mesma meta.

Se você não sabe qual nível de conformidade seguir, a conformidade WCAG 2.1 AA é considerada aceitável e cobrirá a grande maioria dos casos de uso.

Quais são os diferentes tipos de deficiência?

Ao projetar seu produto para a web, você provavelmente está sempre imaginando uma pessoa com um teclado e um mouse. No entanto, diferentes tipos de deficiência proíbem as pessoas de interagir com seu produto dessa maneira tradicional.

Com quais ferramentas as pessoas podem acessar a internet?

As deficiências mais comumente consideradas são as deficiências visuais, mas existem muitas outras categorias, todas as quais você deve considerar ao tornar seu produto acessível:

  • Visual – cegueira, daltonismo, baixa visão, glaucoma;
  • Audição – surdez, deficiência auditiva;
  • Motora – Controle de motor fino limitado;
  • Cognitiva – Focalização difícil, dificuldades de aprendizagem;
  • Convulsões.

Como devo considerá-los ao testar meu produto digital?

Diferentes tipos de deficiências ditam como você pode acessar e interagir com os sites. Uma lista com algumas alternativas populares:

  • Teclado
    Algumas pessoas não utilizam o mouse somente o teclado. Isso é comum entre pessoas com deficiências motoras que não conseguem operar os movimentos finos que um mouse exige.
  • Leitores de tela
    Tecnologia assistiva que lê o que está na tela, mais comumente usada por pessoas com cegueira ou baixa visão. Normalmente operado usando apenas um teclado.
  • Zoom do Browser (idealmente, suporte até 200%)
    Pessoas com deficiência visual podem usar o recurso de zoom em seus navegadores para compreender melhor o texto e ver as imagens.
  • Estilos customizados
    Pessoas com baixa visão ou daltonismo podem ter suas próprias folhas de estilo personalizadas para ajustar estilos como tamanho e cor da fonte

Como aprendo a usar um leitor de tela?

Muitas pessoas veem “acessibilidade” e imediatamente consideram isso “uso do leitor de tela”. O fato é que você não precisa aprender a usar um leitor de tela para tornar seu produto acessível. As diretrizes WCAG são detalhadas o suficiente para que você possa simplesmente segui-las e usar a navegação do teclado para testar a maioria das coisas. E, como aprendemos acima, há muitas maneiras de um usuário usar seu site, além de um leitor de tela.

Dito isso, pessoalmente acho útil aprender a usar um leitor de tela porque ele pode ajudar a desenvolver empatia em você pelo que os usuários que os usam passam e pode ajudar a identificar fluxos de produtos insatisfatórios. As diretrizes podem ensiná-lo a marcar seu HTML corretamente e dar bons conselhos sobre como projetar com acessibilidade em mente, mas nada ilustra verdadeiramente como seu produto pode ser confuso do que ouvir seu conteúdo lido em voz alta em uma ordem sem sentido. Para esse propósito, eu gosto de recomendar que as pessoas pelo menos tentem aprender o básico.

Existem muitas ferramentas interessantes online para ensinar a proficiência básica do leitor de tela. Eu recomendaria este guia Codecademy sobre como inicializar um leitor de tela pela primeira vez. Dependendo de qual leitor de tela você usa, também há guias para cada um individualmente. O VoiceOver do Mac OSX tem muita documentação e também há este glossário de comandos que é útil. O JAWS é muito popular para Windows e também tem uma boa lista de comandos.

Depois de aprender um pouco, você pode praticar suas coisas neste divertido guia prático.

Os sites devem ser P.O.U.R

Vamos circular todo o caminho de volta à nossa declaração inicial. De acordo com as WCAG, existem 4 Princípios da Acessibilidade que todo produto deveria aderir a:

  1. Perceptível — as informações precisam estar disponíveis para pelo menos um sentido (visão, audição, tato);
  2. Operável — um usuário deve ser capaz de realizar todas as ações da interface (ou seja, com um teclado);
  3. Compreensível — um usuário deve entender o idioma em uma página e como operá-lo;
  4. Robusto — diferentes agentes de usuário, incluindo tecnologias assistivas, o conteúdo deve ser capaz de acessar todo o conteúdo.

O principal objetivo dos entusiastas de acessibilidade é atingir todos os quatro itens para todos os tipos de deficiência e tipos de dispositivos de entrada. Conforme mencionado anteriormente, existem muitos tipos de deficiência e mais dispositivos de entrada estão sendo inventados o tempo todo, então é uma missão para toda a vida, em vez de um objetivo único.

Espero que você se sinta um pouco menos assustado com o mundo da acessibilidade na web. Gostaria de agradecer a Jenna Lee, aquela colega que me ensinou praticamente tudo o que sei.

Fique atento para artigos futuros sobre como incorporar o trabalho de acessibilidade em seus ciclos de vida de produto, bem como instruções mais acionáveis sobre o que fazer em suas bases de código. Desejo-lhe boa sorte e obrigado pelo seu interesse em ser um defensor da acessibilidade!

Recursos adicionais

Gostaria de aprender ainda mais? Aqui estão alguns ótimos recursos:

  • Google’s A11ycasts, uma série de vídeos ensinando o básico de acessibilidade pelo time de desenvolvimento da Google;
  • WCAG 2.1 Guidelines, versão atual das diretrizes de acessibilidade;
  • WebAIM, muita informação de acessibilidade e até mesmo treinamentos de certificação;
  • Awesome A11y, uma lista com recursos sobre acessibilidade;
  • ANDI, uma ferramenta de teste de acessibilidade automatizada para executar em suas páginas da web;
  • Lighthouse, uma ferramenta automatizada para SEO, acessibilidade e desempenho;
  • The A11y Project, educação sobre como fazer designs acessíveis;
  • Mozilla’s a11y documentation, documentação sobre a11y fácil de compreender.

Como construir um LinkedIn campeão


O LinkedIn talvez seja a maior rede social corporativa da atualidade. A plataforma cresce exponencialmente e agrega bons recursos.

Saber utilizar ela de forma estratégica pode render boas oportunidades de trabalho.

Nesse artigo, vou compartilhar 5 dicas que podem melhor seu posicionamento na rede.

Vamos lá?


O primeiro passo para criar um perfil campeão no LinkedIn é usar o Social Selling Index.

O que é o Social Selling Index?

Basicamente é uma ferramenta que auxilia o posicionamento do seu perfil na rede.

Através dela, conseguimos identificar oportunidades de melhorias, como por exemplo:

  • localizar pessoas certas;
  • interagir oferecendo ideias para uma boa discussão;
  • criar relacionamentos.

Os componentes da sua pontuação variam de acordo com seu perfil.

Cada usuário na rede tem uma pontuação, a partir dela, seu posicionamento é definido. Para auxiliar na pontuação perfeita, o LinkedIn conta com o Social Selling Index, que é um índice de posicionamento do seu perfil.

Usando o Social Selling Index

Para utilizá-lo basta selecionar o botão “Get your score free”, conforme a imagem abaixo:

Ferramenta do Linkedin que avalia suas estatísticas. Nela existe um botão com o rótulo "Get your score free"

O resultado do meu score, no momento da escrita desse artigo, foi:

Diversos gráficos relacionados ao Social Selling Index.- primeiro gráfico é meu posicionamento no setor de TI, estou em 6% dos principais perfis;
- segundo gráfico minha pontuação 62 em 100;
Gráficos do Social Selling Index

No meu caso , o Linkedin recomendou melhorar três aspectos:

  • localizar pessoas certas;
  • interagir oferecendo ideias para uma boa discussão;
  • criar relacionamentos.

A partiri disso, vou modificar meu perfil com as recomendações que achei mais relevante.

Identidade visual consistente

A máxima “uma imagem vale mais que mil palavras” nesse contexto vale muito. Ter uma identidade visual consistente é extremamente importante.

Sua identidade visual deve conter os seguintes pontos:

  • autenticidade;
  • profissionalismo;
  • responsabilidade.

Opte por fotos que focam seu rosto, com um fundo colorido ou que faça contraste com sua foto. Caso você não tenha noção sobre o tema existe um serviço bem interessante o Profile Picture Maker.

Ele gera diversos formatos para fotos de perfil, o resultado é como, por exemplo:

Percebo duas vantagens nesse serviço, Além de ser gratuito irá deixar sua foto na rede muito mais apresentável e profissional.


Resumo profissional

O resumo profissional é sua porta de entrada, então devemos caprichar nele. Uma das dicas mais interessantes é ser sucinto e conciso, vale também escrever algumas coisas para chamar atenção dos recrutadores. O meu resumo está assim:

Sou um desenvolvedor com foco em qualidade de software e acessibilidade digital. Adoro trabalhar em equipe com projetos desafiadores e criativos que mudam a vida das pessoas.

Como desenvolvedor, procuro sempre as melhores práticas para um código funcional e otimizado, gosto de experimentar novas tecnologias e processos que possam melhorar o desenvolvimento.

No meu tempo livre me dedico em compartilhar conhecimento com a comunidade através de palestras, podcasts, meetups, posts.

Além disso, utilizo algumas palavras-chaves como: desenvolvedor, qualidade de software, acessibilidade digital.

Seu resumo profissional, deve responder algumas perguntas, como:

  • cargo que gostaria de ocupar? (Desenvolvedor);
  • qual o seu foco/objetivo? (foco em qualidade de software);
  • sua dinâmica de trabalho? (trabalho em equipe e projetos desafiadores).

Experiências profissionais

A etapa de experiências profissionais é o fator mais importante, então devemos caprichar nelas. Eu uso uma fórmula que funciona muito bem.

Fórmula para experiências profissionais

  • Breve resumo da empresa
  • Descrição da sua função
  • O que você se envolveu na empresa?
  • Projeto mais importante que atuou
  • Tecnologias utilizadas.

Vamos analisar a minha experiência na Monetizze, por exemplo:

Escrevendo uma experiência profissional arrasadora

Suas experiências profissionais devem conter

Breve resumo da empresa
A Monetizze é uma plataforma para pagamento online que oferece segurança e ferramentas de métricas e marketing para comercializar produtos na Internet.

Descrição da função
Como Analista de Qualidade era responsável por garantir a qualidade do produto Membertizze, onde atuei por cerca de 1 ano e meio. Contribuindo de forma significativa para a agilidade do time.

O que você se envolveu na empresa?

  • Participação ativa nos comitês de Qualidade e Engenharia de Software, fomentando discussões e soluções para nossos problemas diários;
  • Auxilei o time de DevOps na construção de pipelines para integração contínua, seguindo a pirâmide de testes;
  • Escrevi testes automatizados utilizando Javascript para testar a camada de interface (UI) da aplicação com Cypress;
  • Escrevi testes automatizados para validar a acessibilidade da aplicação;
  • Testes com tecnologias assistivas, com o leitor de tela: NVDA;
  • Suporte ao desenvolvedores no processo de Code Review e práticas relacionadas a garantia da qualidade;
  • Contribuo com time também na resolução de alguns bugs codificando;
  • Ministrei diversos treinamentos internos sobre qualidade de software, desenvolvimento e soft skills;
  • Fomento sempre a cultura de qualidade em momentos oportunos.

Projeto mais importante que participou

Ganho de 80% na perfomance dos testes de serviços (API) na integração contínua, com essa
otimização reduzimos drasticamente o tempo de execução na pipeline.

Ferramentas utilizadas:

  • Docker;
  • Vue.js
  • Cypress;
  • CucumberJS;
  • Gherkin;
  • AccessMonitor;
  • NVDA;
  • AXE;
  • Jest;
  • PHPUnit;

Outras ferramentas:
GitlabCI, Jira, AWS, New Relic, Laravel.

As informações da sua experiência profissional devem ser relevantes, nada de texto pra encher linguiça.

Competências e recomendações

Essa sessão é muito importante, pois irá mostrar ao recrutador algumas habilidades técnicas.

Minha dica, analise as competências e recomendações que façam sentido para seu perfil. Caso existam competências repetidas mantenha a que tem maior pontuação, o mesmo se aplica para as recomendações.

Dica Bônus: Certificados e cursos

É muito comum no Linkedin, postarmos certificados e cursos, visto que, comprova novas competências e demonstrar novas competências. Porém, o Linkedin parece uma chuva de certificados, me lembrando desse meme.

A minha dica nesse sentido é: publique certificados que façam sentido e que chamem atenção, por exemplo:

  • certificação oficiais como (AWS, ISTQB);
  • cursos relevantes que tenham notoriedade.

Outros cursos e certificados, como participacao de um webinar, lives, meetups e eventos geralmente anexo na sessão de Certificados sem publicar na minha timeline.

Procuro deixar minha timeline bem limpa com conteúdo relevante.

Outra dica muito boa é compartilhar conteúdo, fiz uma publicação no Linkedin sobre “Os mitos da Qualidade de Software” que simplesmente viralizou, ele teve um alcance de 8.261 visualizações.

Conclusão

Quando obtive esses resultados, percebi como o LinkedIn é uma ferramenta poderosa. Ele já me rendeu diversas entrevistas, oportunidades e amizades.

E você está esperando o quê para se destacar profissionalmente?

Acessibilidade e critérios de aceite: o quê eles tem um comum?

Como QA, somos responsáveis por garantir a qualidade do software.

Uma das etapas mais importantes é a análise dos critérios de aceite.

Essa etapa consiste em analisar, validar e verificar os artefatos de cada estória.

Um dos aliados aos critérios de aceite é a acessibilidade. Neste artigo, vamos explorar a sua relação.

Recapitulando, o que é acessibilidade na web?

Antes de mais nada, devemos recapitular o que é acessibilidade na web.

Acessibilidade na web é a capacidade de pessoas com deficiência poderem consumir produtos e serviços na internet de forma autônoma, promovendo assim, liberdade de escolha e qualidade de vida.

Foi dada a largada de mais uma sprint, como um bom analista de qualidade você inicia os preparativos para manter seu trabalho de forma organizada, clara e documentada.

Assim, fazemos uma análise dos requisitos de cadas estória que será trabalhada durante a sprint. Percebemos que o produto não está conformidade as diretrizes de acessibilidade e, por consequencia, quebra um dos pilares da qualidade descritos na ISO 25010.

O que fazer nessa situação?

Conceito de Critério de Aceite

Os critérios de aceitação são as condições que um produto de software deve atender para ser aceito por um usuário, cliente ou outro sistema. Eles são exclusivos para cada história de usuário e definem o comportamento do recurso da perspectiva do usuário final. Critérios de aceitação bem escritos ajudam a evitar resultados inesperados no final de um estágio de desenvolvimento e garantem que todas as partes interessadas e usuários fiquem satisfeitos com o que obtêm[1].

Podemos utilizar os critérios de aceite das mais variadas formas, como, por exemplo:

  • Orientado a cenários (Gherkin);
  • Checklist;
  • Formatos personalizados.

Garantindo a acessibilidade nos critérios

Num ambiente ágil, ocorre a famosa reunião dos Three Amigos, onde PO, QA e líder técnico fazem o refinamento de funcionalidades que são candidatas para uma sprint.

O objetivo dessa reunião e ter uma visão do mesmo problema em aspectos diferentes. O negócio exige determinados aspectos, enquanto o líder técnico apresenta as possibilidades de desenvolvimento. Em contrapartida, nós analistas de qualidade visamos criticar o produto e levantar cenários de testes funcionais e não funcionais.

Neste momento, podemos elencar critérios de acessibilidade. Para exercitarmos, iremos pensar num componente de interface bem comum no cotidiano: uma janela modal.

Escrevendo a estória de usuário

Como descrição da atividade o PO levou para o refinamento os seguintes critérios:

Na aplicação da ACME Corportarion, no fluxo de Compras devemos exibir um botão onde o usuário poderá incluir seu endereço de entrega. Ao clicar nesse botão deve ser exibido uma modal para o preenchimento do seu endereço.

A estória de usuário foi definida, de acordo, com a especificação abaixo:

Como usuário gostaria quando selecionar "Add Delivery Address" seja exibido um formulário para preencher meu endereço.

Em um brainstorming, foi levantado o protótipo que tem o objetivo de concluir a jornada de cadastro de endereço.

Uma janela modal, nela existem informações sobre o endereço do usuário

Exemplo de modal

Pensando de forma analítica, costumo prestar atenção nos detalhes especificamente quando temos palavras mágicas como: alta retenção, jornada de compras. Sabendo da importância disso, comecei imaginar alguns critérios.

Definindo os critérios

Aparentemente é uma tela inocente de fácil implementação, porém, como diz o ditado “o diabo mora nos detalhes”. Ela servirá de um bom exercício para identificarmos critérios de aceite voltados para a acessibilidade especificamente.

Comportamentos

Devemos prever os comportamentos desse componente, por exemplo:

  • quais são as teclas que exibem e ocultam a modal?
  • quais teclas de atalho deverão ser mapeadas?
  • como será a apresentação desse componente na tela?
  • existirá algum elemento que receberá o foco quando ela for exibida?

Com esses questionamentos, poderiamos refinar os critérios conforme abaixo.

[ACME-123] Cadastro de Endereço de Entrega

Como usuário gostaria quando selecionar "Add Delivery Address" seja exibido um formulário para preencher meu endereço.

Critérios de Aceite

A modal deve ocupar 100% da tela, permitindo o conteúdo ser mais fácil de ler e ser exibido em telas pequenas;
Deve ser seguido o mapeamento das teclas de acordo com a tabela Suporte ao teclado
Deve ser exibida a modal através do clique no botão "Add Delivery Address";
Deve ser exibida a modal através do teclado no botão "Add Delivery Address":
deve ser aberta com a tecla ENTER;
deve ser aberta com a tecla SPACE.
A navegação deve ser somente na modal;
Não deve focar outros elementos que não estão no contexto da modal;
O foco inicial deve ser no primeiro input do formulário;
A janela modal não precisa de uma descrição extra (aria-describedy);
O botão de "Cancel" fecha a modal e retornar o foco para o botão "Add Delivery Address";
A tecla ESC deve fechar a modal e retornar o foco para o botão "Add Delivery Address";

Suporte do teclado

TeclaFuncionalidade
TabMove o foco para o próximo elemento focalizável dentro da modal.
Quando o foco está no último elemento focalizável da modal, move o foco para o primeiro elemento focalizável da modal.
Shift + TabMove o foco para o elemento focalizável anterior dentro da modal.
Quando o foco está no primeiro elemento focalizável da modal, move o foco para o último elemento focalizável na modal.
ESCFecha a modal.

Conclusão

Dessa forma, conseguimos prevenir possíveis inconsistências relacionadas a acessibilidade, garantindo assim, o cumprimento das diretrizes de acessibilidade.

Note que fizemos um bom apanhando de critérios e fomos, de certa forma, bem minuciosos. A dica é começar a exercitar isso aos poucos.

E você já conseguiu contribuir com algum critério de aceite, pensando em acessibilidade?

Referências

8 Princípios da Qualidade de Software

Construir um software envolve diversas áreas: comunicação, marketing, equipe de negócios, design, experiência do usuário, equipe técnica e tantos outros envolvidos.

Mas afinal, o que seria construir um software com qualidade?

Essa pergunta pode ter diversas respostas, entretanto, a ISO/IEC 25010 foi criada para ser um alicerce quando falamos em construção de software.

Com ela, podemos avaliar a qualidade de um sistema a partir de princípios que foram desenhados. Cada princípio analisa o software de um ponto de vista.

Nesse artigo, iremos navegar por cada princípio e suas subcaractéristicas e como eles podem nos auxiliar.

Vamos lá?

Adequação funcional

Mulher segurando uma prancheta e olhando em um quadro branco os requisitos do sistema.
Image by gpointstudio on Freepik

Todo sistema deve permitir os usuários realizarem tarefas específicas. Essa habilidade é chamada de adequação funcional.

Para isso acontecer devemos criar funcionalidades, que esperam alguma ação do usuário para respondê-lo, de acordo com seu pedido.

Eficiência de desempenho

Image by rawpixel.com on Freepik

Acredito que todo mundo detesta um software lento. Particularmente eu odeio, fico impaciente e dependendo da situação acabo desinstalando ou deixo de lado.

Esse princípio reflete justamente esse aspecto. O software deve ser capaz de responder em tempo hábil, sem deixar o usuário esperando.

Outros pontos importantes, como por exemplo: a utilização de recursos e sua capacidade.

Compatibilidade

Image by macrovector on Freepik

Na minha opinião todo software deveria ser compatível, mas sei que isso não é uma realidade. Principalmente em consoles de video-games, onde existe uma briga de mercado gigante nesse aspecto.

Uma das empresas que mais me irritava nesse sentido era a Microsoft. Bastava lançar uma nova versão do Excel, por exemplo, e a versão antiga já não era compatível com a nova.

Penso que, era uma estratégia de venda para atualizar os softwares, entretanto, nem sempre era viável realizá-la.

A interoperabilidade é a capacidade de executar o software independente da estrutura. Essa caractéristica é muito importante, pois, permite alçancar um número maior de pessoas.

Usabilidade

Usabilidade é a habilidade dos usuários aprenderem de forma simples com o minimo esforço.

Alguns itens necessitam de serem cumpridos para terem uma boa usabilidade.

Como por exemplo:

  • Reconhecimento de adequação;
  • Aprendizagem;
  • Operabilidade;
  • Proteção contra erros do usuário;
  • Estética da interface do usuário;
  • Acessibilidade.

Todas essas subcaracterísticas são importantes, entretanto, quero destacar a acessibilidade.

A acessibilidade é extremamente relevante para a usabilidade. Não temos um software usável sem acessibilidade, ou vice-versa.

Contudo, vale sempre lembrar:

Entregar um software com boa usabilidade e não pensar em acessibilidade é um grande erro.

Confiabilidade

Mão de uma pessoa avaliando o software com nota máxima, devido a sua confiabilidade
Image by DilokaStudio on Freepik

Confiabilidade diz a respeito do sucesso de seu software. Ninguém gosta de utilizar algo que não seja confiável.

Ainda mais, com os escandâlos de vazamento de dados recentes, se previnir e usar ferramentas adequadas é essencial.

Comecei a abandonar algumas redes sociais e outros serviços por causa desse princípio.

Quando falamos de confiabilidade, alguns itens são importantes de citar, como por exemplo:

  • Maturidade: mede a frequencia de defeitos apresentados;
  • Disponibilidade: mede o quanto o software encontra-se disponível para os usuários;
  • Tolerância a falhas: como o software reage em situação de falhas;
  • Recuperabilidade: capacidade de recuperar de um incidenten.

Segurança

Além da confiabilidade a segurança, no meu ponto de vista, é um dos pontos mais importantes. Afinal, ninguém quer utilizar algo inseguro, não é mesmo?

Sempre quando falamos de segurança, esse conceito vem acompanhado de outros poucos conhecidos, como:

  • Confidencialidade: somente sistemas/pessoas autorizadas acessam um recurso;
  • Integridade: não permite sistemas/pessoas não autorizadas acessam um recurso;
  • Rastreabilidade de uso: rastreia ações do usuário, a fim de, comprovar suas ações;
  • Autenticidade: identifica se você é quem alega ser.

Capacidade de Manutenção

Computador sendo atualizado na sua tela existe a frase: Software Update
Imagem de rawpixel.com no Freepik

Para qualquer sistema a manutenção é muito importante. Quem nunca sofreu com as atualizações do Windows, que atire a primeira pedra. 😂

Mesmo que isso seja incomôdo, é necessário para prevenir ataques maliciosos e permitir que o sistema mantenha-se “sadio”.

Quando a manutenção é realizada, podemos avaliar os seguintes pontos:

  • Modularidade;
  • Reutilização;
  • Analisabilidade;
  • Modificabilidade;
  • Testabilidade.

Portabilidade

Image by pch.vector on Freepik

Sempre quando ouço a palavra portabilidade, penso logo, em operadoras de telefonia.

Antigamente, quando precisavamos trocar de uma operadora para outra, era bem complicado. Não tinhamos a capacidade de se adaptar ao novo contexto.

Muitas vezes, essa migração era instável e a capacidade de substituição era praticamente impossível.

Mas tudo teve um final feliz, com o avanço da tecnologia hoje é possível realizar isso de forma quase instantânea.

Com a portabilidade, hoje temos a autonomia de poder decidir quando trocar para um serviço que nos atenda melhor.

  • Adaptabilidade;
  • Instalabilidade;
  • Capacidade de substituição.

Esses são os princípios que norteiam o trabalho e tipos de testes de um QA. Além disso, existem 21 qualidades que todo QA deve ter.

Bônus: indicação de livros

Para concluir gostaria de deixar algumas indicações de leitura. As três indicações são valiosas bases para o conhecimento em testes de software. Entretanto, não são as únicas gosto bastante delas.

Conclusão

Concluíndo, os princípios de qualidade de software levaram você ter uma visão muito mais ampla sobre qualidade.

E conseguirá te fato medir a qualidade baseada em itens sólidos.

5 motivos para não automatizar testes em linguagem diferente do time

Automatizar cenários de teste é uma parte integrante de nossa atuação como profissionais focados em qualidade. Em um contexto ágil é de extrema importância, pois, contribui para promover e permear a qualidade no projeto.

A ideia por trás dos testes automatizados e simples: otimizar nosso tempo. Naturalmente existe uma tendência em aumentar a cobertura de testes automatizados, para focarmos em cenários mais complexos e de alto risco.

Em contrapartida, existe uma grande decisão ha ser tomada: qual ferramenta escolher, o que automatizar e como o time pode colaborar.

Neste artigo irei elencar alguns pontos para uma escolha consciente de ferramentas para automatizar nossos testes.

Pontes ao invés de muros

Deixa eu contar uma história, quando estava fazendo o TSPI do Júlio de Lima, chegamos a uma etapa do treinamento onde ele aborda sobre a prática de testes automatizados.

Empolgado com a aula, decidi aplicar no time que atuo. Nós decidimos que nossa stack de desenvolvimento seria duas linguagens: PHP e Javascript e decidi automatizar em Ruby, pois estava estudando e gostando da linguagem.

Lembro de ter comentado com o Júlio, no princípio ficou contente pela minha conquista, mas me colocou uma pulga atrás da orelha com a seguinte pergunta:

“Pulis, porque não automatizar na linguagem que o time usa?”

Começamos a conversar e me explicou detalhadamente que tudo depende do contexto. Colocar uma tecnologia desconhecida ao time iria criar mais uma barreira do que promover pontes.

O que eu fiz? Abandonei o Ruby e iniciei alguns experimentos com algumas bibliotecas nas linguagens do time.

Stack de desenvolvimento

Uma das coisas mais importantes que devemos considerar e a stack que o time definiu, tratando-se em um contexto ágil a responsabilidade de testar a aplicação não é somente do QA, mas compartilhada com time.

Isto promove o empoderamento dos integrantes do time e aumenta a consciência sobre o aspecto da qualidade também, aumento o sentimento de “dono do produto”.

As autoras Janet Gregory e Lisa Crispin, dizem muito a respeito dessa responsabilidade do time em testar também. Essa citação exemplifica o conceito:

O coração do teste ágil envolve toda a equipe no teste e construção de qualidade em nosso produto.

Para conseguirmos alcançar esse objetivo devemos ter uma consciência de qualidade, onde todos contribuem e são donos produto.

Devemos atuar colaborativamente, ou seja, a linguagem de programação do projeto deve ser a mesma, pois assim, todos possam “conversar a mesma língua”.

Desenvolver testes automatizados em uma linguagem sem nenhum contexto, irá segregar os profissionais de qualidade e afastar eles do código da aplicação e gerar outros desdobramentos que iremos pontuar a seguir.

Separei cinco pontos nocivos, sobre automatizar cenários de teste em uma linguagem diferente ao que o time utiliza.

1 – Curva de aprendizado

Ao usarmos uma linguagem diferente, a curva de aprendizado pode ser muito maior para os profisisonais de qualidade. Cito alguns pontos que podem ser nocivos:

  • tempo de aprendizagem;
  • aprendizado do ecossistema em torno da linguagem;
  • falta de alguém como referencial no time;
  • falta de suporte;
  • segregação implícita dos QAs com o resto do time.

2 – Baixa produtividade

Outro ponto importantíssimo é a produtividade. Em um mundo onde tudo tem urgência, ter foco e produtividade é essencial para o sucesso dos produtos e/ou serviços que desenvolvemos.

Com uma nova linguagem em mãos a produtividade pode cair consideravelmente, pois, o profissional não teria domínio e nem expertise na mesma.

Outro ponto que deveríamos levar em consideração é que a etapa de testes não deveria ser um gargalho para finalizar uma versão do produto ou ser algo impeditivo.

Até o profissão de qualidade compreender a linguagem e pegar a “maldade” demanda tempo e em muitos cenários nosso tempo é bem escasso.

3 – Segregação dos testes

Ao usar essa abordagem a responsabilidade do teste fica inteiramente na mão do QA, reforçando uma má prática no contexto ágil. Essa má prática pode ocasionar em:

  • desconforto do time em relação a segregação;
  • antipatia entre devs e analistas de qualidade;
  • falta de engajamento do time;
  • separação por silos, indo contra os princípios da agilidade;
  • falta de colaboração do time nos testes;
  • base de conhecimento somente nas mãos de pessoas específicas.

4 – Maior esforço para manutenção

O esforço em manutenção iria aumentar consideravelmente. Numa squad com cinco desenvolvedores e um QA, todos poderiam dar manutenção e prover novas melhorias.

No cenário desenhado anteriorment a carga de manutenção dos scripts automatizados ficaria somente nas mãos do QA, podendo assim, trazer uma quantidade de trabalho muito grande e gerando gargalhos em suas atividades.

Outro ponto importante é a sensação de não ter tempo para melhorar os scripts, engana-se quem pensa que scripts de testes uma vez desenvolvidos nunca mais são tocados.

Assim como, um código de uma aplicação scripts automatizados são passíveis de refatoração e manutenção eles são parte integrante do código da aplicação.

5 – Pipelines isoladas

A etapa de integração e entrega contínua é uma das mais importantes para um time ágil. Geralmente são construídas pipelines para realizar essas atividades.

Quando automatizamos em uma linguagem que não é falada pelo o time, criamos uma série de possíveis problemas, tais como:

  • maior custo de infraestrutura;
  • arquitetura da pipeline pode ficar bastante complexa;
  • construção de uma nova estrutura de pipeline;
  • time desconhece a linguagem não podendo contribuir;
  • aumento de trabalho para os DevOps.

Considerações finais

Automatizar testes é uma etapa importante de um processo de qualidade, mas deve ser alinhado com o time e sempre procurar essa responsabilidade entre os membros.

Ao segregar os testes essa responsabilidade cai nas mãos de uma única pessoa, trazendo diversos problemas como os que foram citados anteriormente.

Devemos sempre tentar optar por linguagens falada por todos, pois, linguagens de programação também são uma forma de comunicação.

Acredito que a regra de ouro nesse assunto seria tudo depende do seu contexto.

Agora é com você:

Quais são os seus pensamentos sobre o assunto? Gostaria muito de saber sua opinião.

Referências

6 maiores erros de acessibilidade digital

Neste post, mergulharemos nos 6 maiores erros de acessibilidade digital que empresas e desenvolvedores cometem com frequência, sem sequer perceber. Através da conscientização e compreensão desses erros, podemos dar os primeiros passos rumo a uma web mais inclusiva, onde pessoas com deficiência ou necessidades específicas possam navegar e interagir de forma independente.

Ao explorar esses erros, examinaremos os desafios que eles representam e destacaremos soluções práticas para corrigi-los. Afinal, o objetivo final é capacitar todos os usuários a aproveitarem plenamente os benefícios do mundo digital, independentemente de suas limitações.

Então, vamos começar essa jornada para tornar a web mais inclusiva para todos.

Sumário

1. Texto com baixo contraste

hd wallpaper, colorful, painting-2468874.jpg

Diariamente sofro na pele com isso, para quem não me acompanha ou está chegando por agora no blog, eu possuo ceratocone, uma doença na córnea que aumenta o grau exponencialmente. Algumas combinações de cores e informações ficam bastante confusas para mim.

Para amenizar esse problema eu adotei algumas práticas:

  • dar zoom em textos com baixo contraste;
  • mudo as cores dos textos para uma com maior contraste via Inspetor de elementos do navegador;
  • usar tema escuro.

Guia sobre contraste

Para aplicarmos as correções de maneira efetiva, devemos consultar as recomendações da WCAG. Abaixo as regras que se aplicam ao contraste:

Ferramentas para verificação

Atualmente utilizo o Accessible Colors, é uma boa alternativa para realizar esse tipo de teste.

A grande vantagem dele é seu feedback claro e objetivo, como por exemplo:

Resultado de uma avalição das cores: #ccc para textos do tamanho de fonte 16px e background do site #fff.

Após realizar o teste, podemos abrir os bugs. Uma curiosidade a maioria desses erros conseguimos resolver com poucas linhas de CSS.

No Awesome A11y você pode encontrar diversas ferramentas para validar contraste.

2. Imagens sem texto alternativo

Campo de descricao alternativa do WordPress

Segundo uma pesquisa do Web AIM, em uma amostragem de 1 milhão de páginas iniciais dos sites mais populares do mundo. Foram encontradas 38,426,701 imagens, ou 38.4% por página inicial em média.

Cerca de 31.3% de todas as páginas iniciais (12 por página em média) não possuíam texto alternativo (sem contar o alt="") que é uma forma válida. Mais da metade das imagens sem texto alternativo.

Fundo degradê roxo com um homem negro vestindo um terno cinza e blusa salmão. Ele está colocando as mãos na cabeça se sentido surpreso. Escrito em branco ao centro "Oh, lord, Jesus. What!?"

Existe uma discussão ao redor do atributo <strong>alt</strong>, Reinaldo Ferraz escreveu um artigo, onde demonstra os benefícios do atributo. Além de contribuir para a acessibilidade ele também ajuda no SEO das páginas.

De forma prática a correção desse erro é uma das mais banais, basta preencher o atributo alt com a descrição correta da imagem.

Ex:

<img src="/imagens/duck.png" alt="Pato de borracha amarelo olhando fixamente" />

Traduzi um guia super completo de como escrever um texto alternativo.

3. Links vazios

Esse erro é bem comum, entretanto não deveria ser tão encontrado nas páginas web.

Frequentemente encontramos em ícones ou botões de ação sem nenhuma ação, não é mesmo? Para entendermos isso, vamos consultar a definição do propósito do elemento <strong><a></strong>:

O elemento <strong><em><a></em></strong> em HTML (ou elemento âncora), com o atributo href cria-se um hiperligação nas páginas web, arquivos, endereços de e-mails, ligações na mesma página ou endereços na URL. O conteúdo dentro de cada <a> precisa indicar o destino do link.

Usar sem definir o conteúdo textual descumpre a especificação do HTML e a recomendação 2.4.4 – Finalidade do link (em contexto) [A] – WCAG 2.0 (em inglês).

Exemplo prático

Temos um link que inclui um ícone de rede social, mas não possuí um texto para descrever a ação. Dessa forma, os leitores de tela irão ler: “Link”.

<a href="https://twitter.com/obrunopulis">
  <i class="fa fa-twitter"></i>
</a>

Qualquer validador de acessibilidade vai encontrar esse problema, pois o elemento <strong><em><a></em></strong> encontra-se sem nenhum conteúdo textual, descumprindo seu propósito.

Dessa forma, os leitores de tela não conseguem identificar o link em questão.

Uma possível solução, seria adicionar o texto visualmente ao lado dos ícones, pois eles nem sempre são tão claros para os usuários quanto pensamos.

No caso dos ícones sociais, acho que é bastante claro o que são e o padrão é usado com bastante frequência. Nesse caso, você pode adicionar conteúdo visualmente oculto.

Corrigindo

Queremos adicionar texto para ser lido por um leitor de tela e ter certeza de que o conteúdo adicionado via CSS não seja lido.

<a href="https://twitter.com/obrunopulis">
  <span class="fa fa-twitter" aria-hidden="true"></span>
  <span class="sr-only">Perfil de Bruno Pulis no twitter</span>
</a>

Com essa abordagem os validadores de acessibilidade não encontrarão nenhum problema, pois o link contém um texto oculto que informa o seu destino.

Observação importante

Nem sempre ter um conteúdo oculto é uma boa solução. É preciso haver uma compreensão visual de qual é o conteúdo e os links para usuários videntes, bem como para usuários de leitores de tela.

4. Labels de formulários ausentes

Dos 4,2 milhões de formulário identificados na pesquisa do WebAIM, 55% não estavam usando o elemento <strong><label></strong>, <strong><em>aria-label</em></strong> ou <strong><em>aria-labelledby</em></strong>.

Páginas com pelo menos um controle de formulário sem rótulo tiveram em média mais 43 erros detectáveis do que páginas sem nenhum erro de rótulo.

Com efeito, é preocupante o descuido pela escrita do HTML, a grande maioria dos problemas são originados de uma escrita descuidada.

A saber, formulários são um dos componentes mais importantes para web, podemos dizer que depois do elemento <a> esse componente é o mais importante.

Com essas violações também ferem a recomendação 3.3.2 – Rótulos e instruções [A] – WCAG 2.0 – (em inglês).

Uma das coisas que percebo muito com formulários é o uso inadequado do placeholder, a maioria dos designers e desenvolvedores utilizam o atributo placeholder com a função de um <label>.

Exemplo incorreto

<form>
  <input type="email" placeholder="insira o seu melhor e-mail" />
</form>

O atributo placeholder é uma string que fornece uma breve dica ao usuário quanto ao tipo de informação esperado no campo. Deve ser uma palavra ou frase curta que demonstre o tipo de dados esperado, ao invés de uma mensagem explicativa.

Nota: O atributo placeholder não é semanticamente útil como outras maneiras de explicar seu formulário e pode causar problemas técnicos inesperados com seu conteúdo.

Vale lembrar, para rotular um formulário o elemento correto para ser usado é o label

Exemplo correto

<form>
  <label for="email">E-mail</label>
  <input type="email" id="email" placeholder="insira o seu melhor e-mail" />
</form>

5. Botões vazios

Semelhantemente com os links vazios, os botões vazios querem dizer que o elemento não possuí uma informação textual definida. Quando navegamos no botão, um texto descritivo deve ser apresentado ao leitor de tela para indicar qual tipo de função que o botão possuí.

Além disso, essa violação fere duas recomendações da WCAG:

O exemplo a seguir, demonstra o problema de um botão sem informação textual.

<button type="submit">
  <svg id="search" viewBox="0 0 16 16.9">
    <path d="M16, 15.7L11.3,11C12.4,9.8,13, 8.2,13,6.5C13"></path>
  </svg>
</button>

Qualquer validador de acessibilidade notificará a inconsistência da violação das guidelines citadas acima, Para eles não existe um conteúdo textual definido, uma abordagem para correção seria inserir o elemento <title> no SVG, pois ele garante que SVGs sejam acessíveis. Scott O’Hara escreveu um artigo imagens acessíveis e SVGS (em inglês).

<button type="submit">
  <svg
    id="search"
    role="img"
    aria-describedby="searchIcon"
    viewBox="0 0 16 16.9"
  >
    <title id="searchIcon">Search</title>
    <path d="M16, 15.7L11.3,11C12.4,9.8,13, 8.2,13,6.5C13"></path>
  </svg>
</button>

6. HTML sem idioma definido

A linguagem no documento HTML na maioria das vezes é ignorada ou esquecida. Já fiz diversas avaliações em sites com conteúdos totalmente em português e a definição do idioma em inglês.

Usuários de leitores de tela, utilizam o sintetizador de voz embutido nos softwares para ler o conteúdo. Dessa forma, uma das primeiras coisas que o sintetizador de voz faz é identificar o idioma atribuído a página.

Além disso, é configurado a entonação, ritmo e sotaque da língua definida no documento. Em contrapartida, se não encontrar um idioma ele define o inglês como padrão.

Além dessa confusão, ele descumpre a recomendação 3.1.1 – Idioma da página [A]- WCAG 2.0 (em inglês)

Corrigindo

<!DOCTYPE html>
<html lang="pt-br">
  ...
</html>

Você também pode, explorar mais sobre o atributo lang em outro artigo que escrevi.

Conclusão

Percorremos todos os bugs, entretanto fica nítido que precisamos de conscientização para resolver esses problemas.

Além disso, os desenvolvedores devem aprender de maneira correta os padrões web e HTML semântico. Dessa forma, grande parte desses problemas vão desaparecer.

Em conclusão, reciclar nosso conhecimento é primordial

E para reflexão gostaria de deixar uma frase do Tim Berners-Lee:

O poder da Web está na sua universalidade. O acesso por todas as pessoas, não obstante a sua incapacidade, é um aspecto essencial.

Referências

Minas Test Conference 20

Introdução

Sábado dia 22 de agosto, aconteceu o Minas Test Conference um evento focado na área de qualidade de software.

Eu conhecia o evento há um tempo, porém, nunca tinha participado de nenhuma edição. Foi o segundo evento que participei, desde que, mudei da área de desenvolvimento para qualidade.

Inicialmente ele seria presencial, mas devido à pandemia global os organizadores decidiram fazer o MTC em casa. Uma aposta que deu super certo, nesse artigo irei analisar alguns pontos como:

  • plataforma escolhida;
  • análise de cada palestra;
  • considerações finais.

Plataforma escolhida

A organização escolheu o Hopin para transmitir o evento. Minha experiência com a plataforma foi super tranquila sem muitas complicações.

A impressão que tive foi de estar num evento presencial, se o intuito da Hopin foi promover esse tipo de experiência as pessoas conseguiram com maestria.

Porém, nem tudo são flores eu particularmente estava com grande expectativa para ver uma palestra em específico que não pode ser transmitida devido à falta de acessibilidade, também não encontrei um recurso para ativar legendas na transmissão.

Mesmo com esse contratempo, a organização se preocupou tornar o evento mais inclusivo, contratando assim, dois interpretes de libras que fizeram um trabalho com grande maestria, gostaria de parabenizá-los pelo trabalho.

Análise das palestras

Boas práticas para automação de testes

Essa palestra infelizmente eu não acompanhei desde o início, porém, do momento que comecei a acompanhar até o final me agradou bastante. Leonardo e Ramses com maestria tocaram em pontos importantíssimos sobre fundamentos da engenharia de software e como podemos aplicá-los no nosso cotidiano.

https://youtu.be/Ab5tEM3YG1c

O mindset de consultor – O que as empresas buscam nos profissionais de qualidade de software?

Marcelo, veio com uma abordagem mais holística sobre a carreia de consultor de qualidade, conseguiu explorar diversos pontos do nosso cotidiano que não são tocados com frequencia, tais como: mudança de uma mentalidade, compreensão dos fundamentos, certificações.

Abriu meus olhos para enxergar como alguém que contribui além do código ou de técnicas. Ficou claro, que podemos contribuir com a gestão de uma forma mais assertiva. A lição que tirei dessa palestra foi: saia fora da caixa.

https://youtu.be/UK2UDdcEhvM

Test Driven Development: uma ferramenta para controlar a ansiedade

Quando eu vi o título dessa palestra fiquei curios imaginando como o Estevão iria combinar TDD com ansiedade e para minha surpresa conseguiu. Com muita tranquilidade explicou o conceito teórico da metodologia TDD e sua aplicabilidade.

Mostrou as duas escolas sobre a metodologia e deixou ainda duas referências de livros interessantes:

Além disso, fez um hands-on em como aplicar o TDD em uma funcionalidade. Deixou bem claro em como a metodologia pode contribuir para termos maior controle e previsibilidade de funcionalidades que porventura iremos desenvolver.

https://youtu.be/F-smhcndyig

A importância da automação e como fazer isso utilizando o Testcafe

Taís de forma bem direta e prática mostrou uma ferramenta de automação que ainda desconhecia o TestCafe, me lembrou do meu amigo Cypress.

Ainda fez um hands-on e funcionou tudo de forma perfeita.

Queria dar meus parabéns para a organização e a todos que apoiaram a Tais num momento de nervosismo, o espirito de comunidade e empatia falou muito mais alto e isso e louvável, poucos eventos têm essa sutileza com os palestrantes.

https://youtu.be/R4I1L3SkDwg

Reduzindo o escopo da analise de resultados de testes de carga usando Machine Learning

Júlio, com seu vasto conhecimento e maestria dignos de um JEDI, exemplificou conceitos como machine learning, testes de carga com uma didática impecável, quem o acompanha sabe que estou falando.

A palestra se assemelhava a uma aula de faculdade daquelas que todos gostam. Além de explorar esses pontos, também deixou insights sobre novas possibilidades em categorizar inconsistências com aprendizado de máquina.

Um mundo de possibilidades foi aberto e diversas pessoas surtaram com novas possibilidades. E como sempre o Júlio, nos deixa reflexivos sobre estudar os fundamentos, aliar o fundamento teórico a prática.

https://youtu.be/xPI9RWIrSz4

Automação de testes utilizando braço robô

Saímos com o cérebro fritando da apresentação do Júlio, para vermos algo surreal: uma automação em um braço robô!

Luíz Lohn, trouxe uma abordagem de testes que nunca pensei que poderia ser feita. A ideia era demonstrar como essa abordagem poderia contribuir para automação de testes para o cenário que ele vivencia.

De forma clara e exemplificando os códigos do arduíno e Ruby, desmistificou a magia e vimos que como foi viável e não ser tão complicado essa automação.

Abriu a minha mente para novas abordagens de testes automatizados para Internet das coisas. Mais uma palestra que veio surpreendeu todo mundo.

Shit Happens e algoritmos mudam

Marina apesar de não ser uma pessoa desenvolvedora explicou diversos pontos relacionados a desenvolvimento de software. Desde a evolução das redes sociais até como os algoritmos e APIs influenciam nosso cotidiano.

Comentou também sobre o uso indevido de informações dos usuários nas redes sociais, como no caso da Cambriga Analytica’s, pontuou também, como podemos usar de modo seguro as redes sociais e como as empresas estão se preparando para entrar em conformidade com a Lei Geral de Proteção de Dados (LGPD).

Foi uma palestra diferente, com um olhar de um outro ângulo. O ensinamento que permeiou foi que podemos absorver muito com o marketing e o monitoramento de redes sociais para atuarmos de uma forma melhor.

https://youtu.be/z_sPUMSJv6E

Tabuleiro acessível: o diferencial da inclusão a partir de jogos analógicos

Essa palestra uniu duas coisas que gosto: acessibilidade e rpg. Paola e Rafael, mostraram como jogos analógicos podem promover a inclusão das pessoas com deficiência em algo que não tomamos como um direito: a diversao.

Demonstraram diversos jogos que podem ser inclusivos e como as pessoas interagem com eles. Gostei bastante do jogo de RPG.

A palestra traz uma mensagem muito importante, quais são nossos esforços para incluir pessoas com deficiência na diversão?

Será que as empresas pensam e veem eles como possíveis consumidores de jogos de entretenimento sejam eles analógicos ou digitais?

Sai dela pensativo em como podemos contribuir para o avanço de um projeto tão bonito como esse.

https://youtu.be/0s_ZrV5cV6g

AWS for Testers – Como se beneficiar dos serviços da AWS para analisar possíveis bugs

Isabel, veio com uma abordagem interessante: como nos que testamos aplicações podemos contribuir em arquiteturas AWS?

Demonstrou total conhecimento e clareza das informações explicando passo a passo do modelo da arquitetura proposta. Confesso que muita coisa desconhecia, apesar de trabalhar num aplicação que possui os recursos na AWS.

Trouxe exemplos onde o QA possuía acesso restrito em algumas partes da arquitetura e soluções de como garantir a qualidade nesse sentido.

Além da AWS, também demonstrou como realizar requisições de API usando o Postman.

Sai da apresentação, pensando que segunda-feira quero descobrir qual a arquitetura da AWS que usamos e como posso contribuir para a melhoria contínua do produto.

https://youtu.be/i_WHRK7I7Fs

From zero to hero implantando processos ágeis de qualidade

A apresentação do Alan foi cirúrgica e agregou muita informação ao meu contexto. Em um evento sobre qualidade esperava-se uma palestra como essa que focaria na qualidade do processo.

Pontou muito bem as diferenças entre os modelos cascata e ágil, o mais interessante foi o passo a passo que apresentou sobre a metodologia ágil.

Salientou que esse modelo pode ser adaptativo e variar de acordo com o contexto. O que ficou claro é que processos bem definidos contribuí para a empresa como um todo. E deixou uma frase que me marcou

Baixa produtividade é um problema de gestão.

https://youtu.be/INW8TkkC4pE

QA OPS: O QA colaborando em um time DevOps

A abordagem de Mayara foi super interessante, pois mostrou um caso de sucesso que ela vivenciou. Iniciou sua apresentação exemplificando os conceitos de Dev Ops e QA Ops e como pode contribuir para aumentar a qualidade em todo o ciclo do desenvolvimento.

O mais interessante para mim, foi a forma como foi abordado o tema. A explicação de cada etapa de uma pipeline e como ela conseguiu otimizar isso para o time.

Sanou diversas dúvidas que tinha sobre o assunto e segunda-feira também vou começar a vasculhar as pipelines para promover algumas melhorias.

https://youtu.be/PzlA9WfV24w

Considerações finais

Fiquei bastante satisfeito de modo geral, todo o conteúdo de alto nível e bem elaborado. A organização do evento e palestras curtas, porém, objetivas.

A curadoria de conteúdo, a divulgação tudo muito bem planejado, os sorteios com brindes bem interessantes como licenças do IntelliJ, Kindles e um computador.

Parabéns a todos os envolvidos que proporcionaram para nós um evento acolhedor, rico e bastante interativo. Aguarde 2021, pois com certeza o MTC vem pra arrebentar.

RSVPed

Vocabulário de um QA

Este artigo é uma tradução e adaptação livre do artigo “QA Testing Vocabulary” que pode ser acessado no blog. O autor foi notificado e houve permissão para realizar a tradução.

Se você trabalha em um time onde exista um QA, com certeza já se deparou com ele dizendo vários jargões técnicos, não é mesmo?

Pensando nisso, foi criado esse mini dicionário para entendermos cada jargão e dar sua devida importância.

Quando o time aumenta a compreensão desse vocabulário, fica mais fácil de entender cada etapa e alinhar as expectativas de cada parte. Então vamos lá?

Essa lista deve ajudá-lo a ter uma compreensão básica do vocabulário que um QA usa no seu cotidiano.

Tipos de teste

  • Teste manual:  significa testar o aplicativo ou site manualmente. Por exemplo, abrir um navegador e navegar manualmente para diferentes seções de um site, procurando por problemas de experiência do usuário ou bugs. (Para mais informações, consulte O que é teste manual?;
  • Teste automatizado significa usar uma linguagem de programação (como Java) para escrever scripts que irão navegar em um site ou aplicativo. Esses scripts podem gerar relatórios para problemas como links quebrados, texto ausente, etc. (para mais informações sobre as diferenças entre manual e automatizado, consulte Teste manual vs. automatizado;
  • Teste de API significa verificar a qualidade/precisão de uma API. As APIs enviam solicitações e respostas de/para servidores remotos.
  • O teste de desempenho:  envolve verificar o tempo de resposta de um aplicativo ou site em cenários de uso típicos;
  • O teste de carga: é muito semelhante ao teste de desempenho, mas com ainda mais foco em encontrar o ponto exato em que um aplicativo ou site travaria, ou cairia.

Métodos de teste

  • O Teste de Aceitação do Usuário (UAT): significa fazer com que usuários reais testem o beta de seu aplicativo ou site e forneçam feedback;
  • Teste de acessibilidade  significa verificar se o aplicativo ou site é amigável para todas as pessoas. Por exemplo, verificar se os vídeos possuem legendas para pessoas com deficiência auditiva ou se as imagens têm descrições para pessoas com deficiência visual;
  • Teste de unidade (unitários): significa criar scripts automatizados para testar partes individuais do aplicativo ou código do site. Embora seja uma forma de teste, o teste de unidade geralmente é feito por desenvolvedores. O objetivo dos testes de unidade é garantir que cada área do código esteja funcionando corretamente;
  • Teste Ad-hoc: significa testar um aplicativo ou site sem seguir nenhum caso de teste específico. Em vez disso, o QA vasculhará o aplicativo à vontade, identificando quaisquer problemas que detectar durante o processo;
  • Teste exploratório: significa testar com a experiência e conhecimento existentes do aplicativo móvel ou site. Esse insight dá ao QA a capacidade de ter um envolvimento focado sem seguir casos de teste formais.

Testes básicos

Smoke test: é uma das formas mais rápidas/básicas de testar. Envolve fazer um teste simples dos principais recursos, geralmente logo antes do lançamento. O objetivo é verificar se alguma coisa “pega fogo”, por assim dizer.

Ele é usado como um backup para ser extremamente cauteloso quando não há tempo suficiente para o nível ideal de teste.

O smoke test é uma das frases mais comuns no vocabulário de um QA. Saiba mais em nosso artigo: O que é teste de fumaça?

Testes detalhados

O teste de regressão é muito mais completo do que o smoke test. Uma regressão envolve a verificação de todos os aspectos possíveis das features pré-existentes do aplicativo após a implantação de uma nova feature ou correção de bug. Isso é para garantir que as atualizações de código não prejudiquem nenhuma outra área do software;

Cross browser/cross-device  significa que o teste está sendo feito, ou um bug está ocorrendo, em vários navegadores de internet (como Safari, Chrome, Firefox, Internet Explorer, etc) ou vários dispositivos (Androids, iPhones, tablets, desktops, etc).

O teste entre navegadores/dispositivos é importante, pois muitos bugs estarão em um navegador ou dispositivo, mas não em outro.

Planejamento

Casos de teste são requisitos com etapas para testar se uma determinada parte do aplicativo ou site está funcionando corretamente. Se isso soar vago ou confuso, não se preocupe – temos uma explicação completa (com exemplos!) Em nossa postagem O que são casos de teste de controle de qualidade?

Test Suite é um conjunto de casos de teste. Por exemplo, você pode ter casos de teste para a seção de registro, a página inicial, a reprodução de vídeo, etc. Um conjunto de testes é uma planilha que consiste em todos esses diferentes casos de teste.

Sprint é um determinado período de tempo em um processo de QA Agile. Um sprint inclui um determinado número de tarefas que a equipe espera concluir no prazo (geralmente uma a duas semanas).

Antes do início de um Sprint, a equipe se reúne para o Planejamento do Sprint. Durante esta sessão, gerentes de produto, desenvolvedores e QA’s decidirão quais correções de bug ou features podem ser incluídos de forma realista no Sprint. Para saber mais sobre o processo de priorização, consulte Como priorizar correções de bugs.

Processo

Agile é um processo de desenvolvimento de software que envolve lançamentos regulares. Também envolve a atualização de requisitos em tempo real. Ao trabalhar com um processo Agile, é comum que novos lançamentos / atualizações sejam lançados a cada poucas semanas. Para saber mais, consulte nosso artigo sobre o Processo de controle de qualidade do Agile.

Os critérios de aceitação  são um conjunto de condições que devem ser atendidas para que um recurso seja considerado pronto para liberação. Com um processo ágil, as condições exatas podem mudar instantaneamente. Afinal, as equipes Agile giram em torno de novas informações ou ideias. No entanto, para considerar o recurso concluído, o conjunto final de critérios de aceitação deve ser atendido.

Por exemplo, aqui estão os critérios de aceitação para um recurso de mensagens:

  • Os usuários premium devem ser capazes de enviar mensagens a qualquer usuário de sua lista de amigos;
  • Todos os usuários devem ser capazes de bloquear qualquer usuário;
  • Os usuários administradores devem ser capazes de excluir uma mensagem;
  • Todos os usuários devem ter seções “caixa de entrada” e “enviado”.

Especificações (abreviação de especificações) são documentações ou recursos que descrevem como um aplicativo ou site deve se parecer ou se comportar. Por exemplo, um testador pode pedir “especificações de design” para se certificar de que as imagens e o layout correspondem às expectativas.

Os requisitos são essencialmente os mesmos que as “especificações” – documentação que detalha todas as informações sobre um recurso. Isso permite que os desenvolvedores criem e testem os detalhes corretos.

O Desenvolvimento Orientado a Comportamento usa uma linguagem chamada Gherkin para documentar os requisitos. Esses requisitos se tornam a base para testes automatizados. Gherkin usa um formato de “Dado, Então, Quando” que ajuda os membros da equipe menos técnica a entender o recurso.

Por exemplo:

Dado um usuário quiser postar em Facebook
Quando se digita a mensagem e clique em “publicar”
Então seus amigos podem ver o post

Usuários (ou “usuários finais”) são as pessoas que usam seu aplicativo ou site. Por exemplo, seus clientes ou clientes.

Lançamentos

MVP significa Mínimo Produto Viável. Para uma versão de um aplicativo ou site ser “MVP”, ela precisa atender aos critérios que a equipe decidiu ser o mínimo necessário para o lançamento.

Por exemplo, o proprietário de uma empresa pode decidir que uma seção de GPS de um aplicativo é um “recurso MVP”, o que significa que deve ser incluída mesmo para um lançamento suave. Eles também podem decidir que um recurso de vídeo é “Pós-MVP”, o que significa que pode ser adicionado após o lançamento inicial.

Candidato a lançamento (release)  é uma versão que está pronta para ser lançada ao público, assumindo que nenhum bug importante seja encontrado durante o teste.

Por exemplo, digamos que você queira que a próxima versão de seu aplicativo iOS apresente novo conteúdo. Você também deseja incluir uma correção de bug na seção “favoritos”. Os desenvolvedores enviarão um novo build ao QA como um “candidato a lançamento” assim que concluírem a atualização do conteúdo e a correção do bug. Se o QA encontrar algum bug significativo, o build não é mais um candidato a lançamento. Por outro lado, se o QA não encontrar nenhum bug notável, ele está pronto para ser lançado.

Código completo significa que os desenvolvedores concluíram a implementação da correção do bug ou do novo recurso. Isso significa que ele está pronto para o controle de qualidade ou estará em breve, quando o código for implantado. “Código completo” não significa que a nova versão não terá bugs. Na verdade, provavelmente vai! O trabalho do QA é verificar a validade e a qualidade assim que a primeira passagem do desenvolvedor for concluída.

Qualidade

Por exemplo, um site que leva dois minutos inteiros para carregar seria um bug bastante simples. Mas se uma empresa deseja que a cor de fundo seja azul e apareça como verde, isso também seria um bug (mesmo que não pareça ruim para os usuários).

Relatórios de bugs são formas formais de documentar problemas com um aplicativo ou site. Os relatórios de bugs são geralmente arquivados como ‘tickets’ em um sistema de gerenciamento de projeto como o Jira.

Para saber mais sobre relatórios de bugs e ver exemplos, confira nossa postagem sobre Melhores práticas para relatar bugs.

Showstopper é um bug absolutamente crítico. Se o controle de qualidade encontrar qualquer obstáculo em uma nova versão de um build de teste, ele não deve ser lançado ao público. Showstoppers são considerados prioridade para os desenvolvedores corrigirem – especialmente se forem encontrados em uma versão ao vivo.

Por exemplo, se um aplicativo móvel travar consistentemente sempre que os usuários se inscrevem, isso seria considerado um bug bloqueador.

Blocker é essencialmente a mesma coisa que showstopper (veja acima). Um bug bloqueador impede um novo lançamento.

Erros de casos extremos acontecem apenas em raras situações. Isso pode significar apenas em um sistema operacional ou dispositivo antigo, ou ocorrendo apenas 1 em 200 vezes. A priorização para casos extremos geralmente é baixa. Em muitos casos, os casos extremos ficarão permanentemente no backlog.

Por exemplo, digamos que 99,9% de seus usuários estejam no iOS versão 10 e superior. Um caso extremo pode ser um bug de formatação no iOS 9, que afetaria apenas 0,01% dos usuários.

Defeitos são problemas em um aplicativo ou site que não atendem aos critérios de aceitação (veja acima). Por exemplo, talvez um fundo tenha o tom errado de azul. Isso não pareceria necessariamente um “bug” para usuários reais. Mas porque não atende aos requisitos da empresa para o projeto, seria um “defeito”.

Hot Fix é uma correção de bug crítica que precisa ser lançada antes da próxima data de lançamento agendada.

Experiência do usuário se refere à qualidade da experiência e das interações que um usuário tem com um aplicativo ou site. Um aplicativo pode ter uma experiência ruim para o usuário sem ser explicitamente “bugado”.

Por exemplo, digamos que você tenha uma seção de registro em um aplicativo iOS. Talvez cada campo funcione corretamente e os usuários consigam salvar e registrar-se com sucesso. Mas se um usuário tiver que ir para uma nova tela sempre que terminar um campo (em vez de ter vários campos em uma página), isso seria uma experiência ruim para o usuário.

“Experiência do usuário” é um tópico importante no vocabulário de teste de controle de qualidade de qualquer pessoa. Para saber mais, consulte O que é experiência do usuário?

Feature  é um serviço ou funcionalidade em um aplicativo ou site. Por exemplo, poder ‘curtir’ tweets é um recurso do Twitter.

Você chegou ao final do nosso vocabulário de QA – parabéns!

Embora essas definições não sejam exaustivas, agora você conhece os termos mais comuns de um profissional de qualidade.

Acessibilidade Web

Introdução

Nesta revisão do livro “Acessibilidade na Web” de Reinaldo Ferraz, compartilho minhas impressões pessoais após concluir a leitura.

Como um tema relevante, a acessibilidade na web ainda é pouco explorada no mercado editorial brasileiro em comparação com o exterior.

No entanto, a obra de Ferraz se destaca entre os cinco livros que ele já publicou, oferecendo insights valiosos sobre o assunto. Descubra mais sobre essa leitura indispensável e confira também a publicação de Talita Pagani, uma referência no tema de acessibilidade.

Lançamento do livro

No dia 21 de março de 2020, Reinaldo Ferraz lançou pela Casa do Código, seu mais novo livro: Acessibilidade na Web: Boas práticas para construir sites e aplicações acessíveis.

Um livro completo para quem quer aventurar com acessibilidade web, o público alvo não é voltado somente para pessoas desenvolvedoras, mas também, útil para consultores, gestores, analista de negócio, produtores de conteúdo e analistas de marketing.

Organização do livro

De forma cronológica, a obra avança de forma linear e vai apronfundando-se ao decorrer dos capítulos, possuindo 15 capítulos.

Eles são sucintos e direto ao ponto, com linguagem acessível e clara. Reinaldo consegue te conduzir através da escrita sem enrolação.

Eu já tinha adquirido a versão digital na pré-venda por ser mais prático. Recentemente, após uma pausa por causa do Covid-19, voltaram com suas atividades para exemplares impressos, meu conselho é: comprem a versão impressa pois é uma referência e livros assim são ótimos para ter sempre por perto, além de auxiliar no estudo pessoal e profissional.

Os temas são específicos acompanhados explicações teóricas e práticas, li e reli a especificação de acessibilidade da W3C alguns exemplos são muitos genéricos, a compreensão muita das vezes fica confusa mas Reinaldo consegue alinhar as duas coisas de forma muito clara.

Teoria e prática

Após cada exemplo apresentando das teorias e práticas, é mostrado com clareza quem será beneficiado com essas recomendações.

Escrita

A escrita é bem tranquila, sem jargões muito técnicos e quando aparecem, Reinaldo tem todo o cuidado de exemplificar de maneira simples e objetiva. As imagens e gráficos são descritos com legendas dando contexto e compreensão. É uma leitura fluída e sem dificuldade de compreensão.

Curiosidade

No primeiro capítulo é uma verdadeira aula da web. Em um determinado ponto é contada a história da especificação da tag <img>, desde sua proposta até a inclusão do tão famoso atributo alt.

É bastante interessante sobre como a especificação de um elemento HTML, foi evoluindo e acompanhá-la, de certa forma, nos inclui nessa evolução.

Além disso, toda fundamentação teórica, possuí referências, no último capítulo é um guia das referências usadas para produzir a obra. Vale a pena verificar.

Mergulhando na acessibilidade

Após essa aula introdutória, Reinaldo nos convida a mergulhar em aspectos pouco falados no meio da comunidade web, como por exemplo, a relação das pessoas com deficiência e as tecnologias assistivas. Nesse ponto exemplifica muito bem e ainda traz recursos complementares como diversos plugins para serem usados na simulaçáo de alguma deficiência.

Explica com maestria os states, properties e roles da WAI-ARIA, em um guia bastante intuitivo e de simples compreensão.

Continuemos com o nosso passeio, além da apresentação das diretrizes de acessibilidade web a famosa WCAG é apresentado os níveis de conformidade e os princípios.

Eliminando barreiras

Reinaldo dedica cinco capítulos do livro para exemplificar a eliminação de barreiras de acesso:

  • na estrutura;
  • na navegação e interatividade;
  • no design;
  • na multimídia e conteúdo não textual.

Gerenciadores de conteúdo (CMS)

Reinaldo faz um comparativo com diversos gerenciadores de conteúdos, os famosos CMS, apontando suas vantagens e desvantagens. Depois, dicas essenciais de como incluir acessibilidade no processo de desenvolvimento de software.

Esse capítulo é bastante importante para gerentes de projetos e analista de negócios para compreenderem a importância da inclusão de todas as pessoas.

Inicia o capítulo com uma frase muito marcante:

Todo time deve estar envolvido com a acessibilidade. Deixar a acessibilidade a cargo de um único profissional pode criar gargalos e dificultar a comunicação entre os times. Se todos (designers, programadores, gestores e produtores de conteúdo) estiverem com a acessibilidade em mente durante suas atividades, a chance de o projeto contemplar mais recursos acessíveis é maior. [FERRAZ, 2020].

Nos capítulos seguintes é realizado uma pesquisa muito completa sobre algumas ferramentas de avaliação de acessibilidade automática, com seus prós e contras digno de montar um infográfico ou artigos sobre o tema.

Também há um capítulo exemplificando a Lei Brasileira de Inclusão (abre em uma nova janela), com os aspectos jurídicos que envolvem a acessibilidade no contexto digital e como se manter dentro da legislação vigente no nosso país.

E para fechar com chave de ouro, o último capítulo é uma aula de consciência ao acesso de como a Web vem tomando um caminho obscuro nas mãos de grandes corporações.

Tim Berners-Lee (abre em uma nova janela), vem alertando isso a um tempo em diversas entrevistas que concedeu sobre o tema. Sua argumentação é que a Web se perdeu do propósito original e que devemos torná-la novamente de todos e para todos.

Reinaldo para finalizar como um bom mestre jedi pontua uma frase que me marcou muito

Acessibilidade não é filantropia. É respeito pelas pessoas e por um mundo efetivamente justo em oportunidades para todos. [FERRAZ, 2020]

Outra frase bem marcante é:

Se o seu site não está pronto para receber todas as pessoas, o seu site é deficiente. [FERRAZ, 2020]

Conclusão

O livro é uma verdadeira aula de quem domina com maestria o assunto. Reinaldo consegue, destrinchar assuntos complexos em exemplos práticos e simples.

Se você tem curiosidade sobre o tema é ativista de acessibilidade assim como eu, essa deve ser sua bíblia, livro de cabeceira.

Se gestor que quer colocar seus produtos digitais em conformidade com as diretrizes de acessibilidade esse é um material que de fato irá ajudar bastante nessa caminhada.

Concluo essa review, incentivando você, leitor que compre e ajude a divulgar produções de livros nacionais, precisamos fomentar mais conteúdo relacionado sobre acessibilidade.

Patrocine publicações nacionais existe muita gente boa produzindo conteúdo em terras tupiniquis.

Seja um incentivador e não um detrator, compre e-books, livros, ajude a comunidade web a crescer e principalmente ajude a web ser de TUDO para TODOS.

Referências

  • Anúncio da publicação do livro de acessibilidade, 2020. Disponível em: Twitter Acesso em: 19 de julho de 2020;
  • Acessibilidade na Web: Boas práticas para construir sites e aplicações acessíveis, 2020. Disponível em: Livro disponível na Casa do Código Acesso em: 19 de julho de 2020;
  • Casa do Código, 2020. Disponível em : Casa do código Acesso em: 19 de julho de 2020;
  • Sobre Reinaldo Ferraz, 2020. Disponível em: Sobre Reinaldo Ferraz Acesso em: 19 de julho de 2020;
  • Como citar ebook, kindle e epub, 2020. Disponível em: Como citar ebook, kindle e epub Acesso em: 19 de julho de 2020;
  • Biografia de Tim Berners-Lee, 2020. Disponível em: Tim Berners-Lee Acesso em: 19 de julho de 2020;
  • Lei Brasileira de Inclusão, 2020. Disponível em: Lei Brasileira de inclusão Acesso em: 19 de julho de 2020.
Reviewed

PHPUnit: como otimizar a performance dos testes

Testes são uma das partes mais importantes na concepção de um produto digital. Através deles obtemos garantia que determinada funcionalidade cumpre com os requisitos e atende ao cliente de maneira satisfatória.

Para alcançar esse objetivo devemos ter em mente que a entrega dos testes deve ser a mais rápida possível. Com na pirâmide de testes, os unitários são rápidos, baratos e fáceis de implementar.

Subindo o nível na pirâmide o grau de complexidade aumenta e por consequência sua execução também.

Esse post irá cobrir três partes: a apresentação do problema, o uso do xdebug e configurações extras no PHP.

Esse post é a resolução de um problema que estava enfrentando no meu time. Nossos testes no backend estavam demorando cerca de 32 minutos para rodar uma suíte com 600 testes e aproximadamente 2000 asserções , confesso que estava me incomodando profundamente.

Segunda-feira iniciei um processo de investigação nos testes e o primeiro passo foi detectar os testes lentos. Mas como iria fazer isso?

Identificando os testes lentos

Pesquisando na web encontrei o artigo do Elton Minetto, onde ele apresenta um pacote chamado phpunit-speedtrap. No post do Elton ele explica passo a passo como configurar o speedtrap.

O speedtrap executa juntamente com os testes e ao final da execução exibe os 10 primeiros testes mais lentos. Com um ponto de partida, continuei a investigar e juntamente com os desenvolvedores descobrimos que alguns testes estavam com um gargalo muito grande.

Por enquanto esses testes ainda não foram refatorados, mas está no nosso radar em corrigí-los para melhorar a performance dos testes.

Logo após isso, questionei os desenvolvedores sobre outros pontos que poderiam estar afetando a execução dos testes, eles me informaram que poderia ser a extensão de debug do PHP, chamada Xdebug que vem habilitada com o framework de testes que utilizamos, o PHPUnit.

Xdebug

Meu próximo passo foi pesquisar referências na web sobre a possível lentidão dos testes relacionado ao Xdebug. Para minha sorte encontrei diversas informações a respeito que mostravam como desabilitar ou até mesmo criar filtros para melhorar a performance dos testes.

Tentei desabilitar a extensão do Xdebug no arquivo php.ini, localmente porém não tive sucesso. Eu sabia que poderia realizar esse tipo de teste, mas iria precisar de um devops para configurar essa opção no servidor.

Mais uma vez o Elton Minetto salvando a pátria. Dessa vez ele aborda em um artigo publicado em 2016, a relação da lentidão dos testes com o Xdebug, a título de comparação ele conta no artigo que possuía uma base de código que sem o Xdebug habilita terminava em 1.08 , ao habilitar o Xdebug transformou para 22.26 minutos.

Ou seja, deve um aumento significativo. Infelizmente, a opção que era apresentada no artigo não consegui realizar pois precisaria de instalar um novo pacote no servidor. 😭

Conhecendo o xdebug-filter

Seguindo o lema de ser brasileiro e não desistir nunca, persisti em buscar outras alternativas para resolver meu problema. Encontrei um artigo no próprio site do Xdebug, explicando sobre a relação da cobertura de código com o Xdebug.

Ele é frequentemente usado em combinação com PHP_CodeCoverage como parte padrão do PHPUnit. O PHPUnit atribuí uma coleção de cobertura de código para o Xdebug que por sua vez, inicia a cobertura do código por meio do método xdebug_start_code_coverage() e interrompe através do xdebug_stop_code_coverage().

Para cada teste ele utiliza o xdebug_get_code_coverage() para recuperar os resultados.

Sua saída principal é detalha quais linhas nos quais os arquivos foram “atingidos” durante a execução do código.

Usando o Xdebug para tais atividades podemos ter um impacto adicional no desempenho, pois ele irá certificar de algumas informações como:

  • analisar quais linhas de código possuem código executável;
  • quais linhas de código podem ser atingidas;
  • também podem instrumentar para descobrir quais ramificações;
  • caminhos em funções e métodos foram seguidos.

Filtros para o resgate

Desde a versão 2.6 do Xdebug é possível criar filtros para a cobertura de código. Com um filtro, podemos incluir através de uma whitelist caminhos e prefixos que podem ser executados e também é possível negar através de uma blacklist.

Um exemplo, seria informar ao PHPUnit para coletar informações somente da sua pasta src onde fica sua base de código e os outros arquivos ele iria desconsiderar, assim, dependências do Composer, arquivos de configuração seria descartados na cobertura do código.

Existem algumas formas de criar esse filtro, eu criei o filtro baseado nesse artigo. Com um filtro configurado corretamente podemos esperar um ganho de velocidade duas vezes maior.

Esses são alguns relatos de pessoas que usaram os filtros:

This is the effect on the unit test suite of @opencfp with/out xdebug filter. 44.39 vs. 15.34 seconds. I’d call that “much faster”. Great job @derickr!
(Integration tests were omitted) pic.twitter.com/LeNdaxBOOV

— Holger W🌞ltersdorf (@hollodotme) January 17, 2018

Without the filter 6 seconds
With the filter about 4.9 seconds

Anyway specifically you want me to beta test? 🙂

— Cees-Jan Kiewiet (@WyriHaximus) January 17, 2018

Antes de aplicar a técnica de filtros do Xdebug os testes estavam tinham uma execução de aproximadamente 32 minutos. 😱

Habilitando o filtro

Para criarmos o filtro basta utilizar dois comandos que irão reduzir drasticamente o tempo de execução dos testes.

O primeiro comando cria o arquivo xdebug-filter.php dentro do diretório build ele será gerado no diretório raiz da aplicação. Na minha pesquisa não verifiquei se podemos colocar ele em outro diretório.

# dump filter file
# Caso não tenha configurado globalmente o PHPUnit rode assim.
php vendor/bin/phpunit --dump-xdebug-filter build/xdebug-filter.php

# Configurado globalmente
phpunit --dump-xdebug-filter build/xdebug-filter.php

Após executar o comando do xdebug-filter sua saída é exatamente essa:

<?php
  declare(strict_types=1);

  if (!\function_exists('xdebug_set_filter')) {
    return;
  }

  \xdebug_set_filter(
    \XDEBUG_FILTER_CODE_COVERAGE,
    \XDEBUG_PATH_WHITELIST,
    ['seu-path-aqui']
  )

Executando os testes

Após a configuração iremos rodar nossa suíte de testes com o seguinte comando:

# Configuração local do PHPUnit
php vendor/bin/phpunit --prepend build/xdebug-filter.php --coverage-html build/coverage-report

# Configurado globalmente
phpunit --prepend build/xdebug-filter.php --coverage-html build/coverage-report

Com o arquivo do xdebug-filter iremos referenciá-lo nas configurações. Após aplicar as modificações do xdebug-filter, os testes executaram em 8 minutos.

Tive um ganho aproximadamente de 80% de execução! O processo agora está mais rápido e todo mundo feliz.

Dicas para o phpunit.xml

O arquivo phpunit.xml é o setup de configuração para suíte de testes que utilizam PHPUnit.

Vou mostrar alguns paramêtros que podem ser passados que irão melhorar a performance. Ele vem com uma série de paramêtros pré-configurados.

O primeiro paramêtro é o cacheResult="true", que permite o PHPUnit execute somente os testes que falharam anteriormente, com uma suíte grande testes isso é um ganho de tempo de resposta absurdo.

Podemos também usar os paramêtros stopOnFailure="true" que irá executar a suíte de testes até no momento que ela encontra alguma falha, bloqueando os restantes testes. O stopOnError="true" executa a suíte até encontrar algum erro bloqueando assim, a execução dos outros testes restantes.

O meu arquivo do phpunit.xml ficou da seguinte forma:

<?xml version="1.0" encoding="UTF-8">
  <phpunit
        backupGlobals="false"
        backupStaticAttributes="false"
        bootstrap="vendor/autoload.php"
        cacheResult="true"
        colors="true"
        convertErrorsToExceptions="true"
        convertNoticesToExceptions="true"
        convertWarningsToExceptions="true"
        processIsolation="false"
        stopOnFailure="false"
        stopOnError="false">
        <testsuites></testsuites>
        <testsuite name="Unit">
            <directory suffix="Test.php">./tests/Unit</directory>
        </testsuite>

        <testsuite name="Feature">
            <directory suffix="Test.php">./tests/Feature</directory>
        </testsuite>
    </testsuites>
    <filter>
      <whitelist addUncoveredFilesFromWhitelist="false" processUncoveredFilesFromWhitelist="true">
        <directory suffix=".php">./app</directory>
        <exclude>
          <file>./app/Modules/User/routes.php</file>
        </exclude>
      </whitelist>
    </filter>
</phpunit>

Conclusão

Ficou claro para mim que a curiosidade a gana para resolver esse problema foi o fator primordial, com isso tive vários aprendizados. Sempre seja curioso e tenta ao máximo melhorar as condições de trabalho do time.

Garantir a qualidade está também nos pequenos detalhes que podem refletir em grandes conquistas. Todas as referências de artigos que foram pesquisados estão logo abaixo.

Para se aprofundar