{"id":464,"date":"2026-03-04T14:36:39","date_gmt":"2026-03-04T14:36:39","guid":{"rendered":"https:\/\/luizlohn.com.br\/blog\/?p=464"},"modified":"2026-03-05T22:37:12","modified_gmt":"2026-03-05T22:37:12","slug":"testes-unitarios-na-computacao-quantica-desbravando-qualidade-no-mundo-dos-qubits","status":"publish","type":"post","link":"https:\/\/luizlohn.com.br\/blog\/testes-unitarios-na-computacao-quantica-desbravando-qualidade-no-mundo-dos-qubits\/","title":{"rendered":"Testes Unit\u00e1rios na Computa\u00e7\u00e3o Qu\u00e2ntica: Desbravando Qualidade no Mundo dos Qubits"},"content":{"rendered":"\n<p><a href=\"https:\/\/www.linkedin.com\/in\/luizlohn\/\"><\/a><\/p>\n\n\n\n<p id=\"ember63\">Em um evento onde tive a oportunidade de participar com a <a href=\"https:\/\/www.linkedin.com\/in\/samurai-brito\/\">Samura\u00ed Brito, Ph.D.<\/a> , uma das maiores refer\u00eancias em computa\u00e7\u00e3o qu\u00e2ntica, surgiu uma reflex\u00e3o extremamente relevante. Conversamos sobre como simplesmente <strong>n\u00e3o existem materiais, discuss\u00f5es ou publica\u00e7\u00f5es pr\u00e1ticas sobre testes na computa\u00e7\u00e3o qu\u00e2ntica.<\/strong><\/p>\n\n\n\n<p id=\"ember65\">E foi exatamente esse ponto que me instigou a come\u00e7ar uma jornada. Pesquisar, estudar, testar e principalmente desbravar esse universo que est\u00e1 se formando. E mais do que isso, entender como levamos qualidade de software para dentro do desenvolvimento qu\u00e2ntico.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember66\">O que s\u00e3o testes unit\u00e1rios na computa\u00e7\u00e3o qu\u00e2ntica?<\/h3>\n\n\n\n<p id=\"ember67\">Testes unit\u00e1rios na computa\u00e7\u00e3o qu\u00e2ntica seguem a mesma l\u00f3gica dos testes que fazemos na computa\u00e7\u00e3o cl\u00e1ssica. O objetivo \u00e9 claro e direto: validar se aquele circuito qu\u00e2ntico, aquela fun\u00e7\u00e3o ou aquele bloco de c\u00f3digo est\u00e3o entregando o comportamento esperado.<\/p>\n\n\n\n<p id=\"ember68\">Mas a partir daqui, os desafios come\u00e7am a ficar bem diferentes.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A computa\u00e7\u00e3o qu\u00e2ntica trabalha com <strong>probabilidades e n\u00e3o com determinismo absoluto.<\/strong><\/li>\n\n\n\n<li>Conceitos como <strong>superposi\u00e7\u00e3o e emaranhamento<\/strong> n\u00e3o existem na computa\u00e7\u00e3o cl\u00e1ssica.<\/li>\n\n\n\n<li>Toda vez que voc\u00ea faz uma medi\u00e7\u00e3o em um qubit, <strong>o estado colapsa.<\/strong> Isso impacta diretamente a abordagem dos testes.<\/li>\n\n\n\n<li>E existe tamb\u00e9m uma limita\u00e7\u00e3o pr\u00e1tica. <strong>Simuladores s\u00e3o lentos e hardware qu\u00e2ntico real \u00e9 caro e limitado.<\/strong><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember70\">Por que testar na computa\u00e7\u00e3o qu\u00e2ntica?<\/h3>\n\n\n\n<p id=\"ember71\">Porque engenharia de software continua sendo engenharia de software, n\u00e3o importa se estamos lidando com bits, qubits ou qualquer outro elemento computacional.<\/p>\n\n\n\n<p id=\"ember72\">Testes unit\u00e1rios na computa\u00e7\u00e3o qu\u00e2ntica s\u00e3o essenciais para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Validar se o circuito est\u00e1 constru\u00eddo corretamente.<\/li>\n\n\n\n<li>Garantir que as portas qu\u00e2nticas est\u00e3o produzindo a distribui\u00e7\u00e3o estat\u00edstica esperada.<\/li>\n\n\n\n<li>Verificar se as transforma\u00e7\u00f5es matem\u00e1ticas do sistema qu\u00e2ntico est\u00e3o corretas.<\/li>\n\n\n\n<li>Reduzir risco, desperd\u00edcio e custo na execu\u00e7\u00e3o de algoritmos no hardware real.<\/li>\n\n\n\n<li>Aplicar os mesmos princ\u00edpios de qualidade que j\u00e1 usamos h\u00e1 d\u00e9cadas na computa\u00e7\u00e3o cl\u00e1ssica.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember74\">Quais s\u00e3o as boas pr\u00e1ticas para testes unit\u00e1rios na computa\u00e7\u00e3o qu\u00e2ntica?<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember75\">1. Valida\u00e7\u00e3o estat\u00edstica<\/h3>\n\n\n\n<p id=\"ember76\">Quando usamos portas como a Hadamard, o resultado precisa ser estat\u00edstico, e n\u00e3o determin\u00edstico. Esperamos que o qubit tenha uma distribui\u00e7\u00e3o de aproximadamente cinquenta por cento no estado zero e cinquenta por cento no estado um. Se isso n\u00e3o acontece, temos um problema.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember77\">2. Testes de reversibilidade<\/h3>\n\n\n\n<p id=\"ember78\">Portas qu\u00e2nticas como Hadamard ou Pauli X s\u00e3o revers\u00edveis. Aplicar duas vezes deve devolver o qubit para o estado original. Essa \u00e9 uma das formas mais simples e poderosas de validar um circuito.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember79\">3. Compara\u00e7\u00e3o com modelos te\u00f3ricos<\/h3>\n\n\n\n<p id=\"ember80\">Quando trabalhamos com algoritmos como Grover, Deutsch Jozsa ou teletransporte qu\u00e2ntico, temos resultados matem\u00e1ticos bem estabelecidos. Isso permite criar testes que comparam o resultado da simula\u00e7\u00e3o com o que a teoria define.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember81\">4. Testes determin\u00edsticos sempre que poss\u00edvel<\/h3>\n\n\n\n<p id=\"ember82\">Nem tudo na computa\u00e7\u00e3o qu\u00e2ntica \u00e9 probabilidade. Existem opera\u00e7\u00f5es determin\u00edsticas, e essas devem ser testadas como qualquer outra fun\u00e7\u00e3o cl\u00e1ssica.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember83\">5. Logging e telemetria s\u00e3o obrigat\u00f3rios<\/h3>\n\n\n\n<p id=\"ember84\">Testar computa\u00e7\u00e3o qu\u00e2ntica sem ter um log extremamente detalhado \u00e9 simplesmente imposs\u00edvel. Precisamos ter rastreabilidade da constru\u00e7\u00e3o do circuito, da execu\u00e7\u00e3o e da an\u00e1lise dos resultados.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember85\">Frameworks que suportam testes unit\u00e1rios na computa\u00e7\u00e3o qu\u00e2ntica<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Qiskit (IBM Quantum)<\/li>\n\n\n\n<li>Cirq (Google)<\/li>\n\n\n\n<li>PennyLane (Xanadu)<\/li>\n\n\n\n<li>Amazon Braket (AWS)<\/li>\n<\/ul>\n\n\n\n<p id=\"ember87\">Todos eles oferecem simuladores, capacidade de constru\u00e7\u00e3o de circuitos, execu\u00e7\u00e3o local e integra\u00e7\u00e3o com hardware qu\u00e2ntico real.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember88\">\ud83d\udca1 Exemplo pr\u00e1tico \u2014 Testando uma porta Hadamard<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>python\n# Importa os m\u00f3dulos necess\u00e1rios do Qiskit\nfrom qiskit import QuantumCircuit, execute\nfrom qiskit_aer import Aer  # Importa o simulador qu\u00e2ntico\nimport numpy as np  # Biblioteca num\u00e9rica para an\u00e1lise dos resultados\n\n# Cria um circuito qu\u00e2ntico com 1 qubit e 1 bit cl\u00e1ssico para medi\u00e7\u00e3o\nqc = QuantumCircuit(1, 1)\n\n# Adiciona uma porta Hadamard no qubit 0\n# Isso coloca o qubit em superposi\u00e7\u00e3o, com 50% de chance de estar em zero e 50% de estar em um\nqc.h(0)\n\n# Adiciona a opera\u00e7\u00e3o de medi\u00e7\u00e3o, que mede o qubit 0 e salva o resultado no bit cl\u00e1ssico 0\nqc.measure(0, 0)\n\n# Define o simulador que ser\u00e1 utilizado, no caso o simulador de portas qu\u00e2nticas qasm_simulator\nsimulator = Aer.get_backend('qasm_simulator')\n\n# Executa o circuito no simulador com mil repeti\u00e7\u00f5es (shots)\n# Isso permite obter uma distribui\u00e7\u00e3o estat\u00edstica dos resultados\njob = execute(qc, simulator, shots=1000)\n\n# Obt\u00e9m os resultados da execu\u00e7\u00e3o\nresult = job.result()\n\n# Recupera as contagens de cada estado medido (quantas vezes deu zero e quantas vezes deu um)\ncounts = result.get_counts()\n\n# Calcula a propor\u00e7\u00e3o do estado zero\nzero_ratio = counts.get('0', 0) \/ 1000\n\n# Calcula a propor\u00e7\u00e3o do estado um\none_ratio = counts.get('1', 0) \/ 1000\n\n# Valida se a propor\u00e7\u00e3o do estado zero est\u00e1 dentro de uma margem de cinco por cento em rela\u00e7\u00e3o ao esperado (cinquenta por cento)\nif not np.isclose(zero_ratio, 0.5, atol=0.05):\n    raise ValueError(\"Distribui\u00e7\u00e3o fora da margem para zero\")\n\n# Valida se a propor\u00e7\u00e3o do estado um est\u00e1 dentro de uma margem de cinco por cento em rela\u00e7\u00e3o ao esperado (cinquenta por cento)\nif not np.isclose(one_ratio, 0.5, atol=0.05):\n    raise ValueError(\"Distribui\u00e7\u00e3o fora da margem para um\")\n\n# Se passou por todas as valida\u00e7\u00f5es, printa que o teste foi bem-sucedido\nprint(\"Distribui\u00e7\u00e3o validada com sucesso\") <\/code><\/pre>\n\n\n\n<p id=\"ember89\">Neste exemplo, esperamos que o circuito gere uma distribui\u00e7\u00e3o aproximadamente de cinquenta por cento no estado zero e cinquenta por cento no estado um. Se isso n\u00e3o acontecer dentro da margem de cinco por cento, o teste falha.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember90\">E como isso se conecta com pipeline de qualidade?<\/h3>\n\n\n\n<p id=\"ember91\">Da mesma forma que fazemos na computa\u00e7\u00e3o cl\u00e1ssica. N\u00e3o existe mais espa\u00e7o para desenvolvimento sem testes, seja backend, frontend, API, mobile ou&#8230; <strong>circuito qu\u00e2ntico.<\/strong><\/p>\n\n\n\n<p id=\"ember92\">Testes unit\u00e1rios qu\u00e2nticos precisam estar na esteira de desenvolvimento. Eles precisam rodar no pipeline, validar PRs e garantir que qualquer altera\u00e7\u00e3o em um circuito n\u00e3o quebre o comportamento esperado.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Integra\u00e7\u00e3o com GitHub Actions, GitLab CI e Azure DevOps.<\/li>\n\n\n\n<li>Valida\u00e7\u00e3o cont\u00ednua da constru\u00e7\u00e3o dos circuitos e das distribui\u00e7\u00f5es estat\u00edsticas.<\/li>\n\n\n\n<li>Bloqueio autom\u00e1tico de merges caso os testes falhem.<\/li>\n<\/ul>\n\n\n\n<p id=\"ember94\">Sim, qualidade tamb\u00e9m \u00e9 coisa s\u00e9ria na computa\u00e7\u00e3o qu\u00e2ntica.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember95\">O desafio e a oportunidade<\/h3>\n\n\n\n<p id=\"ember96\">Testar algoritmos qu\u00e2nticos \u00e9 um desafio enorme, mas tamb\u00e9m uma das maiores oportunidades para quem trabalha com engenharia de software e qualidade.<\/p>\n\n\n\n<p id=\"ember97\">N\u00f3s estamos literalmente escrevendo a hist\u00f3ria das pr\u00e1ticas de qualidade na computa\u00e7\u00e3o qu\u00e2ntica. E quem dominar isso agora, vai estar na frente de um mercado que simplesmente n\u00e3o tem volta.<\/p>\n\n\n\n<p id=\"ember98\">Se esse conte\u00fado fez sentido para voc\u00ea, comenta, compartilha e vamos juntos construir a pr\u00f3xima gera\u00e7\u00e3o da engenharia de software qu\u00e2ntica.<\/p>\n\n\n\n<p id=\"ember99\">Em breve disponibilizarei um reposit\u00f3rio com alguns exemplos de testes rodando em pipeline!<\/p>\n\n\n\n<p id=\"ember100\">#ComputacaoQuantica #Qualidade #Testes #QuantumComputing #Qiskit #Cirq #PennyLane #AWSBraket #EngenhariaDeSoftware #Tecnologia #Inovacao #SoftwareQuality<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Em um evento onde tive a oportunidade de participar com a Samura\u00ed Brito, Ph.D. , uma das maiores refer\u00eancias em computa\u00e7\u00e3o qu\u00e2ntica, surgiu uma reflex\u00e3o extremamente relevante. Conversamos sobre como simplesmente n\u00e3o existem materiais, discuss\u00f5es ou publica\u00e7\u00f5es pr\u00e1ticas sobre testes na computa\u00e7\u00e3o qu\u00e2ntica. E foi exatamente esse ponto que me instigou a come\u00e7ar uma jornada.<\/p>\n","protected":false},"author":1,"featured_media":539,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-464","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/luizlohn.com.br\/blog\/wp-json\/wp\/v2\/posts\/464","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/luizlohn.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/luizlohn.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/luizlohn.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/luizlohn.com.br\/blog\/wp-json\/wp\/v2\/comments?post=464"}],"version-history":[{"count":1,"href":"https:\/\/luizlohn.com.br\/blog\/wp-json\/wp\/v2\/posts\/464\/revisions"}],"predecessor-version":[{"id":466,"href":"https:\/\/luizlohn.com.br\/blog\/wp-json\/wp\/v2\/posts\/464\/revisions\/466"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/luizlohn.com.br\/blog\/wp-json\/wp\/v2\/media\/539"}],"wp:attachment":[{"href":"https:\/\/luizlohn.com.br\/blog\/wp-json\/wp\/v2\/media?parent=464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/luizlohn.com.br\/blog\/wp-json\/wp\/v2\/categories?post=464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/luizlohn.com.br\/blog\/wp-json\/wp\/v2\/tags?post=464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}