Что такое юнит-тесты и почему они так важны

Граничные значения

Теперь я покажу, как использовать технику «Граничных значений». В этой технике мы работаем только с цифрами. Допустим, у нас есть требование, что пароль должен быть от 6 до 16 символов. То есть на границе от 6 до 16 это должны быть четыре числа:

  • 5 — потому что 5 не входит в границу;
  • 6 — потому что с шести символов можно начинать;
  • 16 — потому что 16 символов — это максимум;
  • 17 — потому что это больше максимума.

Давайте тестировать. Сначала я хочу ради эксперимента ввести пароль с одним символом. Кнопка регистрации серая — то есть с одним символом невозможно:

Вводим пароль из пять символов — кнопка регистрации все еще серая:

Вводим пароль из 6 символов — кнопка регистрации засветилась, то есть регистрация позволена:

И пароль из 16 символов — кнопка все еще голубая:

Ну и поскольку в Instagram нет ограничений по количеству символов в пароле (или мне лень вводить 256 символов :)), то сделаем вид, что 17 — это максимум. Ввожу 17 символов и мы делаем вид, что кнопка «Зарегистрироваться» стала серой:

Давайте разделим эти варианты ввода на валидные и невалидные значения:

Валидные Невалидные
123456 12345
1234567890123456 12345678901234567

В валидные пойдут: пароль из 6-ти символов и пароль из 16-ти символов. В невалидные — пароль из 5-ти символов и пароль из 17-ти символов. То есть, чтобы использовать в тест-кейсе граничные значения, нам нужно использовать четыре шага: два из них — это граничные валидные значения (6 и 16) и вторые два — это граничные невалидные значения, то есть 5 и 17.

Где еще можно использовать эту технику тест-дизайна? Везде, где фигурируют цифры: например, возраст. Давайте представим, что есть сайт, на котором регистрация позволена людям от 18 до 60 лет. И посчитаем, какие значения можно и нельзя вводить. Итак, валидные значения — это 18 и 60. Тогда невалидным значением будет 17, потому что в 17 лет нас не должно зарегистрировать, и 61, потому что после 60-ти тоже не должно регистрировать по правилам выдуманного нами сайта:

Валидные Невалидные
18 17
60 61

Где еще может использоваться эта техника? Например, в номере телефона. Все мы знаем, что валидный номер телефона состоит из 10 цифр, которые не относятся к коду страны ((+38)099 999 99 99). Это будет валидный номер телефона. Но что, если я хочу создать номер телефона из 11 цифр без кода страны (или из 9)? Номер телефона считается невалидным в таких случаях:

Валидные Невалидные
+38 099 999 99 99 +38 099 999 99 99 9
+38 099 999 99 9

Какие тест-кейсы мы могли создать из упомянутых примеров?

1. Создать пароль из 6-ти символов.

2. Создать пароль из 16-ти символов.

3. Создать пароль из 5-ти символов и ожидать, что регистрация не пройдет.

4. Создать пароль из 17-ти символов и ожидать, что регистрация не пройдет.

5. Зарегистрироваться с возрастом 18 лет.

6. Зарегистрироваться с возрастом 60 лет.

7. Зарегистрироваться с возрастом 17 лет.

8. Зарегистрироваться с возрастом 61 год.

9. Зарегистрироваться, указав правильный номер телефона из 10 символов без кода страны.

10. Зарегистрироваться, указав неправильный номер телефона из 9 символов без кода страны.

11. Зарегистрироваться, указав неправильный номер телефона из 11 символов без кода страны.

Зачем нужна эта техника?

Для того, чтобы люди не тестировали 10 символов в пароле, которые никому не нужны, потому что они находятся на границе между 6 и 16. Для того, чтобы не тестировать возраст 20, 30, 40, потому что все эти значения находятся между 18 и 60. Также для того, чтобы люди не тестировали возраст 100 лет или -100 лет. Для того, чтоб не проверять номер телефона из 1, 2, 100 цифр. Потому что все эти проверки будут бессмысленными, ведь мы уже протестировали граничные значения.

Ручное управление

