Технология разработки программных продуктов

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 25.03.2012
Размер файла 1,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Министерство образования и науки Российской Федерации

Челябинский Юридический Колледж

Отделение права и ИТ

Кафедра «Информатики и ВТ»

КУРСОВАЯ РАБОТА

«Технология разработки программных продуктов»

Челябинск

2011

Аннотация

Первая глава данной работы содержит информацию о защитном программировании, о методах защитного программирования. Также в этой главе подробно описаны методы структурирования программ и программных модулей. Во второй главе подробно описан процесс создания базы данных в среде программирования Borland Delphi 7.

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

Содержание

Введение

1.Теоретическая часть

1.1 Защитное программирование

1.1.1 Правила написания программ с блоками защиты от несанкционированного ввода данных

1.1.2 Приемы надежного программирования

1.1.3 Причины ошибок программного обеспечения

1.1.4 Источники ошибок программного обеспечения

1.1.5 Классификация ошибок программного обеспечения

1.1.6 Основные пути борьбы с ошибками

1.2 Методы структурирования

1.2.1 Метод дублирования блоков

1.2.2 Метод булева признака

1.2.3 Метод введения переменной состояния

1.2.4 Концептуальное программирование

2. Практическая часть

2.1 Delphi. Основные понятия и определения

2.2 Процесс написания программы

Заключение

Приложение. Листинг программы

Введение

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

Delphi -- среда программирования, в которой используется язык программирования Object Pascal. Начиная со среды разработки Delphi 7.0, в официальных документах Borland стала использовать название Delphi для обозначения языка Object Pascal.

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

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

В соответствии с поставленной целью при выполнении работы возникают следующие задачи:

1. Изучение теоретических основ защитного программирования,

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

3. Изучение среды программирования Borland Delphi 7,

4. Создание приложения в среде программирования Borland Delphi 7 для работы с базами данных,

5. Отладить разработанное приложение.

При написании работы автор опирался на труды отечественных и зарубежных ученых Ахо А., Ульман Дж., Братчиков И.Л., Гулидов А.И., Наберухин Ю.И., Дейкстра Э., Ершов А.П., Кнут Д., Майерс Г., Мендельсон Э., Рудаков А. В., Тыугу, Э.Х., Хьюз Дж., Мичтом Дж.

Предполагаемая практическая значимость курсовой работы заключается в том, что ее можно будет использовать в качестве источника получения теоретического материала по теме «защитное программирование» и «методы структурирования», а также как руководство по созданию базы данных в среде программирования Borland Delphi 7.

1.Теоретическая часть

1.1 Защитное программирование

1.1.1 Правила написания программ с блоками защиты от несанкционированного ввода данных

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

Подсистема управления доступом СЗИ затрагивает следующие понятия:

- Идентификатор доступа - уникальный признак субъекта или объекта доступа.

- Идентификация - присвоение субъектам и объектам доступа идентификатора и (или) сравнение предъявляемого идентификатора с перечнем присвоенных идентификаторов.

- Пароль - идентификатор субъекта доступа, который является его (субъекта) секретом.

- Аутентификация - проверка принадлежности субъекту доступа предъявленного им идентификатора; подтверждение подлинности.

Можно встретить и такие толкования терминов идентификатор и пароль пользователя [1]:

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

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

Учетная запись - совокупность идентификатора и пароля пользователя.

Одним из наиболее важных компонентов парольной системы является база данных учетных записей (база данных системы защиты). Возможны следующие варианты хранения паролей в системе:

- в открытом виде;

- в виде хэш-значений (hash (англ.) - смесь, мешанина);

- зашифрованными на некотором ключе.

Наибольший интерес представляют второй и третий способы, которые имеют ряд особенностей.

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

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

- ключ генерируется программно и хранится в системе, обеспечивая возможность ее автоматической перезагрузки;

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

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

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

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

- записанный вами пароль найден злоумышленником;

- пароль был подсмотрен злоумышленником при вводе легальным пользователем;

- злоумышленник получил доступ к базе данных системы защиты.

Меры противодействие первым двум опасностям очевидны.

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

Из базы данных учетных записей пароль может быть восстановлен различными способами: атакой по словарю, последовательным (полным) перебором и гибридом атаки по словарю и последовательного перебора.

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

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

