Большинство процессов разработки программного обеспечения – это процессы решения некоторых задач. Внешнее проектирование сводится к решению такой задачи: переведите множество целей системы во внешние спецификации. В задаче проектирования логики модуля даны внешние спецификации модуля, а на выход должен быть получен текст его программы. Отладка – это задача на определение места ошибки и ее исправления по описанию ее симптомов. Полностью процесс проектирования ПО будет представлен на рис. 3.2.
Решение задачи состоит из следующего ряда шагов.
Формулировка задачи. Прежде всего, проектировщик должен детально разобраться, в чем именно состоит задача очередного процесса. Худшая из ошибок, которые могут быть сделаны при решении задачи, – не вполне разобраться в ее постановке. Исследуя задачу, проектировщик должен также исследовать данные, чтобы убедиться, что их достаточно для решения задачи и они не противоречат друг другу.
Составление плана решения. Отсутствие плана – очень распространенная ошибка. Например, проектировщики программной системы, которые потратили время на то, чтобы понять задачу, но затем немедленно приступили к ее решению, не пожелав затратить время на планирование своих усилий, в результате могут прийти к хорошему решению, но не раньше, чем после нескольких ненужных фальстартов.
Прежде всего, в плане нужно определить, чего вы хотите добиться. Десять человек могут иметь десять разных мнений относительно «правильного» ответа на задачу проектирования; проектировщик должен предусмотреть те конкретные аспекты решения, которые требуют наибольшего внимания. К сожалению, в большинстве проектов разработчики имеют слишком много свободы в этом отношении: каждый разработчик принимает компромиссные решения, основываясь на своем собственном мнении, что приводит к несогласованности многих решений в системе. Решением этой проблемы является идея целей проекта. Суть идеи состоит в том, что на уровне всего проекта определяются общие цели, которыми следует руководствоваться во всех решениях при проектировании.
Выполнение плана. Следующий шаг – действительно решить задачу в соответствии с запланированным подходом. Поскольку решение обычно состоит из целого ряда последовательных шагов, разработчик в процессе решения должен попытаться проверить правильность каждого шага.
Анализ решения. После того как результат получен, нужно еще его проверить. Разработчик должен просмотреть все данные, чтобы убедиться, что учтено все, что имеет отношение к делу. Полезно для этого еще раз перечитать буквально каждое слово постановки задачи, вычеркивая каждый использованный в решении факт, а затем проверить, насколько существенно для задачи то, что осталось не зачеркнутым. Разработчик должен также проверить правильность решения задачи.