Ferramentas de Pentest

Ferramentas de Pentest

Para a realização de um bom teste de vulnerabilidade é necessário uma  bom conjunto adequado de ferramentas para auxiliar o processo de auditoria. Muitas dessas ferramentas visam agilizar e facilitar a vida dos responsáveis desse processo, deixando os processos automatizados e mais eficientes.

Entre essas diversas ferramentas existe o Kali linux, que é uma distribuição linux de código aberto baseado no Debian que visa auxiliar na auditoria de segurança de sistemas, abrangendo desde Desktops a WEB, o projeto é mantido e financiado pela Offensive Security.

O kali linux possui grande relevância no mercado de segurança da informação, pois ele já vem equipado com uma grande quantidade de ferramentas para auditorias em computadores e seus sistemas. O Kali possui uma instalação bem simplificada, onde pode se baixar uma imagem de máquina virtual e rodar sem menores problemas, também conta com ISO’s de instalação.

Entre essa gama de ferramentas pré instaladas podemos citar o NMAP, John The Ripper, SetoolKit e Aircrack-Ng.

NMAP é um utilitário Open Source utilizado para exploração de redes locais ou remotas. Suas principais funcionalidades são:

  • Identificação de computadores de uma rede,
  • Detecção de portas abertas
  • Identificação de serviços de rede em computadores remotos
  • Detecção de sistema operacional.

Sendo muito utilizado em fases iniciais de uma auditoria, pois possui um grande poder de mapeamento de redes, assim possibilitando em fases iniciais descobrir potenciais vulnerabilidades e a partir deste ponto começa a buscar mais detalhada por falhas em servidores e em redes.

Setoolkit (The Social-Engineer Toolkit) é um framework open source voltado para Engenharia Social. A ferramenta possui vários ataques personalizados que permitem fazer ataques de forma rápida e confiável.

Um desses ataques mais notáveis é o Web Attack Vectors, que consiste em clonar um determinado site assim passando para a vítima a sensação de segurança, já que para ela a página é conhecida e confiável, depois que a pessoa navegar pelo site e efetuar o login no site clonado, as informações são imediatamente mandadas para o autor do ataque.

Aircarck-Ng é uma ferramenta voltada para fazer ataques em redes locais sem fio, sua principais funções são:

  • Quebra de chaves WEP e WPA
  • Descriptografia de arquivos capturados
  • Injeção de pacotes no Linux

Assim que conectado a rede é possível fazer capturas de pacotes trafegados na rede, assim sendo possível pegar informações cruciais sobre os usuários presentes na rede.

John the Ripper é um software utilizado para quebra de senhas, ele é capaz de fazer força bruta em senhas cifradas em DES, MD4 e MD5 entre outras.

Ele possui um extenso dicionais de palavra que contribui na tarefa de quebra de senhas, além de poder gerar ataques com base na lógica do sistema alto, caso seja possível ter acesso ao código da função. Também é possível fazer ataque de colisão de hashes específicos.

Utilizando o Kali linux e a gama de ferramentas existentes nele é possível fazer o teste de vulnerabilidade  desde das fases iniciais, onde se utiliza de investigação, levantamento de dados até os ataques mais sofisticados como Engenharia Social, Sql Injection entre outros. Assim podendo recolher as métricas para a criação do documento de auditoria do sistema.

Um bom conjunto de ferramentas durante a auditoria de um sistema pode ser o diferencial em um teste de vulnerabilidade razoável e um de alta qualidade, já que possibilita varrer uma quantidade maior de falhas e vulnerabilidades existente no sistema.

Segurança na Web 2019

Segurança na Web 2019

