Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

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

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 3.6.2024

24

http://www.chemisk.narod.ru

Содержание

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

2

1.1 Основные этапы технологического процесса разработки программ

2

1.2  Критерии качества программного изделия

4

1.3  Правила хорошего стиля

5

1.4  Выбор алгоритма

7

1.5  Трудоемкость, эффективность и сложность алгоритма

8

1.6  Итерация и рекурсия

10

1.7 Способы описания алгоритмов

11

2.  Языки программирования

13

2.1 Способы и методы оптимизации

16

2.2 Оптимизация программы

17

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

18

2.4 Вычисление констант

19

2.5 Оптимизирующие компиляторы

25

3. Отладка

26

3.1 Виды ошибок

26

3.2 Обнаружение ошибок

30

3.3 Методы отладки

32

3.4 Пошаговое и монолитное тестирование

38

3.5 Предпродажная подготовка. Лицензии и контракты.

44

3.6 Сопровождение и эксплуатация. Виды обслуживания.

44

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


1.1. Основные этапы технологического процесса разработки программ

  1.  Постановка задачи
  2.  Построение математической модели
  3.  Разработка (выбор и адаптация) алгоритма
  4.  Составление программы
  5.  Тестирование и отладка
  6.  Сдача в эксплуатацию

Постановка задачи.
На этом этапе раскрывается организационно-экономическая сущность задачи:

  1.  формулируется цель ее решения
  2.  определяется взаимосвязь с другими задачами
  3.  указывается периодичность ее решения
  4.  раскрывается состав и форма представления входной, промежуточной и выходной информации
  5.  характеризуются формы и методы контроля достоверности информации
  6.  описываются формы взаимодействия пользователя с ЭВМ

Особое внимание уделяется детальному описанию входной, выходной и промежуточной информации.
При этом определяется:

  1.  форма представления отдельных данных
  2.  количество знаков, выделяемых для записи данных, исходя из их максимальной значности
  3.  источник возникновения данных

Кроме того, для цифровой информации указывается:

  1.  целочисленный или дробный характер данных (для дробных указывается количество 10-х знаков) и допустимый диапазон изменения величин.

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

  1.  Анализ существующих аналогов задачи.
  2.  Анализ технических и программных средств.
  3.  Разработка математической модели.
  4.  Разработка структур данных.

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

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

План написания постановки задачи (ПЗ).

  1.  Наименование задачи.
  2.  Назначение.
  3.  Достигаемая цель.
  4.  Для кого предназначена.
  5.  Технические средства.
  6.  Периодичность использования.
  7.  Входная информация.
  8.  Выходная информация (формируется по запросам).
  9.  Метод проверки правильности (сравнивается с контрольным примером).
  10.  Организация внедрения задачи.
  11.  Разработка контрольного примера (входная информация с конкретными данными, выходная информация).
  12.  Методы защиты.

1.2. Критерии качества программного изделия

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


1.3. Правила хорошего стиля

  1.  Структурное программирование предполагает использование базовых структур:
  2.  следование
  3.  выбор
  4.  повторение
  5.  В рамках хорошего стиля нельзя явно задавать количество вводимых значений. Для этого надо использовать некоторый признак конца ввода (конца файла).
  6.  Структурное программирование сокращает потребность в комментариях. Комментарии должны содержать информацию, которую нельзя подчеркнуть в самой программе. Перед сдачей программы комментарии нужно проверить на их соответствие возможно изменившейся программе.
    Вводные комментарии содержат: номер и имя модуля; фамилию автора; дату, номер версии; назначение модуля; перечень основных алгоритмов со ссылками на источники; имена подпрограмм, вызывающих модуль; имена подпрограмм, вызываемых модулем; словарь данных; описание ввода/вывода; описание процесса обработки ошибок выполняемого модуля.
  7.  Имена данных должны быть мнемоническими.
    Мнемоника - искусство запоминания, основанное на законах ассоциаций.
    Не следует использовать слова, в которых обычно делаются орфографические ошибки; имена, различающиеся только одной буквой; слова, имеющие более одного очевидного сокращения; ключевые слова языка программирования.
    Имена переменных типа i, j, k следует давать только управляющим переменным в операторах цикла.
  8.  Отступы и выравнивания в тексте программы проясняют ее логику и облегчают ее чтение. Начальной позицией называется самая левая колонка, с которой может начинаться предложение. Начальная позиция может перемещаться влево и вправо, в зависимости от того, какое предложение записывается. Когда встречается условный оператор или оператор цикла, колонка, в которой он расположен, становится начальной позицией. Конец условного оператора и тело цикла вызывает возврат начальной позиции в прежнее состояние или сдвиг влево на один отступ. Второй уровень располагается на один отступ правее начальной позиции. Таким образом, предложения, находящиеся внутри тела цикла располагаются на втором уровне, как и предложения, следующие за условным оператором.
  9.  Для повышения наглядности предназначены пробелы и пустые строки, которые разделяют программу на отдельные, логически-завершенные части-параграфы.
  10.  Сопутствующие комментарии. Поясняют назначение каждого параграфа. Ставятся вначале параграфа.


