Проектирование логики модуля

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

1. Выберите язык. Выбор языка обычно диктуется требованиями контракта или принятыми в организации стандартами. Хотя выбор языка и включен сюда, на самом деле язык должен быть выбран в начальный пе­риод работы над проектом, поскольку он влияет на планирование работы над проектом (например, обучение програм­мистов, подготовка компилято­ров и средств тестирования).

2. Спроектируйте внешние спецификации модуля. Это процесс опре­деления внешних характеристик каждого модуля, о котором шла речь в предыдущем разделе.

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

4. Выберите алгоритм и структуры данных. Жизненно важным шагом в процессе проектирования логики является выбор алгоритма и со­ответствующих структур данных. Сегодня лишь немногие алго­ритмы соз­даются впервые; огромное их число уже было изобретено, и весьма веро­ятно, что уже имеется один или несколько алгорит­мов, вполне устраиваю­щих проектировщика. Вместо того чтобы тратить время, заново изобретая алгоритмы и структуры данных, лучше поискать готовые решения. Если речь идет о нечисленных алгоритмах (т.е. о большинстве видов обработки данных), лучше всего начать с книги Д. Кнута о фундаментальных алго­ритмах [4] и последующих томов этой серии. В случае численных алгорит­мов начните с издаваемых АСМ «Избранных алгоритмов из САСМ» (Col­lected Algorithms from САСМ). Другим источником алгоритмов обоих ти­пов являются учебники, технические статьи и существую­щие программы.

Обычно проектировщик обнаруживает несколько функциональ­но эквивалентных алгоритмов и структур данных, и ему приходится выбирать один из них. Поскольку многие современные вычислитель­ные системы имеют многоуровневую память (обычно это основная память, виртуальная память, быстрая буферная память), основ­ная тенденция у программи­стов, стремящихся к истинной эффектив­ности, – назад, к простейшим алго­рит­мам и структурам данных (на­пример, в системе с многоуровневой па­мятью двоичный поиск может оказаться не намного быстрее, чем более простой последовательный). Это пример того, как эффективность и про­стота ста­новятся не про­тиворечивыми, а согласованными требованиями!

5. Напишите первое и последнее предложения. Следующий шаг – написать предложения PROCEDURE и END будущего модуля (или их эк­виваленты, в зависимости от избранного языка программирования). Отме­тим, что мы здесь опустили традицион­ный этап вычерчивания блок-схем; причины этого будут рассмот­рены ниже.

6. Объявите все данные из сопряжения. Следующий шаг состоит в написании тех предложений программы, которые определяют или объяв­ляют все переменные для сопряжения создаваемого мо­дуля.

7. Объявите остальные данные. Напишите предложения, которые определяют или объявляют все другие необходимые переменные. По­скольку трудно предсказать все переменные, которые понадобятся, этот шаг часто перекрывается со следующим.

8. Детализируйте текст программы. Следующий шаг – итера­тив­ный, он предполагает последовательную детализацию логики модуля, на­чиная с достаточно высокого уровня абстракции и за­канчивая готовым текстом программы. На этом шаге используются методы пошаговой дета­лизации и структурного программирования.

9. Отшлифуйте текст программы. Теперь модуль нужно от­шлифо­вать для достижения «ясности» и снабдить его дополнитель­ными коммен­тариями, отвечающими на вопросы, которые могут возникнуть при чтении программы.

10. Проверьте правильность программы. Вручную проверяется пра­вильность модуля. Соответствующие процедуры описаны в последнем разделе этой главы.

11. Компилируйте модуль. Последний шаг – компиляция мо­дуля. Этот шаг отмечает переход от проектирования к тестированию; компиля­цией, по существу, начинается тестирование программного обеспечения.

Наши рекомендации