hieroglyphica.ru - Что подарить женщине на 70 лет


Сценарий что где когда на новый год

Информационные технологии занимают все более значимую роль в человеческом обществе. Они проникли во все сферы деятельности. Для обслуживания общественных потребностей в автоматизации труда, хранения данных, связи и др. развиваются языки программирования. Если раньше языки программирования использовались лишь для создания программ для автоматизации вычислительных процессов, то на сегодняшний день они используются для решения более разнообразных задач.

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

Все многообразие языков программирования делят на различные классы в зависимости от решаемых ими задач. Было замечено, что в процессе развития языки программирования, входящие в один класс, сближаются между собой. Хотя само разнообразие классов увеличивается, т.к. увеличивается сфера задач, решаемых с помощью компьютерных технологий.

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

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

Если проследить эволюционный путь развития языков программирования, то можно заметить аналогию с развитием живого мира. Когда сначала существовали лишь простые организмы (и языки программирования), а потом появились более сложные. Причем и там и там можно отметить следующие:

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

В живом мире выделилось лишь одно животное, которое научилось быть достаточно независимым от условий окружающей среды – это человек. Поэтому логичен вопрос: «Появится ли язык программирования, который сможет оптимально решить любую задачу, причем на несколько ином уровне, чем существующие на сегодняшний день языки?». Возможно, ответ на этом вопрос лежит в рамках изучения ИИ и так называемых CASE-систем.

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

Программа – это план деятельности исполнителя (например, компьютера) по решению определенного типа задач. Чтобы составить план, важны логическое и иные формы мышления, знание условий выполнения программы и возможностей исполнителя, предугадывание возможных ошибок, а также умение писать программы на понятном исполнителю языке – конкретном языке программирования. Это и есть основные знания, умения и навыки программиста.

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

Все программы, по сути, обрабатывают данные. При этом понятие данных можно трактовать весьма широко. Однако все они для современных ЭВМ кодируются определенным набором нулей и единиц. Внутри машины программы работают именно с такими битовыми данными, но современный программист может не видеть такой «мелочности» и оперировать привычными для человека понятиями: числами, строками, объектами и т.п.

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

Машины с точки зрения их возможностей обработки данных универсальны (работают с 0 и 1), а человек пишет команды на языке программирования, который больше удовлетворяет его возможностям. Следовательно, должна существовать промежуточная программа для преобразования команд с языка программирования на язык машин. И такие программы существуют в виде так называемых компиляторов и интерпретаторов. Они весьма разнообразны, т.к. существует множество языков программирования, каждый из которых имеет свой компилятор или интерпретатор. Другими словами вычислительные машины «говорят» почти всегда на одном языке, а программисты – на разных языках.

Разнообразие языков программирования можно объяснить многообразием сфер человеческой деятельности, историческим развитием компьютерных технологий и конкуренцией разработчиков систем программирования, а также рядом других факторов.

В настоящее время программирование стало широко распространенным видом человеческой деятельности.

Машинные команды

Настоящее программирование в современном понимании началось с момента создания первой электронной вычислительной машины.

Первые ЭВМ позволяли выполнять программы на машинном языке, который является единственным языком, понятным ЭВМ. Он реализуется аппаратно: каждую команду выполняет некоторое электронное устройство.

Машинные команды пишутся в двоичном коде. Логику работы подобных программ очень трудно понять из-за того, программа представляет собой сплошной набор нулей и единиц. Например, какие-то группы обозначали числа, другие – операции над ними.

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

Мнемокоды

Поэтому для упрощения своей работы программисты придумали мнемокоды (от греч. mnemon – запомнить) – буквенные обозначения машинных двоичных команд, которые проще запомнить, чем последовательности нулей и единиц.
Для упрощения работы с ячейками памяти стали использовать понятие переменной.

Переменная – в программировании это буквенное обозначение области памяти, в которой хранится некоторое значение.

Для перевода мнемокодов в машинные инструкции и имен переменных в адреса ячеек памяти использовалась специальная программа – транслятор.
Языки мнемокодов получили название ассемблеров.

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

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

Появились языки, основанные на этих базовых операциях, которые стали называть структурными или языками высокого уровня.

Современное программирование

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

