06.10.2015

PVCS Traker или работа с ПО 10-ти летней давности

Бытует мнение, что ИТ конторы очень передовые и динамичные. Но чем дальше, тем больше убеждаюсь, что здесь наблюдается тот же процесс консервации. Если есть бизнес-процес и он работает, то не стоит его трогать. Если есть некая утилита и вроде бы особо не напрягает, то пусть она работает - это дешевле чем искать что-то новое и переучивать десятки, а то и сотни(зависит от размера конторы) человек.


Вот у нас используется забавный баг треккер PVCS Traker версии 7.5, судя по абоуту - 2002 год. Вот волей судьбы мне приходится кроме обычной работы как с трекером еще делать различные отчеты по нему. Это очень неудобный и рутинный процесс. Года полтора я думал, как бы избавиться от этого, пока в какой-то момент не нашел в сети API этого трекера. И здесь я загорелся. За час был сделан тестовый проект, который поднимал коннект, получал информацию из нужной выборки и выводил ее на экран. Это вселило уверенность в успехе затеи!

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

Здесь, может быть, я поступил как неправильный автоматизатор, т.к. перенес то, что делаю сейчас руками -есть 5 выборок по разным "критичностям" именно их я и решил использовать.
Программа на вход получает набор из пяти названий выборок, а дальше обрабатывает каждую из них: встречая новую фамилию - она добавляет новую запись в коллекцию, а в соответствующий контейнер помещает номер этого запроса. В результате я получаю список объектов, каждый из которых содержит фамилию и 5 списков с номерами запросов. На все про все - 3 часа + полчаса отладки. На удивление всего было пара ошибок работы с памятью, а так все завелось довольно быстро. При написании старался соблюдать "правила чистого кода", поэтому на выходе получил три класса: Tracker, Report и ReportItem с небольшими методами, каждый из который выполняет однозначно одну задачу. Пришлось кончено забить 5 констант для пяти выборок, но в результате получил повторное использование кода по обработке результатов, т.к. это позволило сделать универсальный метод Посчитатьзапросы(id_выборки).

Небольшие заметки:
  • TrkQueryInitRecordList(trkRec,QueryName,0,0); - получить допуступ к выборке
  • TrkGetNextRecord(trkRec); - получить следующий запрос из выборки
  • TrkGetNumericFieldValue(trkRec, "Id", &buf.Id); - получить значение целочисленного поля из запроса
  • TrkGetStringFieldValue(trkRec, "Owner", TRK_MAX_STRING, buf.Owner); - получить значение строкового поля из запроса
  • TrkProjectLoginEx(trkHandle, Login.c_str(), Password.c_str(), Project.c_str(), Server.c_str()); - установка соединения
  • TrkProjectLogout(trkHandle); - закрытие соединения
Так же была найдена C# обертка над либой tktool

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


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

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