О прогах

May 11, 2008 21:39

Имхо, идеальная программа должна вообще не требовать тестирования. По заданной проблеме требуется сперва построить адекватную математическую модель, в которой решение конкретной задачи сводится к некоторым математическим процедурам. В принципе, работу любой программы можно описать через процесс решения некоторой системы уравнений или оптимизационной задачи, пусть и достаточно сложной.

После того как математическая модель построена, необходимо доказать, что решение задачи в данной модели приведёт к действительному решению задачи предметной области. Далее следует разработать словесный алгоритм решения и также доказать, что выполнение этого алгоритма приводит к решению математической задачи, а выполнение каждого шага алгоритма всегда корректно и в сумме приводит к выполнению всего алгоритма.

Следующим этапом может стать оптимизация алгоритма (рассмотрение тех частных случаев, с которыми сталкивается программа при работе, изучение особенностей анализируемых функций, некоторые предварительные вычисления). Итогом такой работы становится практически чёткое описание (на бумаге) работы программы на каждом шаге.

И, наконец, финальный этап - собственно кодинг, самая рутинная операция. Решение любой серьёзной проблемы с этого начинать не стоит. Если все предыдущие этапы были проделаны корректно (и представлены все необходимые доказательства), то в написанном коде не будет логических ошибок. Весь процесс тестирования сведётся к отлавливанию ошибок в синтаксисе. А если код пишет опытный программист, то и таких ошибок у него не будет. Именно поэтому идеально написанная програма должна работать верно сразу же.

В реальной жизни всё, конечно, так гладко бывает нечасто. Но вот в последнее время при программировании интеллектуальных алгоритмов для КСИ я стал действовать примерно вышеописанным способом (паретооптимальные решения многокритериальной задачи при определении ставок на Аукционах и в финале), и это значительно повысило скорость написания и качество кода. Программирование в этом случае выглядит не как «сел за комп и бился десять дней, пока не заработало», а «ходил и думал несколько дней, а потом сел и за два часа написал».

В дальнейшем надеюсь лишь ещё более оптимизировать собственный процесс программирования.

Мысли, Технологии

Previous post Next post
Up