Широкое распространение получили объектно-ориентированные языки программирования (ООП), на которых легче реализовать большие и сложные проекты. Их отличие от языков высокого уровня заключается в возможности отстранения от алгоритма выполнения программы. С помощью таких языков разработчик как бы оперирует виртуальными объектами.

  1. Потребность в решении более сложных и разнообразных задач. Первые ЭВМ имели ограниченные возможности, следовательно, и программы были простыми. В процессе эволюции вычислительной техники от нее требовалось решение все более сложных и разнообразных задач. Следовательно, язык программирования должен был позволять писать программы для решения этих новых задач. Это способствовало появлению и развитию в языках программирования различных новых технологий. Например, пользуется широкой популярностью технология объектно-ориентированного программирования.
  2. Программы становились сложнее и больше по объему. Появилось стремление к повышению эффективности процесса создания программ. Поэтому существует тенденция в развитии языков программирования к быстрому написанию программ. Здесь также следует отметить появление множества систем визуального программирования, в какой-то степени облегчающие труд программиста.
  3. Желание, чтобы программы работали на разных платформах, привело к развитию независимости от ЭВМ языков системного программирования. Языки системного программирования, на которых создаются операционные системы, трансляторы и другие системные программы, развиваются в направлении независимости от ЭВМ. Так, например, большая часть операционных систем написана на языке C, а не на ассемблере. Например, операционная система Unix практически полностью написана на C.
  4. Большие проекты предусматривают совместный труд множества программистов. В возможности легкой командной работы хорошо себя зарекомендовала технология объектно-ориентированного программирования. Поэтому большинство современных языков программирования поддерживают ООП.

В общем, языки программирования развиваются в сторону все большей абстракции от реальных машинных команд. И самым очевидным преимуществом здесь является увеличение скорости разработки программы.

Что такое парадигма вообще? Можно сказать, что это определенный взгляд на явления окружающего мира и представление о возможных действиях с ними. В программировании под парадигмой принято понимать обобщение о том, как должна быть организована работа программы.

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

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

Некоторые представители: Fortran, Pascal, C.

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

В структурном программировании от входных данных полностью зависит последовательность выполнения команд.

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

Функциональное и логическое программирование

Представители функциональных языков: List, Haskell.

Представитель логических языков: Prolog.

Декларативная программа заявляет (декларирует), что должно быть достигнуто в качестве цели. Важным является точная формулировка задачи. Программист не задает алгоритм для ее решения.

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

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

Объектно-ориентированное программирование

Представители объектно-ориентированных языков: С++, Java, Python.

Особое внимание уделяется данным, которые представляются в программе в виде объектов. Объекты взаимодействуют между собой с помощью механизма передачи сообщений. Задача программиста - реализовать такие объекты, при взаимодействии которых можно будет получать желаемый результат.

ООП призвано решать более сложные и объемные задачи по сравнению с директивным программированием.

В основе ООП лежат такие понятия как наследование, полиморфизм и инкапсуляция.

Инкапсуляция предполагает, что малозначащие детали объекта скрыты. Объект, получая какую-либо команду, сам «знает» как ее обработать исходя из того, к какому классу он принадлежит.

Все объекты являются экземплярами классов, которые по отношению друг к другу могут выступать в роли родитель-потомок. Дочерние классы наследуют свойства родительского. В случае, когда 100% наследование не требуется, выручает так называемый полиморфизм, который предполагает переопределение методов родительского класса в дочерних классах.

Неструктурные языки (широко использовались 40-е годы)

Преимущества

  • Оптимизация программы под аппаратную архитектуру.
  • Как следствие, обеспечение высокой эффективности вычислений.

Недостатки

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

Применение

  • Быстрые численные расчеты
  • Создание драйверов устройств

Примеры языков: Ассемблеры.

Директивные (структурные) языки (появились в 50-е годы)

Преимущества

  • Повторное использование ранее написанных блоков кода.
  • Высокая степень независимости программы от типа вычислительной машины.
  • Повышение эффективности труда разработчиков, в том числе и за счет абстрагирования от конкретных деталей аппаратного обеспечения.

Недостатки

  • Некоторая потеря в скорости вычислений.

Применение

  • Создание операционных систем и системных программ.
  • Разработка небольших пользовательских приложений.
  • Научные расчеты.

Примеры языков: FORTRAN, C, Pascal.

Декларативные (функциональные и логические) языки (зародились в 60-е годы)

Особенность

  • Программный код на декларативном языке программирования представляет собой описание действий, которые можно осуществлять, а не последовательный набор команд.

Преимущества

  • Легче формализуется математическими средствами.
  • Как следствие, программы проще тестировать, т.е. проверять на наличие ошибок.
  • Высокая степень абстракции.

Недостатки

  • Снижение скорости работы программы.

