Как грамотно написать программу для тестирования?
Обычное дерево - вопрос, список вариантов ответов с переходами на следующие узлы или листья. Представить можно как угодно, через JSON, XML, заранее подготовленный массив, и т.д. 
Можно разместить на странице сразу все блоки во вложенных div'ах и открывать/закрывать нужные по мере выбора ответов.
Можно нарисовать схему в виде SVG и обрабатывать нажатия на элементы выбора подсвечивая пройденный путь.
Посмотрите паттерн State Machine. Есть уже готовые реализации, например https://github.com/jakesgordon/javascript-state-machine