Ни проигрыватель, ни сервер не имеют на корпусе кнопок управления за исключением одной — фирменного логотипа «Naim». У UnitiServe это кнопка включения, у UnitiQute2 — режима Mute. При этом оба устройства имеют приложения для iOS и Android, дающие полный доступ ко всем настройкам и функциям. В комплекте с UnitiQute2 идет пульт, а на его передней панели есть вполне информативный дисплей, но я с большим трудом могу представить человека, который добровольно откажется от использования большого смартфона или iPad в пользу кнопочного пульта.

Это раньше пульты от -аппаратуры можно было в музеях выставлять. Теперь если хоть какой-то пульт в комплект положили — уже чудо, управляется-то все со смартфона

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

Меню предельно информативно. При наличии соединения с интернетом система автоматически подкачивает не только обложки дисков, но и дополнительную информацию о воспроизводимом альбоме и исполнителе. Это, кстати, во многом компенсирует проблему, которую отмечают владельцы дисковых фонотек: «файл не дает ощущения обладания вещью». Когда мы ставим для прослушивания диск, в руках остаётся конверт или коробка с многостраничным буклетом. А в приложении Naim к любому воспроизводимому изданию идет многостраничный буклет сродни тем, что прилагаются к люксовым и юбилейным изданиям. Более того, в подгружаемом файле есть масса дополнительной информации, как рекомендации альбомов и исполнителей, схожих с теми, что вы слушаете прямо сейчас. Подборки эти, конечно же, не всегда однозначны и порой удивляют, но тем интереснее процесс. Спорная рекомендация — это возможность открыть для себя что-то новое.

Все что вы здесь видите — малая часть электронного буклета загрузившегося в планшет при запуске альбома

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

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

Интерфейс UnitiServe более суров и изобилует настройками рассчитанными на продвинутых пользователей

На текущий момент для управления UnitiServe используется отдельное приложение, не столь красочное и удобное, как приложение сетевого плеера, но в ближайшей перспективе произойдет обновление, которое в корне устранит данную несправедливость, объединив возможность управления всеми устройствами в одном ПО. Если UnitiServe используется только для сохранения дисков, его фирменное приложение понадобится лишь для первоначальной настройки. А вот для перехода в режим воспроизведения и управления самим процессом прослушивания дисков приложение точно понадобится.

Установка и подключение naim uniti

  • Изображение
  • Текст

5

Установка и подключение NaimUniti

2.7.1 Общие примечания по аудио соединениям

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

сигнальный

переключатель заземления

установлен в положение

шасси

. Чтобы избежать «гудящих» контуров,

отрицательный сигнал всей системы следует подключать к сетевому заземления только в одном месте.

2.8 Интерфейс USB/iPod

NaimUniti имеет USB-интерфейс на передней панели, предназначенный для подключения моделей Apple iPod, а также USB-накопителей, содержащих звуковые файлы. Интерфейс USB не может быть использован для других целей.

В зависимости от выбранных опций настройки (См. раздел 4.3.6), аккумуляторы iPod будут заряжаться при подключении к USB-интерфейсу.

2.9 Сетевые соединения

2.9.1 Проводное сетевое соединение

Задняя панель NaimUniti оборудована стандартным разъемом RJ45 Ethernet. Данный разъем позволяет NaimUniti подключаться к домашним сетям через маршрутизатор, чтобы получать доступ к потоковым данным Интернет-радио или воспроизводить звуковые файлы, сохраненные на правильно настроенных серверах UPnP.

Возможно использование оборудования для подключения к сети Ethernet через электросеть (Ethernet-over-mains), которое предоставляет простой и удобный способ подключения к домашней проводной сети. Однако, в зависимости от особенностей электропроводки, присущих каждому домашнему окружению, передача сетевых данных с использованием электросети может ухудшить общее качество звучания системы. Если качество звучания неприемлемо, необходимо использовать соответствующее сетевое кабельное соединение или беспроводную сеть.

2.9.2 Беспроводное сетевое соединение

Если необходимо беспроводное подключение NaimUniti к домашней сети, необходимо подключить входящую в комплект поставки Wi-Fi-антенну к разъему для антенны беспроводного соединения, расположенному на задней панели. Перед подключением NaimUniti к беспроводной сети, возможно, потребуется настройка беспроводного соединения. См. раздел 4.6.1 данного руководства.

2.9.3 Параметры сети