Применение

  • Доказательство теорем.
  • Возможность обработки разнородных данных.

a) Функциональные языки

Особенность

  • Программу на функциональном языке можно представить как функцию с одним или несколькими аргументами.

Преимущества

  • Автоматическое динамическое распределение памяти компьютера для хранения данных.
  • Программист получает возможность абстрагироваться от представления данных и других рутинных операциях и сосредоточиться на предметной области.

Недостатки

  • Нелинейная структура программы, следовательно, такое программирование сложно для понимания.
  • Относительно невысокая эффективность вычислений.

Применение

  • Обработка рекурсивных структур данных.
  • Обработка символьной информации.

Примеры языков: Haskell.

b) Логические языки

Особенность

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

Преимущества

  • Возможность откатов, т.е. возвращения к предыдущей подцели при отрицательном результате одного из вариантов в процессе поиска решения. Это избавляет от необходимости поиска решения путем полного перебора вариантов и увеличивает эффективность реализации.

Недостатки

  • Узкий класс решаемых задач.

Применение

  • Эмуляция искусственного интеллекта.
  • Разработка экспертных систем.

Примеры языков: Prolog.

Объектно-ориентированные языки

Особенности

  • Программа представляет собой описание объектов, их свойств (или атрибутов), классов и отношений между ними, способов взаимодействия.

Преимущества

  • Смысловая близость к предметной области любой структуры и назначения. Механизм наследования свойств и методов позволяет строить производные понятия на основе базовых, создавая тем самым модели предметной области.
  • Использование ранее созданных библиотек классов позволяет сэкономить время при разработке новых программных продуктов.
  • Полиморфизм, заложенный в ООП, обеспечивает гибкость и универсальность программного обеспечения.
  • Удобство разработки ПО группой лиц.

Недостатки

  • Сложность полной формализации реального мира создает в дальнейшем трудности тестирования созданного ПО.

Применение

  • Разработка больших пользовательских приложений.

Примеры языков (большинство современных языков программирования поддерживают концепцию объектно-ориентированного программирования): C++, Python.

Языки сценариев

Особенности

  • Программа представляет собой совокупность возможных сценариев обработки данных. Выбор конкретного сценария зависит от наступления того или иного события.

Преимущества

  • Основные достоинства данного класса языков программирования унаследованы от объектно-ориентированных языков.
  • Легкость использования с инструментальными средствами автоматизированного проектирования и быстрого создания ПО.

Недостатки

  • Сложность тестирования.
  • Большое количество вариантов, которые требуется предусмотреть.
  • Большая вероятность побочных эффектов.

Применение

  • Интернет технологии

Примеры языков: JavaScript, Python, PHP.

Язык программирования Pascal был разработан Никлаусом Виртом в 1968-1970 гг. и назван так в честь ученого Блеза Паскаля, жившего в XVII веке и оставившего заметный след в науке.

Некоторые особенности Pascal

  1. Приспособлен для обучения программированию.
  2. Основан на ряде фундаментальных понятий структурного программирования.
  3. Большой набор поддерживаемых структурных типов данных.
  4. Распространенность языка обеспечила ему большую базу различных программных систем.
  5. Надежность программ, обеспечивающаяся избыточностью информации в исходном коде.
  6. Послужил основой для разработки других языков программирования (Delphi).

Пример программы на Pascal – «Калькулятор»:

program calcul; var a,b,c: integer; operation, Enter: char; begin writeln('Калькулятор'); write('a='); readln(a); write('b='); readln(b); write('Оператор'); readln(operation); case operation of '+': c:=a+b; '-': c:=a-b; '': c:=ab; else writeln('Надо ввести +, -, или /'); end; writeln('c=',c); readln(Enter); end.

Delphi

Delphi – этосреда программирования, в основе которой лежит язык Object Pascal, являющийся наследником языка Pascal. И в отличие от последнего Object Pascal является объектно-ориентированным языком программирования.

Пример программы на Object Pascal – «График функции y=sin x»:

var X:real; Y:real; N:integer; procedure TForm1.Button1Click(Sender: TObject); begin with Image1.Canvas do begin X := 0; while X<500 Do begin X:=X+0.1 ; Y:=200-100(Sin(X/20)); Pixels[Round(X),Round(Y)]:=clBlack; end; MoveTo(0,200); LineTo(500,200); //ось X MoveTo(250,0); LineTo(250,500); //ось Y //шкала оси X N:=0; while N<500 do begin N:=N+100; MoveTo (N, 190); LineTo (N,210); TextOut (N,200,IntToStr(Round((N-250)/20))); end; // шкала оси Y N:=0; while N<400 do begin N:=N+100; MoveTo (245, 400 - N); LineTo (255, 400 - N); TextOut(245, 400 - N,IntToStr(Round((N-200)/100))); end; end; end; end.

