среда, 19 декабря 2018 г.

Храни меня..

Главное в работе тестировщика - сравнивать реализацию со стандартами. Для операции сохранения объекта стандартов нигде не прописано, значит мы в своих исследованиях должны оперировать привычными действиями от большинства крупных продуктов. Но с появлением Windows 10, как минимум одно приложение Notepad/Блокнот перестало быть логичным: окно редактора не закрывается по нажатию кнопки "х" с новосозданным файлом. Особенно странным выглядит это поведение на фоне всех остальных подобных редакторов, например, WordPad и MS Word.
Возможно аналогично размышляли и разработчики ClearSQL, когда программировали свой алгоритм для операции "Save As". По их мнению все изменения должны сохраняться как в новом проекте, так и в исходном оригинале.
По результатам моего возмущения на основе вышеописанных багов у меня родились две схемы об операциях сохранения объекта. Под объектом подразумеваю файл, проект приложения, строку таблицы или пакет базы и тому подобное.

Расширенная схема операций с объектом
1. SAVE / Операция доступна как для новосозданного объекта, так и для всех последующих его вариаций
1.1. объект существует
1.1.1. объект изменён
1.1.1.1. проверки файловой системы: достаточность свободного пространства для всего содержимого объекта; доступ на запись/перезапись, изменение, удаление
1.1.1.1.1. замена предыдущей версии объекта его новым вариантом / Обработка ошибок может выполняться на уровне операционной системы
1.1.2. объект не менялся
1.1.2.1. проверки файловой системы: доступ на запись/перезапись, изменение, удаление; разрешены изменения параметров объекта
1.1.2.1.1. замена параметров: даты-времени сохранения, без изменения даты создания объекта
1.2. новый объект создан
1.2.1. выбор места хранения нового объекта / Диалог выбора сервера/диска, папки для хранения объекта
1.2.1.1. присвоение имени новому объекту
1.2.1.1.1. проверка существования одноимённого объекта / Обработка ошибок может выполняться на уровне операционной системы
1.2.1.1.1.1. проверки файловой системы: достаточность свободного пространства для всего содержимого объекта; доступ на запись/перезапись, изменение, удаление / Обработка ошибок может выполняться  на уровне операционной системы
1.2.1.1.1.1.1. создание нового объекта в (файловой) системе / Операция выполняется (операционной) системой
2. SAVE AS.. / Все изменения сохраняются только в новый объект. Первоначально открытая версия остаётся неизменной на момент открытия объекта в редакторе
2.1. выбор нового места хранения  / Диалог выбора сервера/диска, папки для хранения объекта
2.1.1. присвоение имени новому объекту
2.1.1.1. проверка существования одноимённого объекта / Обработка ошибок может выполняться на уровне операционной системы
2.1.1.1.1. проверки файловой системы: достаточность свободного пространства для всего содержимого объекта; доступ на запись/перезапись, изменение, удаление / Обработка ошибок может выполняться на уровне операционной системы
2.1.1.1.1.1. создание нового объекта в (файловой) системе / Операция выполняется (операционной) системой
3. COPY TO..  / Операция доступна только для объекта без изменений или со всеми сохранёнными изменениями
3.1. выбор места хранения / Диалог выбора сервера/диска, папки для хранения объекта
3.1.1. присвоение имени новому объекту
3.1.1.1. проверка существования одноимённого объекта / Обработка ошибок может выполняться на уровне операционной системы
3.1.1.1.1. проверки файловой системы: достаточность свободного пространства для всего содержимого объекта; доступ на запись/перезапись, изменение, удаление / Обработка ошибок может выполняться на уровне операционной системы
3.1.1.1.1.1. создание нового объекта в (файловой) системе / Операция выполняется (операционной) системой
4. ARCHIVE / Операция доступна только для объекта без изменений или со всеми сохранёнными изменениями
4.1. выбор одного или нескольких объектов для операции
4.1.1. уменьшение объёмов объектов / Функция стороннего архиватора
4.1.1.1. переформирование нескольких объектов в один / Функция стороннего архиватора
4.1.1.1.1. выбор места хранения / Диалог выбора сервера/диска, папки для хранения объекта
4.1.1.1.1.1. присвоение имени новому объекту
4.1.1.1.1.1.1. проверка существования одноимённого объекта / Обработка ошибок может выполняться на уровне операционной системы
4.1.1.1.1.1.1.1. проверки файловой системы: достаточность свободного пространства для всего содержимого объекта; доступ на запись/перезапись, изменение, удаление / Обработка ошибок может выполняться на уровне операционной системы
4.1.1.1.1.1.1.1.1. создание нового объекта в (файловой) системе / Операция выполняется (операционной) системой
5. BACK UP / Операция доступна только для объекта без изменений или со всеми сохранёнными изменениями
5.1. выбор одного или нескольких объектов для операции
5.1.1. сжатие, группировка объектов в один объект или папку / Опциональная функция стороннего копировальщика
5.1.1.1. выбор места хранения / Диалог выбора сервера/диска, папки для хранения объекта
5.1.1.1.1. присвоение имени новому объекту
5.1.1.1.1.1. проверка существования одноимённого объекта / Обработка ошибок может выполняться на уровне операционной системы
5.1.1.1.1.1.1. проверки файловой системы: достаточность свободного пространства для всего содержимого объекта; доступ на запись/перезапись, изменение, удаление / Обработка ошибок может выполняться на уровне операционной системы
5.1.1.1.1.1.1.1. создание нового объекта в (файловой) системе / Операция выполняется (операционной) системой
6. DUPLICATE / Операция выполняется на основе последней сохранённой версии объекта. Количество дубликатов и новые уникальные идентификаторы объектов изменяются в процессе операции.
6.1. определение количества копий
6.1.1. авто-определение места хранения новых объектов / Используется внутренняя настройка редактора
6.1.1.1. проверки: прав на создание новых объектов, на объём свободного пространства / Обработка ошибок может выполняться на уровне операционной системы
6.1.1.1.1. авто-присвоение новых имён объектам  / Используется внутренняя настройка редактора
6.1.1.1.1.1. создание новых объектов / Внутренняя функция редактора
7. CLONE / Операция выполняется на основе последней сохранённой версии объекта. Копия возможна только одна, уникальный идентификатор объекта изменяется в процессе операции.
7.1. авто-определение места хранения нового объекта / Используется внутренняя настройка редактора
7.1.1. проверки прав на создание нового объекта, на объём свободного пространства / Обработка ошибок может выполняться на уровне операционной системы
7.1.1.1. авто-присвоение нового имени объекту / Используется внутренняя настройка редактора
7.1.1.1.1. создание нового объекта / Внутренняя функция редактора
8. Закрытие редактора с сохранением объекта / Диалог Save или Save As.. для сохранения объекта открывается в перечисленных случаях
8.1. кнопка ОК
8.2. кнопка Yes to All
8.3. кнопка "х"
9. Закрытие редактора без сохранения объекта / Редактор закрывается без предложения о сохранении изменений объекта в перечисленных случаях
9.1. кнопка Cancel
9.2. кнопка No to All
9.3. кнопка Skip
10. Параметры объекта, устанавливаемые/изменяемые в редакторе / Настройки объекта определяются в параметрах редактора, но могут изменяться в процессе сохранения
10.1. формат/расширение файла
10.2. тип данных столбца в таблице БД
10.3. статус подобъекта в проекте
11. Полезняшки/Удобства
11.1. горячие клавиши
11.1.1. Ctrl+S
11.1.2. Ctrl+Shift+S
11.1.3. самонастраиваемые/внутренние для редактора
11.2. стандартные окна и диалоги операционной системы
11.3. авто-предложение места хранения, локализация папки
11.4. фильтр расширений файла
11.5. авто-предложение нового имени объекта
11.5.1. по шаблону
11.5.2. постфиксы/префиксы
11.5.3. с добавлением даты-времени