Criar aplicações 100% seguras é um grande desafio para as organizações, embora algumas precauções sejam tomadas no que diz respeito ao desenvolvimento e deployment seguro, precisamos nos preocupar também com falhas e brechas que podem ser abertas por uso inadequado da parte dos usuários. É notório que muitas pessoas não costumam tomar as devidas precauções ao utilizar a internet, conteúdos muitas vezes duvidosos como links que oferecem recompensa por cliques por exemplo é algo muito compartilhado em redes sociais e aplicativos de comunicação. Em entrevista concedida à BBC sobre os 30 anos da World Wide Web (https://www.bbc.com/portuguese/geral-47536362) Tim Berners-Lee, o criador da mesma, mostra sua preocupação com o futuro da rede devido à desinformação dos usuários.

É nosso papel blindar as aplicações que desenvolvemos contra todo tipo de vulnerabilidade, sejam elas técnicas ou humanas. O volume 24 do ISTR (Internet Security Threat Report) relatório produzido pela Symantec em Fevereiro de 2019 revela os principais tipos de ataques feitos por cibercriminosos em 2018:

Formjacking

Resultado de imagem para Formjacking

O uso de código JavaScript para roubo de dados sensíveis como detalhes de cartão de crédito está entre os principais tipos de ataque. A cada mês cerca de 4800 websites são comprometidos com código malicioso. Os ataques frequentemente ocorreram em e-commerces varejistas de pequeno e médio porte, que vendem bens dos mais variados tipos.

Criptojacking

Resultado de imagem para Criptojacking

Criptojacking – o uso dos dispositivos de vítimas para a execução de código minerador de criptomoeda sem seu consentimento – teve uma pequena diminuição em comparação ao ano anterior, quando ocorreram cerca de 69 milhões de eventos desse tipo. A quantidade de ataques tem certa relação com a valorização de criptomoedas como o Monero, porém não na mesma proporção mostrando que para os cibercriminosos, ataques desse tipo ainda é algo rentável.

Email com conteúdo malicioso

Imagem relacionada

Outro ponto preocupante sobre os ataques, é a quantidade de emails utilizados para ataque, em média 48% dos e-mails recebidos por funcionários de pequenas e médias empresas contém arquivos Office com conteúdo malicioso.

Os anexos geralmente contém scripts que fazem download de malwares que infectam os computadores das vítimas abrindo portas para o comprometimento da rede corporativa.

Cloud

Imagem relacionada

O ponto fraco das aplicações em nuvem em 2018, segundo o ISTR, foi a má configuração dos recursos como banco de dados e armazenamento, o que levou à brechas de segurança que resultaram em mais de 70 milhões de registros roubados ou vazados. Vulnerabilidades também foram exploradas em serviços como Kubernetes e APIs públicas expostas sem os devidos cuidados com segurança. Existem diversas ferramentas para busca de falhas de segurança em aplicações sendo utilizadas pelos cibercriminosos.

Como manter nossas aplicações seguras?

Resultado de imagem para Como manter nossas aplicações seguras?

Podemos proteger nossas aplicações de ataques seguindo boas práticas de segurança em todas as etapas do ciclo de vida destas, do desenvolvimento ao deploy e hospedagem. A OWASP (Open Web Application Security Project) é uma organização sem fins lucrativos dedicada à segurança na web. Entre os diversos materiais oferecidos pela organização, está o OWASP Top 10, um relatório que lista as 10 vulnerabilidades mais críticas em aplicações web. A última versão do relatório foi publicada em 2017, e mostra além das vulnerabilidades, formas de evitar que as aplicações sejam comprometidas, iremos falar sobre algumas delas a seguir.

Injeção

Falhas de injeção como SQL, noSQL, OS ou LDAP, caracterizam-se pelo envio de dados não confiáveis à um interpretador como parte de um comando ou consulta. O atacante pode extrair dados sensíveis ou executar comandos sem autorização. A seguir temos um exemplo de query vulnerável à esse tipo de ataque:

String query = “SELECT * FROM contas WHERE id_cliente = ” + request.getParameter(“id”) + “;”;

No exemplo, um comando SQL mal intencionado pode ser injetado na query através do parâmetro sem tratamento no servidor.

Como evitar?

  • Evite o uso de concatenação de parâmetros, prefira APIs seguras como Mapeamento Objeto Relacional (ORM) ou declarações com tratativa de tipo.
  • Utilize validação server-side das entradas fornecidas.
  • Em comandos SQL utilize LIMIT ou outros controles para mitigar o risco de retorno massivo de registros.

Autenticação Quebrada

Quando uma aplicação possui autenticação vulnerável, permitindo aos atacantes acessarem dados das contas, podendo comprometer todo o sistema, caso os acessos contenham privilégios administrativos. Um exemplo comum de ataque, é o acesso ao sistema utilizando uma lista de possíveis senhas e força bruta para realizar a autenticação.

Como evitar?

  • Utilize autenticação multi-fator para impedir ataques como força bruta, por exemplo.
  • Não fazer o deploy das aplicações contendo credenciais padrão, principalmente às de administrador do sistema.
  • Utilize validação de senhas, não permitindo senhas fracas e comumente usadas.
  • Implemente políticas de rotatividade de senhas, com expiração automática.
  • Garanta o registro, recuperação de credenciais e acesso controlado à APIs.
  • Limite a quantidade de tentativas falhas de login.
  • Prefira controle de sessão server-side, evite o uso de cookies.

Exposição de Dados Sensíveis

Quando não existe proteção correta dos dados sensíveis como número de cartão de crédito, CPF, RG entre outros. Dessa forma, esses dados podem ser roubados e utilizados para roubo de identidade, fraude e outros crimes. Falta de criptografia para tráfego desse tipo de informação é uma falha comum que leva à esse tipo de vulnerabilidade.

Como evitar?

  • Identifique quais são os dados sensíveis de sua aplicação.
  • Não armazene dados sensíveis desnecessariamente, descartando-as assim que possível.
  • Use criptografia ao trafegar os dados, protocolos criptografados como HTTPS garantem uma transmissão segura de ponta a ponta.
  • Não utilize cache para dados sensíveis.
  • Não armazene senhas como texto puro, utilize funções hash para armazenamento e verificação.

XXE (Entidades XML Externas)

Processadores XML antigos processam referências à entidades XML externas dentro do próprio documento, permitindo o uso dessas entidades para descoberta de arquivos internos, execução remota de código, scanning de porta e ataques DDoS.

Como evitar?

  • Se possível, utilize formatos de dado menos complexos como JSON.
  • Utilize as versões mais atualizadas de processadores XML.
  • Implemente validação server-side das entradas de arquivo XML utilizando filtro “whitelist”.

Controle de Acesso Quebrado

Quando restrições sobre o que um usuário autenticado pode fazer não são aplicadas corretamente, permitimos que atacantes acessem funcionalidades ou dados não autorizados. Um usuário mal intencionado pode por exemplo tentar forçar o acesso à URLs administrativas: https://aplicacao.com.br/perfil https://aplicacao.com.br/admin

Como evitar?

  • Permita acesso livre apenas aos recursos públicos da aplicação, quanto ao restante restrinja aos perfis específicos.
  • Salve logs das ações realizadas pelos usuários
  • Desabilite a listagem de arquivos no servidor

Configurações Incorretas de Segurança

Uma das vulnerabilidades mais vistas, é a configuração incorreta de servidores, banco de dados etc. no que diz respeito à segurança. Muitos utilizam as configurações padrão, deixam seus serviços de armazenamento abertos, permitem mensagens de erro não tratadas, exibindo informações críticas de segurança aos usuários. Como evitar?

  • Remova ou bloqueie features desnecessárias à sua aplicação de servidores.
  • Desabilite quaisquer portas padrão que estejam expostas no seu servidor e não são utilizadas. Ex. ssh.
  • Não exiba mensagens de erro com a stacktrace ou com detalhes sobre a segurança de sua aplicação.
  • Remova quaisquer aplicações de exemplo que podem vir junto com alguns servidores. Ex.: página de boas vindas do Apache.

Uso de componentes com vulnerabilidades conhecidas

Resultado de imagem para Uso de componentes com vulnerabilidades conhecidas

O uso de componentes, bibliotecas ou frameworks com os mesmos privilégios da aplicação pode abrir brechas para atacantes explorarem suas falhas e obterem acesso privilegiado à recursos importantes.

Como evitar?

  • Remova dependências desnecessárias de seus projetos
  • Sempre utilize componentes de fontes oficiais e repositórios com links seguros e populares.
  • Desconfie de componentes que não são mantidos com frequência ou não recebem patches de segurança.
  • Realize scan de segurança de seus componentes utilizando ferramentas de check de dependências.

Essas são algumas das vulnerabilidades comuns listadas no ranking da OWASP, e as técnicas propostas para evitá-las. Como dito no começo deste artigo, nem todos os usuários da web tem conhecimento sobre as formas de evitar ataques e as precauções que precisam ser tomadas para o uso responsável da internet, mas nós como desenvolvedores, administradores e engenheiros devemos assegurar que mesmo mediante falhas humanas, nossos sistemas continuem confiáveis e seguros.

Como pegamos uma ideia e criamos vários protótipos em menos de 2 horas.

Como pegamos uma ideia e criamos vários protótipos em menos de 2 horas.

Estivemos em uma Startup que nasceu na John Richard, a maior locadora de móveis do Brasil, há 20 anos no mercado e que é focada em soluções de mobiliário corporativo e residencial para expatriados conduzindo o processo de concepção da plataforma de locação de móveis inovadora no mercado brasileiro. A ideia deles é fazer locação de móveis para pessoas físicas que precisam mobiliar sua residência para eventos passageiros e não querem ter toda a dor de cabeça de comprar, montar e depois vender seus móveis.

A ideia da aplicação, que funcionará principalmente nos celulares, é facilitar, através de uma interface intuitiva e de um jeito prático, a escolha de maneira rápida de todos um móvel, de um cômodo inteiro, ou de uma residência inteira, de maneira prática e divertida, ajustando os produtos de acordo com a necessidade e personalidade de cada um.

E esse encontro proporcionou um processo de concepção diferente. Já se sabia o que a plataforma precisava fazer, mas como fazer isso? Qual o melhor jeito de fazer com que o usuário chegue ao objetivo dele?

Com a participação de dezoito pessoas, sendo nosso Diretor comercial Willian Polis, nosso Desenvolvedor Filipe Versehgi, e os demais, são atuais clientes e formadores de opinião, todos participaram dando ideias e prototipando, dando sua visão e seu pedaço de conhecimento.

Para guiar todo esse processo, foram utilizados alguns métodos e atividades encontrados no Hyper Island Toolbox, uma caixa de ferramentas com alguns workshops e ideias de dinâmicas de grupo, focados em prototipação e inovação.

Dividimos o encontro em três momentos, sendo iniciado por uma breve apresentação, uma quebra de gelo e por final a concepção de uma visão de como seria a plataforma.

Apresentação

O encontro foi iniciado por um coffee break, após isso cada um fez uma apresentação pessoal, onde cada um trabalha e o que faz.

O pensamento divergente e a criatividade

A atividade para abrir o evento dá introdução a linha chamada de “Pensamento Divergente”, a base de muitas metodologias, como o Design Sprint do Google, por exemplo. A ideia da atividade é fazer com que todo mundo fique aquecido para o resto do encontro, estando flexíveis e mais confiantes de que qualquer um pode ser criativo, desde que façamos muitas tentativas e colaboremos uns com os outros.

A atividade é de período curto de tempo com cerca de duração de dez minutos, onde os participantes deveriam fazer o maior número de desenhos de maçãs uma diferente da outra, para mostrar que:

  • Qualidade vem com a quantidade
  • Construir em cima de ideias boas dos outros do grupo
  • Dado várias tentativas, todos são capazes de chegar no resultado igual.

  Quando você coloca para fora um grande número de ideias e em cima dela faz um filtro, para então fazer mais ideias a partir desse ponto de sucesso, e num segundo funil, tenhamos uma ideia muito boa. Ou seja: todos somos capazes.

Concepção

Na reta final do encontro, foi o momento de fato de conceber uma versão mínima do que seria a Startup, com isso cada um focou em dizer qual necessidade mais importante do usuário eles queriam resolver, por exemplo praticidade, custo benefício, valor agregado, mostrar as usabilidades, facilidade, bom humor, etc.

 

 Com isso cada um criou um protótipo, através de várias e várias tentativas em um curto período de tempo, de como poderia ser o aplicativo, passando a ideia do papel para a tela. Esses protótipos então são apresentados, e todos conseguem se basear nas ideias dos outros para então sugerir algo melhor ainda, com os pontos mais fortes de cada um.

#liberdadeparamudar

Finalizamos o encontro fazendo o checkout, ou seja, cada um deixando mensagem do que mais gostou desse encontro, qual foi o ponto alto dos protótipos ou alguma outra coisa que se sentissem a vontade de falar, e todos se sentiram muito criativos e participaram se entregando de fato para essa experiência.

Esse encontro nos deixou extremamente felizes pois o contamos com a participação de empresários, jornalistas, arquitetos, ilustradores, arquitetos de informações, tanto dentro como fora da Startup #liberdadeparamudar, e o sentimento que eles nos retornaram foi de satisfação. E é exatamente isso que a Tegra faz, nós conduzimos o processo de concepção, tiramos o lado mais criativo que há nas pessoas e a partir desses encontros grandes ideias surgem e tornam nosso mundo melhor.

Se quiser conhecer melhor a Jhon Richard: www.johnrichard.com.br

Entenda por que você deveria fazer um PenTest na sua aplicação?

Entenda por que você deveria fazer um PenTest na sua aplicação?

Com aplicações web cada vez mais granulares e com vários tipos de integrações, como garantir que essas aplicações não possuam vulnerabilidades de segurança, não exponham dados privados de usuários, dados financeiros, dados sensíveis ou possam ser manipuladas por um hacker externo ao sistema?

Para prevenir esses problemas existe o PenTest ou Penetration Test, que na tradução é conhecido como Teste de Intrusão. Esse teste tenta simular ataques ao sistema para detectar e explorar possíveis vulnerabilidades de segurança que poderiam ser usadas para acesso a dados privados ou comprometer a confiabilidade do sistema e dos servidores por trás dele.

Para realizar o teste, utiliza-se várias ferramentas automáticas de varredura de vulnerabilidades conhecidas, mas também é possível realizar o teste manualmente. Além das ferramentas é preciso ter um bom conhecimento de redes, segurança da informação e sistemas operacionais. O profissional que realiza esse tipo de teste é conhecido como PenTester ou Ethical Hacker.

Um Ethical Hacker é um especialista em encontrar vulnerabilidades em sistemas, mas ao invés de se aproveitar dessas falhas em vantagem própria, reporta o que encontrou para a empresa responsável. Esse tipo de profissional geralmente trabalha em consultorias voltadas para a segurança da informação e a realização de PenTest.

Existem basicamente 2 tipos de PenTest, cada um é realizado para tentar descobrir falhas e prevenir ataques específicos.

White Box

Nesse tipo de teste o profissional deve ter um conhecimento prévio do sistema, estrutura de rede, firewalls, range de IPs e até um usuário de acesso. Isso é necessário para que nenhuma parte do sistema ou servidor fique de fora do teste, já que o profissional tem informação de tudo que é necessário para o sistema funcionar. O teste white box é o mais completo e que dá mais cobertura para descoberta de vulnerabilidades, porém fica um pouco distante do que seria a ação de um atacante real, já que são usadas informações privilegiadas para a verificação.

Black Box

Esse teste parte que o profissional não tem informações sobre o sistema nem da estrutura da empresa e trata a aplicação como uma “caixa preta”. Sendo mais difícil de ser aplicado, já que é preciso colher algumas informações para tentar explorar vulnerabilidades, mas em compensação, essa simulação fica mais próxima de um ataque real feito externamente por um hacker.

OWASP

A “Open Web Application Security Project” conhecida pela sigla OWASP é uma organização aberta, sem fins lucrativos, que tem como foco principal, projetos de segurança de software e conta com a colaboração de profissionais do mundo todo para detectar falhas e compartilharam conhecimento sobre segurança da informação.

Uma das grandes contribuições da OWASP e talvez a mais conhecida, é a lista das Top 10 vulnerabilidades de segurança para aplicações web. A lista inclui as falhas mais perigosas e comumente encontradas, junto com instruções de como mitigá-las. Essas são as Top 10 vulnerabilidades atuais:

  1. Injeção de Código.
  2. Quebra de Autenticação.
  3. Exposição de Dados Sensíveis.
  4. Entidades Externas de XML.
  5. Quebra de Controle de Acesso.
  6. Configuração Incorreta de Segurança.
  7. Cross-Site Scripting (XSS).
  8. Deserialização Insegura.
  9. Utilização de Componentes com Vulnerabilidades Conhecidas.
  10. Log e Monitoramento Ineficientes.

Conclusão

Ao final da realização de um PenTest, geralmente é gerado um relatório com os passos que foram realizados, evidências coletadas e sugestões de ações a serem tomadas para melhorar a segurança da aplicação. É importante entender os impactos que as vulnerabilidades exploradas podem causar nos dados dos usuários, acesso a rede, roubo de credenciais e etc.

Com esse relatório é possível tomar decisões sobre recursos e funcionalidade da aplicação que precisam ser reparadas, desabilitados ou configuradas para aumentar a segurança e confiabilidade dos dados

O teste realiza um fotografia da aplicação no momento atual, mas com evoluções e atualizações, o teste deve ser refeito para manter sempre um ambiente seguro . Uma solução ainda melhor é se o monitoramento de segurança puder ser feita constantemente para prevenir qualquer tipo de ataque.

Samuel Pisa

Samuel Pisa

Desenvolvedor de Software na Tegra Soluções Digitais

E-mail: samuel.pisa@tegra.com.br

Gestão de Expectativas em Projetos de Software

Gestão de Expectativas em Projetos de Software

Levante a mão quem:

  • Já teve um projeto de software entregue com atraso?
  • Já teve um sistema com tantos problemas que era praticamente insustentável?
  • Já pediu uma funcionalidade de uma forma e recebeu outra completamente diferente?

Se você respondeu sim a uma ou mais das perguntas acima, vai encontrar abaixo a causa raiz destes problemas.

O que é um projeto de software?

                                        Prototipação manual de telas para uma funcionalidade

Um projeto de software pode ser definido como um plano geral, com início, meio e fim, e ainda, descrição detalhada/telas/protótipos/cronogramas/etc., de algo a ser criado.

Um projeto tem ao menos um, e em geral, vários envolvidos, diretamente ou indiretamente.

Entre os envolvidos, o entendimento sobre o que é o projeto, de fato, é por natureza, diferente, pois cada um faz este entendimento considerando a sua individualidade, ou seja, suas experiências, seus conhecimentos, seus interesses, ou seja, os diversos fatores que influenciam em seu entendimento.

Qualidade da Mensagem: causa raiz número 1

A comunicação é, sem dúvida, um dos fatores chave de sucesso ou fracasso de um projeto. E a raiz da comunicação está na qualidade das mensagens.

A palavra “Mensagem”, tem sua etimologia no francês “message”, que significa comunicação. Já comunicação, tem origem no latim communicatĭo,ōnis e significa ‘ação de partilhar’. A partir disto, podemos concluir que uma mensagem é uma ação de partilhar uma informação de uma origem para um, ou mais, destinos.

Uma mensagem, seja ela no formato que for (escrita, falada, ilustrada, etc.), tem ao menos 3 pontos de vistas a serem considerados:

  • A intenção do que se quer passar como mensagem
  • A mensagem enviada ao(s) destinatário(s)
  • O entendimento que o(s) destinatário(s) teve da mensagem passada

Para ilustrar melhor os aspectos que influenciam na qualidade da mensagem, compartilho duas estórias abaixo:

O quadrado que conheceu o cubo

Conta-se que um quadrado de 2 dimensões foi convidado pelo cubo, de 3 dimensões, a conhecer o seu mundo. Neste mundo, as formas tinham muitas características (profundidade, sombra, volume, densidade, etc.) que o quadrado 2D, apesar de estar maravilhado, não conseguia conceber muito bem o que eram, pois eram coisas novas a ele.
Ao retornar para o seu mundo 2D, foi correndo contar para o retângulo tal aventura, e, para sua decepção, por não conseguir encontrar palavras para o que viu, foi motivo de zombarias e chamado de maluco. Não desistiu, e foi contar sua história para o triângulo, losango e círculo, e um após o outro, confirmavam sua insanidade. Sentiu-se mal, duvidou de si e decidiu nunca mais tocar em tal assunto. Assim pode viver, infeliz, como um simples quadrado 2D

.

Os índios que “não enxergaram” os navios portugueses

Conta-se que quando as caravelas de Pedro Álvares Cabral se aproximavam da costa brasileira, alguns índios que estavam na praia, viram uma movimentação das águas do mar diferente do que estavam acostumados mas não conseguiam definir do que se tratava.

Só se reconhece, o que se conhece

As duas estórias anteriores têm ao menos um ponto em comum: “Só se reconhece, o que conhece”.

                                                                    Conhecer para aprender

“Conhecer” é o ato de perceber e levar à consciência algo novo.

Conforme aumenta-se o relacionamento com este novo conhecimento, incorporamos-o em nossa essência. A este ato denominamos “aprender”.

É assim a todo momento de nossas vidas: do aprender a se alimentar, nos primeiros instantes de vida, passando por aprender a andar, falar, ler, aprender sobre conhecimentos gerais, conhecimentos técnicos, e assim, por toda a vida.

Olhar empático com os envolvidos no projeto

Olhar empático trata-se de “emprestar” o olhar do outro para conseguir compreender o ponto de vista do outro sobre uma mensagem.

Para conseguirmos “emprestar” o olhar, o ponto de partida é conhecer mais profundamente os envolvidos no projeto, sejam eles clientes, colaboradores, fornecedores, etc.

Existe uma ferramenta chamada “Operação Curiosidade” que busca compreender o outro, considerando 4 aspectos de nossa natureza humana:

  • Fatos e dados: características que são de identificação pública: onde mora, onde trabalho, que cargo tem, sua idade, etc.
  • Interesses: às vezes declarados, às vezes inferidos, mas diz respeito àquilo que o outro demonstra ter interesse e influencia suas decisões e comportamentos
  • Sentimentos: sentimentos que o outro demonstrar carregar ou que pode ser gerado a partir de uma informação, situação e/ou contexto
  • Valores: característica que o indivíduo não abre mão como honestidade, confiança, respeito, etc, para se atingir um objetivo:
                              Fonte: Operação Curiosidade — Metanoia (http://www.metanoia.com.br)

A visão compartilhada do todo: causa raiz número 2

Um fato comum em projetos é o não entendimento correto sobre uma funcionalidade, requisito ou similar. Existe uma imagem muito conhecida que representa isto:

Existem alguns fatores que colaboram com isto, como a Qualidade da Mensagem, como vimos anteriormente. Outro fator é a falta da visão do todo.

A visão do todo diz respeito a capturar do cliente o que é o essencial, ou seja, eliminar tudo o que for trivial.

Usando como exemplo a imagem acima, o essencial poderia ser: “um balanço, resistente a chuva e sol, que seja de construção rápida e barata”

Porém, capturar o essencial é conseguir identificar o que a mesma funcionalidade pode atender, principalmente, nas 2 camadas mais internas do cliente final que são seus sentimentos e valores.

Tomando o mesmo exemplo da imagem acima, o essencial da funcionalidade poderia ser:

“Uma diversão ao ar livre que seja segura, resistente e de baixo custo”.

Se vai ter pneu, se vai ter corda, se vai usar uma serra elétrica e todos outros itens técnicos, esta é a responsabilidade de quem irá construir a solução.

Especificar os itens técnicos, dar a clareza de como foi construído, como será feita sua manutenção, o alinhamento financeiro e outros tópicos são importantes, porém não são essenciais.

Quando não há a visão compartilhada do que é essencial com os envolvidos no projeto, o entendimento de cada um é cada vez mais distante entre si. A imagem abaixo representa bem esta ideia:

Quando este fenômeno acima ocorre, o resultado do projeto, geralmente, é de baixa qualidade.

Além disto, este desalinhamento acarreta em expectativas não atingidas e portanto, frustração entre os envolvidos.

Pessoas frustradas, acabam mudando um comportamento, que antes poderia ser positivo e acaba sendo negativo, muitas vezes manifestados através de rispidez, ocultação de informações, trabalho com desconfiança, burocratização de situações desnecessárias, e tantos outros exemplos.

Nivelamento de Entendimento como “A” solução

Nivelamento de entendimento tem o objetivo de unir a visão geral do que é essencial em uma entrega/projeto/funcionalidade com qualidade da mensagem.

Esta ação é feita considerando as seguintes etapas:

  • Operação Curiosidade contínua com o cliente final da solução para encontrar o que é o essencial;
  • Operação Curiosidade contínua com os envolvidos direta e indiretamente no projeto, à luz do essencial;
  • Comunicação periódica, preferencialmente diária, e nunca mais distante que quinzenal
                        Nivelamento de entendimento da visão geral do que é essencial em um projeto

Compromisso com a entrega

                                                                Compromisso com a entrega combinada

O compromisso com a entrega é fator determinante para a continuidade da boa relação dos envolvidos no projeto, uma vez que requer de cada parte a participação e comprometimento, a exemplo:

  • Do cliente é esperado tomar as decisões do que é essencial, combinar os riscos que podemos correr juntos e trazer os usuários finais para participar da construção do projeto
  • Dos envolvidos diretos é esperado a construção de qualidade da funcionalidade, antecipar impedimentos e levar opções simples de solução para que o cliente consiga escolher sem precisar entrar nos detalhes técnicos
  • Dos envolvidos indiretos é participarem em especial das etapas de concepção, alinhamentos periódicos no máximo quinzenais e parceria para identificar os ajustes necessários ao colocar em produção

Medir a satisfação do cliente

                                                          Termômetro de satisfação do cliente

A satisfação com o resultado do projeto é a chave para medir se a gestão de expectativa foi feita com sucesso.

Esta medição deve ser simples e feita a cada encontro. Não precisa ser de forma declarada, necessariamente. Muitas vezes é possível capturar este sentimento de várias formas por dedução:

  • Comportamentos corporais como expressões faciais, sorrisos, brilho nos olhos, aperto de mão, etc.
  • Atenção aos comentários do cliente para capturar se itens essenciais estão sendo esquecidos

Este mensuração deve ser feita com frequência, se possível semanal, com o cliente, usuários final e demais envolvidos direta e indiretamente.

Quando identificado insatisfação, é importante incluir quem demonstrou a insatisfação na construção da solução.

Conclusão

Projetos de software é por natureza uma atividade complexa pois trata-se de materializar de uma ideia.

Existem vários aspectos importantes que podem impactar no projeto (segurança, escalabilidade, integridade, acoplamento, preparada para o crescimento futuro, integração com outros sistemas, etc.) e que precisam ser levados em consideração na construção.

O cliente precisa dedicar sua energia no que é essencial: a ideia que originou o software. Para isto precisa de um parceiro de software que resolva os aspectos técnicos e principalmente: que saiba nivelar o entendimento do que é essencial e gerir as expectativas dos envolvidos.

Sobre a Tegra

A Tegra é uma desenvolvedora de soluções digitais únicas que tem como propósito ser um parceiro estratégico de nossos clientes para juntos construirmos a jornada da transformação digital de suas empresas.

O que nos move é a nossa curiosidade em ouvir ideias e oportunidades de solução que alavanque o negócio através de software.

Nos conheça: www.tegra.com.br

Ficamos felizes em compartilhar como fazemos isto 🙂

Autor: Willian Polis

Autor: Willian Polis


Líder educador na Tegra
- Soluções Digitais, apaixonado por compreender pessoas, gerar soluções através da tecnologia, resolver problemas, aprender coisas novas e dedicar-me totalmente em tudo o que faço. E-mail: polis@tegra.com.br

Uma introdução a React Hooks

Uma introdução a React Hooks

 

Na nova versão do React lançada esse mês, 16.8.0, foi lançada uma funcionalidade que ajudará na criação dos seus React Components, os Hooks. Que vem pra resolver alguns problemas que tínhamos no React e facilitar um pouco a escrita de componentes.

O que resolve ?

Primeiramente é difícil reutilizar lógica com estado em vários componentes, hoje é possível utilizar o Render Props ou High Order Components, mas isso faz com que tenha que mudar a estrutura do seu componente. Além disso, entender um componente grande pode ser difícil, um dos motivos é que temos que colocar nos Lifecycle Methods itens que tem que executar naquele momento do ciclo, porém não tem muita relação consigo, então segregar eles pelo propósito e não pelo momento que irá ser executado seria melhor.

Como resolve ?

Primeiro ele é Opt-in, ou seja, você pode começar a utilizá-lo gradualmente na sua aplicação e apenas em pontos necessários. Isso facilita também porque você pode começar a escrever seus componentes como função, e se for necessário que ele tenha estado, você não precisa mudar o jeito que está escrito e fazer uma a classe mais, pode apenas criar um Hook. Com isso consegue utilizar funcionalidade dos componentes como classe em componentes funcionais, não apenas o estado mas também acessar o Lifecycle, entre outros.

Como é na prática ?

Esse código é um exemplo para utilizar o Hook useState, nele é passado apenas um valor inicial e ele retorna uma referência a propriedade que quer e uma função que é utilizada para alterar essa mesma propriedade. O código fica bem mais sucinto e fácil de entender.

 

 

 

Nesse outro exemplo podemos ver como os Hooks ajudam quando queremos programar uma ação que dependa do Lifecycle. No exemplo pense que temos uma chamada de API que está abstraída como uma Streamno ChatAPI e queremos que quando o componente “morra” ele cancele a requisição. Para isso utilizamos o useEffect, ele recebe dois parâmetros sendo o primeiro uma função que faz a sua lógica que tem um Side Effect no caso a chamada a API e retorna uma função que será executada no momento que o componente “morrer”. O segundo parâmetro não está no exemplo mas é simples, é um Array que contém as referências das propriedades que o efeito depende para ser executado, por exemplo, caso eu queira fazer essa chamada de API toda vez que a propriedade XPTO tenha seu valor alterado, eu passaria um Array com essa referência e então ele só executaria nesse caso, um outro exemplo se eu passar esse Array vazio, então ele será executado apenas uma vez, o que seria equivalente ao componentDidMount.

Conclusão

Além dos dois exemplos que mostrei você pode também criar hookspersonalizados e utilizar outros que o React já oferece. Os hooks acabaram de entrar em produção na versão 16.8, então acho legal usar eles gradualmente em nossas aplicações. Na minha opinião os Hooks são um grande facilitador ao escrever os componentes, sendo opt-in e muito versáteis podemos fazer vários hooks customizáveis e abstrair lógica com state para reaproveitarmos de uma maneira mais simples, além de não termos que reescrever a estrutura das nossas aplicações para usá-lo, é só usar com a necessidade.

Valeu por ler até aqui! Até a próxima!

Referência

https://reactjs.org/docs/hooks-reference.html