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