1.2. Понятие о технологии разработки программ. Принципы и этапы разработки программ
Понятие «современная методология разработки программ»включает общие принципы и правила решения задачи с помощью компьютера.
Удовлетворительного общего описания механизма решения задач не существует. Более того, невозможно четко отделить постановку задачи от ее решения. Использование компьютера делает этот процесс еще более сложным. Поэтому методология программирования призвана не жестко регламентировать деятельность программиста, а исследовать и рекомендовать организационные рамки, способствующие написанию хороших программ. Цель – повышение производительности труда программистов, причем «производительность» подразумевает оптимальное использование и человеческих, и компьютерных ресурсов.
Не останавливаясь на философских аспектах методологии, в данном пособии приведем только основные ее положения, на которых базируется процесс разработки программы, и основные этапы этого процесса. Поэтому далее будем говорить о технологииразработки программ.
● Для оценки упомянутой производительности используется ряд критериев качества программ. Поскольку такое комплексное понятие производительности формально определить невозможно, критерии также оказываются не строго определенными, взаимосвязанными, а иногда противоречивыми. В разных источниках могут приводиться различные наборы критериев. Но, несмотря на это, как правило эти наборы сводимы один к другому и хорошо работают!
Автор предлагает следующую совокупность критериев.
- Работоспособность.
- Правильность.(программа должна решать именно поставленную, а не более широкую, более узкую или измененную задачу).
- Надежность (программа должна работать при любых исходных данных – анализировать их правильность и выдавать результаты или диагностику ошибок).
- Читабельность (текст программы – итоговый носитель всей информации о решении, поэтому он должен иметь четкую и ясную организацию, отображающую решение).
- Легкость отладки и тестирования.
- Модифицируемость (возможность внесения изменений в программу).
- Документированность (наличие документации по всему процессу разработки, начиная от постановки задачи); документированность обеспечивает возможность передачи программы другим лицам, или отчуждениепрограммы.
- Простота пользования, наличие сервиса.
- эффективность применительно к компьютеру (использование минимума машинных ресурсов – памяти и времени выполнения).
Видно, например, что критерии 4, 6, 7 взаимосвязаны, критерий 5 ими определяется; критерии 3 – 8 противоречат 9-му, и сам он внутренне противоречив. Делать акцент на тех или иных критериях следует в зависимости от реальной ситуации. Так, мощность современных компьютеров в большинстве случаев позволяет не слишком учитывать ресурсы. Однако если речь идет о специальных расчетных инженерных задачах, время решения которых объективно велико, на первый план выступают ресурсы. ● Принципысовременной технологии разработки программ
- Разбиение процесса создания программы на четкие этапы и обеспечение максимальной их автономности:
- не следует переходить к очередному этапу, не закончив предыдущего;
- предыдущий этап может захватывать последующий, но не наоборот.
- Уделение основного внимания начальным этапам разработки – уточнению постановки задачи (спецификации) и проектированию алгоритма и данных.
- Использование для проектирования специального языка высокого уровня. Этот принцип носит название надъязыкового подхода.
- Использование метода нисходящего проектирования, состоящего в постепенном разбиении задачи на подзадачи.
- Использование принципа структурного программирования, предписывающего построение алгоритма из ограниченного числа базовых конструкций.
При таком подходе суть решения закладывается в постепенно создаваемый проект, а собственно составление программы сводится к перекодировке алгоритма с языка проектирования на конкретный алгоритмический язык и представляет собой один из этапов, называемый кодированием. ● Жизненный цикл программного обеспечения– это весь процесс его создания и применения от начала до конца. Этапы жизненного цикла и удельный вес общих затрат на каждый из этапов приведены на рис. 1.1. Как видно из рисунка, примерно половина затрат приходится на этап, называемый сопровождением. Суть сопровождения – внесение изменений в уже находящуюся в эксплуатации программу и поддержание ее в рабочем состоянии. Это чрезвычайно важная часть жизни программы, рассмотрение которой выходит за рамки пособия. Заметим только, что эффективность сопровождения практически полностью определяется качеством выполнения предшествующих этапов разработки. ● Этапы разработки программыотображены в нижней половине рисунка в той последовательности, как они выполняются. Этапы обладают свойством преемственности, но принципиально важно, чтобы эта преемственность реализовалась сверху вниз, т.е. чтобы предшествующие этапы захватывали последующие, а не наоборот. Возвратов назад по возможности быть не должно. Кратко охарактеризуем этапы. 1. Составление внешней спецификации. Цель – уточнение постановки задачи, а именно:
- точная формулировка задачи и всех вводимых ограничений;
- определение состава и структуры входных и выходных данных и формы их ввода и вывода;
- описание аномалий– ситуаций, при которых решение не может быть получено (выход данных за границы диапазона, деление на ноль и т.п.);
- описание тестов– примеров, на которых будет проверяться работа программы;
- описание метода решения– связей входных и выходных величин, общей идеи и схемы решения задачи.
Спецификация представляет собой интерфейс между разработчиком программы и ее пользователем. Большая часть желательных качеств программы должна быть сконцентрирована в ее спецификации, так, чтобы программа после первой ее реализации требовала улучшений в минимально возможной мере.Исключением является быстродействие, которое можно повышать уже после реализации программы. 2. Проектирование алгоритма. Цель – создание алгоритма,понятного человеку. Центральный и наиболее трудоемкий этап. Требует творчества и не может быть полностью формализован. Созданный на этом этапе текст алгоритма – носитель всей информации о решении, поэтому для записи алгоритма целесообразно использовать наиболее универсальные и одновременно точные средства – «отказ от красивого и умного в пользу незамысловатого и четкого». Такими средствами являются полуформальные языки, используемые для проектирования –псевдокоды. 3. Кодирование программысостоит в переводе алгоритма с одного языка, достаточно жесткого (псевдокода), на другой, полностью формализованный (язык программирования). Если первые два этапа выполнены тщательно, то кодирование выполняется без особых трудностей. 4. Отладка и тестирование. Цель – получение работоспособной программы. Очень важный этап, требующий особого рассмотрения и здесь представленный только самыми основными положениями. Отладка– процесс изменения программы с целью исправления ошибок. Тест– совокупность специально подобранных входных и соответствующих им выходных данных, используемая для контроля правильности программы. Тестирование– исполнение программы на наборе тестов на компьютере. Отладка включает тестирование. Принципиальная трудность проектирования тестов состоит в практической невозможности составления всех тестовых наборов данных для всех возможных режимов работы алгоритма. Поэтому задача проектирования тестов сводится к проектированию ограниченногоих набора, гарантирующегос достаточной достоверностьюправильную работу программыво всехпрактически значимых режимах. Содержание тестов определяется спецификацией задачи и логикой ее решения. Функциональные тестысоставляются на уровне спецификации, до решения. Будущий алгоритм рассматривается как«черный ящик»— функция с неизвестной структурой, преобразующая входы в выходы. Суть функциональных тестов: каким бы способом ни решалась задача, при заданных входных значениях должны получиться соответствующие выходные значения. Структурные тестысоставляются для проверки логики решения, или логики работы уже готового алгоритма. Логика определяется последовательностью операций, их условным выполнением или повторением. Совокупность структурных тестов должна обеспечить проверку каждой из таких конструкций. Чаще всего совокупность тщательно составленных функциональных тестов покрывает множество структурных тестов. Длительность и сложность данного этапа полностью определяется качеством выполнения предыдущих этапов. 5. Документирование. Для удобства описания представлено как некоторый этап, но по сути таковым не является. Элементы документации – все элементы проекта, полученные при его разработке, т.е. описание результатов отдельных этапов. Если процесс разработки программы организован правильно, то документация появляется постепенно и процесс ее создания сопровождает все этапы. Поэтому стрелка-окружность на рис. 1.1 проходит через все этапы жизни программы.
Билет 5. Этапы разработки программ. Роль каждого этапа в получении качественного программного продукта. Технология программирования.
Полный процесс разработки программ состоит из следующих этапов (технологический процесс):
2. Анализ задачи и составление спецификации программы — на этом этапе проводится анализ задачи, уточняется ее постановка, разрабатываются требования, предъявляемые к программе. Создается полное и точное описание программы, называемое ее спецификацией. Уточняются обычно четыре основных момента: вход/выход данные, метод и аномалии. Спецификация задачи — это важный документ, сопровождающий программу на всем ее цикле жизни. Играет следующую роль: во-первых, служит заданием на разработку программы (из нее разработчик программы должен извлечь все, что ему нужно знать о стоящей перед ним задаче); во-вторых, является частью соглашения между заказчиком программы и ее разработчиком, описанием задачи, которое приемлемо для заказчика, не обязательно сведущего в программировании; в-третьих, она должна использоваться для проверки готовой программы (решает ли разработанная программа поставленную задачу).
3. Проектирование алгоритма и структур данных и проектирование тестов — на этом этапе формируется общая структура программы. Фундаментальным подходом к разработке программ и программных систем является нисходящее проектирование (проектирование «сверху вниз» или пошаговое уточнение). В основе нисходящего проектирования лежит идея постепенного раскрытия деталей проектируемой программы по мере движения от общей цели, сформулированной на самом верхнем уровне в условии задачи, к уровню объектов, выраженных в терминах, «понятных ЭВМ». Алгоритм записывается метаязыком, предназначенным для описания внутренней логики программы, а также для фиксации проектных решений по организации вычислений.
4. Кодирование алгоритма на языке программирования — на этом этапе алгоритм переводится с метаязыка на язык программирования.
5. Отладка (включая тестирование), предупреждение ошибок. Цель этого этапа — получение корректной программы, т.е. программы, в которой отсутствуют ошибки проекта (ошибки, которые могут возникнуть на всех этапах разработки программы, в т.ч. и ошибки, появляющиеся из-за несоответствия требований заказчика и действий исполнителя). Методика отладки: визуальный контроль, синтаксический контроль, контроль структурированности программы, тестирование.
6. Документирование — правильно построенный процесс разработки программ позволяет получать документацию параллельно, так что к окончанию отладки получается почти вся необходимая документация.
Первые 4 этапа выполняются последовательно. Пятый этап распределяется по всем этапам — каждый завершается составлением документации.
Чем меньше задача, тем сложнее выделить отдельные этапы. Но не следует стремиться к объединению отдельных этапов, даже если задача простая.
Особенностью современной методики разработки программ является то, что 2 и 3 этапам уделяется основное внимание. Чем тщательнее они выполняются, тем легче кодировать и отлаживать программу.
Технология — это совокупность методов, а также правил и порядка их применения, которые обеспечивают производство в срок качественного продукта.
Современная технология программирования инвариантна конкретному языку, классу задач и компьютеру.
Технология структурного программирования:
1. Нисходящее проектирование алгоритмов и данных.
2. Строгая последовательность этапов программирования.
3. Выполнение требований к качеству продукта.