Oberon #02: Ликбез: Этапы разработки программного обеспечения

Сегодня давайте немного поговорим о программировании, вернее о жизненных этапах любой программы. Любители "компьютерной попсы" могут смело перелистнуть эту рубрику. На этот раз мой рассказ будет недолгим, но в следующий раз... 

Как я уже говорил вам при нашей первой встрече ("ОБЕРОН" No1), программистами не рождаются, это диагноз после пятилетних мучений в ВУЗе. Одним из важных моментов обучения программиста является вдалбливание ему тех стадий, которые ОБЯЗАТЕЛЬНО должна пройти его программа.

Всего таких стадий или жизненных этапов программы восемь.

1. Определение необходимых технических требований к конфигурации системы.
На этой стадии определяются (обычно заказчиком) технические требования к аппаратуре, на которой и с которой будет работать программа. Если заказчика нет, то эти требования определяет сам программист. Вся дальнейшая разработка будет производиться в соответствии с ними.
Для SPECTRUM вы, начиная разработку своей программы, должны определить:
- необходимо ли наличие дисковода для работы программы;
- версию и тип ДОС (Is-DOS, TR-DOS, CP/M);
- минимальный размер памяти для работы: старайтесь уложиться в 48К, если нет, то в 128К и уж в самом пре-самом крайнем случае больше 128К, при этом нужно определить тип компьютера с этими "больше 128К" (SCORPION, ATM-TURBO, PROFI, а еще лучше все сразу);
- наличие музыкального сопроцессора;
- вопросы совместимости: использовать ли мифический #FD порт или нормальный #7FFD; использовать ли порт атрибутов #FF (если можно, лучше обойтись без него); использовать ли для 2-го режима прерываний таблицу векторов (для работы на всех компьютерах), или задавать вектор двумя байтами (будет работать только на компьютерах со стабильной шиной данных).

2. Постановка задачи.
По идее этим должен заниматься не программист, а постановщик задач (должность такая на ВЦ), но все чаще и чаще этим занимаются сами программисты. На этом этапе фраза типа: "мне нужна программа для учета заработной платы работников", переводится во фразы: "создать программу, позволяющую (а) заполнять информацию о работниках, (б) удалять информацию о работниках, (в) корректировать информацию о работниках, (г) просматривать информацию, (д) производить поиск информации по заданным критериям". Одним словом - на этом этапе начинают вырисовываться возможности и функции будущей программы.

3. Создание концептуальной модели.
Один из самых ответственных этапов. В начале вы должны ответить на один щекотливый, но обязательный вопрос: А НУЖНА ЛИ ПОЛЬЗОВАТЕЛЯМ ваша программа, выполняющая функции, определенные на предыдущем этапе? И если нет (не нужна), то либо от дальнейшей работы над этой программой отказываются, либо заново проходят пункты 1, 2. Если же программа признается необходимой, то создается концептуальная модель поведения будущей программы - что и когда она будет делать, какую информацию и когда вводить и выводить... Здесь же определяется структура и тип управления и контроля за ее работой (клавиши управления, системы и иерархии меню, типы и количество вводимой и выводимой информации, одним словом пользовательский интерфейс). Определяется критичность по времени всей программы и отдельных модулей.
Для игр здесь определяются правила и законы игры, все персонажи, участвующие в игре, их поведение, взаимодействие друг с другом... Определяется и создается описание каждого персонажа, для того, чтобы в дальнейшем программа по нему управляла этим персонажем.
По завершению этого этапа у вас должна получиться сбалансированная модель программы, представление о ситуациях, которые могут возникнуть во время работы программы и пути выхода из них.

4. Создание алгоритма.
Учитывая результаты пунктов 1 - 3, производится создание алгоритма программы. Создается как общий алгоритм (что какая процедура делает и с какими связана), так и алгоритм каждой процедуры.
Очень удобно и полезно нарисовать схемы алгоритмов (то, что на жаргоне называется блок-схемами).

