Как разрабатывают программы?

§23. Как разрабатывают программы?

Информатика. Учебник для 9 класса (по учебнику К. Ю. Полякова, Е.А. Еремина, базовый уровень)


Этапы разработки программ

Ключевые слова:
• постановка задачи	
• построение модели	
• разработка алгоритма 
	и способа представления 
					данных 
• кодирование и сопровождение
• отладка
• тестирование
• документирование
• внедрение

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

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

2. Построение модели. Когда задача поставлена, нужно выполнить формализацию — записать все требования на формальном языке, например на языке математических формул. В результате строится модель исходной задачи, в которой чётко определяются все связи между исходными данными и желаемым результатом.

3. Разработка алгоритма и способа представления данных. Любая компьютерная программа служит для обработки данных. Поэтому очень важно определить, как будут представлены данные в памяти компьютера (например, в виде отдельных переменных или массивов). Способ хранения данных определяет и алгоритмы работы с ними: если выбрана неудачная структура данных, очень сложно написать хороший алгоритм обработки. Известная книга швейцарского специалиста Никлауса Вирта, автора языка Паскаль, так и называется «Алгоритмы 4- структуры данных = программы».

4. Кодирование. Только теперь, когда выбран способ хранения данных и готовы алгоритмы для работы с ними, программисты приступают к написанию программы. Эта работа называется кодированием, потому что программист кодирует алгоритм — записывает его на языке программирования. Результат его работы — текст программы — часто называют программным кодом.

5. Отладка. Ни один человек не может написать достаточно большую программу без ошибок. Поэтому программисту приходится искать и устранять ошибки в программах. Этот процесс называется отладкой программы.

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

Сложнее исправлять логические ошибки — ошибки в составлении алгоритма. Из-за логических ошибок программа работает не так, как требуется. Чтобы исправить такую ошибку, программисту приходится внимательно изучить работу программы, иногда даже выполнить многие вычисления вручную, без компьютера, и сравнить результаты каждого шага с теми результатами, которые даёт программа.

Логические ошибки могут привести к отказу — аварийной ситуации, например к делению на ноль. Часто при отказе операционная система завершает работу программы, и данные могут быть потеряны. Отказы часто называют ошибками времени выполнения (англ. runtime error).

6. Тестирование. Когда программист исправил все обнаруженные им ошибки, он передаёт программу на тестирование — тщательную проверку в различных режимах. Обычно эту работу выполняют специально обученные люди — тестировщики.

Тестирование в компании, которая разрабатывает программу, называется альфа-тестированием. Когда оно завершено, начинается бета-тестирование (внешнее тестирование). Программа (бета- версия) рассылается некоторым клиентам или даже распространяется свободно. Цель этого этапа — привлечь к тестированию множество людей, чтобы они смогли найти как можно больше ошибок в программе.

7. Документирование — это разработка документации на программу. Этим занимаются технические писатели. Техническая документация описывает, как работает программа, а руководство пользователя содержит инструкцию по использованию программы.

8. Внедрение и сопровождение. Когда программа отлажена и документация по ней готова, её нужно передать заказчику. Компания берёт на себя сопровождение программы — обучение пользователей, исправление найденных ими ошибок, техническую поддержку (ответы на вопросы). Часто компании выпускают новые версии программ, в которых исправляются ошибки и добавляются новые возможности.

Методы проектирования программ

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

Как разрабатывают программы?

Рис. 4.7

Решение каждой подзадачи оформляется в виде подпрограммы — вспомогательного алгоритма (вспомните материал 7 класса). Программист получает персональное задание — написать одну или несколько подпрограмм. Он может работать независимо от других, важно только соблюдать правила обмена данными между «его» подпрограммой и остальными.

Если нужно, подзадачи разбиваются на более мелкие подзадачи (см. третий уровень дерева на рис. 4.7) и т. д., пока все подпрограммы не будут записаны полностью на языке программирования. Обычно подпрограмма не должна быть длиннее, чем 30—40 строк.

Такой приём называется последовательным уточнением или проектированием «сверху вниз», от основной задачи к мелким подзадачам.

Существует и другой подход — проектирование «снизу вверх»: сначала разработать подпрограммы для решения самых простых задач, а потом собирать из них подпрограммы для более крупных задач, как из кубиков. При этом мы строим дерево, показанное на рис. 4.7, снизу вверх, с нижнего уровня. На практике программисты обычно сочетают оба подхода.

Отладка программы

Простейший метод отладки программы — это вывод отладочной информации. Рассмотрим этот способ на примере.

