Ха, мне вост прямо сейчас дали тестовое задание написать какую-то показательную ерунду, которая бы себя логировала. Ну я решил немного усилить эффект и написать очень простенький встраиваемый язык, которым бы эта штука не только себя логировала, но и записывала команды в таком виде, чтобы потом выполнив их, программа бы точно воспроизвела действия пользователя.
Пример:

Код AS3:
private function clickHandler(event:MouseEvent):void
{
this._console.run("(answer " +
this._fields.indexOf(event.currentTarget) + ")");
}
this._console - это экземпляр класса консоли, что он делает: выводит (или просто записывает) текст программы (или результат работы, закомментированый) и вызывает интерпретратор.
Т.е. код выше вызывает функцию:

Код AS3:
public function answer(index:int):void
{
var type:String =
this._winner == index ?
ChallengeEvent.WIN : ChallengeEvent.LOOSE;
super.dispatchEvent(new ChallengeEvent(type));
}
А класс, который слушает события делает что-то типа:

Код AS3:
private function looseHandler(event:ChallengeEvent):void
{
this._console.print("; You loose!");
}
private function winHandler(event:ChallengeEvent):void
{
this._console.print("; You win!");
}
Таким образом, во время интеракции пользователя и программы мы создаем тест, который потом можно выполнить в автоматическом режиме.
Я пока это сделал в очень общих чертах и язык очень-очень мало что умеет. Так только математику + логические операции + какие-то пару утилит.
Но я думаю продолжить над этим работать, уже, если честно, то третий раз берусь. Первый раз было только на попробовать. Второй - слишком сильно размахнулся. Вот, посмотрим, что сейчас выйдет.
Ближе к вечеру (или завтра), выложу сырцы куда-нибудь. Но они еще в таком состоянии, что людям лучше не показывать
О, вот так на тестах выглядит: клик на одном из выражений - и обрабатываем результат.