1.4. Выбор алгоритма

Типы алгоритмов.

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


1.5. Трудоемкость, эффективность и сложность алгоритма

Основным фактором при выборе алгоритма для задач, решаемых с помощью перебора большого числа вариантов, является суммарное время нахождение решения.
Методы, используемые для сокращения числа вариантов при переборе или позволяющие выбрать наиболее правдоподобные варианты, называют эвристическими.
Трудоемкость алгоритма - это число шагов.
Если трудоемкость ограничена
полиномом, то алгоритм называется эффективным; если более быстро растущей функцией, то не эффективным.
Зависимость времени работы программы от объема обрабатываемых данных определяется оценкой сложности алгоритма.
Время работы алгоритма обработки массивов данных зависит от размеров этих массивов.
Например, время работы алгоритма выполняющего чтение и запись данных в ОЗУ определяется по формуле an+b, где a - время, необходимое для того, чтобы прочитать или записать один элемент массива; n - количество элементов массива; b - время для выполнения вспомогательных функций.
Поскольку эта формула выражает линейную зависимость от n, сложность соответствующего алгоритма называют
линейной. O(n).
Пример: обменная сортировка списка из n элементов представляет собой следующий процесс: определяется минимальный элемент всего списка и осуществляется его обмен с первым элементом списка; затем определяется наименьший элемент оставшегося списка и производится его обмен со вторым элементом.
Таким образом число сравнений здесь выражается полиномом второй степени и сложность здесь будет
квадратичная. O(n2).
Если сложность алгоритма вычисляется по уже написанной программе, то вместо числа сравнений вычисляется количество внутренних циклов.

(n-1)+(n-2)+(n-3)+ … + 3 + 2 + 1= =

for i:=1 to n-1 do

for j:=i+1 to n do

 if A[I] >A[j] then

 begin

  tmp:=A[j];

  A[j]:=A[i];

  A[i]:=tmp;

 end;

Внешний цикл выполняется (n-1) раз, внутренний цикл срабатывает в среднем n/2 раз для каждого вхождения во внешний цикл. Общее число обращений к внутреннему циклу будет равно (n-1)*n/2. При больших n за оценку этого выражения принимается n2.

for i:=1 to n-1 do

 for j:=1 to n do

begin

 С[i, j]:=0;

 for k:=1 to n do

  С[i, j]:= С[i, j]+A[i, k]*B[k, j];

 end;

Алгоритм перемножения двух матриц размером n*n имеет число срабатываний внутреннего цикла равное n3. O(n3).
Формально сложность алгоритма определяется как порядок функции, выражающей время его работы.
Алгоритм двоичного поиска в таблице с упорядоченными элементами оценивается как O(log
2n).
Логарифмическая зависимость сложности от возрастания n более приемлема чем линейная; линейная предпочтительнее чем полиномиальная или экспоненциальная.
Для больших объемов данных нежелательна даже полиномиальная сложность.
Пример: составить проект. Имеется последовательность чисел (не больше 30). Положительные четные заменить максимальным числом, отрицательные нечетные заменить средним арифметическим отрицательных чисел. Подсчитать количество замен. Упорядочить элементы последовательности в порядке убывания.