При восстановлении паролей гибридом атаки по словарю и последовательного перебора к каждому слову или модификации слова словаря добавляются символы справа и/или слева (123parol). Помимо этого может осуществляться проверка использования: имен пользователей в качестве паролей; повторения слов (dogdog); обратного порядка символов слова (elpoep); транслитерации букв (parol); замену букв кириллицы латинской раскладкой (gfhjkm).

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

Какой пароль можно однозначно назвать слабым во всех отношениях (за исключением запоминаемости)? Типичный пример: пароль из небольшого количества (до 5) символов/цифр. По некоторым данным, из 967 паролей одного из взломанных почтовых серверов сети Интернет 335 (почти треть) состояла исключительно из цифр. Количество паролей включающих буквы и цифры оказалось равным 20. Остальные пароли состояли из букв в основном в нижнем регистре за редким исключением (в количестве 2 паролей) включающих спецсимволы ("*", "_"). Символ "_", однако, часто встречался в именах пользователей. В 33 случаях имя и пароль пользователя совпадали. Самым популярным оказался пароль 123 (встречался 35 раз, почти каждый 27 пароль). На втором месте пароль qwerty (20 паролей). Как удобно он набирается, не правда ли? Далее следуют: 666 (18 раз), 12 (17 раз), xakep (14 раз) и 1, 11111111, 9128 (по 10 раз). 16 паролей состояли из одного символа/цифры.

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

1.1.2 Приемы надежного программирования

Альтернативой правильного ПС является надежное ПС. Надежность ПС -- это его способность безотказно выполнять определенные функции при заданных условиях в течение заданного периода времени с достаточно большой вероятностью [5]. При этом под отказом в ПС понимают проявление в нем ошибки [2]. Таким образом, надежная ПС не исключает наличия в ней ошибок -- важно лишь, чтобы эти ошибки при практическом применении этого ПС в заданных условиях проявлялись достаточно редко. Убедиться, что ПС обладает таким свойством можно при его испытании путем тестирования, а также при практическом применении. Таким образом, фактически мы можем разрабатывать лишь надежные, а не правильные ПС.

Разрабатываемая ПС может обладать различной степенью надежности. Как измерять эту степень? Так же как в технике, степень надежности можно характеризовать [2] вероятностью работы ПС без отказа в течении определенного периода времени. Однако в силу специфических особенностей ПС определение этой вероятности наталкивается на ряд трудностей по сравнению с решением этой задачи в технике. Позже мы вернемся к более обстоятельному обсуждению этого вопроса.

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

Рассмотрим теперь общие принципы обеспечения надёжности ПС, что, как мы уже подчёркивали, является основным мотивом разработки ПС, задающим специфическую окраску всем технологическим процессам разработки ПС. В технике известны четыре подхода обеспечению надёжности [11]:

· предупреждение ошибок;

· самообнаружение ошибок;

· самоисправление ошибок;

· обеспечение устойчивости к ошибкам.

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

· борьбе со сложностью;

· обеспечении точности перевода;

· преодоления барьера между пользователем и разработчиком;

· обеспечения контроля принимаемых решений.

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

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

1.1.3 Причины ошибок программного обеспечения

Рассмотрим неправильный перевод как причина ошибок в программных средствах. При разработке и использовании ПС мы многократно имеем дело [3] с преобразованием (переводом) информации из одной формы в другую (см. Рис. 1). Заказчик формулирует свои потребности в ПС в виде некоторых требований. Исходя из этих требований, разработчик создаёт внешнее описание ПС, используя при этом спецификацию (описание) заданной аппаратуры и, возможно, спецификацию базового программного обеспечения. На основании внешнего описания и спецификации языка программирования создаются тексты программ ПС на этом языке. По внешнему описанию ПС разрабатывается также и пользовательская документация. Текст каждой программы является исходной информацией при любом её преобразовании, в частности, при исправлении в ней ошибки. Пользователь на основании документации выполняет ряд действий для применения ПС и осуществляет интерпретацию получаемых результатов. Везде здесь, а также в ряде других процессах разработки ПС, имеет место указанный перевод информации.

Рисунок 1. Грубая схема разработки и применения ПС

На каждом из этих этапов перевод информации может быть осуществлён неправильно, например, из-за неправильного понимания исходного представления информации. Возникнув на одном из этапов ошибка в представлении информации распространяется на последующие этапы разработки и, в конечном счёте, окажется в самом ПС.