Visual Basic

Visual Basic – разработка компании Microsoft, включающая язык программирования и среду разработки. Язык основан на диалекте Basic’а, однако включает поддержку ООП. Visual Basic хорош как средство быстрой разработки прототипов больших программ или небольших пользовательских приложений.

Пример программы на Visual Basic – «График функции y=sin x»:

Dim sngX As Single, intI As Integer Private Sub cmd1_Click() 'Задание масштаба PicGraph.Scale (-10, 2)-(10, -2) 'Построение графика For sngX = -10 To 10 Step 0.01 PicGraph.PSet (sngX, Sin(sngX)) Next sngX 'Ось X PicGraph.Line (-10, 0)-(10, 0) For intI = -10 To 10 PicGraph.PSet (intI, 0) PicGraph.Print intI Next intI 'Ось Y PicGraph.Line (0, 2)-(0, -2) For intI = -2 To 2 PicGraph.PSet (0, intI) PicGraph.Print intI Next intI End Sub

Python

Python – интерпретируемый, объектно-ориентированный язык программирования. Относится к классу языков с динамической типизацией (тип переменной не объявляется заранее), поддерживает высокоуровневые структуры данных (словари, списки), имеет ясный синтаксис. Интерпретатор Питона распространяется под свободной лицензией.

Пример программы на Python – «Таблица умножения»:

print "Multiplication table" print i=1 while i<=10: j=1 while j<=10: print ij, "\t", j+=1 print i+=1 raw_input()

JavaScript

На JavaScript пишутся сценарии для поведения браузера, которые встраиваются в html-страницы. Синтаксис JavaScript почти идентичен синтаксису языка Си.

Пример программы на JavaScript – «Корректный адрес электронной почты»:

<!-- <html> <form id="myform" method=GET action="" enctype="text/plain"> Кому: <input name = "email_to" type="Text" value = ""> <p> От кого: <input name = "email_from" type="Text" value = ""> <p> Сообщение: <br> <textarea name="Сообщение" type = "text" value=""></textarea> <p> <input name = "Отправить" type="submit" value = "Отправить"> </form> <script> function myform.onsubmit (){ var noemail = myform.email_to.value.indexOf('@') == -1 var notext =!myform.Сообщение.value var xtext = "\nПисьмо не отправлено" if (noemail || notext) { event.returnValue = false if (noemail) alert ("Неправильный адрес получателя" + xtext) else alert ("Нет текста сообщения" + xtext) } else myform.action = "mailto:" + myform.email_to.value } </script> </html> -->

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

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

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

1. Необходимо стремиться к наиболее полному изучению поставленной задачи при формулировке задачи, т.е. разработке математической модели. Такое изучение позволяет добиться ясной, предусматривающей множество логических взаимодействий объектов программы. Недостаточно глубокая проработка математической модели приводит к неправильным результатам решения задачи, если модель неприменима к тем классам объектов, для расчета параметров которых она используется в данной программе, или если исходные данные не учитывают особенностей данной модели, а модель, в свою очередь, не учитывает всех взаимодействий между данными.

2. Проработка алгоритма решения задачи связана с возможно более полным учетом общих особенностей процесса вычислений на ЭВМ. Так как в ЭВМ не существует никакого другого внутреннего способа представления комплексного числа, кроме представления в виде пары вещественных чисел, то попытка вычислить на ЭВМ корень четной степени из вещественного отрицательного числа вызывает прекращение вычислений и сообщение об ошибке. Алгоритм в подобных случаях должен предусматривать анализ знака значения подкоренного выражения и содержать две возможных ветви вычислений – для вещественного и мнимого значений корня. Другой пример связан с приближенным представлением вещественных чисел в ЭВМ. Нецелесообразно сравнивать значения двух вещественных выражений. Сравнение следует заменить проверкой соотношения |A – B| < e, где e – малое число; если это неравенство выполняется, то следует считать, что A = B.

Приближенное представление вещественных чисел в ЭВМ может привести и к тому, что вычислениях с числами разного порядка могут получиться неправильные результаты. Например, при вычислении с семью значащими цифрами для A = 199 и B = 0.0001 полученное значение (A + B)3 – A3 = 0.1 102 вместо числа 0.1188 102; более точный результат получен по другой формуле: B3 + 3B2A + 3A2B.

