[{"data":1,"prerenderedAt":143},["ShallowReactive",2],{"work-erlang-coverage-tool":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":7,"order":9,"slug":10,"company":11,"role":12,"stack":13,"duration":18,"demoUrl":19,"videoUrl":20,"featured":21,"cover":22,"summary":23,"body":24,"_type":137,"_id":138,"_source":139,"_file":140,"_stem":141,"_extension":142},"/work/erlang-coverage-tool","work",false,"","Branch Coverage for the Erlang VM",3,"erlang-coverage-tool","UFMG × Dashbit","Research Developer",[14,15,16,17],"Elixir","Erlang","BEAM VM","Compiler Engineering","Feb 2022 – Feb 2023","https://dcc.ufmg.br/compiladores/","https://www.youtube.com/embed/vQUGxQqZ6as",true,"/assets/img/work/erlang-cover.jpg","A year at the compiler level. Built branch coverage tooling for the Erlang VM in collaboration with José Valim (creator of Elixir) and the Dashbit team, extending ExCoveralls to track branch-level execution paths across Elixir production codebases worldwide.",{"type":25,"children":26,"toc":129},"root",[27,36,50,56,61,67,76,81,89,94,102,107,113,118,124],{"type":28,"tag":29,"props":30,"children":32},"element","h2",{"id":31},"the-problem",[33],{"type":34,"value":35},"text","The Problem",{"type":28,"tag":37,"props":38,"children":39},"p",{},[40,42,48],{"type":34,"value":41},"Erlang and Elixir had line coverage tooling. They didn't have branch coverage: the ability to know ",{"type":28,"tag":43,"props":44,"children":45},"em",{},[46],{"type":34,"value":47},"which conditional paths",{"type":34,"value":49}," in your code were actually exercised by tests. For safety-critical and high-reliability BEAM systems, that's a significant blind spot.",{"type":28,"tag":29,"props":51,"children":53},{"id":52},"my-role",[54],{"type":34,"value":55},"My Role",{"type":28,"tag":37,"props":57,"children":58},{},[59],{"type":34,"value":60},"Research Developer at UFMG's LAC, in a formal partnership with Dashbit, the company behind Elixir's commercial ecosystem, led by José Valim (Elixir's creator). I designed and implemented the coverage system, working directly with the Elixir core team throughout.",{"type":28,"tag":29,"props":62,"children":64},{"id":63},"what-we-built",[65],{"type":34,"value":66},"What We Built",{"type":28,"tag":37,"props":68,"children":69},{},[70],{"type":28,"tag":71,"props":72,"children":73},"strong",{},[74],{"type":34,"value":75},"Erlang Branch Coverage",{"type":28,"tag":37,"props":77,"children":78},{},[79],{"type":34,"value":80},"AST-level instrumentation using compile-time transforms. The system tracks which branches (if/case/receive clauses) are and aren't visited during test runs, reporting missed branches without meaningful runtime overhead.",{"type":28,"tag":37,"props":82,"children":83},{},[84],{"type":28,"tag":71,"props":85,"children":86},{},[87],{"type":34,"value":88},"Elixir Extension",{"type":28,"tag":37,"props":90,"children":91},{},[92],{"type":34,"value":93},"Ported and adapted the approach to Elixir's macro system, which required understanding how Elixir expands to Erlang Core before compilation. Integrated with ExCoveralls and Mix, surfacing coverage gaps inline with existing test output.",{"type":28,"tag":37,"props":95,"children":96},{},[97],{"type":28,"tag":71,"props":98,"children":99},{},[100],{"type":34,"value":101},"Production reach",{"type":28,"tag":37,"props":103,"children":104},{},[105],{"type":34,"value":106},"The tooling extended ExCoveralls, used across Elixir production codebases worldwide, to track branch-level execution paths rather than just line-level.",{"type":28,"tag":29,"props":108,"children":110},{"id":109},"engineering-approach",[111],{"type":34,"value":112},"Engineering Approach",{"type":28,"tag":37,"props":114,"children":115},{},[116],{"type":34,"value":117},"This was compiler work. I spent significant time reading Erlang/OTP source, attending calls with the Elixir core team, and iterating on instrumentation approaches to avoid false negatives in complex pattern-matching branches. It required a level of care about correctness that I've carried into every codebase since.",{"type":28,"tag":29,"props":119,"children":121},{"id":120},"outcome",[122],{"type":34,"value":123},"Outcome",{"type":28,"tag":37,"props":125,"children":126},{},[127],{"type":34,"value":128},"Working branch coverage tooling for both Erlang and Elixir, integrated with the existing test ecosystem. Presented at UFMG and shared with the Elixir and Erlang communities. A small contribution to the reliability of production BEAM systems everywhere.",{"title":7,"searchDepth":130,"depth":130,"links":131},2,[132,133,134,135,136],{"id":31,"depth":130,"text":35},{"id":52,"depth":130,"text":55},{"id":63,"depth":130,"text":66},{"id":109,"depth":130,"text":112},{"id":120,"depth":130,"text":123},"markdown","content:work:erlang-coverage-tool.md","content","work/erlang-coverage-tool.md","work/erlang-coverage-tool","md",1780153358228]