Чтобы понять природу ошибок при переводе рассмотрим модель [3], изображённую на Рис. 2. На ней человек осуществляет перевод информации из представления A в представление B. При этом он совершает четыре основных шага перевода:

· он получает информацию, содержащуюся в представлении A, с помощью своего читающего механизма R;

· он запоминает полученную информацию в своей памяти M;

· он выбирает из своей памяти преобразуемую информацию и информацию, описывающую процесс преобразования, выполняет перевод и посылает результат своему пишущему механизму W;

· с помощью этого механизма он фиксирует представление B.

Рисунок 2. Модель перевода

На каждом из этих шагов человек может совершить ошибку разной природы. На первом шаге способность человека «читать между строк» (способность, позволяющая ему понимать текст, содержащий неточности или даже ошибки) может стать причиной ошибки в ПС. Ошибка возникает в том случае, когда при чтении документа A человек, пытаясь восстановить недостающую информацию, видит то, что он ожидает, а не то, что имел в виду автор документа A. В этом случае лучше было бы обратиться к автору документа за разъяснениями. При запоминании информации человек осуществляет её осмысливание (здесь важен его уровень подготовки и знание предметной области, к которой относится документ A). И, если он поверхностно или неправильно поймёт, то информация будет запомнена в искажённом виде. На третьем этапе забывчивость человека может привести к тому, что он может выбрать из своей памяти не всю преобразуемую информацию или не все правила перевода, в результате чего перевод будет осуществлён неверно. Это обычно происходит при большом объёме плохо организованной информации. И, наконец, на последнем этапе стремление человека поскорее зафиксировать информацию часто приводит к тому, что представление этой информации оказывается неточным, создавая ситуацию для последующей неоднозначной её интерпретации.

1.1.4 Источники ошибок программного обеспечения

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

Рассмотрим источники ошибок на разных этапах проектирования.

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

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

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

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

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

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

1.1.5 Классификация ошибок программного обеспечения

Рассмотрим классификацию ошибок по месту их возникновения, которая рассмотрена в книге С. Канера «Тестирование программного обеспечения». Фундаментальные концепции менеджмента бизнес-приложений. . Главным критерием программы должно быть ее качество, которое трактуется как отсутствие в ней недостатков, а также сбоев и явных ошибок. Недостатки программы зависят от субъективной оценкой ее качества потенциальным пользователем. При этом авторы скептически относятся к спецификации и утверждают, что даже при ее наличии, выявленные на конечном этапе недостатки говорят о ее низком качестве. При таком подходе преодоление недостатков программы, особенно на заключительном этапе проектирования, может приводить к снижению надежности. Очевидно, что для разработки ответственного и безопасного программного обеспечения (ПО) такой подход не годится, однако проблемы наличия ошибок в спецификациях, субъективного оценивания пользователем качества программы существуют и не могут быть проигнорированы. Должна быть разработана система некоторых ограничений, которая бы учитывала эти факторы при разработке и сертификации такого рода ПО. Для обычных программ все проблемы, связанные с субъективным оцениванием их качества и наличием ошибок, скорее всего неизбежны.

В краткой классификации выделяются следующие ошибки.

- Ошибки пользовательского интерфейса.

- Ошибки вычислений.

- Ошибки управления потоком.

- Ошибки передачи или интерпретации данных.

- Перегрузки.

- Контроль версий.

- Ошибка выявлена и забыта.

- Ошибки тестирования.

1. Ошибки пользовательского интерфейса.

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

2.Ошибки вычислений.

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

- неверная логика (может быть следствием, как ошибок проектирования, так и кодирования);

- неправильно выполняются арифметические операции (как правило - это ошибки кодирования);

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

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

3.Ошибки управления потоком.

В этот раздел относится все то, что связано с последовательностью и обстоятельствами выполнения операторов программы.

Выделяются подпункты:

- очевидно неверное поведение программы;

- переход по GOTO;

- логика, основанная на определении вызывающей подпрограммы;

- использование таблиц переходов;

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

4.Ошибки обработки или интерпретации данных.

Выделяются подпункты:

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

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

- проблемы с обменом сообщений (сюда включены несколько видов ошибок: отправка сообщения не тому процессу или не в тот порт, ошибка распознавания полученного сообщения, недостающие или несинхронизированные сообщения, сообщение передано только N процессам из N+1, порча данных, хранящихся на внешнем устройстве, потеря изменений, не сохранены введенные данные, объем данных слишком велик для процесса-получателя, неудачная попытка отмены записи данных).