5. Выбор языка и программирование алгоритма.
Как вы уже, наверное, заметили, до сих пор не было написано ни строчки программы! До сих пор еще даже не ясно, на каком языке будет написана программа!
Теперь, имея алгоритм, вы должны решить, на каком же языке писать? И решать это надо не по принципу "какой язык знаю лучше, на том и пишу", а по принципу "какой язык позволит эффективно реализовать алгоритм". Выбрав язык, можно приступать к программированию и отладке программы.
Как легко видеть, это пятый, а не первый и единственный пункт! Кивки на опытных программистов - "они, мол, сразу начинают программировать" не соответствуют действительности. Несмотря ни на что, даже бывалый программист не может программировать, не имея алгоритма! Другое дело, что он придумывает его на ходу и берет сразу из головы. Но ведь на то он и бывалый.
Также как опытный механик по шуму двигателя может поставить "диагноз", так и опытный программист производит многое из выше перечисленного "в уме" (но ведь производит!), лишь в самых запутанных и сложных местах прибегая к помощи листка бумаги и ручки. А когда он был малоопытным и "начинающим", он все зарисовывал и записывал на бумаге. И ничего в этом нет "принижающего" - человек, в уме вычисляющий сложные интегралы, когда-то не знал даже простейшей таблицы умножения.
И не беда, если он начал программировать, не имея нарисованного алгоритма - он его нарисует позже (хотя бы для проверки правильности программы и для ее отладки).

6. Доскональное тестирование программы (другое название - пробная эксплуатация).
В результате которого, по возможности выявляются и исправляются ошибки, которые неизбежно содержатся в любой программе (старая "программерская" аксиома: в любой программе, как бы она ни была хорошо продумана, содержатся по крайней мере две серьезные ошибки, которые можно выявить только при эксплуатации). Вот именно этот этап многие очень любят либо вообще пропускать, либо проходить поверхностно, а зря.

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

8. Начало распространения.
Теперь, и только теперь, программа соответственно оформлена и оттестирована, и можно начинать ее распространение.
Не побоюсь повториться и сказать, что ЛЮБАЯ программа должна пройти через эти стадии, даже если это хаккерская версия!
Если она не прошла хоть одну стадию, или эта стадия оказалась "скомканной", то это означает одно из двух:

1. Это программа для "чисто домашнего использования в кругу семьи" и выпуск ее в продажу является актом глубокого неуважения к пользователям (т.е. к тем, кто ее купит). Лично у меня есть несколько таких моих программ, они не имеют хорошего интерфейса (а зачем мне делать их нарядными, если кроме меня их никто не увидит?), рассчитаны на работу в основном только на SCORPION'е с теневым сервис-монитором (вот я еще для себя не делал "глючные" алгоритмы работы с диском, когда они уже "зашиты" в ПЗУ моего SCORPION!), не имеют практически никакой документации (я и так помню, зачем я их делал и как с ними работать).
А теперь представьте, что одну из этих программ я начал распространять! Ваши эмоции по этому поводу? А вот "начинающие программисты", "ИНФОРКОМ" (да и "SPECTROFON" кажется тоже) считают само собой разумеющимся распространение таких программ.

2. Это, все-таки, коммерческая программа, но страшно ущербная, если вообще работающая. Примеры? Да их множество. Игры VIRUS и VIRUS-2: множественные "недодумки" на этапе 3 (создание концептуальной модели), в результате чего - неправильная обработка вирусов, непонятные правила изменения поведения вируса при изменении его параметров, этап 7 (создание сопроводительной документации) - то количество информации, которое сообщает нам автор, нельзя назвать просто приемлемым, не то что достаточным.
Игра "Страна Мифов": программа, которую вполне можно было реализовать на 128К (пусть и с подгрузками, не впервой), работает только на 256К (этап 1, аппаратные требования), армия все время деградирует и ни о каком поиске Рунного Посоха речи быть не может (этап 3, создание концептуальной модели).
Игра "SOLDIER OF THE FUTURE": в начале битвы роботы должны располагаться друг от друга (причем, либо все снаружи здания, либо все внутри одного здания) не дальше определенного расстояния, иначе у них не хватит энергии найти друг друга (этап 3), расстановка роботов перед битвой проходит "вслепую", т.к. карта выведется на экран уже позже (тот же этап 3). Надеюсь, дальше продолжать не стоит.