NaimUniti поставляется в состоянии, не требующем настройки сетевого соединения на месте, обеспечивающим автоматическое подключение к сети (по умолчанию используется динамический протокол DHCP). Однако, если ваш NaimUniti ранее использовался, его сетевые настройки могли быть изменены, поэтому автоматическое подключение может не произойти. В этом случае убедитесь, что в меню Параметры сети выбрана опция DHCP, и перезапустите NaimUniti. Если проблема осталась, свяжитесь с вашим торговым представителем, установщиком или напрямую с Naim Audio. См. раздел 4.6.

Примечание:

Перед тем, как сообщить о неполадках

сетевого подключения, осуществите операцию сброса к заводским настройкам и попробуйте еще раз. Выберите опцию Сброс всех переуст из меню настройки Зав настройки. См. раздел 4.10.

Примечание:

Включение NaimUniti без работающего

проводного сетевого соединения позволит подключаться к домашней сети, используя только беспроводное соединение. Чтобы использовать соединение проводное, отключите NaimUniti, подключите сеть и снова включите устройство.

Примечание:

Для использования Интернет-радио

NaimUniti требует наличия широкополосного доступа в сеть Интернет через маршрутизатор/модем со встроенным файерволлом.

2.10 Управляющие разъемы

Задняя панель NaimUniti оборудована стандартным разъемом интерфейса

RS232

и разъемом

Remote In

(Удал. вх).

Разъем RS232 предназначен для обновления

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

Угадывание ошибок

Начнем с угадывания ошибок (Error Guessing). В этой технике нужны опытные ребята, которые могут придумать и вспомнить ситуации, в которых ПО «ломается». Обычно эти ситуации встречались им с предыдущим опытом. Именно эта техника сильно зависит от мастерства, ведь только опытные специалисты знают, где искать баг.

Какие типичные условия следует попробовать, чтоб пройти угадывание ошибок:

  • Уменьшать ширину окна по чуть-чуть, чтоб отловить баги в User Interface
  • Делить на ноль
  • Ввести пустое значение в поле
  • Ввести пробел в начало, в середину, в конец поля
  • Негативное тестирование дат (30, 31 февраля, а также даты, которые еще не наступили)
  • Ставить на аватарку текстовые файлы, музыку, пустые файлы

Это самые часто встречающиеся ошибки.

Особенности юнит-тестов

На практике используют разные тесты — их разделяют по уровню абстракции с помощью пирамиды Майка Кона:


Изображение: OTUS

Чем выше тест в пирамиде, тем больше частей программы он затрагивает. Высокоуровневые тесты «ближе к бизнесу»: они проверяют бизнес-логику и пользовательские процессы. А те, что внизу пирамиды, помогают найти проблемы в отдельных частях кода. Например, какую-нибудь функцию, которая генерирует имя файла.

Большая часть тестов работает на верхних уровнях и не позволяет точечно отлавливать баги. Те же интеграционные тесты проверяют, как взаимодействуют между собой разные системы. А Е2Е-тесты исследуют процессы со стороны пользователя: например, когда он регистрируется и логинится на сайте.

В отличие от них, юнит-тесты нужны в следующих случаях:

  • если код непонятен — на ревью возникли вопросы по его работе;
  • если код часто меняется — чтобы не проверять его вручную;
  • если обновления в одной части кода могут сломать что-то в другой части.

Процесс юнит-тестирования

Для юнит-тестирования подключают тестовые фреймворки — они позволяют «мокать», то есть имитировать функции. В коде больших проектов много зависимостей: одна функция вызывает другую и влияет на разные части программы. Но, как правило, достаточно проверить функции «в вакууме», отдельно от остального кода. Для этого и нужен тестовый фреймворк — он моделирует условия, в которых функция А вызывает функцию Б изолированно от других функций.

Простой пример: у нас есть функция на Go, которая получает id бэкапа и возвращает имя бэкап-файла:


Код в Pastebin: https://pastebin.com/ufeyuw3m

Протестируем её с помощью набора входных и выходных данных. Они должны учитывать все ситуации, поэтому не забываем про негативные кейсы — когда программа возвращает ошибку. Вот набор тестовых данных:


Код в Pastebin: https://pastebin.com/Gy3h0Ppp

В первую очередь я прописал запрещённые данные (-1 и 0) и слишком большое значение (10200300). Когда пользователь их вводит, функция не должна возвращать результат. Вместо этого мы ждём сообщения об ошибке: BAD_ID или BACKUP_ID_TOO_BIG. Когда же функция получает валидный id, она выводит отформатированное имя файла, например Backup#000010.