1.6. Итерация и рекурсия

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

Пример:

function fact (n: integer): longint;

begin

if n=0 then fact:=1

else fact:=n*fact(n-1);

end;

begin

f:=1;

for i:=1 to n do

f:=f*i;

end.

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


1.7. Способы описания алгоритмов

  1.  Словесный.
  2.  Графический.
  3.  Псевдокод.
  4.  Таблицы решений.

Словесный. Действия описываются средствами естественного языка.
Достоинства:

  1.  общедоступный
  2.  позволяет описывать алгоритм с любой степенью детализации

Недостатки:

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

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

  1.  формализован
  2.  нагляден
  3.  компактен

Недостатки:

  1.  необходимость определенных знаний

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

  1.  простота отражения задачи
  2.  компактность записи
  3.  легкость модификации
  4.  хорошее восприятие логики решения

Недостатки:

  1.  ограниченность применения.

2. Языки программирования

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

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

Основные шаги:

  1.  Абстракция данных, т.е. представление данных, позволяющее использовать их, не зная подробностей их организации и создания.
  2.  Абстракция действий в виде процедур, когда фрагмент программы может быть использован другими пользователями, знающими функцию, которую этот фрагмент реализует и способ определения ее параметров.
  3.  Абстракция типа данных.
  4.  Абстракция объектов породила ООП.

Принцип сокрытия информации сочетается в языках программирования с принципом определения интерфейсов.
Существуют специально разработанные для определенной области производства языки программирования (ЯП). Например, на
"Авиастар-СП" разработан язык Casius. Это язык геометрического моделирования и программирования обработки деталей для станков с ЧПУ.
Характеристики и свойства языков программирования.
Основными характеристиками, позволяющими сравнивать языки программирования, являются:
мощность, уровень и концептуальная целостность.
Мощность характеризуется количеством и разнообразием задач, алгоритмы решения которых можно записать, используя этот язык. Самым мощным является машинный язык. Любую задачу, запрограммированную на каком-либо языке можно запрограммировать и на машинном языке.
Уровень языка характеризуется сложностью решения задач с использованием этого языка. Чем проще записывается решение задач, чем более непосредственно реализуются сложные операции и понятия, чем меньше объем получаемых программ, тем выше уровень языка.
Концептуальная целостность языка характеризуется свойствами совокупности понятий, служащих для описания этого языка и включает 3 взаимосвязанных аспекта:

  1.  экономию понятий
  2.  ортогональность понятий
  3.  единообразие понятий

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


2.1. Способы и методы оптимизации

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

  1.  Часто используемые программы (ОС, компиляторы, постпроцессоры). Эффективность - первостепенная задача.
  2.  Производственные программы. Эффективность существенна.
  3.  Программы, написанные не программистами. Эффективность нужна если есть ограничения по памяти или по времени.

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

  1.  Программа не помещается в памяти.
  2.  Программа слишком долго выполняется.
  3.  Программа должна быть включена в библиотеку и часто использоваться.

2.2. Оптимизация программы


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

  1.  Сегментация программы
    Программу, подлежащую оптимизации следует разделить на подпрограммы и ответить на 3 вопроса:
  2.  какой процент общего времени использует каждая подпрограмма
  3.  насколько в % отношении оптимизируется каждая подпрограмма
  4.  сколько человеко-часов необходимо для достижения этой цели
  5.  Время работы подпрограммы
    Необходимо установить фактическое время работы каждой подпрограммы. Если это невозможно, применяется другой подход. Он заключается в подсчете количества операторов в подпрограммах по распечатке. Операторы, включенные в тело цикла, учитываются многократно.
    В первую очередь необходимо оптимизировать подпрограмму, которая используется больше других.
  6.  Пример:

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



    Подпрограммы с самым высоким коэффициентом оптимизируются в первую очередь.
    При оптимизации вручную, существует 2 подхода:
  3.  "чистка"
  4.  "перепрограммирование"

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