Так что, уважаемые разработчики программ, пожалуйста, распространяйте только те программы, которые сделаны "по-науке". Уважайте покупателя (он же пользователь).

На сегодня пока все, сначала "переварите" эту информацию, а потом я вам "скормлю" и другую. А если серьезно, то уже совсем скоро (но не раньше чем вы поймете, что программирование - один из видов искусства, с добавлением математической логики) мы с вами подойдем к описанию Ассемблера и приемам программирования на нем.

До новых встреч.

(C) PAUL ATRIDES

Оглавление издания: Oberon #02

  • Введение
    Введение во второй выпуск журнала 'Оберон' с объяснением задержек и расширения команды. Редакция признает прошлые недоразумения и представляет участников нового выпуска. Предоставлены детали о распространении, вкладах и функциях взаимодействия с пользователем.
  • Свиток - Alex Noman
    Мануал игры 'Peking', описывающий управление, опции меню и стратегию игры, связанную с поиском пар ящиков в условиях ограниченного времени.
  • Свиток
    Empire 128 — стратегическая космическая игра, где игроки выступают торговцами в условиях инопланетного вторжения. Геймплей включает торговлю, выполнение миссий и исследование космоса. Игра требует 128K памяти и предлагает сохранение на диске и RAM.
  • Свиток
    Описание различных космических кораблей, включая их характеристики, системы вооружения и назначение. Каждая модель отличается скоростью, вооружением и функциональностью. Включены примечания о происхождении и применении.
  • Обзор
    Обзор игр и инструментов для ZX Spectrum: Double Xinox 128 предлагает современный взгляд на Xonix с 80 уровнями и новыми вызовами. UFO 2: Terror in the Deep имеет несколько версий с улучшениями и недостатками. Shadow Dancer для ZX Spectrum демонстрирует эволюцию графики, сохраняя классические элементы игры.
  • Обзор - Unbeliever
    Анализ конкурса демо ENLIGHT 1996 года в Санкт-Петербурге, оценка участников и результатов по платформам. Выделяются достижения и критика значимых работ. Обзор динамики конкурса и взгляд на демо для ZX Spectrum.
  • Наш ответ
    Отзывы читателей и ответ редакции о содержании журнала, необходимости большего количества графики и состоянии местного самарского распространения программного обеспечения.
  • Обо всём
    Критика качества программного обеспечения Sinclair, беспокойство о влиянии плохой программы на срок службы компьютеров и комментарии о практике группы CODE BUSTERS.
  • Ликбез - Paul Atrides
    Подробное рассмотрение восьми основных этапов разработки программного обеспечения, от определения технических требований до тестирования и распространения. В статье приводятся примеры необходимости каждого этапа и критикуются плохо выполненные примеры. Подчеркивается важность системного программирования для коммерческих и личных проектов программного обеспечения.
  • Железо
    Статья обсуждает проблемы синхронизации в различных моделях Spectrum и предлагает схемное решение для исправления задержек сигнала INT для улучшения графической производительности.
  • Анонс - M.M.A
    Введение новой рубрики, подчеркивающей работы самарских программистов, описание проектов, таких как ZX-WINWORD, UNRECOGNIZED FORMATTING OBJECT и DESIGNER ANALYSIS FUNCTIONS. ZX-WINWORD стремится быть издательской системой для Spectrum, а U.F.O. предлагает передовое копирование дисков. DESIGNER ANALYSIS FUNCTIONS помогает в графическом построении и анализе функций.
  • Погурамим - Unbeliever
    Юмористический рассказ о Штирлице, вымышленном офицере разведки, в абсурдных и сюрреалистичных ситуациях с гестапо, программированием и тайными планами.
  • Погурамим - Unbeliever
    Юмористический и вымышленный рассказ о шпионских приключениях Штирлица во время тайной операции с множеством неожиданных поворотов и сатирой.
  • Реклама
    Реклама магазина электроники и компонентов, предлагающего б/у технику, ПО и литературу.