А вот и код самого теста:


Код в Pastebin: https://pastebin.com/uyTVTGPd
Код в Pastebin: https://pastebin.com/uyTVTGPd

Порой код для тестирования даже больше основного — и это норма. Но иногда всё-таки стоит задуматься, на самом ли деле тест должен быть таким объёмным. Я бы посоветовал покрывать тестами только те фрагменты кода, которые вы планируете менять. Или сложные части, которые, скорее всего, придётся чинить или поддерживать.

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

Пройти онлайн-тест из 20 вопросов

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

Приведенный ниже тест позволит определить, к какому «полюсу» для каждой дихотомии более склонен человек. Тест содержит 20 вопросов: по 5 вопросов для каждого дескриптора. Именно нечетное количество вопросов для каждой шкалы дает возможность получить вашу склонность к тому или иному полюсу (четное количество дало бы возможность получить промежуточный результат: 50 на 50).

Перед началом теста, важно понять следующие вещи:

  1. Никакие вопросы никакого, даже самого подробного, опросника не могут охватить все поведение человека. Данный тест позволяет лишь «очертить рамки» и указывает на уклон, а не на всеобъемлющее доминирование одних свойств над другими.
  2. Независимо от принадлежности к какому-либо типу, каждый человек использует в повседневной жизни оба полюса предпочтений, но в разной мере. К примеру, мы можем быть общительными с хорошими знакомыми, но чаще являться интровертами.
  3. При ответе на вопрос выбирайте тот вариант, который кажется наиболее предпочтительным и комфортным для вас в большинстве жизненных ситуаций. Если оба варианта не нравятся, то выбирайте наименее непривлекательный вариант.
  4. Пройдя тест, вы узнаете не только свой тип личности, но и получите небольшое объяснение результата. Не забудьте ответить на все вопросы, для этого удобнее всего идти по порядку.

Копирование CD

Новые Uniti Star и Uniti Core обеспечивают копирование компакт-дисков с побитовой точностью и создают цифровые копии, которые можно транслировать в любой набор сетевых протоколов (UPnP). В аппаратах используется кастомизированная версия программы EAC (Exact Audio Copy) для извлечения данных, которые можно сохранять в WAV или FLAC форматах.

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

Для копирования дисков при помощи Uniti Atom и Uniti Nova требуется подключение внешнего CD/DVD привода. Вы можете сохранять до 20 000 треков на USB-флешку/жесткий диск в модели Uniti Atom, или на USB-флешку, SD-карту и жёсткий диск в модели Uniti Nova.

Uniti Nova

Управление

Пульт ДУ для Star такой же, как и к другим аппаратам Uniti. Он работает по радиочастотному каналу, поэтому его необязательно направлять на устройство во время подачи команд. Благодаря достаточно крупному и яркому дисплею Uniti Star можно обходиться без планшета или смартфона для выполнения большинства операций и делать все, пользуясь только пультом.

Благодаря обратной связи на пульте отображается установленная в данный момент громкость, независимо от того, чем она была изменена

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

Основное окно приложения Naim

Диаграмма перехода состояний

Следующая техника тест-дизайна — работа с диаграммой. И перед тем, как начинать, было бы логично показать, на каких сайтах и с помощью каких программ их удобно рисовать:

Сайты и программы, с помощью которых удобно рисовать диаграммы

Первая диаграмма, которую мы рассмотрим — «Диаграмма перехода состояний» (State Transition Diagram). Всегда нужно учить английские термины, потому что спрашивают именно их. Итак, из чего состоит диаграмма перехода состояний? Из кружочков и стрелочек

Диаграмма перехода состояний (State Transition Diagram)

Что у нас получилось? Это самый элементарный пример диаграммы перехода состояний, а именно — пример выключателя света: если мы выключим — то свет не горит, если включим— свет горит. Над стрелочками принято писать действия, которые мы делаем, например, «выключить свет» и «включить свет». А внутри кружочка пишутся состояния, которые в этот момент происходят. Например, если мы выключим свет, то состояние будет «темнота», а если включим, то состояние «светло».

Теперь давайте рассмотрим более сложную систему, например систему входа в социальную сеть.

