вторник, 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 баллов.

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

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