Структурное программирование сосредоточено на логике программы и включает 3 главные составляющие:

  1.  Проектирование сверху вниз.
  2.  Модульное программирование.
  3.  Структурное кодирование.

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

  1.  Методы нисходящего проектирования.
  2.  Методы расширения ядра.
  3.  Методы восходящего проектирования.

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

  1.  последовательности (линейности)
  2.  выбора (ветвления)
  3.  повторения (цикла)

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

  1.  +, -
  2.  *
  3.  / (деление)
  4.  возведение в степень

Пример: 3*I = I + I + I

Преобразование может привести к исключению операции:

X = 2*Y + (A-1)/P + 2*T

X = 2*(Y + T) + (A-1)/P

A/50 = A*0,2

A = 1.0/X  RX = 1.0/X

  A = RX

C = B + D/X  C = B + D*RX

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

X = Y + A/B*C

Z = W + A/B*C

ABC = A/B*C

X = Y + ABC

Z = W + ABC

Организация цикла.

y = a1x3+a2x2+a3x+a4

POLY = A[1]

FOR I = 2 TO 4 DO

POLY = POLY*X + A[I]

POLY = ((A[1]*X + A[2])*X + A[3])*X + A[4]

  1.  Экономим время на выполнении и инициировании переменных.
  2.  Один из способов уменьшения количества циклов состоит в объединении двух или более циклов в один.
  3.  Значительная часть времени при использовании циклов тратится на инициирование и проверку индекса цикла.

Пример 1: инициирование выполняется:

1 for i:=1 to 20 do

20  for j:=1 to 10 do

200   for k:=1 to 5 do

221 раз {тело цикла}

Тело цикла выполняется 20*10*5=1000 раз.
Проверка условий завершения цикла выполняется 1000+200+20=1220 раз.
Путем реорганизации циклов (которая не всегда возможна) можно сократить число инициирований и завершений цикла.

Пример 2: инициирование выполняется:

1 for i:=1 to 5 do

5  for j:=1 to 10 do

50   for k:=1 to 20 do

56 раз {тело цикла}

Тело цикла выполняется 5*10*20=1000 раз.
Проверка условий завершения цикла выполняется 1000+50+5=1055 раз.
Внешний цикл должен иметь наименьшее число итераций, по отношению к внутреннему.

Пример 3: оптимизировать.

for i:=1 to 50 do

for j:=1 to 50 do

 A[i, j]:=0;

for k:=1 to 50 do

 A[k, k]:=1;

for i:=1 to 50 do

for j:=1 to 50 do

 if i=j then A[i, j]:=1

 else A[i, j]:=0;

Чистка цикла:

for i:=1 to 10 do

for j:=1 to 10 do

 X:=X+Y*Z+C[i, j];

Оптимизированный цикл:

YZ:=Y*Z;  // инвариантные выражения - не зависящие от цикла

for i:=1 to 10 do

for j:=1 to 10 do

 X:=X+YZ+C[i, j];

Метод развертывания цикла:

for i:=1 to 1000 do

A[i]:=0;

for i:=1 to 500 do

begin

A[i]:=0;

 A[i+500]:=0;

end;

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

for i:=1 to 100 do

A[i]:=5*i;

A[1]:=5;

for i:=2 to 100 do

A[i]:=A[i-1]+5;

Пример 4: выполнить развертку.

for i:=1 to 10 do

 for j:=1 to 10 do

 A[i, j]:=0;

for i:=1 to 5 do

for j:=1 to 10 do

begin

 A[i, j]:=0;

 A[i+5, j]:=0;

end;

for i:=1 to 5 do

for j:=1 to 5 do

begin

 A[i, j]:=0;

 A[i+5, j]:=0;

 A[i, j+5]:=0;

 A[i+5, j+5]:=0;

end;

i:=1; j:=1;

repeat

repeat

 A[i, j]:=0;

 A[i+1, j]:=0;

 A[i, j+1]:=0;

 A[i+1, j+1]:=0;

 j:=j+2;

until j>10;

i:=i+2;

until i>10;

Пример 5: записать на Паскале отношение, истинное при выполнении условия и ложного в противном случае:

1.Натуральное N является полным квадратом:

if sqrt(N) = round(sqrt(N)) then …

2.Целое K делится на 7 без остатка:

if K mod 7 = 0 then …  

