четверг, 4 апреля 2013 г.

Зачем нужны тестеры программ

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

Кварц в пластине очень напоминает оливин...

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

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

По алгоритму была написана программа для расчёта, которой уже пользовались некоторое время. Сделана она "понтово", с прицелом на коммерческое или полукоммерческое использование: для её запуска даже нужен лицензия системы защиты flexnet (к слову, такая защита используется в пакетах таких маленьких контор, как Schlumberger, так что всё совсем круто):

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

Вроде бы, всё хорошо. Теперь берём другой состав:

А здесь, опачки, появляется отрицательное количество минерала CPX (клинопироксена), от которого теоретически программа должна быть защищена. Казалось бы, ладно, можно обнулить значение (можно было бы и вообще проглядеть, так как невязка очень мала). Но есть ещё один нюанс: другого минерала, OPX (ортопироксена), которого программа считает целых 17.5%, на самом в породе практически нет (единичные зёрна). Выключим CPX из расчёта:


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

Теперь посмотрим на вот этот расчёт:


Казалось бы, всё посчиталось, всё хорошо. Теперь внимательно смотрим на невязки расчёта (серые ячейки внизу таблицы): до 7 % по некоторым компонентам! Сумма абсолютных величин невязок приближается к 20% - одной пятой всей породы. Это огромная погрешность.

Дальше - больше. Посмотрим на этот замечательный расчёт:

Более 15 000 % - это прекрасно!

Ещё один глюк: если начать "выключать" минералы из расчёта с конца, у них начнёт меняться химический состав, доходя до почти минус миллиона процентов:


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

А теперь попробуем убрать минус ноль - и содержания фаз поменяются раза в два:

Ошибки расчёта были выявлены в 19% выборки! То есть, программист, взявший пару составов пород, эти проблемы не выявит... Для этого нужен именно специальный человек, который будет независимо от программиста тестировать приложение.

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

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

Литература и благодарности:
  • E. V. Koptev- Dvornikov, D.M. Khvorov "Estimation of Crystallization Proportions and the Equilibrium/Disequilibrium of Quench Experiments in the Basite Systems" // Geochemistry International, 2011, Vol. 49, No. 1, pp. 13–30
  • Оксане Гаврилюк за пластину, с которой была сделана фотография.

Комментариев нет:

Отправить комментарий