Погрешность результата будет меньшей, если начинать суммировать с меньших по величине чисел, а не с больших, как в первом случае.

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

Хороший набор стандартов поможет сконцентрировать внимание на новых задачах. Рекомендуется программу сначала записать на каком-либо легко воспринимаемом языке, например на языке схем алгоритмов.

При разработке программ наиболее трудоемким является этап отладки и тестирования программ. Цель тестирования, т.е. испытания программы, заключается в выявлении имеющихся в программе ошибок. Цель отладки состоит в выявлении и устранении причин ошибок.

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

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

Учитывая разнообразие источников ошибок, при составлении плана тестирования классифицируют ошибки на два типа: 1 – синтаксические; 2 – семантические (смысловые).

Синтаксические ошибки – это ошибки в записи конструкций языка программирования (чисел, переменных, функций, выражений, операторов, меток, подпрограмм).

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

Обнаружение большинства синтаксических ошибок автоматизировано в основных системах программирования. Поиск же семантических ошибок гораздо менее формализован; часть их проявляется при исполнении программы в нарушениях процесса автоматических вычислений и индицируется либо выдачей диагностических сообщений рабочей программы, либо отсутствием печати результатов из-за бесконечного повторения одной и той же части программы (зацикливания), либо появлением непредусмотренной формы или содержания печати результатов.

В план тестирования обычно входят следующие этапы:

  1. Сравнение программы со схемой алгоритма.
  2. Визуальный контроль программы на экране дисплея или визуальное изучение распечатки программы и сравнение ее с оригиналом на программном бланке. Первые два этапа тестирования способны устранить больше количество ошибок, как синтаксических (что не так важно), так и семантических (что очень важно, так как позволяет исключить их трудоемкий поиск в процессе дальнейшей отладки).
  3. Трансляция программы на машинных язык. На этом этапе выявляются синтаксические ошибки. Компиляторы с языков Си, Паскаль выдают диагностическое сообщение о синтаксических ошибках в листинге программы (листингом называется выходной документ транслятора, сопровождающий оттранслированную программу на машинном языке – объектный модуль).
  4. Редактирование внешних связей и компоновка программы. На этапе редактирования внешних связей программных модуле программа-редактор внешних связей, или компоновщик задач, обнаруживает такие синтаксические ошибки, как несоответствие числа параметров в описании подпрограммы и обращении к ней, вызов несуществующей стандартной программы. например, 51 H вместо 51 N, различные длины общего блока памяти в вызывающем и вызываемом модуле и ряд других ошибок.
  5. Выполнение программы. После устранения обнаруженных транслятором и редактором внешних связей (компоновщиком задач) синтаксических ошибок переходят к следующему этапу – выполнению программы на ЭВМ на машинном языке: программа загружается в оперативную память, в соответствие с программой вводятся исходные данные и начинается счет. Проявление ошибки в процессе вода исходных данных или в процессе счета приводит к прерыванию счета и выдаче диагностического сообщения рабочей программы. Проявление ошибки дает повод для выполнения отладочных действий; отсутствие же сообщений об ошибках не означает их отсутствия в программе. План тестирования включает при этом проверку правильности полученных результатов для каких-либо допустимых значений исходных данных.
  6. Тестирование программы. Если программа выполняется успешно, желательно завершить ее испытания тестированием при задании исходных данных, принимающих предельные для программы значения. а также выходящие за допустимые пределы значения на входе.

Контрольные примеры (тесты) – это специально подобранные задачи, результаты которых заранее известны или могут быть определены без существенных затрат.

Наиболее простые способы получения тестов:

  • Подбор исходных данных, для которых несложно определить результата вычислений вручную или расчетом на калькуляторе.
  • Использование результатов, полученных на других ЭВМ или по другим программам.
  • Использование знаний о физической природе процесса, параметры которого определяются, о требуемых и возможных свойствах рассчитываемой конструкции. Хотя точное решение задачи заранее известно, суждение о порядке величин позволяет с большой вероятностью оценить достоверность результатов.

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

Основные требования, предъявляемые к качеству программного изделия, - функциональность, надежность, удобство эксплуатации – обеспечиваются за счет правильного проектирования программного комплекса и создания необходимой документации.