3.X - максимальный из X, Y, Z:

if (X>Y) and (X>Z) then …  


2.5. Оптимизирующие компиляторы

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

  1.  Синтаксический анализ программ.
  2.  Анализ описаний данных и преобразование их в удобную для хранения и дальнейшего использования форму (в т.ч. вычисление констант).
  3.  Распределение памяти для используемых в программе объектов.
  4.  Установление соответствия между конструкциями входного языка и эквивалентными им конструкциями выходного языка.
  5.  Печать в отредактированном виде текста исходной программы.
  6.  Сообщение об обнаруженных в процесс трансляции ошибках в исходной программе.
  7.  Эквивалентные преобразования на уровне входного языка с целью оптимизации программы.

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

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

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

  1.  выигрыш в памяти за счет времени
  2.  дополнительные усилия программиста
  3.  сохранение промежуточных результатов

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

3. Отладка


3.1. Виды ошибок

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

  1.  Отсутствие заданий начальных значений переменных.
  2.  Неверные условия окончания цикла.
  3.  Неверную индексацию цикла.
  4.  Отсутствие задания условий инициирования цикла.
  5.  Неправильное указание ветви алгоритма для продолжения процесса решения задачи.

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

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

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

  1.  Пропуск некоторых операторов.
  2.  Отсутствие необходимых данных.
  3.  Непредусмотренные данные.
  4.  Неверный формат данных.

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

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

  1.  неверная синтаксическая конструкция программы
  2.  программа выдает неверные результаты

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

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

  1.  пропуск необходимого знака пунктуации
  2.  несогласованность скобок
  3.  пропуск нужных скобок
  4.  неправильное формирование оператора
  5.  неверное образование имени переменной
  6.  неправильное использование арифметических операторов
  7.  неверное написание зарезервированных слов

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

  1.  Противоречивые команды.
  2.  Отсутствие условий окончания цикла.
  3.  Дублирование или отсутствие меток.
  4.  Отсутствие описания массива.
  5.  Запрещенный переход.

Советы по устранению ошибок:

  1.  Если ошибок много, то в первую очередь устранить очевидные.
  2.  Обратиться к руководству по программированию на данном языке (справка).
  3.  Выбрать хороший отладочный компилятор.

Неопределенные переменные.
Распространенными источниками программных ошибок являются неопределенные переменные и переменные, для которых не заданы начальные значения.
Определение начальных значений:

  1.  Присваивание.
  2.  Ввод.
  3.  Чтение из файла.

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

3.2. Обнаружение ошибок

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

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

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

  1.  точки обнаружения
  2.  точки происхождения

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

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

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


3.3. Методы отладки

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

  1.  Отладка в соответствии с общим предложением "расставить операторы печати по всей программе"
    Недостатки:
  2.  расстановка операторов печати заставляет программиста работать методом проб и ошибок
  3.  в процессе отладки придется протестировать большое число данных
  4.  требуется изменять программу при отладке. Эти изменения могут скрыть ошибку или внести новую
  5.  стоимость использования методов данной категории для больших программ или систем может быть слишком высокой
  6.  Отладка с использованием автоматических средств
    Достоинства:
  7.  не нужно вносить изменения в программу

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

  1.  Метод индукции.
    Индукция - это анализ от частного к целому. Просматривая симптомы ошибки, установленные одним или несколькими тестами и взаимосвязи между ними, можно обнаружить причину ошибки.
  2.  Метод дедукции.
    Данный метод позволяет на основе некоторых общих теорий или предпосылок, используя операторы исключения или уточнения, прийти к определенному заключению (обнаружить место ошибки). Чтобы сделать заключение мы должны просмотреть всю имеющуюся в нашем распоряжении информацию: все результаты всех тестов обо всех ошибках. Выдвинутые гипотезы поочередно исключаются из рассмотрения.
  3.  Прослеживание логики в обратном порядке.
    Метод локализации для небольших ошибок. Отладка начинается в точке программы, где был обнаружен некоторый результат. Для этой точки на основании полученного результата следует установить, какими должны быть значения переменных. Мысленно выполняя из данной точки программы в обратном порядке и опять рассуждая примерно так: "Если бы в этой точке состояние программы было таким, то в другой точке должно быть следующее состояние", можно достаточно быстро и точно локализовать ошибку, т.е. найти место в программе между точкой, где состояние программы соответствовало ожидаемому и точкой, в которой состояние программы отличалось от ожидаемого.

