Автор: Майкл Хантер (Michael Hunter)
Оригинал статьи: http://www.thebraidytester.com/downloads/YouAreNotDoneYet.pdf
Перевод: Ольга Алифанова
Выберите что-нибудь, что угодно – функцию в вашем любимом приложении, игрушку, предмет мебели. Подумайте о том, что можно сделать, чтобы протестировать это, придумайте максимальное количество тестов, которые только придут вам в голову. Продолжите чтение, когда закончите.
Что, вы снова здесь? Я гарантирую, что есть тесты, о которых вы не подумали. Откуда я знаю? Оттуда, что даже для крошечной части продукта – например, для диалогового окна поиска в вашем браузере – можно придумать миллиарды тестов. Некоторые из них найдут интересные баги с большей вероятностью, некоторые с меньшей. Некоторые из них стоит провести, чтобы убедиться, что функциональность работает корректно. Такие кейсы – основа моего списка "Это еще не конец".
Это довольно большой, пугающе выглядящий список. Без паники! Возможно, многие тесты вы уже провели, а какие-то просто неприменимы к вашей конкретной ситуации. Возможно, ряд из них вы не проводите сознательно, и у вас есть для этого основания. Цель этого списка – спровоцировать размышления о том, какие тесты вы уже провели, а какие нет, и выявить области, которые вы собирались покрыть в своем тестировании, но пока не покрыли.
Не вздрагивайте при мыслях о тестах, которые вы еще не проводили. Подгоните мой список под свой контекст. Выбросите все, что неприменимо, используйте его, как стартовую точку для поиска моментов, которые применимы к вашей ситуации, но не вошли в мой список. Пусть он станет основой организации вашего тестирования или чек-листом, по которому вы пробегаетесь под конец тестирования. Неважно, как вы его используете – просто пользуйтесь им.
Методы ввода
Вы не закончили тестировать, если не проверили эти методы ввода:
- Клавиатура. Пфф, наверное, думаете вы. Но проверка ввода с клавиатуры не ограничивается проверкой возможности ввода символов в текстовые поля. Найдите абсолютно все в вашем приложении, способное принимать текстовый ввод. Это необязательно значения – это еще и сочетания клавиш, и навигация (да, этот раздел немного перекликается с разделом "Навигация по диалоговым окнам и доступность"). Если ваше приложение использует специфичные функции управления, обратите на них особое внимание – скорее всего, они особенным образом воспринимают ввод с клавиатуры. Пусть ненавидящие мышь мастера клавиатуры будут счастливы!
- Мышь. Еще одно "Пфф", но проблема в том, что это настолько очевидно, что легко упускается из виду. Повторюсь, обращаем особое внимание на специфические функции – возможно, они иначе реагируют на манипуляции при помощи мыши.
- Перо. Это может означать прямой ввод данных в приложение, фильтрацию через операционную систему (например, через панель ввода с планшета в Microsoft Windows), или фильтрацию через панели ввода стороннего ПО – зависит от вашей платформы. У каждого метода ввода есть свои особенности, которые могут конфликтовать с особенностями вашего приложения.
- Голосовой ввод. В зависимости от платформ, для которых предназначено ваше приложение, это может быть прямой ввод, фильтрация через ОС, или через сторонние приложения.
- Ввод на иностранных языках. В Windows это обычно связано с использованием редактора методов ввода (IME) – или того, который поставляется вместе с ОС, или стороннего. Это может вызывать затруднения даже в приложениях, не использующих специфичную обработку данных с клавиатуры. К примеру, процессор ввода символов на японском языке, скорее всего, захватывает нажатия, комбинирует несколько нажатий в один иероглиф, и затем отправляет его в приложение. Сочетания клавиш должны игнорироваться при такой обработке, но зачастую этого не происходит. Да, можно просто выключить IME, но почти всегда это плохое решение.
- Вспомогательные методы ввода (например, дыхательные трубки). Обычно операционная система воспринимает их, как стандартную клавиатуру или мышь, но они могут спровоцировать специфические ситуации, которые должны обрабатываться приложением – например, очень длительная задержка между нажатиями клавиш.
- Другие методы ввода. К примеру, я сталкивался с играми, управляющимися через сенсоры, надетые на пальцы. Иногда такие устройства определяются как джойстик или мышь. Что произойдет, если ваше приложение будет управляться при помощи такой штуки?
- Несколько клавиатур и/или мышей. Windows поддерживает несколько подобных устройств одновременно. Единовременно у вас будет только один курсор, поэтому вам не придется гадать, как поддерживать одновременный ввод с разных клавиатур. Однако стоит поразмыслить над возможными "прыжками" с одного устройства на другое. Мечта тестировщика!
Файлы
Вы не закончили тестировать, если вы не обратили внимания на все возможные файлы в вашем приложении – иногда они переполнены информацией, которая просто игнорируется. Все мы знаем, что бывает, когда что-то игнорируется. Баги! Помню баг, на который разработчик натолкнулся раз пятьдесят, просто пройдясь по этому чек-листу.
- Убедитесь, что версия каждого файла верна.
- Убедитесь, что версия сборки верна для каждой возможной сборки. Обычно версия сборки и версии файлов совпадают, но определяются при помощи различных механизмов и должны быть синхронизированы.
- Убедитесь, что информация об авторских правах на каждый файл верна.
- Убедитесь, что файлы имеют цифровую подпись (или не имеют, если не должны). Убедитесь, что подпись верна.
- Убедитесь, что файлы находятся в нужных папках (см. раздел "Установка").
- Убедитесь, что знаете, от чего зависит каждый файл. Проверьте, что все зависимости или обеспечены при установке, или гарантированно присутствуют на компьютере.
- Проверьте, что происходит, если какой-то из файлов – или какая-то зависимость между файлами – отсутствует.
- Проверьте текст в каждом файле и убедитесь, что с тем, что этот текст увидит пользователь, нет никаких проблем.
Названия файлов
Вы не закончили тестировать, если не проверили варианты названий файлов:
- Из одного символа.
- Короткие.
- Длинные.
- Очень длинные.
- Названия с использованием проверок для текстовой строки.
- Названия, содержащие зарезервированные слова.
- Название "file" (file.ext)
- Полный путь к файлу (c:\My\Directory\Structure\file.ext)
- Относительный путь к подпапке (Sub\Folder\file.ext)
- Относительный путь к папке (.\file.ext)
- Относительный путь к родительской папке (..\Parent\File.ext)
- Путь с множественными вложениями (Some\Very\Very\Very\Very\Very\Deeply\Nested\File\That\You\Will\Never\Find\Again\file.ext).
- Сетевой путь UNC (\\server\share\Parent\file.ext).
- Путь к диску (Z:\Parent\file.ext).
Названия файлов – частый источник багов. Приложения Microsoft Windows, не защищенные от использования зарезервированных слов, напрашиваются на Denial of Service. Приложения, позволяющие открытие, сохранение и изменение любых файлов, оставляют дыру для манипуляций с "защищенными" файлами. Некоторые пользователи пихают все созданные документы в пользовательскую папку. Другие создают отдельную папку для каждого. В названии файлов разрешены символы, которые более не разрешены нигде, и наоборот. Покопайтесь в этой области – возможно, ваши труды окупятся.
Запрещенные символы в названиях файлов, другие ошибки
Вы не закончили тестировать, если не проверили, как приложение работает с запрещенными символами в названиях файлов и зарезервированными названиями. Операционные системы не любят, когда вы используете "джокеров" – например, символ * - в названиях файлов, и могут специфически воспринимать ряд других названий. Скажем, Windows предоставляет единый API для создания и открытия файлов, коммуникационных портов, и других кросспроцессных механизмов коммуникации. Распространенные коммуникационные порты – к примеру, COM1 – воспринимаются как название файла, как будто это на самом деле файл. Это удобно, но это значит, что вы не можете назвать физический, присутствующий на диске файл COM1.
Это довольно легко тестируется – набросайте список интересных идей, и вставьте каждый вариант во все возможные диалоговые окна, командные строки и API, принимающие названия файлов. Запрещенные символы, скорее всего, вызовут сообщение об ошибке, но попытка открыть файл с зарезервированным именем может подвесить приложение.
Тема на MSDN про названия файлов: https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa365247
Операции с файлами
Вы не закончили тестировать, если не проверили со всей возможной тщательностью функциональность открытия, сохранения, и "сохранения как". Не знаю, как у вас, но лично меня бесит, когда плоды моих трудов вылетают в трубу! Для ряда приложений отсутствие возможности сохранения и последующего открытия данных означает, что эти приложения не имеют никакого смысла. Следовательно, очень важно проверить, что все работает нормально при следующих условиях:
- Откройте каждый поддерживаемый тип/версию файлов, и сохраните через "Сохранить как" в каждом возможном типе/версии. Очень важно проверить, что открытие и сохранение файлов, созданных в предыдущих версиях, работает. Пользователи бесятся, когда переход на новую версию означает, что старые документы нельзя открыть. Они не будут обновлять приложение, если не смогут легко делиться документами с теми несчастными, которые все еще пользуются старыми версиями.
- Откройте все поддерживаемые типы файлов и нажмите "Сохранить". Если в процессе сохранения (а не через "Сохранить как") можно выбрать версию и тип файла, сделайте то же, что и в предыдущем сценарии. Как правило, меню "Сохранить" дает сохранить только актуальную версию.
- Превратите файл предыдущей версии в современную, а потом сохраните его вновь как предыдущую версию. Откройте результат. Он верно открывается? Новые возможности приложения правильно сконвертированы в то, что понимает и предыдущая версия? Как обрабатываются встроенные объекты предыдущих версий?
- Откройте файл, созданный в более новой версии, в предыдущей версии приложения. Если документ открывается, как выглядит то, что создано при помощи новых возможностей? Если он не открывается, есть ли там внятное сообщение об ошибке, указывающее, почему?
- Проверьте функции "Открыть", "Сохранить", "Сохранить как" в разных файловых системах (FAT, NTFS) и протоколах (локальный диск, UNC, http://). Операционная система обычно не отображает разницу между типами файловых систем, но за разные протоколы могут отвечать разные участки кода вашего приложения.
- Проверьте работу "Открыть", "Сохранить" и "Сохранить как" следующим образом (если это применимо):
- Через меню
- Через панель инструментов
- Через сочетание клавиш (например, CTRL+S для сохранения)
- Через список "Недавно открытые"
- Через библиотеку документов Microsoft SharePoint
- Через контекстное меню
- Через список "Недавно открытые" внутри приложения.
- Через список "Недавно открытые" в операционной системе.
- Перетащите из проводника.
- Перетащите с рабочего стола.
- Перетащите из другого приложения.
- Через командную строку.
- Через двойной клик на ярлыке рабочего стола.
- Через двойной клик на ярлыке в письме или другом документе.
- Через встроенные объекты.
- Проверьте работу "Открыть", "Сохранить" и "Сохранить как" для:
- Файлов, изменения которых разрешены.
- Файлов, для которых допускается только чтение.
- Файлов, к которым у вас нет доступа (например, политики безопасности настроены так, что вы не можете получить доступ к этому файлу).
- Папок, в которые можно сохранять изменения.
- Папок, доступных только для чтения.
- Жесткого диска
- Переносного диска
- USB-диска
- CD-ROM
- CD-RW
- DVD-ROM
- DVD-RW.
- Проверьте работу "Открыть", "Сохранить" и "Сохранить как" для разных типов и скоростей сетевых соединений. Модемы и широкополосной доступ различаются по характеристикам и необязательно равны вашим офисным, сто-гигабайт-в-секунду скоростям!
- Откройте файлы, созданные в (и попытайтесь их там сохранить):
- Других операционных системах
- ОС с другим системным языком
- ОС с другим пользовательским языком
- Версии вашего приложения на другом языке.
- Откройте/сохраните/"сохраните как" файлы с названиями
- Из списка раздела "Текстовые поля"
- Из списка раздела "Названия файлов"
- Из списка раздела "Недопустимые названия файлов"
- С пробелами.
- Сделайте следующее в процессе открытия/сохранения:
- Оборвите сетевое соединение.
- Переключитесь на другое сетевое соединение.
- Перезагрузите приложение
- Перезагрузите компьютер.
- Отправьте машину в спящий режим.
- Отправьте машину в режим гибернации.
- Проверьте автосохранение. Что произойдет, если оно настроено на "сохранять каждые 0 минут"? А если на каждую минуту? А если документ очень большой? Если автосохранение настраивается отдельно для каждого документа, что произойдет, если несколько автосохранений запустятся одновременно, или одно запустится, когда другое уже стартовало? Работает ли функция восстановления файлов так, как ожидается? Что произойдет, если приложение упадет в ходе автосохранения? А если оно упадет при попытке восстановить автосохраненный документ?
- Сохраните/"Сохраните как" при следующих условиях:
- В файлах нет изменений.
- В одном файле есть изменения.
- В нескольких файлах есть изменения, и пользователь хочет сохранить все.
- В нескольких файлах есть изменения, и пользователь не хочет сохранять ни один из них.
- В нескольких файлах есть изменения, и пользователь хочет сохранить только определенные файлы.
Сетевое соединение
Вы не закончили тестировать, если вы не проверили, как ваше приложение работает с различными сетевыми конфигурациями и событиями. Раньше можно было рассчитывать на относительную стабильность сети - если компьютер в сети, когда приложение стартовало – скорее всего, он останется подключенным, пока оно работает. Конечно, какой-нибудь придурок мог случайно задеть кабель ногой или выдернуть не тот шнур из роутера, но риск какой-нибудь катастрофы в этой области был довольно низким – достаточно низким, чтобы баги в духе "Отключите ваш компьютер от сети, когда приложение открывает файл в 20 мегабайт из сетевой папки" откладывались как Won't Fix со словами "Пользователь так не делает".
О, как изменился мир! Современные пользователи зачастую пользуются беспроводными сетями, которые могут обвалиться в любой момент. Пользователи, начавшие работу в проводной сети, могут отключить провод от ноутбука и оборвать таким образом соединение. К тому же они могут пользоваться сетевым соединением через мобильный телефон. Бывшие "будет время – поглядим"-проблемы, связанные с сетью, стали реальностью, регулярно раздражающей ваших пользователей. Поэтому проверьте вот что:
- Сетевое соединение, поддерживающее только IPv4
- Сетевое соединение, поддерживающее только IPv6
- Сетевое соединение, поддерживающее IPv4 и IPv6
- Соединение через беспроводную сеть 802.11a
- Соединение через беспроводную сеть 802.11b
- Соединение через беспроводную сеть 802.11g
- Соединение через беспроводную сеть 802.11n
- Соединение через GPRS
- Соединение через машину, подключенную к нескольким сетям.
- Соединение через модем 28.8
- Соединение через модем 56k
- Соединение через сеть, находящуюся вовне вашего корпоративного файервола
- Соединение через сеть, которая требует аутентификации при первом подключении.
- Соединение через сеть, которая требует аутентификации каждый раз.
- Доступ через файервол на стороне ПО.
- Доступ через файервол на стороне железа.
- Доступ через Network Address Translation.
- Потеря соединения с сетью.
- Потеря прав на соединение с сетью.
- Присоединение к рабочей группе.
- Присоединение к домену.
- Доступ к документам в сетевом окружении, требующий аутентификации.
- Предварительный просмотр документа для сетевого принтера, который в данный момент недоступен.
Сообщения об ошибках
Вы не закончили тестировать, если вы не проверили все сообщения об ошибках, уведомления и предупреждения и диалоговые окна в вашем приложении, и не убедились в следующем:
Содержание
- Убедитесь, что вы понимаете, чем вызвано появление предупреждения, и что ваши тест-кейсы покрывают все условия его появления (или вы намеренно решили не проверять какие-то из этих условий).
- Убедитесь, что предупреждение на самом деле необходимо. К примеру, если действие обратимо, дополнительного подтверждения уверенности пользователя в том, что он хочет его совершить, не требуется.
- Убедитесь, что предупреждение сначала сообщает о проблеме, а потом информирует о решении. Обращайтесь с пользователями, как с умными, знающими людьми, помогите им понять, в чем проблема и как они могут ее решить.
- Убедитесь, что тон предупреждения вежлив и доброжелателен, а не обвиняет пользователя. Помню, как-то раз приложение, восстанавливающее свою базу данных после краша, упрекнуло меня в том, что я его неправильно закрыл. Эм. Нет, это ТЫ неправильно закрылось! Я не имею к этому никакого отношения! В более поздней версии текст уведомления изменился на "Это приложение было неправильно закрыто", и стало чуть лучше. Скорее всего, ваш пользователь не пытался создать проблемную ситуацию намеренно. Если он сделал то, что сделал, намеренно – скорее всего, он не знал, что это вызовет проблему. Сообщите ему, что произошло, что предпринимает приложение, чтобы исправить ситуацию, и как избежать такой ситуации впредь.
- Убедитесь, что текст сообщения верен и подходит для конкретной ситуации.
- Убедитесь, что текст сообщения выдержан в едином стиле и соответствует другим сообщениям системы.
- Убедитесь, что сообщение достаточно подробно, и при этом не вдается в излишние детали. Хозяйке на заметку: если оно занимает более трех строк текста, то, скорее всего, оно чересчур длинное.
- Убедитесь, что сообщение содержит полные, законченные предложения, и в нем не упущены заглавные буквы и знаки препинания.
- Убедитесь, что оно не содержит аббревиатур и сокращений. Специфические аббревиатуры допускаются, только если вы абсолютно убеждены, что все ваши пользователи поймут, о чем речь.
- Убедитесь, что сообщение использует название продукта, а не местоимения вроде "я" или "мы".
Функциональность: - Убедитесь, что заголовок сообщения содержит название продукта (например, "Acme Word Processor").
- Убедитесь, что все кнопки корректно работают. Я сталкивался с кучей кнопок "Отмены", которые на самом деле были замаскированными кнопками "ОК"!
- Убедитесь, что для каждой кнопки есть уникальное сочетание клавиш.
- Убедитесь, что кнопки находятся после текста, а не до него.
- Убедитесь, что графические элементы сообщения правильно размещены и подходят к ситуации. Для приложений Microsoft Windows существуют стандартные иконки информационных, предупреждающих и критических уведомлений, и обычно они расположены слева от текста сообщения.
Доступность
Вы не закончили тестировать, если не убедились, что ваше приложение умеет работать с функциями доступности, встроенными в вашу операционную систему. Эти функции важны для слепых и глухих, а также тех, кто использует вспомогательные устройства ввода, но ими также пользуются и другие люди. К примеру, поддержка крупных шрифтов будет с благодарностью встречена пользователями со слабым зрением, и/или работающим на мониторах с высоким DPI.
Некоторые элементы этого списка специфичны для Microsoft Windows, но в других операционных системах наверняка есть нечто похожее.
- Убедитесь, что каждый элемент управления в каждом диалоговом окне и любой другой части пользовательского интерфейса поддерживает как минимум эти свойства Microsoft Active Accessibility (MSAA):
- Название – его идентификатор.
- Роль – описание того, что элемент делает (активен ли он, принимает ли он значения).
- Состояние – описание актуального состояния элемента.
- Значение – текстовое представление актуального состояния.
- Сочетание клавиш – комбинация, которую можно использовать для фокуса на этом элементе.
- Действие по умолчанию – описание того, что произойдет, если пользователь вызовет этот элемент. К примеру, для заполненного чекбокса действие по умолчанию – очистить, а для кнопки – нажать.
- Убедитесь, что изменение значения каждого элемента меняет значения "Состояние" и "Значение" в MSAA.
- Запустите приложение в режиме высокой контрастности, в котором доступно всего несколько цветов вместо полной палитры. Приложение работает, им можно пользоваться? Смена статусов и другие UI-элементы видимы глазу? Панели инструментов и другие элементы можно разглядеть и прочитать? Есть ли в приложении что-то, не поддерживающее такой режим?
- Запустите приложение в режиме увеличенных шрифтов, когда системные шрифты установлены крупными. Убедитесь, что меню, диалоговые окна и другие элементы поддерживают этот режим, и их можно прочитать. Обратите особое внимание на текст, обрезанный по горизонтали или вертикали! Чтобы по-настоящему испытать свой интерфейс, проверьте это на псевдолокализованном билде.
- Запустите приложение с Sound Sentry, которое отображает информационное сообщение, мигает, или другим способом предупреждает пользователя, что в приложении проигрывается звук. Убедитесь, что любые звуки вашего приложения активируют Sound Sentry.
- Запустите приложения в режиме залипания клавиш, позволяющего пользователю вводить сочетания клавиш по одной, а не одновременно. Операционная система скроет подробности пользовательского ввода от приложения, но если оно напрямую отслеживает состояние нажатых клавиш, то, возможно, такую ситуацию нужно обрабатывать отдельно.
- Запустите приложение, используя режимы, позволяющие манипулировать курсором мыши и кнопками при помощи цифровой клавиатуры. Операционная система скроет подробности пользовательского ввода от приложения, но если оно напрямую отслеживает состояние мыши, то, возможно, такую ситуацию нужно обрабатывать отдельно.
- Запустите приложение, отключив мышь, и убедитесь, что абсолютно все элементы интерфейса доступны с клавиатуры. Любой тест, который вы проводите при помощи мыши, должен сработать и в этом режиме.
- Запустите приложение в режиме чтения с экрана, и выключите монитор. Вы должны быть способны выполнить любой из ваших кейсов в таком режиме.
- Убедитесь, что приложение сообщает о приобретении и потере фокуса элементами.
- Убедитесь, что переход по диалогам и другим доступным по TAB элементам соответствует их реальному расположению.
- Убедитесь, что любым цветовым индикаторам (как, например, волнистой линии, которой Word сигнализирует об орфографических ошибках) можно поменять цвет.
- Убедитесь, что мерцание у мерцающих объектов соответствует мерцанию курсора, установленному в системе.
Полнота поддержки этой функциональности, конечно, зависит от бизнес-решений, принятых вашей командой. Приложения, связанные с рисованием и работой с другой графикой, обычно требуют мыши для собственно рисования. Однако ряд проверок, специфичных для доступности, можно применять и в других сценариях. К примеру, многие пользователи используют клавиатуру для передвижения элементов по экрану в программах для рисования.
Доступность текста
Вы не закончили тестировать, если вы не убедились, что весь текст в вашем приложении – это текст, а не картинка и не видео. Текст в форме картинки может вызвать два типа проблем. Во-первых, люди, использующие чтение экрана, не узнают, что написано на ваших изображениях, видео и анимациях. Во-вторых, текст, встроенный в графику, усложняет локализацию продукта. Перевод требует простой модификации исходных файлов приложения, а вот перевод изображений и видео требует их пересоздания.
Если вы никак не можете этого избежать, облегчите жизнь локализаторам, создавая такие изображения динамически с использованием текстовых строк. Видео и анимация тоже могут создаваться таким образом, все зависит от вашего инструментария.
Что касается проблем доступности, убедитесь, что соответствующая информация доступна каким-либо иным образом – через вспомогательный текст, через alt-тэги HTML, и так далее.
Меню и панели инструментов
Вы не закончили тестировать, если вы не проверили работу ваших меню и панелей инструментов. Раньше они явным образом различались: меню могли содержать подменю и всегда были текстовыми (возможно, с опциональными иконками), а панели инструментов никогда не содержали подменю и были исключительно графическими. Сейчас это практически одно и то же, и единственное реальное различие между ними в том, что панель инструментов видна всегда, а меню – нет.
- Убедитесь, что все команды меню и панелей инструментов работают.
- Убедитесь, что все сочетания клавиш работают.
- Убедитесь, что встроенные команды работают из пользовательских меню.
- Убедитесь, что встроенные команды работают из пользовательской панели инструментов.
- Убедитесь, что пользовательские команды работают из пользовательского меню.
- Убедитесь, что пользовательские команды работают из пользовательской панели инструментов.
- Убедитесь, что пользовательские команды работают из встроенного меню.
- Убедитесь, что пользовательские команды работают из встроенной панели инструментов.
- Убедитесь, что пользовательские меню и панели правильно сохраняются и загружаются.
- Убедитесь, что изменения, внесенные во встроенные меню и панели инструментов, правильно применяются и отображаются.
- Убедитесь, что команды скрываются или становятся неактивными, и показываются/становятся доступными тогда и только тогда, когда это допустимо.
- Убедитесь, что описания команд верны и соответствуют терминологии, использующейся в других местах.
- Убедитесь, что контекстные меню элементов меню и панелей работают верно.
- Убедитесь, что текст в строке состояния верен.
- Убедитесь, что текст в строке состояния не обрезается.
Прололжение следует.... В следующих частях будут чек листы для:
Поведение диалоговых окон Интерактивность диалоговых окон Внешний вид диалоговых окон Ввод в текстовые поля Отмена и возврат Печать Особые режимы и состояния Международная доступность Локализация API Платформа Конфигурации процессора Конфигурации железа Безопасность Даты и проблема-2000 Производительность и стресс-тестирование Конфигурация и совместимость Установка Установка: особые случаи Обновления Документация продолжение статьи, окончания статьи
Обсудить на форуме
|