Для сложных программ и программных комплексов этап проектирования программы выполняется параллельно с этапом разработки алгоритма и структуры данных. Проектирование предполагает разбиение задачи на несколько подзадач, для решения каждой из которых создается программный модуль. При этом программа проектируется как многомодульная структура. Существует два основных способа проектирования многомодульных программ – восходящее и нисходящее проектирование.

Восходящее проектирование (или проектирование «снизу вверх») основано на выделении нескольких достаточно крупных модулей, реализующих некоторые функции в общей программе. При выделении модулей опираются на доступность реализуемых функций для понимания, простоту структурирования данных, существование готовых программ и модулей для реализации заданных функций, возможности переделки существующих программ для новых целей; имеет значение и размер будущего модуля. Каждый модуль при восходящем проектировании автономно программируется, тестируется и отлаживается. После этого отдельные модули объединяются в подсистемы с помощью управляющего модуля, в котором определяется последовательность вызовов модулей, ввод-вывод и контроль данных и результатов. В свою очередь, подсистемы затем объединяются в более сложные системы и в общий программный комплекс, который подвергается комплексной отладке с проверкой правильности межмодульных связей.

Рассмотренный подход можно рекомендовать при разработке не очень сложных программ. Если размеры подпрограмм невелики, то целесообразно выделить подпрограммы и начать программирование с их составления.

Основные недостатки восходящего проектирования программы проявляются в сложности объединения модулей в единую систему, в трудности выявления и исправления ошибок, допущенных на ранних стадиях разработки модулей. Кроме того, отдельные модули могут создаваться без общего представления о структуре всей системы, что затрудняет их объединение.

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

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

При нисходящем проектировании появляется возможность использовать вертикальное управление в схеме иерархии с использованием таких правил: модуль возвращает управление вызвавшему; модуль вызывает только модули более низкого уровня; принятие основных решений возлагается на модули максимально высокого уровня.

После разработки некоторой верхней части схемы иерархии модулей можно составлять, тестировать и отлаживать соответствующие программные модули, причем вместо каждого из модулей при тестировании могут использоваться так называемые «заглушки», т.е. фиктивные модули, содержащие лишь заголовки и операторы возврата. Нисходящий способ проектирования позволяет начать комплексную отладку и тестирование написанной части программной системы, не дожидаясь окончания написания всех модулей. Вставляя в фиктивные модули операторы печати сообщений о входе в имитируемый заглушкой модуль, получают трассировку программы; в заглушку можно поместить операторы, позволяющие выполнять оценку общих затрат машинного времени и памяти ЭВМ.

Основные достоинства нисходящего проектирования:

  1. проявление логики программы возникает уже при чтении головного модуля, что делает программу боле простой;
  2. возможность контроля хода работы над программой в процессе последовательной детализации программы обеспечивает ее непрерывную корректировку; отсутствие комплексной отладки благодаря сквозному контролю позволяет сэкономить до 30 % общего времени разработки программ;
  3. одновременная параллельная работа нескольких программистов может оказаться эффективной.

При нисходящем проектировании, однако, возможны и такие ситуации, когда после значительных затрат на программирование выясняется необходимость объединения нескольких подзадач в один модуль, либо обнаруживается невозможность выполнения модулями нижних уровней своих функций при заданных временных ограничениях.


Источник: http://www.inf1.info/book/export/html/216


Закрыть ... [X]

Что подарить на день рождения теще? Подарки деловой даме Поздравления бабушке от внучки 4 года

Сценарий что где когда на новый год Поздравления на свадьбу от родителей - от мамы, папы
Сценарий что где когда на новый год Интернет магазин подарков оригинальные подарки
Сценарий что где когда на новый год Конкурсы «Золотое Руно» и «British Bulldog» - Главная
Сценарий что где когда на новый год Поздравления на Ситцевую свадьбу (1 год свадьбы)
Сценарий что где когда на новый год Интересный конкурс угадай кто ты? Персонажи и смешные примеры
Сценарий что где когда на новый год Прикольные открытки мальчику с днем рождения
Сценарий что где когда на новый год Оригинальный подарок на свадьбу своими руками
Сценарий что где когда на новый год Что подарить сыну на Новый год?
Поздравления с 8 марта учителям от учеников Промокоды Little Pony! Коды Little Pony! 40 промокодов бесплатно 2017! Гостевой дом СТРАННИК ПОЗДРАВЛЕНИНЕМ РОЖДЕНИЯ - ПоздраВита Сценарий праздника в детской художественной школе Образовательный Калькулятор пособия по уходу за ребенком до полутора лет