Интелтек форум

Надежность информационных систем => Верификация и тестирование компьютерных программ => Тема начата: dmitryb от 06 Июнь 2009, 16:06:13



Название: Об ошибках
Отправлено: dmitryb от 06 Июнь 2009, 16:06:13
Все мероприятия по обеспечению качества программных продуктов и информационных систем так или иначе связаны с необходимостью поиска и устранения каких-либо ошибок. Эти ошибки имеют совершенно разную природу, время и особенности возникновения и проявления в процессе жизненного цикла изделий, приводят к разным последствиям.
Мне представляется необходимым всесторонне исследования феномена ошибки в человеческой практики, создание некоторых моделей ошибок, чтобы лучше понять и спроектировать новые методы тестирования и верификации программ, совершенствовать средства и технологии их разработки.
В данной теме хотелось бы обсудить общие вопросы ошибок: философские, психологические, математические, социо-культурные аспекты этого сложного явления. В другой теме данного раздела форума планируется сосредоточиться на более узкой теме, связанной с ошибками в компьютерных программах. Возможно, что кому-то покажется, что обсуждение более общей теме не оправдано и она никак не поможет нам в вопросах улучшения качества ПО, но мне представляется, что без него не обойтись. Даже краткий анализ ошибок в программах и подходов к их классификации показал, что ошибки тесно связаны с процессами мыслительной и психофизической деятельности человека. По сути, при управлении качеством создания программных систем мы пытаемся проанализировать и как-то улучшить процессы последовательного перевода неких текстов на языках некоторых знаковых систем (схемы, рисунки, чертежи, технические задания, спецификации и т.д.) на другие, как правило, строгие и формальные алгоритмические языки. Чтобы понимать и устранять возможные неприятности, которые могут возникнуть в при таком переводе, необходимо лучше знать взаимосвязь языка и мышления. Любой написанный человеком текст, независимо на каком языке (естественном или формальном) он написан, является неким материальным воплощением его мыслей. В случае компьютерной программы мысль в полном смысле слова становится материальной, так как с помощью нее можно непосредственно управлять процессами и событиями материального мира! Процесс этот очень сложен, так как на него накладываются особенности функционирования аппаратно-программной среды (редакторы, трансляторы и компиляторы, среда коллективной разработки программ, репозитарии программ, базы данных и многое другое), что может привести к дополнительным ошибкам.

Теперь некоторые ссылки по теме.

Статья из русской Википедии: http://ru.wikipedia.org/wiki/Ошибка (http://ru.wikipedia.org/wiki/Ошибка) . Можно рассматривать как краткое введение в тему, в которой обозначены некоторые ее аспекты.
В Викицитатнике есть подборка высказываний про ошибки: http://ru.wikiquote.org/wiki/Ошибка (http://ru.wikiquote.org/wiki/Ошибка) . Можно использовать их для эпиграфов к некоторым разделам исследования  :).
Исследованию ошибок при проектировании и эксплуатации различных технических систем посвящены целый ряд работ по инженерной психологии. Из материалов, которые свободно размещены в Интернете, можно отметить работу профессора Ю. К. Стрелкова.
Ссылка: http://www.psy.msu.ru/science/public/strelkov/index.html (http://www.psy.msu.ru/science/public/strelkov/index.html).
Печатный вариант: Стрелков Ю.К. Инженерная и профессиональная психология. –М: Академия, Высшая школа, Серия: Высшее образование, 2001. – 360 с. - ISBN: 5-7695-0651-2, 5-06-003928-5

Вот цитата из этой работы:

«Ошибка — это результат действия, совершенного неточно или неправильно, вопреки плану. Ошибка это отклонение от намеченной  цели, несовпадение полученного  с намеченным, несоответствие достигнутого результата намеченной цели, поставленной задаче.
Практика пойдет по пути выяснения всех обстоятельств, а наш теоретический анализ должен определить теоретическую позицию. Что такое ошибка? Случайность? Неудача? Промах? Нарушение?
Теория деятельности требует постановки вопроса о том, что такое ошибочное действие? Но, по-видимому, нельзя дать позитивного определения такому понятию. Тем не менее определение необходимо, иначе мы не сможем расследовать происшествие. Ошибка - это факт практики. Если теория действия строится как позитивная конструкция, в которой указываются элементы, их функции и связи между ними, то в ней не будет места ошибке.
В рамках теории ошибка может быть задана как невыполнение базовых предположений теории, как несоответствие правилам построения конструкции, отсутствие связей между элементами, и отсутствие самих элементов, и т.д. Чтобы узнать, что привело к ошибке, мы должны спросить: какими были движения, мысли и переживания человека в ходе выполнения действия?»

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

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

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







Название: Re: Об ошибках
Отправлено: dmitryb от 06 Июнь 2009, 16:57:44
С проблемами ошибок связаны многие разделы современной математики. В любом численном методе решения задачи неизбежно возникает вопрос о его точности, а, следовательно, о тех ошибках, которые он привносит в решение. Такой раздел, как теория погрешностей целиком посвящен этим вопросам.
Я не считаю целесообразным пытаться сделать обзор всех методов математики, связанных с ошибками и погрешностями. Возможно, что такие исследования уже выполнены и достаточно дать ссылки на соответствующие обзоры. С учетом нашей прагматической цели – изучением и устранением программных ошибок хотелось бы сосредоточиться на тех математических методах, которые могут нам помочь. Кроме уже упомянутой теории погрешностей, нам безусловно потребуются многие разделы теории вероятности и математической статистики. Интересно попробовать использовать методы математической логики (планирую создать самостоятельную тему, посвященную этому вопросу), а также теории сложности и меры.

Вот ссылка на статью из русской Википедии об ошибках первого и второго рода: http://ru.wikipedia.org/wiki/Ошибки_первого_и_второго_рода (http://ru.wikipedia.org/wiki/Ошибки_первого_и_второго_рода).
Эти понятия относятся к математической статистике и являются ключевыми понятиями задач проверки статистических гипотез. В некоторых предметных областях они имеют определенное самостоятельное значение. Данная проблема безусловно имеет непосредственное отношение к теме «Ложное срабатывание», поэтому сейчас предлагается объединить эти две статьи Википедии в одну.