5.Повышенные нагрузки.

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

В этом разделе хотелось бы обратить внимание на следующее:

1) Часть ошибок из этого раздела могут проявляться и при не очень высоких нагрузках, но, возможно, они будут проявляться реже и через более длительные интервалы времени;

2) Многие ошибки из 2-х предыдущих разделов уже в своей формулировке носят вероятностный характер, поэтому следует предположить возможность использования вероятностных моделей и методов для их выявления.

6.Контроль версий и идентификаторов.

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

7.Ошибки тестирования.

Являются ошибками сотрудников группы тестирования, а не программы. Выделяются подпункты:

- пропущенные ошибки в программе;

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

- пропуск ошибок на экране;

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

8.Ошибка выявлена и забыта.

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

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

1.1.6 Основные пути борьбы с ошибками

Учитывая рассмотренные особенности действий человека при переводе можно указать следующие пути борьбы с ошибками:

· сужение пространства перебора (упрощение создаваемых систем),

· обеспечение требуемого уровня подготовки разработчика (это функции менеджеров коллектива разработчиков),

· обеспечение однозначности интерпретации представления информации,

· контроль правильности перевода (включая и контроль однозначности интерпретации).

1.2 Методы структурирования

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

- дублирование кодов программы,

- введение переменной состояния,

- метод булевых признаков.

1.2.1 Метод дублирования блоков

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

По времени восстановления информации методы дублирования могут быть разделены на:

- оперативные;

- неоперативные.

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

- дополнительные внешние запоминающие устройства (блоки);

- специально выделенные области памяти на несъемных машинных носителях;

- съемные носители информации.

По числу копий методы дублирования делятся на:

- одноуровневые;

- многоуровневые.

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

- сосредоточенного дублирования;

- рассредоточенного дублирования

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

В соответствии с процедурой дублирования различают методы:

- полного копирования;

- зеркального копирования;

- частичного копирования;

- комбинированного копирования.

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

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

- методы со сжатием информации;

- методы без сжатия информации.

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

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

1.2.2 Метод булева признака

Сущность данного метода: в программу, содержащую циклы, вводится некоторый признак. Начальное значение признака задается до цикла. Цикл выполняется, пока признак сохраняет свое исходное значение. Значение признака изменяется при наличии некоторых условий внутри цикла.

Рассмотрим применение метода булева признака на примере преобразования неструктурной схемы, приведенной на рисунке 3.

программа обеспечение ошибка

Рисунок 3. Исходная неструктурированная схема

Схема данного алгоритма не является структурированной, поскольку входящий в нее цикл (блоки 1,2,3) содержат вход и два выхода. На схеме 1 и 2 - некоторые условия, определяющие выполнение того или иного участка вычислений, значения 1 и 0 возле выходов символов «Решение» соответствует логическим значениям «да» и «нет».

В соответствии с рассмотренным методом в исходную схему вводится признак (например J). Схема приобретает структурированный вид (рисунок 3) и легко реализуется конструкциями обобщенного цикла и принятия двоичного решения.

Достоинства метода булева признака:

1) компактность, экономичность,

2) топология исходной схемы изменяется незначительно.

Недостаток: метод предназначен для использования только в циклах.

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

Рисунок 4. Схема, преобразованная по методу булева признака

Рисунок 4. Схема, преобразованная без специального признака

На рисунке 4 условие «(1 и 2) = 0» означает, что тело цикла 3 будет выполнено в том случае, если оба условия 1 и 2 не выполняются (равны нулю) Итоговая схема содержит обобщенный цикл с одним входом и одним выходом и конструкцию if-then-else, т.е. является структурированной.

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

1.2.3 Метод введения переменной состояния

Данный метод был впервые предложен Ашкрофтом и Манной.

Рассмотрим применение этого на примере неструктурированной программы, алгоритм которой представлен на рисунке 5.

Рисунок 5. Схема алгоритма исходной неструктурированной программы

Данная схема не является структурированной, так как из цикла, состоящего из блоков 1 и 3, существует 2 выхода. Таким образом, нарушено условие «один вход - один выход», которому должны удовлетворять структурированные схемы

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

1.Каждому блоку неструктурированной схемы приписывают номер. Обычно первому блоку присваивается 1, последнему - 0.

