Вариации с тестом, где нужно написать/выбрать правильный ответ могут прокатить только при выборе узкоспециализированного кодера, но никак не программиста.
Хорошую методику, на мой взгляд, использует Студия Артемия Лебедева, Яндекс и др. компании. Они просят претендента прислать своё резюме и портфолио вместе с решенным тестовым заданием и ответами на ситуационные управжнения.
Что касается самих заданий, то я бы предложил
а) прислать код класса или ф-ции (любой - никаких критериев, кроме минимального/максимального размера кода в строках, например 50-100 строк). Это поможет узнать, как программист относится к своему коду. Сможете ли вы понять, что делает этот код? Достаточно ли он комментирован? Прослеживается ли логика в названии переменных? Эффективно ли используются синтаксические конструкции, характерные для данного ЯП? Причем не нужно заранее говорить, какой именно код прислать и как его офромить. Пусть над этим думает сам кандидат. Попросив прислать код, вы его ничем не обидете, не создадите дополнительного стресса и позволите приявить собственную инициативу.
б) попросить отладить неработающую ф-цию небольшого размера (в пределах тех же 100 строк). Конечно, ф-ция должна быть хорошо комментировано и ошибка должна быть _логической_, а не синтаксической. (ф-ция выводит неверные данные, вообще ничего не выводит, зацикливается). Вы должны рассказать, что ожидается на выходе ф-ции и снабдить кандидата тестовыми данными для отладки и тестирования и информацией о настройках среды, в которой запускаяется ф-ция. Это тоже не обидит кандидата, т.к. программисты проявляют интерес к решению логических задач и оценке чужого кода. Хорошнму программисту всегда интересно что-то улучшить, чем написать с нуля за финсированное время тупую проверку авторизации, которых он за свою карьеру написал не один десяток.
в) Представть алгоритм решения оперделенной задачи или составить структуру базы данных. Вариация - оптимизировать имеющийся алгоритм или структуру БД. Естественным языком описывается задача (например, защитить регистрационную форму от роботов - и подробно описать все нюансы гипотетической системы, для которой нужна эта форма) и ставится проблема (есть шиномонтажная мастерская, в которой нужно организовать учет произведенных работ - далее описать предметнубю область - виды работ, персонал мастерской, что нужно хранить и какие отчеты хочет видеть гипотетическое начальство). Затам просится нарисовать блок-схему решения задачи (составить алгоритм решения на формальном языке, но не на реальном ЯП), в блок-схеме указать, с помощью каких механизмов конкретного ЯП будут решены те или иные подзадачи (тут - снссиями, тут можно в кукисах передать, а тут используется md5). Для БД - нарисовть сущность-связь или просто структуру БД с основными полями, попросить прокомментировать, какие индексы/ключи и какие типы полей кандидат предложил бы использовать, если бы СУБД для данной задачи была конкрутная СУБД.
г) попросить ответить на общие вопросы из своей практики: приходилось ли работать в команде, как разделялись роли, как решалить споры, какие средства разработки и тестирования использовались, верит ли в торжество ООП на фронте вебдева на PHP, как относится к нетрадиционной медицине, верит лив Бога и жизнь после смерти, случалось ли наблюдать НЛО.
Вот примерно так я себе представляю отбор кандитдатов.