Краткая схема обращения с объектом
1. Запустить редактор
2. Открыть объект в редакторе
2.1. редактор оставляет исходник как резервную копию в оригинале (место, имя, другие параметры)
2.2. редактор делает копию объекта во временном пространстве, но с темже именем
2.2.1. редактор отображает объект для последующей работы
2.2.1.1. в объект вносятся изменения
2.2.1.1.1. выполнить Save
2.2.1.1.1.1. резервная копия заменяется рабочей версией
2.2.1.1.1.2. обе идентичны
2.2.1.1.2. выполнить Save As..
2.2.1.1.2.1. рабочая версия объекта сохраняется в новое место с новым именем
2.2.1.1.2.1.1. новая версия объекта копируется во временное рабочее пространство, но с темже новым именем
2.2.1.1.2.2. резервная копия остаётся со старыми параметрами: место, имя, без модификаций
2.2.1.1.3. выполнить Clone, Duplicate, Back Up, Archive
2.2.1.1.3.1. проверка на наличие изменений
2.2.1.1.3.1.1. рабочий объект отличен от оригинала, вносились изменения
2.2.1.1.3.1.1.1. предупредить об изменениях
2.2.1.1.3.1.1.1.1. предложить применять операцию к объекту с изменениями
2.2.1.1.3.1.1.1.1.1. изменения объекта сохраняются / Сохранение в авто-режиме или через диалоговое окно
2.2.1.1.3.1.1.1.1.1.1. выполняется операция для рабочей версии, идентичной оригиналу
2.2.1.1.3.1.1.1.2. предложить откатить все изменения и применить операцию к исходной копии
2.2.1.1.3.1.1.1.2.1. рабочая версия с последними несохранёнными изменениями уничтожается
2.2.1.1.3.1.1.1.2.1.1. создаётся новая рабочая версия объекта из оригинала
2.2.1.1.3.1.1.1.2.1.1.1. выполняется операция для рабочей версии, идентичной оригиналу
2.2.1.1.3.1.2. рабочий объект и его оригинал идентичны, изменений не вносилось
2.2.1.1.4. закрыть редактор / Закрыть окно редактора можно: из меню Exit/Close, по кнопкам интерфейса "х" или Close, по нажатию горячих клавиш Alt+F4 (стандарт в Windows). При наличии изменений в объекте закрытие редактора зависит от ответа в диалоге о сохранении объекта.
2.2.1.1.4.1. предупредить о наличии изменений
2.2.1.1.4.1.1. диалог о сохранении объекта закрывается по кнопке OK, Yes, Yes to All, Save
2.2.1.1.4.1.1.1. изменения объекта сохраняются  / Сохранение в авто-режиме
2.2.1.1.4.1.1.1.1. оригинал заменяется рабочей версией: запись поверх или уничтожение оригинала и копирование рабочей версии на место оригинала
2.2.1.1.4.1.1.1.1.1. удаление рабочей версии из временного пространства
2.2.1.1.4.1.1.1.1.1.1. закрытие редактора
2.2.1.1.4.1.2. диалог о сохранении объекта закрывается по кнопке No, No to All
2.2.1.1.4.1.2.1. оригинал остаётся неизменным
2.2.1.1.4.1.2.1.1. удаление рабочей версии из временного пространства
2.2.1.1.4.1.2.1.1.1. закрытие редактора
2.2.1.1.4.1.3. диалог о сохранении объекта закрывается по кнопке Cancel, Close, "x"
2.2.1.1.4.1.3.1. оригинал остаётся неизменным
2.2.1.1.4.1.3.1.1. рабочая версия остаётся в прежнем состоянии
2.2.1.1.4.1.3.1.1.1. редактор остаётся открыт с рабочей версией объекта
Дальнейшие операции (редактирование, перемещение) применяются к рабочей версии, идентичной оригиналу

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

среда, 12 декабря 2018 г.

Громозека

У Алисы в мультике "Тайна третьей планеты" показан друг с множеством рук и глаз - это типичный образ тестировщика, совмещающего техподдержку, devops и прикрывающего огрехи руководства. Многие годы мне приходилось работать на 2-5 машинах одновременно, благо, у каждой был свой монитор или даже два. Поэтому образ Громозеки - это был мой портрет.
В рамках повышения квалификации при отсутствии финансирования единственным выходом было прослушивание и краем глаза просматривание докладов с сайтов sqadays.com и analystdays.ru. Естественно, хотелось делиться знаниямя, и ссылки на лучшие доклады с рекомендательными описаниями публиковались от моего имени  в рабочем чате. Но такая инициатива была прервана шефом со словами: "Хватит устраивать избу-читальню.", а через несколько дней он сам стал публиковать в этом же чате ссылки, но уже не на аудио-видео-записи, а на статьи. Тоже в немалом количестве. Как видно из примера, практика двойных стандартов работает не на пользу горе-руководителю. Мой способ предлагал узнавать что-то новое, не отвлекаясь от основной работы, поскольку прослушивать доклады и изредка проглядывать слайды, останавливать запись или прокручивать на несколько минут назад - вполне реальные действия, которые можно совмещать с трудом monkey-кликальщиков или перепроверкой багов, тестов по check-list или наблюдением за работой авто-теста. К слову сказать, нагрузочные тесты, которые сжирают все ресурсы, выдавались PM-ом (Product Manager) тестировщикам с одной единственной машиной по VPN (Virtual Private Network), при этом собственный комп по-сути простаивал (процессы теста крутились на сервере и не мешали прогулкам по Интернету). Поэтому у них образовывалась отличная дыра по времени, которое очень полезно было использовать для самообучения.
Слушать доклады проще, чем читать аналогичную статью - докладчик голосом расставляет нужные акценты и восприятие материала увеличивается. А при прочтении внимание целиком погружается в текст и взглянуть на продвигающийся параллельно тест получается с опозданием. Дополнительно, обучение через прослушивание, а не прочтение, помогает развить человеческую многозадачность. Моя способность многопоточных действий развивалась за счёт прослушивания радио во время подготовки уроков в школе и институте. Привычка слушать Маяк, а потом Радио-РИФМА, и одновременно решать задачи или заучивать теорию увеличивала те самые нейронные связи, которыми очень удобно стало пользоваться при совмещении нескольких должностей, превратившись в Громозеку.
Моей рекомендации - совмещать прослушивание докладов с обычными рабочими задачами - последовали немногие. Мотивируя тем, что параллельный звук их сильно отвлекает. Да, программисту во время сочинения кода не стоит отвлекаться на иные теории, но если кодирование ограничено CopyPaste-ом, то это удобный случай начать развивать связи в головном мозге и повышать уровень знаний. Этаже многозадачность помогала мне одновременно отвечать в 3-5 каналах рабочего чата, сокращая в несколько раз время на излишние митинги.
Данная статья образовалась после прослушивания доклада Игоря Макарова "Социальная сеть для бизнес-анализа внутри компании", после которого моя позиция о пользе чатов (не надо ловить у других сотрудников свободное время для митинга или строго соблюдать часовые пояса, обсуждение и выводы уже задокументированы, параллельно можно вести несколько бесед, экономия своего и общекомандного времени) только укрепилась. Но странно, что вместо бесплатного Slack используется решение Workplace от Facebook. На фоне участившихся взломов аккаунтов многоизвестной соцсети распространение внутренней информации группы разработки в достаточно закрытом чате Slack выглядит более защищённым. Да, в Workplace есть возможность блогов, но группы открытые и персональные в Slack, а также цитирование, цепочки, отметки важности, закрепление на доске, поиск и связь с внутренними системами отслеживания задач - всё это говорит только в плюс при использовании самостоятельного чата вместо группы соцсети. А звонки в обоих приложениях входят в платную версию. На мой взгляд бесплатный чат в полном выигрыше, особенно для agile-команд, ценящих время, так как история переписки доступна в течение месяца, а значит есть стимул быстрее решать вопросы. 

