87d46c7c0519bcaab986ee8ca96f09c0.ppt
- Количество слайдов: 66
Информатика и ЭВМ в психологии Лекция 5: Алгоритмизация.
Вопросы лекции: 1. Понятие алгоритма, его свойства 2. Основные алгоритмические конструкции 3. Виды алгоритмов
Понятие алгоритма Алгоритм - точное предписание, определяющее последовательность действий, обеспечивающую получение требуемого результата из исходных данных. Алгоритм — одно из основных понятий информатики и математики. Термин "алгоритм" произошел от латинской формы имени среднеазиатского математика аль-Хорезми — Algorithmi, под которым в средневековой Европе знали величайшего математика из Хорезма (город в современном Узбекистане) Мухаммеда бен Мусу, жившего в 783 -850 гг. В своей книге "Об индийском счете" он сформулировал правила записи натуральных чисел с помощью арабских цифр и правила действий над ними столбиком, знакомые теперь каждому школьнику. Алгоритм может быть предназначен для выполнения его человеком или автоматическим устройством, называемых исполнителями алгоритма.
Исполнитель алгоритма Создание алгоритма, пусть даже самого простого, - процесс творческий. Он доступен исключительно живым существам, а долгое время считалось, что только человеку. Другое дело - реализация уже имеющегося алгоритма. Ее можно поручить субъекту или объекту, который не обязан вникать в существо дела, а возможно, и не способен его понять. Такой субъект или объект принято называть формальным исполнителем. Примеры: • служить стиральная машина-автомат, которая неукоснительно исполняет предписанные ей действия, даже если вы забыли положить в нее порошок • человек тоже может выступать в роли формального исполнителя • различные автоматические устройства, и компьютер в том числе Каждый алгоритм создается в расчете на вполне конкретного исполнителя.
Исполнитель алгоритма Допустимые действия исполнителя– это те действия, которые может совершать исполнитель, называются его. Алгоритм должен содержать только те действия, которые допустимы для данного исполнителя. Система команд исполнителя – это совокупность допустимых действий. Среду исполнителя – объекты, над которыми исполнитель может совершать действия. Например, для алгоритмов, встречающихся в математике, средой того или иного исполнителя могут быть числа разной природы - натуральные, действительные и т. п. , буквы, буквенные выражения, уравнения, тождества и т. п.
Свойства алгоритма • Дискретность (прерывность, раздельность) - алгоритм должен представлять процесс решения задачи как последовательное выполнение простых (или ранее определенных) шагов. Каждое действие, предусмотренное алгоритмом, исполняется только после того, как закончилось исполнение предыдущего. • Детерминированность (определенность) - каждое правило алгоритма должно быть четким, однозначным и не оставлять места для произвола. Благодаря этому свойству выполнение алгоритма носит механический характер и не требует никаких дополнительных указаний или сведений о решаемой задаче. • Результативность (конечность) - алгоритм должен приводить к решению задачи за конечное число шагов. • Массовость - алгоритм решения задачи разрабатывается в общем виде, то есть, он должен быть применим для некоторого класса задач, различающихся только исходными данными. При этом исходные данные могут выбираться из некоторой области, которая называется областью применимости алгоритма.
Формы представления алгоритмов • словесная (записи на естественном языке); • графическая (изображения из графических символов); • псевдокоды (полуформализованные описания алгоритмов на условном алгоритмическом языке, включающие в себя как элементы языка программирования, так и фразы естественного языка, общепринятые математические обозначения и др. ); • программная (тексты на языках программирования).
Словесный способ записи алгоритмов представляет собой описание последовательных этапов обработки данных. Алгоритм задается в произвольном изложении на естественном языке. Пример. Алгоритм нахождения наибольшего общего делителя (НОД) двух натуральных чисел: 1. задать два числа; 2. если числа равны, то взять любое из них в качестве ответа и остановиться, в противном случае продолжить выполнение алгоритма; 3. определить большее из чисел; 4. заменить большее из чисел разностью большего и меньшего из чисел; 5. повторить алгоритм с шага 2. Недостатки: • такие описания строго не формализуемы; • страдают многословностью записей; • допускают неоднозначность толкования отдельных предписаний.
Графический способ записи алгоритмов При графическом представлении алгоритм изображается в виде последовательности связанных между собой функциональных блоков, каждый из которых соответствует выполнению одного или нескольких действий. Такое графическое представление называется схемой алгоритма или блок-схемой. В блок-схеме каждому типу действий (вводу исходных данных, вычислению значений выражений, проверке условий, управлению повторением действий, окончанию обработки и т. п. ) соответствует геометрическая фигура, представленная в виде блочного символа. Блочные символы соединяются линиями переходов, определяющими очередность выполнения действий. Достоинства: • более компактный по сравнению со словесным; • более наглядный по сравнению со словесным.
Символы блок-схемы Начало, конец алгоритма, вход и выход в подпрограмму Блок "процесс" - вычислительное действие или последовательность действий. Применяется для обозначения действия или последовательности действий, изменяющих значение, форму представления или размещения данных. Для улучшения наглядности схемы несколько отдельных блоков обработки можно объединять в один блок. Представление отдельных операций достаточно свободно.
Символы блок-схемы Блок "Ввод-вывод" -информации в программу или подпрограмму. Блок "Документ" вывод результатов на печать Блок «Предопределенный процесс" - вычисления по подпрограмме, стандартной подпрограмме, используется для указания обращений к вспомогательным алгоритмам, существующим автономно в виде некоторых самостоятельных модулей, и для обращений к библиотечным подпрограммам.
Символы блок-схемы Блок "решение" - проверка условий Используется для обозначения переходов управления по условию. В каждом блоке "решение" должны быть указаны вопрос, условие или сравнение, которые он определяет. Блок "модификация" – начало цикла Используется для организации циклических конструкций. (Слово модификация означает видоизменение, преобразование). Внутри блока записывается параметр цикла, для которого указываются его начальное значение, граничное условие и шаг изменения значения параметра для каждого повторения. Пример. i = 1, 3, 5, 7, 9, 11, …, 45, 47, 49.
Псевдокод представляет собой систему обозначений и правил, предназначенную для единообразной записи алгоритмов. • С одной стороны, он близок к обычному естественному языку, поэтому алгоритмы могут на нем записываться и читаться как обычный текст. С другой стороны, в псевдокоде используются некоторые формальные конструкции и математическая символика, что приближает запись алгоритма к общепринятой математической записи. В псевдокоде не приняты строгие синтаксические правила для записи команд, присущие формальным языкам, что облегчает запись алгоритма на стадии его проектирования и дает возможность использовать более широкий набор команд, рассчитанный на абстрактного исполнителя. Однако в псевдокоде обычно имеются некоторые конструкции, присущие формальным языкам, что облегчает переход от записи на псевдокоде к записи алгоритма на формальном языке. Пример. Алгоритмический язык (АЯ).
Служебные слова АЯ • алг (алгоритм) • цел (целый) • дано надо • вещ (вещественный) • нач (начало) • кон (конец) • сим (символьный) • арг (аргумент) • рез (результат) • лит (литерный) • ввод • вывод • знач • утв • Если то иначе • и или не • Пока все • Для от до • нц (начало цикла) • лог (логический) • кон (конец) • да / нет • При • Выбор • таб(таблица)
Общий вид алгоритма на АЯ алг название алгоритма (аргументы и результаты) дано условия применимости алгоритма надо цель выполнения алгоритма нач описание промежуточных величин | последовательность команд (тело алгоритма) кон
Оператор присваивания служит для вычисления выражений и присваивания их значений переменным. Общий вид: А : = В, где знак ": =" означает команду заменить прежнее значение переменной, стоящей в левой части, на вычисленное значение выражения, стоящего в правой части. Например, a: =(b+c)*sin(Pi/4); i: =i+1.
Пример записи алгоритма на АЯ алг Сумма квадратов (арг цел n, рез цел S) дано | n > 0 надо | S = 1*1 + 2*2 + 3*3 +. . . + n*n нач цел i ввод n; S: =0 нц для i от 1 до n S: =S+i*i кц вывод "S = ", S кон
Программный способ записи алгоритма При записи алгоритма в словесной форме, в виде блок-схемы или на псевдокоде допускается определенный произвол при изображении команд. Вместе с тем такая запись точна настолько, что позволяет человеку понять суть дела и исполнить алгоритм. Однако на практике в качестве исполнителей алгоритмов используются специальные автоматы — компьютеры. Поэтому алгоритм, предназначенный для исполнения на компьютере, должен быть записан на "понятном" ему языке. И здесь на первый план выдвигается необходимость точной записи команд, не оставляющей места для произвольного толкования их исполнителем. Следовательно, язык для записи алгоритмов должен быть формализован. Такой язык принято называть языком программирования, а запись алгоритма на этом языке — программой для компьютера.
Уровень языка программирования В зависимости от степени детализации предписаний обычно определяется уровень языка программирования — чем меньше детализация, тем выше уровень языка. Уровни языков программирования: • машинные; • машинно-оpиентиpованные (ассемблеpы); • машинно-независимые (языки высокого уровня). Машинные языки и машинно-ориентированные языки — это языки низкого уровня, требующие указания мелких деталей процесса обработки данных. Языки же высокого уровня имитируют естественные языки, используя некоторые слова разговорного языка и общепринятые математические символы. Эти языки более удобны для человека.
Языки высокого уровня • алгоритмические (Basic, Pascal, C и др. ), которые предназначены для однозначного описания алгоритмов; • логические (Prolog, Lisp и др. ), которые ориентированы не на разработку алгоритма решения задачи, а на систематическое и формализованное описание задачи с тем, чтобы решение следовало из составленного описания. • объектно-ориентированные (Object Pascal, C++, Java и др. ), в основе которых лежит понятие объекта, сочетающего в себе данные и действия над нами. Программа на объектноориентированном языке, решая некоторую задачу, по сути описывает часть мира, относящуюся к этой задаче. Описание действительности в форме системы взаимодействующих объектов естественнее, чем в форме взаимодействующих процедур.
Машинные языки Каждый компьютер имеет свой машинный язык. Машинный язык - совокупность машинных команд, которая отличается количеством адресов в команде, назначением информации, задаваемой в адресах, набором операций, которые может выполнить машина и др. Достоинства: • программист может держать под своим контролем каждую команду и каждую ячейку памяти, использовать все возможности имеющихся машинных операций. Недостатки: • Но процесс написания программы на машинном языке очень трудоемкий и утомительный. • Программа получается громоздкой, труднообозримой, ее трудно отлаживать, изменять и развивать.
Язык ассемблера — это система обозначений, используемая для представления в удобочитаемой форме программ, записанных в машинном коде. Достоинства: он позволяет программисту пользоваться • текстовыми мнемоническими (то есть легко запоминаемыми человеком) кодами • по своему усмотрению присваивать символические имена регистрам компьютера и памяти • задавать удобные для себя способы адресации • использовать различные системы счисления (например, десятичную или шестнадцатеричную) для представления числовых констант, использовать в программе комментарии и др. Перевод программы с языка ассемблера на машинный язык осуществляется специальной программой, которая также называется ассемблером и является, по сути, простейшим транслятором.
Преимущества алгоритмических языков • • • алфавит алгоритмического языка значительно шире алфавита машинного языка, что существенно повышает наглядность текста программы; набор операций, допустимых для использования, не зависит от набора машинных операций, а выбирается из соображений удобства формулирования алгоритмов решения задач определенного класса; формат предложений достаточно гибок и удобен для использования, что позволяет с помощью одного предложения задать достаточно содержательный этап обработки данных; требуемые операции задаются с помощью общепринятых математических обозначений; данным в алгоритмических языках присваиваются индивидуальные имена, выбираемые программистом; в языке может быть предусмотрен значительно более широкий набор типов данных по сравнению с набором машинных типов данных. Вывод, алгоритмические языки в значительной мере являются машиннонезависимыми. Они облегчают работу программиста и повышают надежность создаваемых программ.
Компоненты алгоритмического языка Алфавит — это фиксированный для данного языка набор основных символов, т. е. "букв алфавита", из которых должен состоять любой текст на этом языке — никакие другие символы в тексте не допускаются. Синтаксис — это правила построения фраз, позволяющие определить, правильно или неправильно написана та или иная фраза. Точнее говоря, синтаксис языка представляет собой набор правил, устанавливающих, какие комбинации символов являются осмысленными предложениями на этом языке. Семантика определяет смысловое значение предложений языка. Являясь системой правил истолкования отдельных языковых конструкций, семантика устанавливает, какие последовательности действий описываются теми или иными фразами языка и, в конечном итоге, какой алгоритм определен данным текстом на алгоритмическом языке.
Основные понятия алгоритмических языков • Имена (идентификаторы) — употpебляются для обозначения объектов пpогpаммы (пеpеменных, массивов, функций и дp. ). • Данные — величины, обpабатываемые пpогpаммой. Имеется тpи основных вида данных: константы, пеpеменные и массивы. • Опеpации — действия, которые можно выполнять над данными. • Выpажения — пpедназначаются для выполнения необходимых вычислений, состоят из констант, пеpеменных, указателей функций (напpимеp, exp(x)), объединенных знаками опеpаций. • Операторы (команды) — это наиболее крупное и содержательное понятие языка: каждый оператор представляет собой законченную фразу языка и определяет некоторый вполне законченный этап обработки данных.
Типы операций • аpифметические опеpации: + , - , * , / и дp. ; • логические опеpации: и, или, не; • опеpации отношения: < , > , <=, >= , <> ; • опеpация сцепки (иначе, "присоединения", "конкатенации") символьных значений дpуг с другом с образованием одной длинной строки, изображается знаком "+".
Константы • Константы — это данные, которые зафиксированы в тексте программы и не изменяются в процессе ее выполнения. Пpимеpы: o o числовые 7. 5, 12; логические да (истина), нет (ложь); символьные (литерные) "А", "+"; строковые "abcde", "информатика", "" (пустая строка).
Переменные Пеpеменные – это данные, которые обозначаются именами и могут изменять свои значения в ходе выполнения пpогpаммы. Типы переменных: • целые, • вещественные, • логические, • символьные • строковые. Массивы — последовательности однотипных элементов, число которых фиксировано и которым присвоено одно имя. Положение элемента в массиве однозначно определяется его индексами (одним, в случае одномерного массива, или несколькими, если массив многомерный). Иногда массивы называют таблицами.
Выpажения — пpедназначаются для выполнения необходимых вычислений, состоят из констант, пеpеменных, указателей функций (напpимеp, exp(x)), объединенных знаками опеpаций. Выражения записываются в виде линейных последовательностей символов (без подстрочных и надстрочных символов, "многоэтажных" дробей и т. д. ), что позволяет вводить их в компьютер, последовательно нажимая на соответствующие клавиши клавиатуры.
Виды выpажений • Арифметические выражения служат для определения одного числового значения. Пример. (1+sin(x))/2. Значение этого выражения при x=0 равно 0. 5, а при x=p/2 - единице. • Логические выражения описывают некоторые условия, которые могут удовлетворяться или не удовлетворяться. Таким образом, логическое выражение может принимать только два значения — "истина" или "ложь" (да или нет). Пример. Выражение x*x + y*y < r*r , определяет принадлежность точки с координатами (x, y) внутренней области круга радиусом r c центром в начале координат. При x=1, y=1, r=2 значение этого выражения — "истина", а при x=2, y=2, r=1 — "ложь". • Строковые выражения образуют строковые и символьные константы, переменные и строковые функции, разделенные знаком операции сцепки. Пример. А + В означает присоединение строки В к концу строки А. Если А = "куст ", а В = "зеленый", то значение выражения А+В есть "куст зеленый".
Операторы (команды) Оператор — это наиболее крупное и содержательное понятие языка: каждый оператор представляет собой законченную фразу языка и определяет некоторый вполне законченный этап обработки данных. В состав опеpатоpов входят: • ключевые слова; • данные; • выpажения и т. д. Виды: • неисполняемые опеpатоpы пpедназначены для описания данных и стpуктуpы пpогpаммы, • исполняемые опеpатоpы — для выполнения pазличных действий (напpимеp, опеpатоp пpисваивания, опеpатоpы ввода и вывода, условный оператор, операторы цикла, оператор процедуры и дp. ).
Стандартные функции - заранее запрограммированные и встроенные в транслятор языка подпрограммы, которые осуществляют вычисления часто употребляемых функций. Примеры. • sin(3. 05) • min(a, 5) • sin(x) • min(a, b) • min(a+b, a*b) • sin((exp(x)+1)**2) • min(a, b), min(c, d))
Правила записи арифметических выражений • • • Нельзя опускать знак умножения между сомножителями и ставить рядом два знака операций. Индексы элементов массивов записываются в квадратных (АЯ, Pascal) или круглых (Basic) скобках. Для обозначения переменных используются буквы латинского алфавита. Операции выполняются в порядке старшинства: сначала вычисление функций, затем возведение в степень, потом умножение и деление и в последнюю очередь — сложение и вычитание. Операции одного старшинства выполняются слева направо. Например, a/b*c соответствует a/b*c. Однако, в АЯ есть одно исключение из этого правила: операции возведения в степень выполняются справа налево. Так, выражение 2**(3**2) в АЯ вычисляется как 2**(3**2) = 512. В языке QBasic аналогичное выражение 2^3^2 вычислясляется как (2^3)^2 = 64. А в языке Pascal вообще не предусмотрена операция возведения в степень, в Pascal x^y записывается как exp(y*ln(x)), а x^y^z как exp(z*ln(y))*ln(x)).
x*y/z x/(y*z) или x/y/z (a**3+b**3)/(b*c) (a[i+1]+b[i-1])/(2*x*y) (-b+sqrt(b*b-4*a*c))/(2*a) (x<0) sign(x)*abs(x)**(1/5) 0. 49*exp(a*a-b*b)+ln(cos(a*a))**3 x/(1+x*x/(3+(2*x)**3))
Правила записи арифметических выражений Типичные ошибки в записи выражений: • 5 x+1 (Пропущен знак умножения между 5 и х) • a+sin x (Аргумент x функции sin x не заключен в скобки) • ((a+b)/c**3 (Не хватает закрывающей скобки)
Запись логических выражений В записи логических выражений помимо арифметических операций сложения, вычитания, умножения, деления используются: • операции отношения < (меньше), <= (меньше или равно), > (больше), >= (больше или равно), = (равно), <> (не равно), • логические операции и, или, не.
Целое число a — четное mod(a, 2) = 0 Целые числа a и b являются взаимнообратными a*b = 1 Целое число k кратно семи mod(a, 7) = 0 Каждое из чисел a, b положительно (a>0) и (b>0) Только одно из чисел a, b положительно ((a>0) и (b<=0)) или ((a<=0) и (b>0)) Число x удовлетворяет условию a
Программа – это алгоритм, записанный на языке программирования. Процесс написания программы никогда не включает изменение физических параметров компьютера. Алгоритмические типы программ: • Линейной программы - строго последовательное выполнение операторов в порядке их записи. • Программа с ветвлением содержат операторы, реализующие алгоритмические конструкции развилки (выбора, ветвления): простой выбор, альтернативный выбор, множественный выбор. • Циклические программы содержат операторы, реализующие алгоритмические конструкции циклов: цикла со счетчиком, цикла с предусловием, цикла с параметром.
Данные программы Данные входят в состав выражений и команд компьютера в виде операндов. Данные бывают переменные и постоянные (константы). Понятием "переменная" в традиционных языках программирования называется именованная область памяти, в которой хранится некоторое значение.
Задача на оператор присваивания В результате работы алгоритма: y: =x-5 x: =2*(y+1) y: =x+y Вывод y переменная y приняла значение 5. Укажите число, которое является значением переменной x до начала работы алгоритма?
Подпрограммы Подпрограмма – это ранее выделенный блок операторов, , выполняющих заданное действие и не зависящих от других частей исходного кода, к которому можно обратиться из любого места основной программы. Формальные параметры – параметры, указанные в описании подпрограммы. Фактические параметры - параметры, указываемые в момент вызова подпрограммы из основной программы. При вызове (обращении к …) подпрограммы формальным параметрам присваиваются значения фактических параметров. Рекурсия - это способ организации вычислительного процесса, при котором происходит обращение подпрограммы самой к себе
Пример алгоритма с ветвлением
Пример ошибки в алгоритме (алгоритм не имеет решения):
Цикл • Цикл - многократное исполнение одного и того же участка программы.
Вычисление суммы положительных чисел, из 20 введенных с клавиатуры S : = 0 нц для i от 1 до 20 ввод а если а > 0 то S: =S+a все кц вывод S
Пример алгоритма с циклом «Пока» : А и В после выполнения алгоритма примут следующие значения: А = 1, В = 1
Пример выполнения алгоритма с циклом «Пока» Выполним алгоритм: Если aa выполнять действия d=d+1, c=c-1 с начальными значениями: a=8, b=3 В результате переменные c и d примут значения: c = 8, d = 2.
Массивы Массив - это называется последовательность фиксированного числа однотипных переменных, имеющих общее имя. Массив относится к составным (конструируемым) типам данных. Элементы массива упорядочены по возрастанию индексов элементов. Пример. Если элементы массива D[1. . 5] равны соответственно 3, 4, 5, 1, 2, то значение выражения D[ D[5] ] - D[ D[3] ] равно 2.
Сортировка массива по убыванию методом «пузырька» For i=1 to n do For j=1 to n-i do If A[j]>A[j+1] then Begin P: =A[j]; A[j]: =A[j+1]; A[j+1]: =P; End;
Динамические структуры данных • • • Стек Очередь Кольцо (односвязное и двусвязное) Дерево (двоичное, троичное и т. д. ) Список
Алгоритм, определяющий количество нулевых элементов в массиве A[1: N] S : = 0; K : = 0 нц для J от 1 до N если K = A[K] то S : = S + 1 все кц
Этапы решения задач на ЭВМ 1. 2. 3. 4. 5. 6. Постановка задачи Анализ и исследование задачи, модели Разработка алгоритма Программирование Тестирование и отладка Анализ результатов решения задачи и уточнение в случае необходимости математической модели с повторным выполнением этапов 2 - 5. 7. Сопровождение программы
Этапы разработки ПО 1. 2. 3. 4. 5. 6. Анализ требований Проектирование Кодирование Тестирование и отладка Документирование Сопровождение
Проверка программ Обязательным критерием качества программных систем является надежность. Процесс разработки программы можно выразить следующей формулой: РАЗРАБОТКА = ИЗГОТОВЛЕНИЕ + ПРОВЕРКА • Наличие ошибок в только что разработанной программе это вполне нормальное закономерное явление. Практически невозможно составить реальную (достаточно сложную) программу без ошибок. • Нельзя делать вывод, что программа правильна, лишь на том основании, что она не отвергнута машиной и выдала результаты. • Ведь все, что достигнуто в данном случае, это получение какихто результатов, не обязательно правильных. В программе при этом может оставаться большое количество логических ошибок. Вывод: Поэтому необходимо тестирование и отладка программ.
Проверка программ до ЭВМ • Просмотр. Текст программы просматривается на предмет обнаружения описок и расхождений с алгоритмом. • Проверка. Программист по тексту программы мысленно старается восстановить тот вычислительный процесс, который определяет программа, после чего сверяет его с требуемым процессом. • Прокрутка. Имитация программистом за столом выполнения программы на машине.
Тестирование и отладка Отладка программы — это процесс поиска и устранения ошибок в программе, производимый по результатам её прогона на компьютере. • Английский термин debugging ("отладка") буквально означает "вылавливание жучков". Термин появился в 1945 г. , когда один из первых компьютеров — "Марк-1" прекратил работу из-за того, что в его электрические цепи попал мотылек и заблокировал своими останками одно из тысяч реле машины. • при отладке происходит локализация и устранение синтаксических ошибок и явных ошибок кодирования. Тестирование (англ. test — испытание) — это испытание, проверка правильности работы программы в целом, либо её составных частей. • в процессе же тестирования проверяется работоспособность программы, не содержащей явных ошибок. Вывод: Тестирование устанавливает факт наличия ошибок, а отладка выясняет ее причину.
Отладчики программ Отладчики - специальные программные средства в современных программных системах (Basic, Pascal, C и др. ), которые позволяют исследовать внутреннее поведение программы и используются при ее отладке. Возможности программы-отладчика: • пошаговое исполнение программы с остановкой после каждой команды (оператора); • просмотр текущего значения любой переменной или нахождение значения любого выражения, в том числе, с использованием стандартных функций; при необходимости можно установить новое значение переменной; • установку в программе "контрольных точек", т. е. точек, в которых программа временно прекращает свое выполнение, так что можно оценить промежуточные результаты, и др.
Правила отладки программ • в начале процесса отладки надо использовать простые тестовые данные; • возникающие затруднения следует четко разделять и устранять строго поочередно; • не нужно считать причиной ошибок машину, так как современные машины и трансляторы обладают чрезвычайно высокой надежностью.
Тестирование Как бы ни была тщательно отлажена программа, решающим этапом, устанавливающим ее пригодность для работы, является контроль программы по результатам ее выполнения на системе тестов. Тест состоит из: • Некоторой совокупности исходных данных для программы • Точного описания всех результатов, которые должна выработать программа при этих данных (эталонные результаты) Программу условно можно считать правильной, если её запуск для выбранной системы тестовых исходных данных во всех случаях дает правильные результаты. «Тестирование может показать лишь наличие ошибок, но не их отсутствие» (Э. Дейкстра).
Правила проведения тестирования программы: • Для реализации метода тестов должны быть изготовлены или заранее известны эталонные результаты. • Вычислять эталонные результаты нужно обязательно до, а не после получения машинных результатов. • В противном случае имеется опасность невольной подгонки вычисляемых значений под желаемые, полученные ранее на машине.
Этапы тестирования 1. Проверка в нормальных условиях - предполагает тестирование на основе данных, которые характерны для реальных условий функционирования программы. 2. Проверка в экстремальных условиях - тестовые данные включают граничные значения области изменения входных переменных, которые должны восприниматься программой как правильные данные. 3. Проверка в исключительных ситуациях - проводится с использованием данных, значения которых лежат за пределами допустимой области изменений. Программа должна сама отвергать любые данные, которые она не в состоянии обрабатывать правильно.
Виды тестов программ: Бета-тестирование - это процесс, при котором выполняется интенсивное использование программного продукта с целью выявления максимального числа ошибок в его работе. Регрессионное тестирование – это тестирование, при котором разработчик теста имеет доступ к исходному коду и может списать код, который связан с библиотеками тестируемого программного обеспечения, называется.
Виды ошибок в программе: Неправильная постановка задачи Неверный алгоритм Ошибка анализа • Неполный учет ситуаций, которые могут возникнуть; логические ошибки Семантические ошибки • Непонимание порядка выполнения оператора Синтаксические ошибки • Нарушение правил, определяемых языком программирования Ошибки при выполнении операций • Слишком большое число, деление на ноль, извлечение квадратного корня из отрицательного числа и т. п. Ошибки в данных • Неудачное определение возможного диапазона изменения данных Опечатки • Перепутаны близкие по написанию символы Ошибки ввода-вывода
Ошибки, обнаруживаемые транслятором Обычно синтаксические ошибки выявляются на этапе трансляции. Многие же другие ошибки транслятору выявить невозможно, так как транслятору неизвестны замыслы программиста. Отсутствие сообщений машины о синтаксических ошибках является необходимым , но не достаточным условием, чтобы считать программу правильной. Примеры синтаксических ошибок: • пропуск знака пунктуации; • несогласованность скобок; • неправильное формирование оператора; • неверное образование имен переменных; • неверное написание служебных слов; • отсутствие условий окончания цикла; • отсутствие описания массива и т. п.
Ошибки, которые транслятор не находит: • • • Логические ошибки Ошибки в циклах Ошибки ввода-вывода Ошибки при работе с данными Ошибки в использовании переменных Ошибки арифметических операций Вывод. Эти ошибки обнаруживаются с помощью тестирования.
Сопровождение программы Сопровождение программ — это работы, связанные с обслуживанием программ в процессе их эксплуатации, т. к. многократное использование программы для решения различных задач заданного класса требует проведения дополнительных работ, связанных с доработками программы для решения конкретных задач, проведения дополнительных тестовых просчетов и т. п. Программа, предназначенная длительной эксплуатации, должна иметь соответствующую документацию и инструкцию по её использованию.