13 ноября 2015

Ошибки на портале госзакупок


Наша работа по конструированию и эксплуатации фильтров должна происходить в постоянном контакте с заказчиком. Цель этого контакта двоякая: ошибки фильтров надо устранять, а качество фильтра надо оценивать. Без оценки качества невозможно улучшение. Одновременно появляется возможность находить новые явные или скрытые ошибки. Подробнее об оценке качества написано ниже, а сейчас кратко опишем две весьма экзотические причины для ошибок, которые могли быть выявлены только при тщательном тестировании.
Во-первых, причиной для пропуска тендеров являются массовые ошибки на портале госзакупок. Дело в том, что мы, к сожалению,  не можем придумывать тендеры сами, а можем получать их только в результате автоматического сканирования официальных порталов. Если движок официального портала работает с ошибкой или база тендеров на официальном портале испорчена и содержит дефективные тендеры, то наши программы автоматического сканирования дадут сбой и будут теряться не только дефективные тендеры, но и соседние с ними. Эта ошибка подробно описана ниже.
Во-вторых, причиной ошибок в работе фильтра могут быть ошибки системного софта, а именно СУБД. Дело в том, что для фильтрации тендеров фильтры используют очень сложные и громоздкие автоматически сконструированные, т.е. неестественные запросы, которые превышают возможности конкретных версий СУБД, в результате чего они ломаются. Речь идет о тонких недокументированных нюансах выполнения сложных поисковых запросов и для того чтобы понять причину ошибку надо изучать исходный код базы данных. Однако ошибка работы СУБД является фактом, потому что, например, MySQL и MariaDB дают разные результаты, а версия первой СУБД молча ломается на типичных запросах одного фильтра. Это стало неприятной неожиданностью, которая только подчеркнула важность самого тщательного тестирования.

Ошибка на портале госзакупок 

Ошибка заключается в том, что в течение длительного времени, более полугода, формируются дефективные тендеры, при попытке обращения к которым генерируется ошибка в сервлете, сообщение имеет вид: Error 500: javax.el.ELException: Error reading 'longPrice' on type ru.lanit.epz.order.model.SearchRecord. При выводе списка оглавлений, если в середине списка попадается такой дефективный тендер, то вывод страницы обрывается и все следующие тендеры тоже не выводятся. Они могут быть получены при случайном сдвиге списка тендеров даже недели спустя. Кроме этого, при попытке поиска поиска по номеру дефективного тендера выводится не его содержание, а дефективная страница. См. скриншот в начале этого поста. Это серьезный дефект работы портала, который не устраняется в течение длительного времени, в том числе потому что нет налаженной системы тикетов, информации об ошибках и их устранении.

Оценка качества фильтра

Теперь для оценки качества фильтров рассмотрим пять причин возможных дефектов:
  1. Официальный портал работает с ошибками.
  2. Тендеры портала отсканированы с пропусками.
  3. Тексты тендеров отсканированы не полностью или с ошибками.
  4. Фильтры сделаны неполно или с ошибками.
  5. Фильтры работают с ошибками.
В практическом плане неважно в чем причина ошибок при работе фильтров (п.5) - в наших скриптах или в базовом системном софте используемых СУБД или в движке портала (п.1). Ошибки неизбежны в любой программе, безошибочных программ не бывает. Однако тщательное тестирование даст возможность оценить качество фильтрации в любом случае. Кроме этого тестирование не должно занимать много времени и являться очень сложной процедурой. Нужно поставить конкретную цель - проверка данного фильтра по данной теме. Найти тендеры по какому-то ключевому слову и убедиться, что они есть в отчете фильтра.
Если же их нет, то это прекрасная находка, инцидент, который служит поводом для письменной жалобы через стр. Контакты. Инцидент должен расследоваться, фильтр улучшаться, а результатом улучшения являются обновленные отчеты фильтра за прошлые периоды, которые содержат пропущенные тендеры.

Фильтры применяются отдельно к базам тендеров за 2013-2015 гг. Среди нескольких миллионов тендеров почти наверняка можно будет обнаружить все необходимые варианты и проверить работу фильтра. Отчеты за прошлые периоды необходимы для оценки качества фильтра.

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

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