вторник, 11 декабря 2018 г.

ТО о CS 8.0.1.137

Тест-отчёт о ClearSQL 8.0.1 (build 137), выпущенном 6 декабря 2018 года, проведён по тексту Release Notes, который вы можете найти в самом приложении, но нигде на официальном сайте компании ConquestSS. Предыдущий билд был меньше месяца назад, значит этот содержит какой-то критичный фикс, выявленный конечным пользователем. Обычно такие билды содержат мелкие усовершенствования и фиксы нескольких минорных багов, что не успели включить в первый выпуск новой версии. Давайте поймём, какого бага билд.

IMPROVEMENTS 0.6+1.6+0.5+0.6+0.9=4.2 из 1+2+1+1+1=6 возможных
Project Backup 0.6 из 1 возможного
* Added the ability to password protect project backup files.
Добавлена возможность защищать паролем файлы копии проекта.
Архивированную копию проекта с результатами анализа можно сделать через пункт главного меню "Tools / Backup Project / Create". В этом окне появился ещё один блок "Protect Backup File" с двумя полями для ввода и подтверждения пароля. Странным выглядит опция отображения реальных символов пароля вместо имеющегося в приложении переключателя в виде иконки-глаза. Ограничения по назначению пароля описаны во встроенной справке, но они слишком преувеличены, поскольку длина и обязательность разных символов не всегда востребована. А сообщение об ошибке при попытке сохранить пароль, не удовлетворяющий хоть одному из правил, хотели отображать красиво, но не смогли.
Красивая подпись не отобразилась
Минимальная длина и первые четыре правила о символах стоило давать лишь в рекомендательных целях, а вот максимальную величину и недопустимые символы действительно стоило выделить в подсказке, поскольку это критерии благополучной работы функционала. Delphi-элементы для ввода в скрытом режиме не позволяют копировать в буфер обмена, но сообщение об ошибке появляется на региональном языке операционной системы, что противоречит правилам ConquestSS об англо-язычности продукта. 
Региональная система или внутренние стандарты
Здесь также стоило упомянуть, что восстанавливать проект можно только в текущей и последующих версиях CS, потому что моя попытка восстановить запароленный проект в предыдущем билде привела к необработанному исключению. Но в качестве выхода из положения, такой архивный файл легко распознаёт Total Commander, а вот встроенный в операционную систему Explorer требует привязки архиваторов по расширению файла. Ещё одно, что меня смутило в обновлённом интерфейсе - это появляющиеся коричневые галочки рядом с корректно введённым паролем. Если набор символов полностью удовлетворяет правилам, то более логично пометить их зелёным (свободно) или синим (рабочий), но не красным (стоп) оттенком. Конечно же в рамках этого новшества необходимо протестировать и восстановление проекта из копии. Мастер, доступный из главного меню "Tools / Backup Project / Restore..", тоже пополнился блоком для ввода пароля, необходимость которого определяется автоматически. Лишней мне видится встроенная подсказка об обязательном наборе символов в строке пароля. Более полезным было бы дополнение с подсказкой, как это организовано для доки CDB, но сторонний архиватор (7z.dll) врядли поддерживает подобный функционал. Из-за излишних и нелогичных наворотов даю лишь 0.6 балла.
Technical Debt 0.8+0.8=1.6 из 2 возможных
* Moved the Technical Debt column to the beginning of all grids where this value is used.
Колонка технического долга сдвинута в начало всех гридов, где эта величина используется.
* Technical debt values in the grids and on the Summary page are now rounded to the nearest whole number.
Значения технического долга в гридах и на странице итогов теперь округляются до ближайшего целого числа.
Проверим оба изменения одновременно, поскольку они довольно мелкие и касаются одних и тех же мест. На самом деле изменению подверглись только две таблицы с метриками кода: в разрезе скрипта и на закладке Summary. А таблицы с историями анализов по скрипту и проекту изначально показывали величину технического долга округлённо до доллара и на первой позиции в списке метрик. Все же остальные визуализаторы результатов анализа (диаграммы и суммарные данные) не изменились. Когда-то из-за смены дефолтного значения одной из метрик пользователь требовал возврата затраченных средств. Возможно, предыдущее округление до цента тоже было более важно юзерам, нежели сегодняшнее - до доллара. По-моему, такие вещи надо предоставлять через настройку: хотите округлять или нет, до какого знака вам важно. Кстати, для отображения величин в новом формате совсем не требуется переанализировать проект или отдельные скрипты, то есть изменение прошло жёстко и безусловно. Поэтому за изменения даю только по 0.8 балла.
New Project Assistant 0.5 из 1 возможного
* Renamed options of the file extensions filter.
Переименованы опции фильтрации по расширению файлов.
Открыв мастер создания нового проекта на закладке "From Files" вы не найдёте никаких изменений даже в контекстном меню. А вот на странице "Options / Preferences / New Project, Import and Link Manager" настроек приложения действительно только одна опция для фильтров по расширению файлов претерпела изменения и не только в наименовании, но и обрела встроенную подсказку. За столь убогий текст RNs вините тех.писательницу. А билду дам лишь 0.5 балла.
CRUD Matrices 0.6 из 1 возможного
* Renamed “stored programs” to “subprograms” in the heading of CRUD1 matrices.
Хранимые программы переименованы в подпрограммы в заголовке матриц CRUD1.
Во-первых, никакого наименования хранимых программ в матрицах не существовало. В CRUD1 и CRUD2 хранимые объекты именовались как Stored Objects. Во-вторых, почему переименованию подверглись только CRUD1, а в матрицах CRUD2 оставлено старое наименование? В-третьих, в матрицах CRUD1 переименованию подверглись не все заголовки и идентично отражены в отчёте по проекту. И ещё, чтобы изменение заголовков произошло, необходимо переанализировать все скрипты с обращениями к объектам данных и обязательно их матрицы. Этого не сказано нигде. Из-а четырёх недочётов даю лишь 0.6 балла. 
Половинчатое переименование
Summary Info 0.9 из 1 возможного
* Updated the hint of the “Lock” button.
Обновлён хинт кнопки блокировки.
Напомню, что кнопка замка при красном значении замораживает текущие итоговые значения и не меняет их при смене нод в дереве проекта, а при зелёном состоянии автоматически обновляет итоги анализа в соответствии с выбранной нодой дерева проекта. В текущем билде хинт сменился только у зелёного замка на тулбаре (про такую же иконку на закладке Summary вроде речи не было). Текст стал однострочным вместо двустрочного и более понятным юзеру в плане смысла, но времени на прочтение такого длинного текста маловато. Странно, что не применено правило ConquestSS об удержании хинта до сдвига курсора. Несоблюдение внутреннего правила приносит билду лишь 0.9 балла.