2.В программу вводится дополнительная переменная целого типа (например I), называемая переменной состояния.

3.Функциональные блоки исходной схемы заменяются блоками, выполняющими помимо основных функций преобразование переменной I: переменной I присваивается значение, равное номеру блока-приемника в исходной схеме.

4.Аналогично преобразуются логические блоки. При этом если в логическом блоке условие истинно, то это соответствует одному значению I, если ложно - другому.

5.Исходная схема преобразуется к виду, предложенному Ашкрофтом - Манной - рисунок 6.

Рисунок 6. Схема алгоритма Ашкрофта - Манны

На данной схеме блоки la - na являются аналогами соответствующих блоков исходной схемы и, помимо этого, присваивают значение переменной I.

В результате преобразований Ашкрофта - Манны исходная неструктурированная схема принимает вид, изображенный на рисунке 7.

Рисунок 7. Исходная схема, преобразованная по методу Ашкрофта - Манны

При выполнении алгоритма, реализованного по методу Ашкрофта - Манны, переменная состояния I устанавливается в начальное значение, равное номеру первого блока не преобразованной схемы (как правило, это единица) . Затем осуществляется последовательный опрос переменной I , начиная с нуля и заканчивая максимальным номером блока исходной схемы ( в нашем примере он равен 5). Выполняется тот блок исходной схемы, номер которого соответствует текущему значению I. Помимо этого в I заносится значение, равное номеру того блока исходной схемы, который должен выполняться за текущим блоком. Когда значение I станет равным нулю, выполняется последний раз блок непреобразованной схемы (блок с номером 0) и осуществляется выход из алгоритма.

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

1.2.4 Концептуальное программирование

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

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

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

Концептуальное программирование включает такой сорт программирование как объектно-ориентированное.

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

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

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

К дедуктивным подходам решения задач относится и концептуальное программирование [7]. Этот метод ориентирован в основном на решение так называемых вычислительных задач, т. е. задач, которые могут быть сформулированы в следующем виде.

При заданном описании условий задачи М по значениям переменных х\, х2, ..., хт, удовлетворяющих М, вычислить значения переменных уi, у2, ..., у„, также удовлетворяющих М.

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

2. Практическая часть

2.1 Delphi. Основные понятия и определения

Delphi -- среда программирования, в которой используется язык программирования Object Pascal. Начиная со среды разработки Delphi 7.0, в официальных документах Borland стала использовать название Delphi для обозначения языка Object Pascal.

Изначально среда разработки была предназначена исключительно для разработки приложений Microsoft Windows, затем был реализован также для платформ Linux (как Kylix), однако после выпуска в 2002 году Kylix 3 его разработка была прекращена, и, вскоре после этого, было объявлено о поддержке Microsoft .NET. При этом высказывались предположения, что эти два факта взаимосвязаны.

Реализация среды разработки проектом Lazarus (Free Pascal, компиляция в режиме совместимости с Delphi) позволяет использовать его для создания приложений на Delphi для таких платформ, как Linux, Mac OS X и Windows CE.