Автоматизированные средства отладки программ.
В составе Borland Pascal есть интегрированный отладчик, который имеет 3 основных меню:
Run, Debug, Options.
С помощью отладчика можно использовать следующие средства:

  1.  Трассировку программ
  2.  Просмотр изменения значений контролируемых переменных и выражений в процессе трассировки
  3.  Модификацию значений переменных для тестирования программы
  4.  Просмотр значений фактических параметров, вызванных подпрограмм
  5.  Работу с точками прерывания.
  6.  Просмотр выходной информации

После настройки отладчика надо задать выражения, в том числе, имена переменных, значения которых необходимо контролировать с помощью окна просмотра. Затем трассировать, т.е. выполнять программу поэтапно и при каждом останове программы проверять текущие значения заданных выражений и результаты работы программы в одном из окон.
Использование функциональных клавиш.
Начало трассировки:
F4 - выполнение программы до строки, в которой установлен курсор.
F7 - построчное выполнение подпрограмм.
F8 - построчное выполнение программы с выполнением подпрограмм от одного нажатия клавиши F8.
Выполнение программы по частям по каждой команде
Ctrl+F9 до строки, в которой установлена очередная контрольная точка.
Выйти из отладочного режима трассировки программы можно с помощью клавиш
Ctrl+F2.
Установка и просмотр текущих значений.
Чтобы задать (добавить или удалить) выражения можно использовать:

  1.  Команду Debug/Add Watch (Ctrl+F7)
  2.  При активном окне Watches можно использовать клавиши Insert для добавления выражения и Del - для удаления.

Чтобы вывести значения всех элементов массива, надо указать только имя массива. Если массив большой, тогда можно указать для наблюдения только часть массива:
  имя_массива [n], m ,где n - индекс первого элемента массива, который надо увидеть, m - количество элементов.

Пример:
  A[10], 5 - начиная с 10-го выведет 5 элементов

Изменение переменных в процессе выполнения программы.
По команде
Debug/Evaluate/Modify (Ctrl+F4) на экране разворачивается дополнительное окно, содержащее три поля и 4 кнопки. Чтобы изменить значение переменной надо перейти в окно New Value и внести исправления, затем нажать кнопку Modify. В поле Result появится новое значение переменной. Модифицировать можно только значения переменных.
В окно
Expression можно ввести имя любой переменной программы или любое допустимое выражение, которое надо вычислить. Выражение строится в соответствии с синтаксисом языка Pascal.
Работа с процедурами и функциями.
При каждом вызове подпрограммы Pascal запоминает вызов и передаваемые подпрограммой фактические параметры в стеке вызова. Каждый раз во время очередного останова программы, при ее трассировке, можно запросить текущий стек вызова с помощью команды
Debug/Call Stack (Ctrl+F3).
Задать/отключить точку останова -
Ctrl+F8.

Необходимость тестирования. 

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

    Задача: программа получает на входе 3 значения, воспринимает их как стороны треугольника и выводит его вид.

Ситуация

Эффект

3, 3, 3

равносторонний треугольник

4, 4, 3

равнобедренный

4, 3, 5

прямоугольный

  1.  
  2.  Тестирование модулей.
  3.  Тестирование межмодульных связей.


  1.  Системный тест - это тест законченного продукта.
  2.  Пользователь выполняет свой собственный тест - тест приемлемости.

Причины необходимости тестирования:

  1.  Сложность программ
  2.  Возможны отклонения от правильного понимания спецификации программы.
  3.  Пользователь может вносить изменения в постановку задачи.

Методы тестирования.

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

Категории тестовых данных.
Существует методология относящаяся к методу ящика, которая называется эквивалентным разбиением.
Согласно ей:

  1.  Выделяют классы эквивалентности.
  2.  Строят тесты.

Различают 2 типа классов эквивалентности:

  1.  правильные (представляющие правильные входные данные)
  2.  неправильные (ошибочные входные данные)