Программисту нужно было написать программу, которая вычисляет корни квадратного уравнения ах2 + bх + с = 0. Он поспешил и написал программу так:

Как разрабатывают программы?

Для вычисления квадратного корня здесь используется стандартная функция sqrt. Оказалось, что программа в некоторых случаях работает верно (например, при а = 1, b = 2 и с = 1), а в других случаях — неверно (например, при а = 1, b = -5 и с = 6).

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

1) неверно вводятся данные;

2) неверно вычисляется дискриминант D = b2 -4ас;

3) неверно вычисляются корни

Как разрабатывают программы?

Добавим в программу две дополнительные команды для вывода отладочной информации:

1) выведем значения коэффициентов а, Ъ и с сразу после ввода;

2) выведем вычисленное значение дискриминанта.

Значения корней уравнения уже и так выводятся в конце работы программы.

Как разрабатывают программы?

При вводе коэффициентов 1, -5 и 6 программа (на алгоритмическом языке) выводит:

1.0 -5.0 6.0

D=21.0

х1=4.791288 х2=0.208712

По первой строке видим, что ввод выполнен правильно — именно такие числа мы вводили. А вот значение дискриминанта, вычисленного программой, отличается от того, что мы ожидаем получить: D = (-5)2 — 4 • 1 • 6 = 1. Поэтому нужно искать ошибку в выражении для вычисления D.

Если исправить эту ошибку (сделайте это самостоятельно), мы увидим, что дискриминант считается правильно, а корни уравнения — нет (при а = 1, 5 = -5 и с = 6 мы должны получить х1 = 3 и х2 = 2). Поэтому останется исправить ошибки в строках, где вычисляются корни.

Современные среды программирования, в том числе КуМир, АЛГО и PascalABC.NET, содержат встроенный отладчик, который позволяет:

• выполнять программу в пошаговом режиме;
• после выполнения очередной команды просматривать значения переменных в памяти;
• устанавливать точки останова, где программа должна остановиться и перейти в пошаговый режим.

Доработайте программу так, чтобы учесть случай, когда уравнение не имеет вещественных корней.

Документирование программы

К выпуску программы компания-разработчик должна подготовить документацию на программу. Руководство пользователя (это наиболее важная часть документации) содержит всю информацию, необходимую для использования программы:

• назначение программы;
• формат входных данных;
• формат выходных данных;
• примеры использования программы.

Для примера составим документацию на простую программу, отладкой которой мы только что занимались.

Назначение программы: вычисление корней квадратного уравнения ах2 + bх + с = 0.

Формат входных данных: значения коэффициентов а, b и с вводятся с клавиатуры через пробел в одной строке.

Формат выходных данных: значения корней уравнения выводятся на экран через пробел в одной строке; перед значением первого корня выводится текст х1=, перед значением второго корня — текст х2=.

Пример использования программы (решение уравнения х2 — 5х + 6 = 0):

Введите а, b, с: 1 -5 6

х1=4.791288 х2=0.208712


Выводы

• Этапы разработки программного обеспечения:

— постановка задачи;
— построение модели;
— разработка алгоритма и способа представления данных;
— кодирование;
— отладка;
— тестирование;
— документирование;
— внедрение и сопровождение.

• При использовании метода проектирования «сверху вниз» (метода последовательного уточнения) задача разбивается на подзадачи, каждая из подзадач оформляется в виде вспомогательного алгоритма. Сначала составляется основная программа, а затем все вспомогательные алгоритмы.

• При использовании метода проектирования «снизу вверх» разработка программы начинается с наиболее мелких подзадач, из которых основная программа затем собирается, как из кубиков.

Нарисуйте в тетради интеллект-карту этого параграфа.


Вопросы и задания

1. Почему алгоритмы и способы хранения данных разрабатываются одновременно?
2. Чем отличается тестирование от отладки?
3. Можно ли считать, что программа, успешно прошедшая тестирование, не содержит ошибок?
4. Может ли произойти отказ в программе, в которой нет логических ошибок?
5. Если программа плохо документирована, к каким последствиям это может привести?
6. Как вы думаете, почему важно сопровождение программы после её сдачи заказчику?
7. Чем отличаются два подхода к проектированию программ: «сверху вниз» и «снизу вверх»?
8. Выполните по указанию учителя задания в рабочей тетради.

Подготовьте сообщение

а) «Структурное программирование»
б) «Парадигмы (стили) программирования»


Оглавление

§22. Сложность алгоритмов.

§23. Как разрабатывают программы?

§24. Процедуры.