Слайд 2Программа представляет собой закодированную в виде инструкций на некотором языке программирования информацию
![Программа представляет собой закодированную в виде инструкций на некотором языке программирования информацию](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1180978/slide-1.jpg)
о способе преобразования входных данных в выходные. Ее отказ есть событие, состоящее в прекращении выполнения требуемых функций с учетом заданных ограничений.
Слайд 3Основной источник ненадежности программы – ошибки, сделанные разработчиками программ, на разных стадиях
![Основной источник ненадежности программы – ошибки, сделанные разработчиками программ, на разных стадиях](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1180978/slide-2.jpg)
проектирования. Истинные причины возникновения ошибок в программных системах состоят в том, что:
сложность ПО как по объему элементов, так и по структуре и взаимной связности как правило существенно выше, в то время как аппаратная система проектируется из сравнительно небольшого числа типовых элементов;
используются более значительные наборы входных данных;
имеется большее число внутренних состояний;
длиннее зависимости между состояниями во времени;
Слайд 4 аппаратные решения меньше подвержены изменениям;
для технических систем характерно меньшее
![ аппаратные решения меньше подвержены изменениям; для технических систем характерно меньшее](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1180978/slide-3.jpg)
взаимное влияние элементов друг на друга;
программные ошибки в большей степени определяются «человеческим фактором», а аппаратные внешними условиями.
Слайд 5Следует также отметить, что:
отказы не имеют случайной природы, а возникают
![Следует также отметить, что: отказы не имеют случайной природы, а возникают](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1180978/slide-4.jpg)
тогда, когда повторяются вызвавшие их условия;
отказы не зависят от времени, ПО, которое не эксплуатируется, не может отказать;
при оценке надежности ПО не существует понятия «выборка», ибо каждый экземпляр программного модуля или компонента является клоном, точно копирующим дефекты всех других экземпляров.
Слайд 6При оценке и анализе надежности технической системы модели надежности ее элементов, как
![При оценке и анализе надежности технической системы модели надежности ее элементов, как](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1180978/slide-5.jpg)
правило, известны, так как они определяются на этапе их разработки и изготовления. При этом определение надежности элементов производится путем проверки достаточно большого числа этих элементов, с фиксацией сбоев и отказов. Такие модели надежности элементов позволяют получить оценку надежности всего устройства.
Слайд 7При оценке надежности программ:
может быть использовано большое количество разных моделей
![При оценке надежности программ: может быть использовано большое количество разных моделей](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1180978/slide-6.jpg)
надежности, описывающих один и тот же процесс;
отсутствует универсальная модели надежности, которую можно было бы применить для описания любых программных систем с удовлетворительной точностью;
в существующих моделях надежности отсутствует возможность учета «вторичных дефектов»
Слайд 8Процедура оценки надежности программной системы усложняется целым набором факторов, к числу которых
![Процедура оценки надежности программной системы усложняется целым набором факторов, к числу которых](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1180978/slide-7.jpg)
можно отнести:
трудность проведения декомпозиции (разделения на части), что приводит к трудностям при измерении надежности каждой части;
параллельное тестирование двух экземпляров ПО дает почти полностью зависимые результаты;
параллельное тестирование нескольких экземпляров имеет смысл только при различном сочетании входных данных и управляющих воздействий, однако при этом сложнее оценивать корреляцию проводимых тестов и обрабатывать полученные результаты;
количество всех возможных состояний для любой нетривиальной программы насколько велико что не позволяет осуществить полный объем тестовых испытаний.
Слайд 9Исходя из приведенных выше аргументов можно заключить, что:
отказ ПО не
![Исходя из приведенных выше аргументов можно заключить, что: отказ ПО не](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1180978/slide-8.jpg)
может рассматриваться с точки зрения общепринятой теории надежности технических систем, это самостоятельное понятие, применимое к информационным продуктам и связанное с ошибками программирования;
использование понятия интенсивности отказов также не имеет смысла;
надежность программы следует рассматривать в контексте информационной достоверности ее работы;
теория вероятностей не представляет собой метод, который может эффективно использоваться для исследования процессов, происходящие в ПО.
Слайд 11Дефект или ошибка в программе представляет собой неправильность, погрешность или неумышленное искажение
![Дефект или ошибка в программе представляет собой неправильность, погрешность или неумышленное искажение](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1180978/slide-10.jpg)
объекта или процесса, что может быть причиной ущерба – неверного результата вычисления, невозможность выполнения требуемой функции, отказ в дальнейшем применении программного продукта и другие последствия.
Слайд 12Для того, чтобы обнаружить факт возникновения ошибки, должно быть известно или задано
![Для того, чтобы обнаружить факт возникновения ошибки, должно быть известно или задано](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1180978/slide-11.jpg)
правильное, эталонное состояние информационного объекта или процесса, относительно которого определяется отклонение. В качестве такого эталона выступает обычно техническое задание со спецификацией требований заказчика. В этом документе должны быть определены состав, содержание и значения результатов использования программы, которые при определенных условиях и исходных данных должен получать пользователь.
Слайд 13Следует отметить, что для программного кода характерной особенностью является отсутствие полностью определенной
![Следует отметить, что для программного кода характерной особенностью является отсутствие полностью определенной](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1180978/slide-12.jpg)
программы-эталона, которой должны соответствовать результаты работы проектируемой программы. то является существенной особенностью процесса выявления ошибок в ПО. По этой причине установить наличие и локализовать ошибку в программе путем ее сравнения непосредственно с эталонной невозможно. Кроме того, при отладке и тестировании могут сначала обнаруживаются вторичные ошибки, которые являются последствиями и результаты проявления других внутренних дефектов или недостаточно корректного определения требований и порядка функционирования программы.
Слайд 14Значительное число ошибок вносится на стадии кодирования – эти ошибки находятся в
![Значительное число ошибок вносится на стадии кодирования – эти ошибки находятся в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1180978/slide-13.jpg)
исходном коде программы. Будем рассматривать в основном такие ошибки.
Слайд 15Функциональные ошибки – нарушения программной спецификации (несоответствие функциональным или нефункциональным требованиям). Приводят
![Функциональные ошибки – нарушения программной спецификации (несоответствие функциональным или нефункциональным требованиям). Приводят](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1180978/slide-14.jpg)
к ухудшению функциональности ПО (пригодность, точность).
Нефункциональные ошибки – нарушения правил языка программирования, неправильное использование библиотечных функций и т.п. Приводят к снижению надежности (зрелости) и ухудшению функциональности (защищенности):
ошибки в последовательных программах;
ошибки синхронизации.
Слайд 16Основные виды нефункциональных ошибок в последовательных программах на языке C:
ошибки
![Основные виды нефункциональных ошибок в последовательных программах на языке C: ошибки](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1180978/slide-15.jpg)
использования неинициализированного, освобожденного указателя или указателя на NULL;
утечки ресурсов, в том числе динамической памяти;
ошибочно игнорируемые участки кода;
ошибки отсутствия инициализации интервальных переменных;
ошибки выхода за границы статических и динамических объектов;
отсутствие проверки возвращаемого значения функций.
Слайд 17Сама по себе ошибки в программе является ненаблюдаемой, увидеть и оценить можно
![Сама по себе ошибки в программе является ненаблюдаемой, увидеть и оценить можно](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1180978/slide-16.jpg)
не саму ошибку, а результат ее проявления, который по аналогии с техническими системами принято называть отказом. Надежность связана с частотой проявления ошибок, но не с их количеством – разные ошибки имеют разную частоту проявления. При этом, отказ может быть следствием не одной, а сразу нескольких ошибок, причем ошибки могут компенсировать друг друга, при этом может возникнуть ситуация, когда после исправления ошибки интенсивность отказов возрастает. Исправление ошибки, так же как и любое другое изменение ПО приводит к новой программе, характеризующейся уже другими показателями надежности.
Слайд 18Для ПО систем управления объектов, потеря работоспособности которых может повлечь за собой
![Для ПО систем управления объектов, потеря работоспособности которых может повлечь за собой](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1180978/slide-17.jpg)
катастрофические последствия, могут использоваться категории тяжести ошибок приведены в таблице ниже.