Необходимо сосредоточить внимание на неправильных и неожиданных условиях.

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

Построение тестов включает в себя:

  1.  Назначение каждому классу эквивалентности уникального №
  2.  Проектирование новых тестов, каждый из которых покрывает как можно большее количество неоткрытых правильных классов.
  3.  Запись тестов, каждый из которых покрывает 1 и только 1 из непокрытых неправильных классов.

Данные для тестирования.

  1.  В качестве некоторых тестовых данных используют экстремальные значения. Например, если целая величина должна находиться в диапазоне от a до b, то следует проверить: a-1, a, a+1, b-1, b, b+1.
  2.  Используют специальные значения. К ним относятся: константы, 0, 1, пустая строка, пустой файл, строка из одного символа и т.д.
  3.  Для циклов, организованных с помощью оператора Do, выбрать значения, при которых цикл выполняется 0, 1 и максимальное число раз.

3.4. Пошаговое и монолитное тестирование

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


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

  1.  Монолитное тестирование требует больших затрат труда.
  2.  При пошаговом тестировании раньше обнаруживаются ошибки в межмодульных связях.
  3.  При пошаговом тестировании ошибки в межмодульных связях обнаруживаются легче.
  4.  Монолитный способ применяется чтобы ускорить сроки сдачи программы.
  5.  При монолитном - меньше расход машинного времени.

Категории тестов системных испытаний.

  1.  Тестирование удобства использования. Сравниваются цели с содержанием пользовательской документации.
  2.  Тестирование на предельных объемах.
  3.  Тестирование на предельных нагрузках. Означает поступление пикового объема данных в течение короткого интервала времени.
  4.  Тестирование удобства эксплуатации:
  5.  Справка
  6.  Значимость входных сообщений программы
  7.  Понятна ли диагностика ошибок
  8.  Единообразие стиля пользовательских интерфейсов
  9.  Содержит ли система опции, число которых чрезмерно или использование которых маловероятно
  10.  Выдает ли система какие-либо подтверждения на все входные сообщения
  11.  Тестирование защиты (от несанкционированного доступа).
  12.  Тестирование производительности.
  13.  Тестирование требований к памяти.
  14.  Тестирование конфигураций оборудования.
  15.  Тестирование удобства установки (настройки, инсталляции).
  16.  Тестирование надежности.
  17.  Тестирование восстановления.
  18.  Тестирование удобства обслуживания.
  19.  Тестирование документации.
  20.  Тестирование процедур.
  21.  Выполнение проверки системы непрограммистами.

Принципы тестирования.

  1.  Тестирование - это процесс выполнения программ с целью обнаружения ошибок.
  2.  Хорошим считается тест, который имеет высокую вероятность обнаружения еще не выявленной ошибки.
  3.  Удачным считается тест, который обнаруживает еще не выявленную ошибку.
  4.  Описание предполагаемых значений выходных данных или результатов должно быть необходимой частью тестового набора.
  5.  Следует избегать тестирования программы ее автором.
  6.  Тесты для неправильных и непредусмотренных входных данных следует разрабатывать также тщательно как для правильных и предусмотренных.
  7.  Необходимо проверять не только, делает ли программа то, для чего она предназначена, но и не делает ли она того, чего не должна делать.
  8.  Тестирование - это процесс творческий.

Методы ручного тестирования:

  1.  Инспекции исходного текста.
  2.  Сквозные просмотры.
  3.  Проверка за столом.

Автоматические средства тестирования:

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

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

Средства защиты программ.
Средства защиты программ можно рассматривать в двух направлениях:

  1.  Защитное программирование.
  2.  Меры предупреждения компьютерных преступлений.

Меры предупреждения компьютерных преступлений можно разделить на 3 группы:

  1.  Технические:
  2.  защита от несанкционированного доступа к системе
  3.  резервирование особо важных компьютерных подсистем
  4.  Организационные:
  5.  охрана вычислительного центра
  6.  тщательный подбор персонала
  7.  выбор места расположения центра
  8.  Правовые:
  9.  разработка норм, устанавливающих ответственность за компьютерные преступления
  10.  защита авторских прав программиста
  11.  совершенствование уголовного и гражданского законодательства

Информационная безопасность должна обеспечивать:

  1.  Конфиденциальность информации.
  2.  Целостность данных.
  3.  Доступность для всех авторизованных пользователей.

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

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

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

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

Антивирусные средства делятся на фильтрующие и противовирусные.
Для защиты ПО наиболее часто используются: пароли, назначение прав доступа (людям и программам), методы шифрования.


3.5. Предпродажная подготовка. Лицензии и контракты.

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

  1.  Объем работы.
  2.  Цена.
  3.  Поставка (точная дата и место передачи).
  4.  Право собственности (кто является владельцем каждого компонента).
  5.  Гарантия (срок действия гарантии).
  6.  Ответственность.
  7.  Обязательства.
  8.  Лицензия.
  9.  кончание работ.

При составлении лицензии и контракта и даже при их изменении следует получить квалифицированную консультацию юриста по вопросу о праве собственности.

3.6. Сопровождение и эксплуатация. Виды обслуживания.

Группа сопровождения выполняет обязанности, связанные с исправлением дефектов изготовленных программных изделий (корректирующее сопровождение) или незначительными изменениями (адаптивное сопровождение).
Изменения, проводимые на этапе сопровождения, бывают
корректирующими и расширяющими.
Корректирующие изменения вызываются переменами, происходящими в окружающей среде.
Расширяющие изменения не являются обязательными и направлены лишь на улучшение характеристик ПО.
Сопровождение как вид деятельности заключается в обработке запросов на исправление, проверку и расширение.
На численность персонала группы сопровождения влияют характер и сроки взятых гарантийных обязательств.
Уровень 1.
Периодический выпуск новых редакций (только корректирующие изменения) и новых версий, содержащих дополнительно расширяющие изменения.
Уровень 2.
Периодический выпуск только новых редакций.
Уровень 3.
Выпуск новых версий или редакций не производится. На заявки отправляются ответы, которые могут содержать или не содержать решения поставленных проблем.
Чем больше изделий приходится сопровождать на уровне 1 или 2 гарантийного обслуживания, тем многочисленнее должна быть группа сопровождения.




1. Реферат Дзю До
2. Управління інформаційною безпекою
3. Принципы управление маркетингом.html
4. а Высокобелковые продукты из метанола получают фирмы ряда развитых стран мира- Великобритании Швеции Гер
5. . супруг который не знал об обстоятельствах препятствующих заключению брака; 2
6. КАЛЕНДАРНО ТЕМАТИЧЕСКИЙ ПЛАН ПРАКТИКИ ПО ПРОФИЛЮ СПЕЦИАЛЬНОСТИ «Организация и управление торгово-сбытовой деятельностью»
7. Мировая политика Исследовательский семинар проф.html
8. Лекция 1011 ЭЛЕКТРОННОЕ МЕДИЦИНСКОЕ ОБОРУДОВАНИЕ Классификация медицинского электронного оборудования
9. предпринимательское право обозначает главным образом ту совокупность норм права которую в наиболее общем
10. ТЕМАТИКИ И ИНФОРМАТИКИ О Т Ч Е Т о результатах выполнения лабораторной работы 2 по дисципли
11. Вариант Gп GФ Gр Gм Gк ~ d D d1.
12. Group 1850.html
13. Инструментарий электронной коммерции
14. Тема 17 Оскарження рішень дій чи бездіяльності під час досудового розслідування План заняття Ріш
15. Tody work of prepring legl documents for buying nd selling houses mking wills etc
16. горный инженер Что изучает горная наука Определение горного производства
17. Финансовый результат деятельности, затраты по займам, договоры подряда, прибыль на акцию, прекращаемая деятельность
18. реферат дисертації на здобуття наукового ступеня доктора технічних наук Київ 200
19. Лекция 1 ЧАСТЬ 1 ТЕОРИЯ ВЕРОЯТНОСТЕЙ ВВЕДЕНИЕ Человек в процессе своей жизнедеятельности сталкивается с
20. ТЕМА 6 ИЗДЕРЖКИ 6