Также предпринимались попытки использования языка в проектах GNU и написания компилятора для GCC.[

2.2 Процесс написания программы

Для начала запустим Delphi. Назовем главную форму приложения «БД Товары». Для этого нажмем на главную форму и в окне инспектора свойств изменим свойство Caption - рисунок 8.

Рисунок 8. Изменение названия главной формы

После этого перейдем в меню инструментов на вкладку ADO - рисунок 9.

Рисунок 9. Вкладка ADO

На данной вкладке выберем компонент ADOConnection и положим его на главную форму приложения. Компонент «ADOConnection» используется для создания соединения с базой данных другой системы. В нашем случае соединение будет создаваться с разработанной базой данных «Товары».

Для настройки соединения выделим компонент ADOConnection1 и найдем в инспекторе свойств свойство ConnectionString - рисунок 10.

Рисунок 10. ConnectionString

Для назначения конкретной базы данных необходимо нажать Build. После чего выбираем необходимого поставщика услуг - рисунок 11.

Рисунок 11. Выбор поставщика связи

Далее переходим непосредственно к выбору базы данных. Для этого выбираем вкладку «Подключение» и выбираем конкретную базу данных - рисунок 12.

Рисунок 12. Выбор базы данных

После выбора базы данных, нажимаем Ок и переходим на главную форму приложения. Чтобы ADOConnection1 стало активным и другие компоненты смогли бы его использовать, необходимо свойство Connected установить в True. В появившемся окне (рисунок 13) не нужно ничего вводить. Достаточно нажать Ок.

Рисунок 13. Запрос логина и пароля

Разместим на главной форме приложения следующие компоненты с вкладки ADO меню компонент. - ADOTable1. анный компонент необходим для работы с таблицами базы данных.

После этого переходим на вкладку DataAccess - рисунок 14.

Рисунок 14. Вкладка DataAccess

На этой вкладке выбираем компонент и кладем его на форму. Переходим на складку DataControls - рисунок 15.

Рисунок 15. Вкладка DataControls

Выбираем компонент DBGrid и кладем его на главную форму приложения.

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

ADOTable1.Connection := ADOConnection1;

ADOTable1.TableName := `goods';

ADOTable1.Active := `true';

DataSource1.DataSet := ADOTable1;

DBGrid1.DataSource := DataSource1;

После чего ты увидим, что товары появились на форме - рисунок 16.

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

Рисунок 16. БД Товары на форме

Настроим его следующим образом:

DBNavigator1. DataSource := DataSource1;

Запустим приложение при помощи кнопки запуска - рисунок 17.

Рисунок 17. Запуск приложения

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

Рисунок 18. Запущенное приложение

Данное приложение позволяет работать с базой данных «товары».

Заключение

В процессе написания курсовой работы и программы были получены навыки работы в среде разработки Delphi 7, достигнуты поставленные задачи и цели: разработка программы “Построитель графиков”, написание руководства пользователя и т.д.

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

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

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

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

Написанная программа называется “Построитель графиков”. Она может претендовать на математический, физиологический инструмент, в помощь тем, кто пишет рефераты, курсовые, дипломные используя в них графики. Основное отличие от аналогов - график рисуется по точкам, в процессе соединение точек можно убрать, что очень удобно для наглядности. К основным возможностям программы можно отнести то, что значения вводятся в таблицу x,y от 0 до 13, вывод графика на Form2, возможность корректировать значения Form1 не выключая Form2 и получить другой результат, а также внешний вид программы прост и понятен в использовании.

Заключение

При выполнении курсовой работы были решены следующие задачи:

1. Изучены теоретические основы защитного программирования,

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

3. Изучена среды программирования Borland Delphi 7,

4. Создано приложения в среде программирования Borland Delphi 7 для работы с базами данных,

5. Разработанное приложение отлажено.

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

- дублирование кодов программы,

- введение переменной состояния,

- метод булевых признаков.

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

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

Список литературы

1. Ахо А., Ульман Дж. «Теория синтаксического анализа, перевода и компиляции» в 2 тт., том 1., М., Мир, 1978.

2. Братчиков И.Л. «Синтаксис языков программирования» Наука, М.:Инси, 2005. - 344 с.

3. Гулидов А.И., Наберухин Ю.И. Диалектика необходимого - случайного в свете концепции динамического хаоса. 2001. - № 1(9). - С.33-46.

4. Дейкстра Э. Заметки по структурному программированию.- М.:Дрофа, 2006, - 455 с.

5. Ершов А.П. Введение в теоретическое программирование.- М.:РОСТО, 2008, - 288 с.

6. Захарова И.Г. Информационные технологии в образовании: Учеб. пособие для студ. высш. пед. учеб. заведений. - М.: Издательский центр «Академия», 2003. - 192 с.


Подобные документы

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

    презентация [1,9 M], добавлен 01.05.2011

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

    презентация [379,5 K], добавлен 30.04.2014

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

    контрольная работа [480,4 K], добавлен 25.10.2010

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

    презентация [41,4 K], добавлен 13.10.2013

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

    курсовая работа [974,0 K], добавлен 21.12.2016

  • Характеристика основных способов защиты от несанкционированного доступа. Разработка политики безопасности системы. Проектирование программного обеспечения применения некоторых средств защиты информации в ОС. Содержание основных разделов реестра.

    лабораторная работа [1,9 M], добавлен 17.03.2017

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

    контрольная работа [163,7 K], добавлен 04.06.2013

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

    лабораторная работа [137,9 K], добавлен 13.06.2014

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

    дипломная работа [645,3 K], добавлен 21.11.2010

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

    курс лекций [168,3 K], добавлен 26.12.2008

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.