BUGS FIXED 1+0.7+0+0+0.5+0.8+0+1+0.5+0=4.5 из 1+1+1+1+1+1+1+2+1+1=11 возможных, -2 балла за баги
Code Review Rules 1 из 1 возможного
* The rule “Unreferenced local variable” is no longer triggered in a compound trigger for the variables that are used in the code.
Правило локальных переменных без ссылок больше не срабатывает на переменных составных триггеров.
Для понимания сложных (составных) триггеров стоит изучить документацию базы данных Oracle. Для теста воспользуемся примером из документации Oracle 12.2:
-----Example 9-5 Compound Trigger Avoids Mutating-Table Error 
CREATE OR REPLACE TRIGGER Check_Employee_Salary_Raise 
  FOR UPDATE OF Salary ON Employees 
  COMPOUND TRIGGER 
  Ten_Percent CONSTANT NUMBER := 0.1; 
  TYPE Salaries_t IS TABLE OF Employees.Salary%TYPE; 
  Avg_Salaries Salaries_t; 
  TYPE Department_IDs_t IS TABLE OF Employees.Department_ID%TYPE; 
  Department_IDs Department_IDs_t; 
-- Declare collection type and variable: 
  TYPE Department_Salaries_t IS TABLE OF Employees.Salary%TYPE INDEX BY VARCHAR2(80);
  Department_Avg_Salaries Department_Salaries_t; 
  BEFORE STATEMENT IS 
    BEGIN 
      SELECT AVG(e.Salary), NVL(e.Department_ID, -1) 
        BULK COLLECT INTO Avg_Salaries, Department_IDs 
        FROM Employees e 
        GROUP BY e.Department_ID; 
      FOR j IN 1..Department_IDs.COUNT() 
        LOOP Department_Avg_Salaries(Department_IDs(j)) := Avg_Salaries(j); 
      END LOOP; 
  END BEFORE STATEMENT; 
  AFTER EACH ROW IS 
    BEGIN 
      IF :NEW.Salary - :Old.Salary > Ten_Percent*Department_Avg_Salaries(:NEW.Department_ID) 
        THEN Raise_Application_Error(-20000, 'Raise too big'); 
      END IF; 
  END AFTER EACH ROW; 
END Check_Employee_Salary_Raise;
Анализ этого скрипта в предыдущем билде даёт все четыре переменные, кроме типов, при проверке вышеозначенного правила №31, в текущем билде никакие переменные не подпадают под правило. Из чего заключаем, что смоук-тест приёмки фикса проведён успешно. Для полноценной проверки необходимо варьировать структуру скрипта и типы переменных. Нам же достаточно для пометки наличия изменений.
Core 0.7 из 1 возможного, -2 за баги
* Values of the Quality Trend no longer differ from the relevant values in the Project Analysis History.
Величины направления качества больше не отличаются от соответствующих значений в истории анализов проекта.
Согласно тексту хелп-топика "Project Analyzer View – Summary tab" в CS существует четыре параметра для оценки направления качества: количество критичных и важных багов, превышения метрик кода, технический долг и ошибки парсера. Для проверки фикса нам придётся вручную выписать значения из одного из источников (хинты графиков "Summary / General / Quality Trend"), а потом визуально сравнить их с соответствующими в другом (таблица на закладке "Project Analysis History" по проекту или "Script: Editor and Analyzer Info / Analysis History" по одному скрипту). К сожалению, в отчёт "Analyze / Analysis History Report" не попадают два параметра: общее количество критичных и важных проблем, объём технического долга. Также надо выполнить анализ одного скрипта или всего проекта в обеих версиях CS, не меняя параметры анализа. 
Различия помечены цветом
Результирующие таблицы по демо-проекту показали, что величины превышений метрик, технического долга и ошибок парсера в визуальной таблице историй анализа по проекту сравнялись с графиками на закладке Summary. Но график критичных и важных проблем подменяется суммой обычных и мелких проблем. А при сравнении этих цифр с отчётом по анализам проекта выяснилось следующее:
1) даты и время анализов демо-проекта различны в отчёте и интерфейсе;
2) в отчёте показывается время начала и окончания анализа, а в интерфейсных данных только время окончания;
3) помимо отсутствующих данных по количеству критичных и важных проблем, технического долга в отчёте другие два параметра кардинально отличаются от интерфейсных.
Это говорит о том, что внутренняя база проекта хранит накопительные итоговые величины в дублируемых таблицах и полях, что в итоге запутывает пользователя CS. Поскольку основной фикс сделан лишь на три четверти, то и дам за него 0.7 балла. При этом сниму за сопутствующие баги (путаница с данными в демо-проекте, различные данные в отчёте и интерфейсе) -2 балла.
Link Manager / Import Wizard / New Project Assistant 0 из 1 возможного
* Fixed the autofit in the columns of the project tree pane.
Зафиксирован автоподбор ширины колонок панели дерева проекта.
К сожалению, тех.писательница не уточнила, при каком действии эта правка применима к интерфейсу. А поскольку при открытии мастеров и при добавлении в проект файлов или объектов с длинным именем первая колонка макета проекта CS по прежнему обрезает полное имя скрипта, то считаю пункт RNs припиской и не прибавляю билду ни балла.
Analyzer View 0 из 1 возможного
* Fixed the autofit on the Code Review tab when the “Show filtered violations only” option is enabled.
Исправлен автоподбор ширины закладки правил кодирования при включенной опции показа только отфильтрованных предупреждений.
Стоит пояснить, что речь идёт только о результатах анализа в разрезе скрипта, а именно о закладке "Script: Editor and Analyzer Info / Code Review". На тулбаре этой закладки может появиться опция для отображения только фильтрованных правил только в случае активации фильтра на дерево проекта по каким-нибудь правилам кодирования. Для этого надо включить опции "Project Manager / Filter / Filter Enabled " и "Project Manager / Filter / Filter Enabled / By Parser Status / OK Alert ", выбрать какие-нибудь значения из выпадающего списка "Project Manager / Filter / Filter Enabled / By Parser Status / OK Alert / By Code Review" и применить фильтр по кнопке "Project Manager / Filter / Apply". Включенная тестируемая опция прячет два комбобокса фильтров на тулбаре, а выключенная вновь их отображает. При этом никакой разницы в автоподборе ширины закладки не замечено ни в текущем, ни в предыдущем билдах. Поэтому балла дать не могу.
Analysis History 0.5 из 1 возможного
* Fixed the hierarchy of code metrics values.
Исправлена иерархия значений метрик кода.
Когда мы проверяли улучшение о техническом долге, то смотрели и на таблицы историй анализов. Там можно было подметить, что истории по проекту ветки Метрик и Правил кода из группы Ошибок и Предупреждений вынесены в самостоятельные, а в историях по скрипту только Метрики кода вынесены в самостоятельную группу, а Правила кодирования остались веткой группы Ошибок и Предупреждений. Поскольку фикс описан лишь половинчато, и фикс сделан только на три четверти, то даю только полбалла.
Database Connection Window 0.8 из 1 возможного
* The Database drop-down list is no longer limited to 8 values.
Выпадающий список баз больше не ограничен 8-ю значениями.
В окне подключения к базе данных имеется комбобокс "Database:" в блоке "Connection Type" при режиме TNS. По-умолчанию, интерфейсный компонент Delphi отображает первые 8 значений, но этого слишком мало для администраторов баз крупных предприятий. Немного странно, что это улучшение означено исправлением бага. Но за то, что изменение коснулось лишь одного из шести аналогичных компонентов на форме и в тексте нет точного указания о его расположении, за исправление дам лишь 0.8 балла.
CRUD Matrices 0 из 1 возможного
* Fixed the position of the stored program pop-up menu when a Call Tree diagram is opened.
Исправлена позиция контекстного меню хранимой программы, когда открыта диаграмма вызовов.
Когда чуть ранее проверяли переименование заголовка нужно было приметить описанный фикс, чтобы сократить общее время тестирования. Полагаю, что пытались исправить позицию контекстного меню для объектов в матрице CRUD2, поскольку дерево вызовов открывается рядом с CRUD1 и в самостоятельном плавающем окне для CRUD2. К тому же, линки объектов в CRUD1 однозначные, а в CRUD2 могут работать в трёх вариациях через это самое меню. К сожалению, когда в CRUD2 открыто окно с деревом вызовов, то тестируемое контекстное меню и в прошлом, и в текущем билдах позиционируется довольно далеко от самого линка с именем объекта. Так что, фикса нет и балла нет.
Summary Info 1+0=1 из 2 возможных
* Fixed the caption of the Code Review Options command on the pop-up menu of the Summary tab.
Зафиксирован заголовок команды опций правил кодирования в контекстном меню закладки итогов.
Для вызова опций анализатора на странице со списком правил кодирования в контекстном меню закладки "Summary / Code Review / Top Violated Code Review Rules" имелся пункт с глючным наименованием "aAnalyzerOptions". В текущем билде это имя поправлено на понятное юзеру, а не программисту. Балл добавляется.
* The “Synchronization” and “Parser Errors” panel no longer appears empty on first opening.
Панели синхронизации и ошибок парсера больше не появляются пустыми при первом открытии.
Во-первых, необходимо определиться, какое открытие и чего стоит считать первым: чистую установку приложения на комп или активацию закладки Summary сразу после запуска приложения? Момент второй в том, что обе панели по-умолчанию не входят в обязательный показ, а при ручном отображении располагаются где-то снизу, при этом вертикальный скроллер отсутствует на всех подзакладках Summary. В прошлом билде обе панели появляются с соответствующими значениями при любом их открытии, поэтому баг не засчитывается в процент готовности билда.
GUI 0.5 из 1 возможного
* Fixed the layout of options in the Startup window.
Зафиксировано расположение опций в окне старта приложения.
Как уже упоминалось в предыдущем билде, где окно старта как-бы поделили на два, а пользователям разных лицензий доступна различная информация, давайте определимся считать окном старта только то, где есть три типа выбора проекта, а не выбора лицензии. Момент второй: окно старта безусловно показывается триальщику, который не может выключить его последующий показ, так как опции нет в самом окне и она в недоступном режиме в настройках приложения "Options / Preferences / General / Application Launch / Show startup window". Это значит, что тех.писательница промахнулась с использованием термина options в смысле настроек. Тогда попробуем выяснить изменения функционала. Единственное, что мне удалось раздобыть - это добавление линка на сайт производителя для пользователя постоянной лицензией с оконченным AMS для продления сервиса. В этом плане пункт RNs совсем не является фиксом бага, а дополнительным усовершенствованием. Учитывая такие промахи тех.писательницы могу дать только 0.5 балла.
Telegram 0 из 1 возможного
* Opening Telegram no longer causes ClearSQL to stop working.
Открытие Телеграма больше не вызывает остановку работы CS.
Открытие интерфейса Телеграм-чата из главного меню тестируемого приложения автоматически выполняет коннект к настроенному интернет-каналу. Все длительные процессы (анализ, генерация отчёта, выполнение джоба, открытие или сохранение большого проекта и тому подобное), которые согласно тексту RNs ранее прерывал Телеграм, отображаются в модальных окнах. Это значит, что во время длительной работы CS главное меню недоступно и юзер никак не может открыть Телеграм. Даже если перефразировать и предположить, что открытие окна Телеграма блокирует весь остальной интерфейс CS, то и эта гипотеза не подтверждается тестами - не было бага и ничего не исправлено. Отсутствие конкретики в тексте RNs превращает их в нелогичную ложь, за которую билд теряет очередной балл.