Говорят, что каждая диаграмма перехода состояний должна иметь начало и конец, по этому мы рисуем кружочки и для этих состояний:

Диаграмма системы входа в социальную сеть

Сначала пользователь просто заходит на сайт и вводит логин и неправильный пароль (ведь мы его забыли :)). Результат — пароль неправильный.

Дальше вводим пароль со второй попытки (и опять неправильный). Результат — пароль снова неверный.

Третья попытка — снова вводим неверный пароль. Результат — пароль снова неверный и пользователя забанят на час.

Следующее действие — ждем, пока пройдет час. Результат — аккаунт разбанен.

Что дальше? Давайте снова введем неверный пароль. Поскольку система помнит, что у нас было три неудачных попытки, то она забанит нас на неделю.

Ждем неделю. Результат — аккаунт разбанен.

Давайте мы наконец-то поумнеем и нажмем на кнопку «Забыли пароль». Результат — на электронную почту приходит письмо для восстановления. Дальше пользователь проверяет почту, и как результат — в письме пришла ссылка для восстановления пароля.

Пользователь нажимает на ссылку для восстановления пароля, и видит сообщение «Введите новый пароль». Пользователь вводит пароль и аккаунт обновляется.

Зачем нужны эти диаграммы? Если у нас есть море вариантов, то мы легко можем запутаться или не покрыть все возможные варианты тест-кейсами.

Features

The Star's streaming options are numerous. Highlights include aptX HD Bluetooth, AirPlay (with AirPlay 2 coming soon) and UPnP (network streaming), as well as embedded support for Spotify, Tidal and Chromecast.

It's also Roon-ready, and capable of working as part of a Naim multi-room set-up along with the company's other streamers and wireless speakers.

As for physical connections, there's a generous spread of analogue and digital inputs to accommodate external sources, including HDMI ARC to make connecting the Star to your TV easy.

You will be able to have a DAB/FM module fitted too (as a £150 cost option), but this won't be available until early next year. Overall the Uniti Star is a well-equipped unit, and we think Naim has covered every reasonable request.

MORE: Naim adds Roon-ready to Uniti all-in-one systems

Классика и современность

Как видите — внутренняя компоновка это, по сути, переосмысленная классика Hi-Fi. Традиционная схемотехника, разделение на блоки (пусть и внутри одного корпуса), экранирование, виброразвязка, балансное подключение.

Однако куда более интересны для меня были явления нашего времени. Изучая начинку, нетрудно заметить, что устройство создано с нуля — в нем нет, скажем, усилительных модулей от сторонних производителей или стандартных плат сетевого плеера. Фактически инженеры Naim самостоятельно разработали мини-компьютер и написали к нему свой собственный софт. Это задача непростая, и, если судить по рынку IT, далеко не каждый опытный в этой сфере производитель справляется с ней на отлично. При этом учтены не только вопросы удобства, но и вопросы качества.


Алюминиевый радиатор по совместительству является неотъемлемой частью WiFi антенны

На фронтальной панели установлен большой, яркий и по-настоящему качественный дисплей, на котором отображаются обложки альбомов. Получается очень наглядно, а встроенный датчик приближения позволяет гасить и включать его автоматически. Большой регулятор громкости, знакомый нам еще по устройствам Mu-so, очень удобен. При этом сам процесс регулировки не является цифровым. Цифровая ручка регулировки и не менее цифровое приложение управляют в итоге дискретным аналоговым регулятором, аналогичным тому, что используется в High-End-усилителе Statement.

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


Имея отличное приложение, Naim не забывает и про традиционные пульты ДУ

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


Настроек более чем достаточно, даже фон в интерфейсе можно поменять

А вот чем может похвастать Naim, так это возможностью подгружать информацию о воспроизводимом альбоме или треке в главное окно воспроизведения. Это, на мой взгляд, вполне компенсирует отсутствие физического носителя, цифровой буклет из Интернета получается даже побогаче, чем бумажная книжечка из люксового CD-релиза. Но не буду в это особенно углубляться — подобные вещи лучше оценивать по собственному опыту. К тому же надо еще упомянуть возможность объединения нескольких устройств серий Uniti и Mu-so в мультирум-систему и поддержку протокола ZigBee, позволяющую интегрироваться в умный дом.

Related posts
Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
The voice for you
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: