
Лекции по информатике / Раздел06(Технологии программирования)
.pdfСтраница 1 из 16
ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ |
(СЛАЙД 1) |
Технологией программирования называют совокупность методов и средств, используемых в процессе разработки программного обеспечения. Как любая другая технология, технология программирования представляет собой набор технологических инструкций, включающих:
•указание последовательности выполнения технологических операций;
•перечисление условий, при которых выполняется та или иная операция;
•описания самих операций, где для каждой операции определены исходные данные, результаты, а также инструкции, нормативы, стандарты, критерии и методы оценки и т. п.
Тема 1 Системы программирования |
(СЛАЙД 2) |
Система программирования — это среда для разработки новых программ на конкретном языке программирования.
1.1 Основные элементы систем программирования
В самом общем случае для создания программы на выбранном языке программирования нужно иметь следующие компоненты.
1)Текстовый редактор. Так как текст программы записывается с помощью ключевых слов, обычно происходящих от слов английского языка, и набора стандартных символов для записи всевозможных операций, то формировать этот текст можно в любом редакторе, получая в итоге текстовый файл с исходным текстом программы. Лучше использовать специализированные редакторы, которые ориентированы на конкретный язык программирования и позволяют в процессе ввода текста выделять ключевые слова и идентификаторы разными цветами и шрифтами. Подобные редакторы созданы для всех популярных языков и дополнительно могут автоматически проверять правильность синтаксиса программы непосредственно во время ее ввода.
2)Исходный текст с помощью программы-компилятора переводится в машинный код. С помощью языка программирования создается не готовая программа, а только ее текст, описывающий ранее разработанный алгоритм. Чтобы получить работающую программу, надо этот текст либо автоматически перевести в машинный код (для этого служат программыкомпиляторы) и затем использовать отдельно от исходного текста, либо сразу выполнять команды языка, указанные в тексте программы (этим занимаются программыинтерпретаторы). Если обнаружены синтаксические ошибки, то результирующий код создан не будет. На этом этапе уже возможно получение готовой программы, но чаще всего в ней не хватает некоторых компонентов, поэтому компилятор обычно выдает промежуточный объектный код (двоичный файл, стандартное расширение .OBJ).
3)Исходный текст большой программы состоит, как правило, из нескольких модулей (файлов с исходными текстами), потому что хранить все тексты в одном файле неудобно — в них сложно ориентироваться. Каждый модуль компилируется в отдельный файл с объектным кодом, которые затем надо объединить в одно целое. Кроме того, к ним надо добавить машинный код подпрограмм, реализующих различные стандартные функции (например, вычисляющих математические функции sin или ln). Такие функции содержатся в библиотеках (файлах со
Страница 1 из 16
Страница 2 из 16
стандартным расширением .LIB), которые поставляются вместе с компилятором. Сгенерированный код модулей и подключенные к нему стандартные функции надо не просто объединить в одно целое, а выполнить такое объединение с учетом требований операционной системы, то есть получить на выходе программу, отвечающую определенному формату.
4)Объектный код обрабатывается специальной программой – редактором связей или сборщиком, который выполняет связывание объектных модулей и машинного кода стандартных функций, находя их в библиотеках, и формирует на выходе работоспособное приложение — исполняемый код для конкретной платформы. Если по каким-то причинам один из объектных модулей или нужная библиотека не обнаружены (например, неправильно указан каталог с библиотекой), то сборщик сообщает об ошибке и готовой программы не получается.
Исполняемый код – это законченная программа, которую можно запустить на любом компьютере, где установлена операционная система, для которой эта программа создавалась. Как правило, итоговый файл имеет расширение .ЕХЕ.
1.2 Интегрированные системы программирования |
(СЛАЙД 3) |
Интегрированная система программирования (англ. IDE, Integrated development environment) — система программных средств, используемая для разработки программного обеспечения.
Среда разработки включает в себя:
•текстовый редактор;
•компилятор;
•редактор связей;
•библиотеки функций.
Как правило, в стандартную поставку входят как минимум три последних компонента, но хорошая интегрированная система включает в себя и специализированный текстовый редактор, причем почти все этапы создания программы в ней автоматизированы: после того как исходный текст введен, его компиляция и сборка выполняются одним нажатием клавиши. Это очень удобно, так как не требует ручной настройки множества параметров запуска компилятора и редактора связей, указывания им нужных файлов вручную и т. д. Процесс компиляции обычно демонстрируется на экране: показывается, сколько строк исходного текста откомпилировано, или выдаются сообщения о найденных ошибках.
В современных интегрированных системах имеется еще один компонент – отладчик, который позволяет анализировать работу программы во время ее выполнения. С его помощью можно последовательно выполнять отдельные операторы исходного текста по шагам, наблюдая при этом, как меняются значения различных переменных. Без отладчика разработать крупное приложение очень сложно.
Страница 2 из 16
Страница 3 из 16
1.3 Основные системы программирования |
(СЛАЙД 4) |
Из универсальных языков программирования сегодня наиболее популярны следующие:
•Бейсик (Basic) — для освоения требует начальной подготовки (общеобразовательная школа);
•Паскаль (Pascal) — требует специальной подготовки (школы с углубленным изучением предмета и общетехнические вузы);
•Си++ (C++), Ява (Java), Си Шарп (С#) — требуют профессиональной подготовки (специализированные средние и высшие учебные заведения).
Для каждого из этих языков программирования сегодня имеется немало систем программирования, выпускаемых различными фирмами и ориентированных на различные модели ПК и операционные системы. Наиболее популярны следующие визуальные среды быстрого проектирования программ для Windows:
•Basic (разработан в 1963 году Томасом Куртом и Джоном Кемени): Microsoft Visual Basic;
•Pascal (разработан в 1968-69 годах Никлаусом Виртом): Borland Delphi;
•C++ (разработан в начале 1980-х годов Бьёрном Страуструпом): Microsoft Visual C++;
•Java (разработан в 1995 году компанией Sun Microsystems): Borland JBuilder;
•C# (разработан в 1998—2001 годах компанией Microsoft): Microsoft Visual Studio .NET, Borland C#Builder.
Для разработки серверных и распределенных приложений можно использовать систему программирования Microsoft Visual C++, продукты фирмы Borland, практически любые средства программирования на Java. В дальнейшем будут рассматриваться возможности, характерные для Бейсика, Паскаля и Си++. (СЛАЙД 5)
Ниже для иллюстрации приведены на языках Бейсик и Си программы решения одной и той же простой задачи — вычисления суммы S элементов одномерного массива A=(a1, a2, ..., an).
Программа на Бейсике
INPUT "N = "; N : DIM A(N) FOR I = 1 TO N
PRINT "A("; I; ") ="; INPUT A(I)
NEXT I
S = 0
FOR I = 1 TO N
S = S + A(I) NEXT I
PRINT "Сумма ="; S END
Программа на C
#include <stdio.h>
#include <conio.h> main()
{
float a[100], s; int i, n; clrscr(); printf("n="); scanf("%i", &n);
for (i = 1; i <= n; i++){ printf("a[%i]=", i); scanf("%f", &a[i]);}
s=0;
for (i = 1; i <= n; i++) s = s + a[i];
printf("s = % f \ n", s); return 0;
}
Страница 3 из 16
|
Страница 4 из 16 |
Тема 2. Этапы решения задач на компьютерах |
(СЛАЙД 6) |
2.1 Основные этапы создания программных продуктов |
(СЛАЙД 7) |
Бурное развитие вычислительной техники привело к интенсивной математизации не только естественных и технических, но и гуманитарных наук. Все это заметно расширило круг задач, решаемых в настоящее время на ЭВМ. Реализация задач каждого класса имеет свою специфику; тем не менее можно выделить этапы, характерные для большинства задач.
1)Постановка задачи: сбор информации; формулировка условий; определение конечных целей решения задачи; определение формы выдачи результатов; описание данных (их типов, структуры, диапазонов изменения величин и т.д.). Корректность постановки задачи пользователем является важным моментом, так как от нее в значительной степени зависят все последующие действия. Ошибки, допущенные на этом этапе, даже при безупречном выполнении последующих, могут привести к тому, что разработанный программный продукт не будет соответствовать требованиям конечного потребителя.
2)Этап формализации: анализ требований и исследование задачи (модели); анализ существующих аналогов; анализ технических и программных средств; разработка математической модели; разработка структур данных. Знания о том, как ведет себя система в различных условиях, при различных формах управленческих воздействий специалисты получают путем изучения ее поведения на моделях.
Моделирование – создание и исследование модели, замещающей оригинал.
Модель – это новый объект, который отражает некоторые существенные стороны изучаемого объекта.
Различают модели:
∙детерминированные (в системах отсутствуют случайные воздействия) и стохастические (в системах присутствуют вероятностные воздействия);
∙предметные (материальные) и знаковые (информационные);
∙статические (описывающие систему в определенный момент времени) и динамические (рассматривающие поведение системы во времени).
Всвою очередь, динамические модели подразделяют на дискретные, (в которых все события происходят по интервалам времени), и непрерывные (все события происходят непрерывно во времени).
Врамках нашего предмета мы выделяем информационную модель (в общем случае) – это описание объекта моделирования.
Формализация – это замена реального объекта или процесса его формальным описанием, т.е. информационной моделью. Как известно, информация может быть представлена в разной форме, поэтому существуют различные формы информационных моделей: вербальные (словесные, описательные), графические, табличные, математические, формально-логические.
Уровни информационных моделей:
∙концептуальная модель – обеспечивает интегрированное представление о предметной области (технологические карты, план производства), имеет слабо-формализованный характер;
Страница 4 из 16
Страница 5 из 16
∙логическая – формализуется из предыдущей (к.м.) путем выделения конкретной части, ее детализации и формализации;
∙математическая модель – л.м., формализующая на языке математики взаимосвязи в выделенной предметной области. Математическая модель позволяет свести реальную задачу к математической. С этой целью условие задачи описывается либо в виде системы уравнений, либо в виде последовательности формул, необходимых для получения нужного результата.
3)Разработка алгоритма (проектирование): выбор метода решения задачи; выбор формы записи алгоритма (блок-схемы, псевдокод и др.); выбор тестов и метода тестирования; проектирование алгоритма.
Разработка алгоритма начинается с выбора и обоснования численного метода решения задачи. Само по себе математическое описание в большинстве случаев трудно перевести на машинный язык. Поэтому необходимо найти способ решения этой задачи. Для некоторых классов математических задач существуют точные методы решения, которые можно представить в виде последовательности арифметических и логических действий. Но для многих задач (алгебраические уравнения и системы уравнений, вычисление интегралов, дифференциальные уравнения и т.д.) точные методы решения или неизвестны или приводят к очень громоздким формулам. Поэтому были разработаны специальные численные методы, которые позволяют получить приближенное решение с требуемой точностью. Такие методы имеются практически для любых задач, встречающихся на практике (в противном случае их разрабатывают самостоятельно). После того как численный метод решения выбран, приступают к проектированию алгоритма. Разработка алгоритма заключается в разложении вычислительного процесса на составные части, установлении порядка их следования, в описании содержания каждой из частей в той или иной форме.
4)Программирование (кодирование): выбор языка программирования; уточнение способов организации данных; запись алгоритма на выбранном языке программирования.
На этапе составления программы алгоритм записывают на каком-либо из известных языков программирования. Для решения прикладных задач чаще всего используют алгоритмические языки высокого уровня: Basic, Fortran, Pascal, PL\1 и другие.
При разработке программы всю задачу стараются разбить на более простые подзадачи, которые оформляются как самостоятельные процедуры (программные модули). Это облегчает процесс разработки, так как, во-первых, решение сложной задачи сводится к решению более простых подзадач; во-вторых, появляется возможность использовать уже готовые программные модули, если какую-то подзадачу удалось свести к уже решенной задаче; в- третьих, каждый участник группы разработчиков может сконцентрировать усилия на создании отдельного программного модуля.
Разработкой программы завершается часть реализации задачи, не связанная с применением ЭВМ. Все последующие этапы выполняются непосредственно на машине.
5)Тестирование и отладка программы: синтаксическая отладка; отладка семантики и логической структуры; тестовые расчеты и анализ результатов тестирования; совершенствование программы. Когда программа закончена (готова работоспособная альфаверсия), она поступает на тестирование.
Страница 5 из 16
Страница 6 из 16
Тестированием называется проверка правильности работы программы в целом, либо ее составных частей.
Отладка - это процесс поиска и устранения ошибок (синтаксических и логических) в программе, производимый по результатам ее выполнения на компьютере.
Отладка и тестирование — это два четко различимых и непохожих друг на друга этапа: при отладке происходит локализация и устранение синтаксических ошибок и явных ошибок кодирования; в процессе же тестирования проверяется работоспособность программы, не содержащей явных ошибок. Тестирование устанавливает факт наличия ошибок, а отладка выясняет ее причину. Однако тестирование может показать лишь наличие ошибок, но не их отсутствие. Нередки случаи, когда новые входные данные вызывают отказ или получение неверных результатов работы программы, которая считалась полностью отлаженной. В современных системах программирования отладка осуществляется часто с использованием специальных программных средств, называемых отладчиками.
6)Анализ и документирование результатов решения задачи и уточнение в случае необходимости математической модели с повторным выполнением этапов 2-5. Программа, прошедшая отладку и тестирование, готова для практического использования, то есть для решения реальной задачи на ЭВМ. На этапе решения составляются инструкции по использованию программы и подготавливаются исходные данные. С развитием ЭВМ и их программного обеспечения программы стали разрабатываться с учетом их длительного использования. На основе анализа результатов решения задачи делается заключение о практической значимости полученных результатов и необходимости корректировки исходных данных или модели.
7)Сопровождение программы: ее доработка для решения конкретных задач, а также составление технической документации к решенной задаче, к математической модели, к алгоритму, к программе, к набору тестов, к использованию.
Сопровождение программы — это работа, связанная с ее обслуживанием в процессе эксплуатации. Любая программа, предназначенная для длительной эксплуатации, должна иметь соответствующую документацию и инструкцию по использованию.
Следует отметить, что деление процесса решения задачи на этапы является в некоторой степени условным. Решения, принимаемые на любом этапе, могут во многом повлиять на последующие; с другой стороны, результаты, полученные на любом этапе, могут потребовать кардинального пересмотра уже проделанной работы.
Жизненный цикл программного обеспечения – это непрерывный процесс, который начинается с момента принятия решения о необходимости его создания и заканчивается в момент его полного изъятия из эксплуатации
Страница 6 из 16
Страница 7 из 16
2.2 Отладка программного обеспечения |
(СЛАЙД 8) |
Отладка — этап разработки компьютерной программы, на котором обнаруживают, локализуют и устраняют ошибки. Чтобы понять, где возникла ошибка, приходится: узнавать текущие значения переменных; и выяснять, по какому пути выполнялась программа.
Существуют две взаимодополняющие технологии отладки.
∙Использование отладчиков — программ, которые включают в себя пользовательский интерфейс для пошагового выполнения программы: оператор за оператором, функция за функцией, с остановками на некоторых строках исходного кода или при достижении определённого условия.
∙Вывод текущего состояния программы с помощью расположенных в критических точках программы операторов вывода — на экран, принтер, громкоговоритель или в файл. Вывод отладочных сведений в файл называется журналированием.
2.3 Тестирование программного обеспечения |
(СЛАЙД 9) |
Тестирование программного обеспечения — процесс выявления ошибок в программном обеспечении (ПО). К сожалению, существующие на сегодняшний день методы тестирования ПО не позволяют однозначно и полностью устранить все дефекты и ошибки и установить корректность функционирования анализируемой программы особенно в закрытых частных программах. Поэтому все существующие методы тестирования действуют в рамках формального процесса проверки исследуемого или разрабатываемого ПО.
Классификация видов тестирования
Существует несколько признаков по которым принято производить классификацию видов тестирования. Обычно выделяют следующие признаки:
По объекту тестирования:
•Функиональное тестирование (functional testing)
•Нагрузочное тестирование
Тестирование производительности (perfomance/stress testing)
Тестирование стабильности (stability/load testing)
•Тестирование опыта пользователя (usability testing)
•Тестирование интерфейса пользователя (UI testing)
•Тестирование безопасности (security testing)
•Тестирование совместимости (compartability testing)
По знанию системы: |
(СЛАЙД 10) |
•Тестирование чёрного ящика (black box)
•Тестирование белого ящика (white box)
•Тестирование серого ящика (gray box)
Страница 7 из 16
Страница 8 из 16
В терминологии профессионалов тестирования (программного и некоторого аппаратного обеспечения), фразы «тестирование белого ящика» и «тестирование чёрного ящика» относятся к тому, имеет ли разработчик тестов доступ к исходному коду тестируемого ПО, или же тестирование выполняется через пользовательский интерфейс либо прикладной программный интерфейс, предоставленный тестируемым модулем.
При тестировании белого ящика (англ. white-box testing, также говорят — прозрачного ящика), разработчик теста имеет доступ к исходному коду программ и может писать код, который связан с библиотеками тестируемого ПО.
При тестировании чёрного ящика, тестировщик имеет доступ к ПО только через те же интерфейсы, что и заказчик или пользователь, либо через внешние интерфейсы, позволяющие другому компьютеру либо другому процессу подключиться к системе для тестирования. Например, тестирующий модуль может виртуально нажимать клавиши или кнопки мыши в тестируемой программе с помощью механизма взаимодействия процессов, с уверенностью в том, все ли идёт правильно, что эти события вызывают тот же отклик, что и реальные нажатия клавиш и кнопок мыши.
По версиям тестирования:
•Альфа-тестирование (alpha testing)
Тестирование при приёмке (smoke testing)
Тестирование новой функциональности (new feature testing)
Тестирование при сдаче (acceptance testing)
•Бета-тестирование (beta testing)
Альфа-тестирование — имитация реальной работы с системой штатными разработчиками, либо реальная работа с системой потенциальными пользователями/заказчиком на стороне разработчика. Часто альфа-тестирование применяется для законченного продукта в качестве внутреннего приёмочного тестирования. Иногда альфа-тестирование выполняется под отладчиком или с использованием окружения, которое помогает быстро выявлять найденные ошибки. Обнаруженные ошибки могут быть переданы тестировщикам для дополнительного исследования в окружении, подобном тому, в котором будет использоваться ПО.
Бета-тестирование — в некоторых случаях выполняется распространением версии с ограничениями (по функциональности или времени работы) для некоторой группы лиц, с тем чтобы убедиться, что продукт содержит достаточно мало ошибок. Иногда бета-тестирование выполняется для того, чтобы получить обратную связь о продукте от его будущих пользователей.
Бета-тестирование в целом ограничено техникой чёрного ящика (хотя постоянная часть тестировщиков обычно продолжает тестирование белого ящика параллельно бета-тестированию). Таким образом, термин «бета-тестирование» может указывать на состояние программы (ближе к выпуску чем «альфа»), или может указывать на некоторую группу тестировщиков и процесс, выполняемый этой группой. Итак, тестировщик может продолжать работу по тестированию белого ящика, хотя ПО уже «в бете» (стадия), но в этом случае он не является частью «бетатестирования» (группы/процесса).
Страница 8 из 16
|
Страница 9 из 16 |
Тема 3. Структурное программирование |
(СЛАЙД 11) |
1.1 Понятие подпрограммы |
(СЛАЙД 12) |
При алгоритмическом программировании текст программы представляет собой линейную последовательность операторов присваивания, цикла и условных операторов. Таким способом можно решать не очень сложные задачи и составлять программы, содержащие несколько сот строк кода. После этого понятность исходного текста резко падает из-за того, что общая структура алгоритма теряется за конкретными операторами языка, выполняющими слишком детальные, элементарные действия. Возникают многочисленные вложенные условные операторы и операторы циклов, логика становится совсем запутанной, при попытке исправить один ошибочный оператор вносится несколько новых ошибок, связанных с особенностями работы этого оператора, результаты выполнения которого нередко учитываются в самых разных местах программы. Поэтому набрать и отладить длинную линейную последовательность операторов практически невозможно.
(СЛАЙД 13)
При создании средних по размеру приложений (несколько тысяч строк исходного кода) используется структурное программирование, идея которого заключается в том, что структура программы должна отражать структуру решаемой задачи, чтобы алгоритм решения был ясно виден из исходного текста. Структурное программирование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков.
С этой целью в программирование введено понятие подпрограммы — набора операторов, выполняющих нужное действие и не зависящих от других частей исходного кода. Программа разбивается на множество мелких подпрограмм (занимающих до 50 операторов — критический порог для быстрого понимания цели подпрограммы), каждая из которых выполняет одно из действий, предусмотренных исходным заданием. Комбинируя эти подпрограммы, удается формировать итоговый алгоритм уже не из простых операторов, а из законченных блоков кода, имеющих определенную смысловую нагрузку, причем обращаться к таким блокам можно по названиям. Подпрограммы — это новые операторы или операции языка, определяемые программистом.
Возможность применения подпрограмм относит язык программирования к классу
процедурных языков.
Страница 9 из 16
Страница 10 из 16
1.2 Нисходящее проектирование |
(СЛАЙД 14) |
Наличие подпрограмм позволяет вести проектирование и разработку приложения сверху вниз — такой подход называется нисходящим проектированием.
Сначала выделяется несколько подпрограмм, решающих самые глобальные задачи (например, инициализация данных, главная часть и завершение), потом каждый из этих модулей детализируется на более низком уровне, разбиваясь в свою очередь на небольшое число других подпрограмм, и так происходит до тех пор, пока вся задача не окажется реализованной.
Такой подход удобен тем, что позволяет человеку постоянно мыслить на предметном уровне, не опускаясь до конкретных операторов и переменных. Кроме того, появляется возможность некоторые подпрограммы не реализовывать сразу, а временно откладывать, пока не будут закончены другие части.
Например, если имеется необходимость вычисления сложной математической функции, то выделяется отдельная подпрограмма такого вычисления, но реализуется она временно одним оператором, который просто присваивает заранее выбранное значение (например, 5). Когда все приложение будет написано и отлажено, тогда можно приступить к реализации этой функции. Немаловажно, что небольшие подпрограммы значительно проще отлаживать, что существенно повышает общую надежность всей программы.
Очень важная характеристика подпрограмм — это возможность их повторного использования. С интегрированными системами программирования поставляются большие библиотеки стандартных подпрограмм, которые позволяют значительно повысить производительность труда за счет использования чужой работы по созданию часто применяемых подпрограмм.
Страница 10 из 16