При работе над личными проектами мне пришлось столкнуться со следующими багами, за каждый из которых стоит снять по баллу с рабочего билда.
1. Странное форматирование символьных и числовых значений в результатах о правилах кодирования. Через раз цвет синий. 
Числовые не все подкрашены в одной строке
Соседние строки в разном шрифте
2. Перечитав хелп-топик про технический долг в глаза бросились две опечатки - математическая (сумма процентов больше 100) и синтаксическая (с предлогами или артиклями проблема у тех.писательницы). 
Сумма процентов
3. При попытке понять смысл правил о дубликатах строк и блоков меня сильно разочаровали результаты. По истории анализов сначала поиск дубликатов по трём строкам давал более-менее адекватные результаты, но после какой-то правки количество блоков и строк почему-то стало равным, но после смены минимального количества идентичных строк картина вернула логичность. 
Строки и блоки кода равновелики
4. Наиболее обескураживающим выглядит дублированный сам результат о дубликатах: в расшифровке выявленного дубликата одним из значений считается сам исходник сравнения. То есть некий объём строк сравнивают не толлько с остальными строками скрипта, но и с самими же? 
Дублирование себя
5. Сортировка результатов о дублировании не логична: от большего к меньшему или никакой сортировки нет? 
Странность сортировки
6. Инструментирование кода автоматически форматирует скрипт, даже если в настройках анализатора выбран по-умолчанию режим без форматирования. 
Неожиданное изменение кода
7. В прошлом билде упоминалось, что комментарии к скрипту, добавляемые при импорте объекта из базы данных, должны показывать владельца и имя объекта. Но дело даже не в том, что эти поля пустые, а в том, что в этих комментариях не хватает информации о текущем Edition, при котором делался экспорт из базы. Также мастеру импорта объектов из базы не хватает опциональной смены Edition на время считывания хранимых объектов из этой базы.
8. Таблица метрик кода по скрипту в обычном режиме свёрнута по группам колонок. Но первое разворачивание одной из групп не добавляет закладке горизонтальный скроллер, из-за чего часть данных остаётся недоступной, поскольку здесь не работают клавиши перемещения курсора с клавиатуры. 
Недоступные колонки справа
9. Если список результатов о правилах кодирования сворачивать, начиная с нижних строк, то может возникнуть ситуация без вертикального скроллера и невидимых элементов начала списка. 
Ни верхних строк, ни скроллера
10. Правило кодирования №132 о проценте инструментирования гласит о каком-то специфицированном минимуме, но мастер по настройке правила не имеет опции по его изменению. Только в пояснении к правилу сказано о 50%. 

Параметры правил следует менять опционально
11. Синхронизация проекта с линкованными папками и скриптами проходит по всему проекту, не взирая на установленный фильтр в дереве проекта. Хинт кнопок синхронизации содержит волшебное слово "выбранные", которое абсолютно не учитывается их функционалом.
12. Ширина тулбара у дерева проекта в мастерах линковки, импорта или создания нового проекта предостаточно для отображения длинных наименований фильтров, но пустое пространство используется не по назначению
Бесполезные пустоты
13. В окне процесса анализа очень не хватает общего количества скриптов до и в процессе анализа. 
Нет полезной инфы о количестве анализируемых скриптов
14. Обнуление фильтра дерева проекта двойным кликом по соответствующей иконке (синяя воронка с красным сигналом) на заголовке колонки "Folders and Scripts" получается лишь на третий раз.
15. Переанализ скрипта с удалением диаграмм вызова на самом деле не удаляет их и не помечает неактуальными. Но если переанализ выполнить и без CRUD данных, то диаграммы вызовов удаляются.
16. Количество выбранных папок фантастическим образом подсчитывается для данных панели "Summary / General / Folders, Scripts, Script Statuses". В одном проекте у меня есть три папки первого уровня, в первой из которых содержится семь папок второго уровня, в некоторых из которых есть по одному-два скрипта. Итого, эта папка содержит 7 подпапок и 6 скриптов. Выбирая по одной из подпапок, галки с чекеров папок сами пропадают при выборе следующей, результат отображается реальный. Если же после этих кликов выбрать всю верхнюю папку, то количество скриптов показано верно - 6, а папок чарт насчитывает - 15. Далее ещё интересней. Начните снимать по одному чекеры с подпапок. Количество скриптов никак не будет меняться, а количество папок будет по одной уменьшаться. В итоге можно докликать до такого состояния, когда в дере проекта чекр стоит только у верхней папки, эта же нода одна подсвечена, а в чарте 8 папок и 6 скриптов при явно видимой выбранной одной ноде с постфиксом (7/6)! Ну да, вместе с папкой первого уровня их 8 и внутри папок всего 6 скриптов, и в заголовке панели Summary указан путь папки первого уровня. Но зачем же тогда на каждый клик в дереве проекта перерисовываются все чарты панели Summary? Чтобы запутать юзера! То ли они показывают инфу о подсвеченных нодах, то ли об имеющих чекер. Но у скриптов в дереве нет чекеров! Как юзеру их считать выбранными для Summary? Вот такая волшебная синхронизация дерева проекта с итоговыми данными.
17. В дереве проекта папки можно слинковать с файловой системой или базой данных. Но увидеть прилинкованный путь негде. Для этого есть лишь одно место - мастер линковки. А у скриптов такая информация доступна на закладке свойств среди результатов анализа.
18. Разлинковка папки через мастер линковки отвязывает лишь одну эту папку. А разлинковка через главное или контекстное меню "Sync / Unlink Selection" приводит также к отвязыванию всех входящих в папку элементов.
19. Попытка создать шаблон для исключённых правил кодирования привела меня к ошибке неполного оформления. Форма для создания и редактирования таких шаблонов не имеет пометок обязательности полей, поэтому работа юзера непременно становится неполноценной. 
Не отмеченные обязательные поля


Итого по билду: 4.2+4.5=8.7 из 6+11=17 возможных, что равняется 8.7/17~51% готовности билда, за выявленные баги придётся снять -2-18=-20 баллов.

четверг, 6 декабря 2018 г.

Помогатор

(рубрика Театр&Тестирование)
Между актёром театра и тестировщиком мной подмечено не мало пересечений. Не только процесс подготовки спектакля и роли схож с элементами тестирования, но и реальный выход актёра на сцену в процессе текущего действия. Сколько раз на собственном опыте приходилось убеждаться в истинности слов режиссёра: "Каждый спектакль неповторим, играть всегда надо по-разному." Оно так и получается. Отыграть на автопилоте, изображая эмоции - это значит обмануть зрителя. А если истинно чувствовать и честно проживать, то темпоритм каждый раз будет иным. При этом остальные герои вынуждены подстраиваться под ведущего и вытягивать спектакль. Если у вас не главная роль, то обязательно следите за всем ходом действия. Из-за различного отношения к делу часто случаются оговорки, забытый реквизит или разлом декораций. Точно также в процессе разработки только тестировщик по воле своей должности дотошно наблюдает за изменениями продукта. Именно мы, инженеры качества, глубже всех иных сотрудников знаем продукт и видим все нюансы.
Оговорки актёра, они как опечатки интерфейса, приметны чуткому уху и глазу. Если они минимальны, то исправления могут и подождать. А если они меняют смысл восприятия, то актёру или его окружению надо обыгрывать ситуацию и выворачиваться для восстановления сюжета. У тестировщика более сложное положение дел, потому что пользователь (зритель) может отказаться от продукта (уйти из зала) и требовать возмещения ущерба. В результате пострадает вся команда: разработчики останутся без премии, труппа без гонорара. Но если тестировщик или внимательный актёр вовремя перенесёт акцент на правильную сторону, предложит обходной манёвр или через синонимы направит разговор в нужное русло, то этот маленький человечек спасёт весь коллектив и дело. А вот оценить такую самоотверженность - обязанность режиссёра и скрам-мастера.
Аналогично случаются казусы, когда кто-то забывает вовремя вынести реквизит или от усердия лопается декорация. Опять же, смышлёный актёр второго плана, делая вид, что так и задумано, "гуляет" по сцене и восстанавливает мизансцену, пока главный герой обыгрывает ситуацию с имеющимися декорациями и реквизитом. Когда в продукте лопаются связи данных или элементы интерфейса ускользают от клавиш управления, то первый с этим сталкивается тестировщик, как альфа-пользователь. Поэтому он вооружён способом обхождения проблемы и вовремя подскажет конечному пользователю, пока программисты правят код.
Да, у нас инженеров по качеству незавидная роль второго, а зачастую и третье-десятого плана. Но именно нам, не главным героям, выпала большая роль исправителей. Как истинные интеллигенты мы докапываемся до сути, локализуем баги и тем самым показываем несколько возможных выходов из тупика, превращая блокеры в новые фичи. Параллельно нам театральная массовка меняет сюжет и классическое произведение становится народным.    

воскресенье, 2 декабря 2018 г.

Наследие старомыслия

Давным давно, в мою бытность внештатным критиком Радио РИФМА творчество подстёгивалось многими передачами, в том числе и "Мыслесловом". Старые, забытые слова возрождались в лексиконе актюбинцев.

На абуконь - прибрежный камень - удод авдотька прилетел.
Его акудник - знахарь местный - щенком тюленя акипнул.
Монах с анлавом н агруди атайку кормит алякишем.
Бобырь в бакалде плещет воду. Волух гоняет бузивка.
А по лесной бругве зелёной, свежей брузбард лохматый загоняет байбака.
Бильдюгу отточив в герлыгу, бленду повесив на живот
Бобыль, держа в руках гомыльку, ананью ищет круглый год.
Мечтает он: "Когда гудегой, врыхтих как пухом, ветки обрастут,
Витютень с зигзицей споют три трели, и тартыги устроят хананыгу тут.
А повод будет растатурный: ко мне обдал приедет отдыхать.
Букет куйбабы он жене подарит, детишки берендейки разберут,
А мне же - новые карбачи, чтобы шагать по разлюли весной.
Распопа моя будет очень рада, мамурник и разббу натянув,
Подаст на стол саховю с лампопо. Ну, а дудолей пустит в харамбучки поиграть."
Так и мечтал бы этот мордофиля до самых тайлагановых времён.
Пока не встретились два парня в радио-эфире и развели на РИФМЕ "Мыслеслов".
А слушатель моргает лупышами и с канькалой докучливой звонит:
"Приеду к вам в обед на каламаге. Квартарь на ембель мне прошу поставить.
Его я осушу и буду едукарь."
03.07.2000.11.30-15.00

Однажды на арёлку спустился Дед Мороз,
у бдына помолился и на елбань пополз.
По тайболе шагая севрука повстречал,
ему подарков жужму, как родному, отдал.
Фирябье поснимал тот, асташи натянул,
фофудьей обернулся, в балдак вина плеснул.
За новый год с Морозом распили магарыч.
Куёлда стал стибаком, не хнычет старый хрыч.
А Дед Мороз по пенусу бредёт теперь один.
Разбрындою Снегурку кому-то подарил.
Жемжурой та представилась, отправилась гулять,
оставив Деду гугли уренем запивать.
За нею вслед на ябурь садится Дед Мороз.
Неплюй его в талобу девякушем понёс.
Паскараге усерязь решил мороз всучить
и за такую взятку Снегурку возвратить.
Летит она, стрекочет над едмой, дыбуном.
Хульдра она и делает сказку с плохим концом.
Мороз улюлю просит дорогу показать,
одному до листопука внучку не сыскать.
А та своё: "Угу. Гу-гу. Когда смогу, тогда и помогу".
Калабалык устроили колдыки у села,
пугают Дед Мороза, что внучка утекла
Лемёхой по окраинам, растаяла она.
И в займище сугробом лежит теперь одна.
Примчался к месту дед седой - растрёпан кибеняк.
Скорей сугроб разгрёб ергой, торпуши потерял.
Слепил девчушку стройную, юрною нарядил.
Кабушу съела - ожила. Дед в сани её усадил.
В небесные кохтега хаптроки их несли.
С тех пор уж челепиги успели подрасти.
Мораль сей сказки такова: пусть праздник будет до утра.
Гуляйте, веселитесь, пейте, но честь семьи хранить умейте.
Всех поздравляю с новым тысячелетием.
Для счастья своего Вы силы не жалейте.
Век двадцать первый на пороге. Пусть широкими будут дороги.
Вам желаю любви и добра. Новому году крикнем: "Ура!"
26.12.2000.15.00-27.12.2000.15.00

Для лучшего понимания вышеизложенных моих мыслей читайте пояснения слов, использованных в радио-игре "Мыслеслов":
Слово Пояснение
АБУКОНЬ прибрежный подводный камень
АВДОТЬКА удод
АКИПКА тюлений щенок
АКУДНИК шептун, знахарь, колдун
АЛЯКИШ недопеченный хлеб
АНАЛАВ четырехугольный нагрудник у монахов
АНАНЬЯ угодливый, ласковый человек
АНТАПКА скобка, дужка для ружья
АНШПУГ жердь для перекатывания бревен
АРЕЛКА холм средненизменной местности
АРХИИН сказочная трава в ночь на Ивана-купала со сказочной силой
АРХИМАГЕР старший повар
АСТАШИ сапоги из рыжей кожи
АТАЙКА беломорская утка
БАБУК земляной заяц, тушканчик
БАЙБАК степной сурок, ленивец
БАКАЛДА озеро от разлива Волги, глухой заливец, колдобина
БАЛДАК большой стакан, кубок
БАРДАДЫМ черный (пиковый или трефовый) король
БАТРУГА крутая сторона муравейной кучи, обросшая мхом - север
БДЫН языческий могильный камень
БЕРЕНДЕЙКА деревянная игрушка
БЕСВА песок из перетёртых морских ракушек
БИЛЬДЮГА суковатая палка, дубина, палица
БИНДЮК большая телега для извоза гуза до 100 пудов
БЛАЗЕНЬ простофиля, проказник, шутник
БЛЕНДА фонарь, подвешанный к поясу
БЛЯГЕРЬ малярная краска бледно-желтого цвета
БОБЫЛЬ пролетарий, крестьянин, не владеющий землёй
БОБЫРЬ рыбка, ерш, пескарь
БОДНЯ кадушка с крышкой и замком вместо сундука
БОЛДЫРЬ ребёнок (помесь национальностей); плетёнка из хвороста; труба в сенях, обделанная глиной
БРУГВА мелкая молодая лесная поросль
БРУЗБАРД порода охотничьих собак (пудель + легавая)
БРЮДГА сватья от невесты, посаженная от жениха
БУБИЩЕ толока, выгон скота
БУГЛЕНЬ веревка от середины мачты к носу
БУЗИВОК годовалый телёнок
БУЙЛО турецкий, азиатский нож
БУКАЛИЩЕ омут под мельничным колесом
БУЧЕЛО глубокая яма с весенней водой, не высыхающая летом
ВИТЮТЕНЬ большой лесной голубь
ВОЛУХ коровий пастух
ВОНДЕЛКА самка северного оленя на втором году
ВРАСЕНЬ ранний мороз
ВРЫХТИХ правильно, точь в точь
ГАЛТЫРЬ желобовидный узор на оконной раме
ГЕРЛЫГА пастушечьиё посох с загнутыми краями
ГОМЫЛЬКА платок, который дарит жених невесте перед отъездом к венцу
ГРЕЗДЕНЬ луковица с зелёными отростками
ГУГЛЯ еловая шишка, не спелая вишня
ГУГОЛО верёвочные качели
ГУДЕГА густой иней в виде снега на деревьях
ДАДОН неуклюжий человек
ДЕВЯКУШ крупное животное, птица - страус
ДЕЛИБАШ храбрый воин, разбойник
ДИДАСКАЛ учитель
ДУДОЛЯ ребёнок, который сосёт грудь
ДУРАНДА выжимки растительного масла
ДЫБУН глинистое место, поросшее мхом и тростником
ДЫМСЕЛЬ парус перед трубой, защищающий от дыма
ЕВНЯ зерносушилка
ЕВРАШКА суслик, крот
ЕГУН прозвище белорусов или других народов со своеобразным диалектом
ЕДМА болота, топкая почва
ЕДУКАРЬ дока, смышленный человек
ЕЛБАНЬ высокий округлый мыс, холм
ЕМБЕЛЬ столярный станок
ЕРГА деревянная рогатка с грузом для вытаскивания сети
ЕРМЫШКА сорт капусты с бороздками
ЖЕМЖУРА скорая, бойкая, вертлявая женщина
ЖИКОВИНА перстень с печатью
ЖИСТИГА палка, к которой привязана удочка
ЖУЖМА изобилие
ЗАБОРОЛЛО стена укрепления, подвижный козырёк шлема
ЗАГНЁТКА углубление на левой стороне печи, куда сгребают уголь
ЗАЙМИЩЕ охотничье угодье князя; место, занятое под распашку
ЗЕБРИК рыболовный крючок
ЗЕГЗИЦА птица на дубу, кукушка
ЗИМБЕЛЬ корзина из пальмовых листьев
ЗИНЗУБЕЛЬ рубанок с плавающим лезвием
ЗЫМЗА карниз вокруг избы
КАБАРГА тощая, замученная скотина
КАБЁЛ высохшее дерево на берегу
КАБУША сыр конусообразной или круглой формы
КАЙЛО лом для камней и мелкой земли
КАКУЙ Иванов день 23 июня
КАЛАБАЛЫК беспорядок, неразбериха
КАЛАБУК высокий монашеский головной убор
КАЛАМАГА брачный поезд
КАЛЬПЫХ летняя шапка из разноцветной пряжи
КАНЬКАЛА докучливый проситель
КАПТРУГА мешок для дроби и оружейных пуль
КАРБАЧИ лапти из бересты
КВАРТАРЬ мера напитков на четверых
КЕЙКАЛА деревянная дощечка на шее оленя с именем владельца
КИБЕНЯК род верхней одежды, плащ
КИРЬЯК не растущий розовый лосось
КОКИЦА железный молот для разбивания глыб земли
КОЛДЫКИ прозвище сибиряков, которые вместо "когда" говорят "колда"
КОНДЫРЬ стоячи воротник мундира
КОХТЕГА облака
КОЧЕДЫК шило для плетения лаптей
КТЫРЬ муха, вошь
КУДЕЛЬ кудрявая женщина
КУЁЛДА сварливый, корыстный человек
КУЙБАБА одуванчик
КУКЕЛЬ льняной мешкообразный платок для защиты от комаров
КУКЛЁМА белка, линяющая из красного в белый
КЫРЧИГА годовалый морж
ЛАКУДРА неряшливая женщина
ЛАМПОПО крепкий напиток из холодного пива с лимоном или мёдом
ЛАПСЕРДАК долгополый еврейский сюртук
ЛЕМЕХА речная подводная мель с глубокими проходами по сторонам
ЛИСТОПУК месяц май (Череповец)
ЛОВЬЯШКА лосось-пеструшка
ЛУЛАКИ неспелые ягоды
ЛУПЫШИ глаза
ЛУШПАЙКИ (Украина) картофельные очистки
ЛЫБАНЬ верхняя часть головы животного
ЛЫЗЛА долговязый, неуклюжий человек
ЛЫЧМА плавучий клубок водорослей
ЛЮШНЯ дугообразный упор на возу, запряженном волами
МАГАРЫЧ выпивка после заключения сделки
МАЗЕПА неряха, грубиян
МАЙМУХА маленькая рыбка, приманка
МАМУРНИК красный сарафан
МИШУРИС коридорный служитель в гостинице
МОРДОФИЛЯ чванливый человек, хвастун
МОТОВЯЗ верёвка, шпагат, бечёвка
МУГАЧКИ мелкие рыбки, только что вылупившиеся из икры
МУДЕГА торф, мутная грязная вода
МУЗГА лужа, мелкое пересыхающее озеро
МУНДКОХ придворный повар при Петре I
МУРГА подрытое подземным родником углубление в земле
МУРУНДЫК повод в носу верблюда
МУТИКАШКИ головастики, лягушки
МУШТАРДА горчица
НАГАЙБАКИ крещеные татары в уфимской губернии
НАГАШКИ место в ногах на кровати
НАДОЛБА столб, колода, заграждение
НАДРАГИ штаны, брюки
НЕПЛЮЙ оленёнок до года
НУКЕР телохранитель, слуга
НЮРИКИ летняя кожанная обувь у корел
НЯВГА рыбья чешуя
НЯВКА метка на ухе оленя
ОАДАШКА полуоткрытая палатка
ОБАБОК гриб маслёнок
ОБДАЛ персидский монах, обманщик
ОКАМЕЛИНА толстый конец бревна
ОПРОКИДОНТ стопка водки
ОСЕЛЕДЕЦ чуб на голове у казаков
ОЧИПОК чепец, сетка для волос
ПАПУК мочевой пузырь
ПАРДАЛЕЙ барс, рысь, ирбис
ПАСКАРАГА лесная сорока
ПЕЙСИКИ локоны на висках еврея
ПЕККУШИ молодые побеги, употребляемые на корм скоту
ПЕНУС поросшее травой болото, где косят траву в засушливые годы
ПЕРГА цветочная пыльца на ножках пчелы
ПЕШНЯ двухпудовый лом с утяжеленным концом
ПЛУТИВА поплавок на удочке
ПОДЛЕЖАН помидор у донских казаков
ПОТИМАЛКА мочалка для посуды
ПРЯГВА лепешка в масле
ПУПЕЛ короткий, малорослый гриб
ПУПЕНЬ деревянная затычка для заделывания пробоин в лодке
РАЗБАБА женское бельё
РАЗБРЫНДА разгильдяй, неряха, разиня
РАЗЛЕМЗЯ вялый, неповоротливый человек
РАЗЛЮЛИ раздолье, дороги
РАМПЕТКА сачок для бабочек
РАСПОПА стриженный поп или его семейство (жена и дети)
РАСПУКОЛКА распускающаяся почка на дереве
РАСТАТУРА болтовня
РУМПЕЛЬ ручка руля
РЫНДЕЛЬ знаменосец
САБЛУК сорт яблок коричневого цвета
САПЕТКА большая корзина, расширенная к верху
САХОВНЯ жаренная говядина с приправами
СЕВРУК угрюмый человек
СИНИКУЙ дымоход в чуме
СКОПЕРДИН игра в метании дугообразной палки
СКОЛОТЫШ внебрачный сын
СЛЮНЬБА мел; состояние беременной женщины (сепсис)
СТИБАК рослый, видный человек
ТАЙБОЛА густая, проходимая только зимой чаща
ТАЙЛАГАН праздник жертвоприношения у бурят
ТАЛОБА место, где постоянно водится дичь, оставляя следы на снегу
ТАЛОВИРКА маленький лещь, которого поймали подо льдом до того, как он вырос
ТАЛЫЗИНА большая палка, дубина
ТАМОЙНИКИ прозвище костромичей (там=тамой)
ТАРАНЧУГ похлёбка из крошеной баранины
ТАРБАЗИН небольшой черный орел
ТАРМАЛАМА прочная шелковая или полушерстяная ткань
ТАРНАБА вид балалайки с 8 струнами
ТАРТЫГА пьяница, буян
ТАТУРЬ обрубок дерева
ТАХТУЙ баран, у которого только появились рога
ТЕКЕМЕТЬ ковер из лоскутков
ТЕРТЮШКА поплавок в неводе
ТИГИЛЯЙ кафтан с короткими рукавами и высоким стоячим воротником
ТОРПУШИ вязанные рукавицы
ТУЛУМБАС большой турецкий барабан
ТУРУШКА чугунная дощечка, через которую выливают металл
УКРЮК петля на лёгком шесте для поимки лошадей
УЛЮЛЯ сова
УРДЕГА канавка, пробитый во льду путь для прохода лодки
УРЁМА лес в болотистой низине, кустарник вдоль берегов рек
УРЕНЬ простокваша, разболтанная водой
УСЕРЯЗЬ серьги
УТЕЛЬГА самка тюленя
ФАЛЕНЬ конец, который бросают с лодки и привязывают на берегу
ФИДИБУС бумажка для закуривания трубки
ФИЖМА китовый ус
ФИРЯБЬЕ старая одежда
ФЛЯКИ кушанье из кишок жвачных животных
ФОФУДЬЯ драгоценная ткань для императорских одежд
ФУМЕЛЬ сапожный снаряд для обработки подошвы
ФУХТЕЛЬ короткий тупой клинок
ХАЛИМОН льстивый, нескладный человек
ХАНАНЫГА праздничный шатун по угощениям
ХАПТРОКИ оленихи в упряжке
ХАРАМБУЧКИ прятки
ХАРДЫБАКА грубиян (Курск)
ХАРТОФИЛАК библиотекарь
ХАХУЛЯ выхухоль, мускусная крыса
ХЕРЛИНГ травяной хоккей
ХУБЛИ станок для резки бумаги у печатников
ХУЛЬДРА злая фея в Норвегии
ЦАНУБЕЛЬ столярный инструмент, рубанок с зубчатым лезвием
ЦЕДУЛКА записка
ЦИ(Ы)ГЕЛЬ кирпич (псковское)
ЦИГЕЛЬНЯ кирпичный завод
ЦИЦУЛЯ большой ломоть хлеба
ЧАБУРОК деревянный шар на конце каната для привязки лодки
ЧАФРЫКА угрюмый, капризный человек
ЧЕЛЕПИГА детвора (тамбовское)
ШАПОКЛЯК складывающаяся шляпа, цилиндр
ШВАРКУТА злая, сварливая баба
ШУРУБАРКИ мясные вареники, ушки, пельмени в похлёбке
ЮРНА головной убор, вышитый стеклярусом (бисером) у замужних зарянок, род меховой шапки у невесты
ЯБРИТЬ саранча
ЯБУРЬ сани для перевозки мехов
ЯГУШКА рубашка из оленьей шкуры мехом внутрь
ЯЛОМОК войлочная шапка из овечьей шерсти
Примечания:
* В Актюбинске, где 7 лет вещало радио РИФМА, мирно проживали многие народы: казахи, русские, немцы, чеченцы, молдаване, украинцы, татары, мордва и другие. Поэтому такой набор слов вполне логично родился именно в регионе слияния евро-азиатских национальностей.
* Передача была только голосовая, поэтому грамматика и семантика записаны со слов ведущих. Не стесняйтесь сообщать о неточностях и опечатках.