Содержание

Методы формализации требований: Use Case vs User Story

Статья посвящена методам формализации требований: Use Case и User Story. Мы рассмотрим оба метода, сравним их преимущества и недостатки. А также рассмотрим, когда и при каких ситуациях использовать каждый из них.

Читать далее


Всё что нужно знать про области видимости в Python

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

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

Для определения последовательности, в которой Python ищет значение переменной, используется правило LEGB. Это правило представляет собой порядок поиска переменных в следующих областях видимости: Local (локальная), Enclosing (вложенная), Global (глобальная) и Built-in (встроенная).

Читать далее


Правда ли, что разработчики не могут быть хорошими тестировщиками?

Тестирование — это процесс оценки программного приложения, а тестировщики — это профессионалы, которые участвуют в этом процессе. Они решают множество задач: пишут тест-кейсы, сообщают о найденных багах, настраивают среду, работают с требованиями и так далее. По данным исследования, рынок тестирования программного обеспечения уже превысил 40 миллиардов долларов США и, как ожидается, к 2027 году вырастет ещё на 7%. Тестировщики должны знать языки программирования, инструменты управления тестированием, инструменты автоматизации тестирования, обладать навыками управления проектами и многими другими навыками. 

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

Читать далее


Обнаружение объектов на изображении с помощью моделей YOLOv5 и YOLOv8

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

Одной из самых популярных архитектур нейронных сетей для таких задач, является YOLO (you only look once), созданная в 2015 году. С тех пор появилось довольно много версий данных алгоритмов. Последние выпуски сети предназначены для таких задач как распознавание, обнаружение и сегментация изображений. 

Мы будем рассматривать архитектуру YOLO только для задачи обнаружения объектов на изображении. В данном случае цель алгоритма — предсказать класс объекта и нарисовать ограничивающую рамку, которая определяет местоположение объекта на входном изображении.

Читать далее


10 лучших инструментов управления тестированием в 2024 году

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

  • PractiTest
  • Tuskr
  • TestRail
  • Tricentis qTest
  • Tricentis Test Management
  • Xray
  • Kualitee
  • TestMonitor
  • Testiny
  • aqua ALM

Подробнее о каждом из инструментов читайте в статье.

Перейти к подборке


Актуальны ли 14 принципов управления из книги Эдвардса Деминга «Выход из кризиса» 1982 года?

Думаю, что актуальны. Они отражают главные составляющие успешной системы управления, которую отстаивал Эдвардс Деминг (всемирно известный ученый, автор многочисленных работ в области менеджмента, управления качеством и эффективностью). Вот эти 14 принципов, позволяющих заметно повысить эффективность любой организации:

  1. Создавайте постоянную цель по улучшению продуктов и услуг, чтобы оставаться конкурентоспособными и обеспечить рабочие места.
  2. Усваивайте новую философию.
  3. Избавляйтесь от зависимости от проверок для достижения качества. Устраните необходимость в массовых проверках, изначально заложив качество в продукт.
  4. Прекратите практику заключения контрактов исключительно на основе стоимости
  5. Постоянно и непрерывно совершенствуйте систему производства и обслуживания, чтобы повысить качество и производительность, а значит, постоянно снижать затраты.
  6. Стройте систему обучения без отрыва от выполнения рабочих задач.
  7. Развивайте лидерство.
  8. Исключите страх, чтобы каждый мог эффективно работать на благо компании.
  9. Устраняйте барьеры между отделами.
  10. Откажитесь от слоганов, призывов и целей для сотрудников, требующих сведения к нулю ошибок и нового уровня производительности.
  11. (часть A) Отмените производственные стандарты (квоты) на рабочих местах. Замените их лидерством. (часть B) Откажитесь от управления по целям. Откажитесь от управления по цифрам, числовым целям. Замените лидерством.
  12. (часть А) Устраните барьеры, которые лишают работника с почасовой оплатой труда права на гордость за качество своей работы. (часть B) Устраните барьеры, лишающие людей, занимающих руководящие и инженерные должности, права на гордость за качество работы.
  13. Разработайте активную программу обучения и самосовершенствования.
  14. Привлекайте всех сотрудников компании к работе по проведению преобразований. Трансформация — это работа каждого.

В статье рассмотрим каждый из этих принципов подробнее.

Читать далее


Стартер пак в C: 3 полезные библиотеки для начинающих. Часть 1

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

  • GNU Scientific Library (GSL)
  • SQLite
  • SDL

Перейти к статье


Создание простейшего back-end на Node.js с использованием PostgreSQL

В этой статье мы продемонстрируем как создавать back-end приложения на Node.js c PostqreSQL. В качестве примера создадим простейший back-end на Node.js с использованием PostgreSQL.

Почему именно Node.js и PostgreSQL? Node.js имеет хорошую скорость и асинхронность, а PostgreSQL, в свою очередь, является мощной и надежной СУБД. Вместе они создают идеальный тандем для создания качественных приложений.

Читать далее


Каноничный TDD

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

Этот текст — мой ответ на комментарии в духе «TDD — лажа, потому что <что-то, что не TDD>», частый пример: «… потому что я ненавижу писать все тесты до того, как напишу код». Если вы что-то критикуете — критикуйте по делу.

  1. Напишите список тестовых сценариев, которые вы хотите покрыть.
  2. Превратите ровно один пункт из списка в реальный, конкретный, выполнимый тест.
  3. Измените код так, чтобы тест (и все предыдущие тесты) прошёл (добавляя пункты в список по мере их обнаружения).
  4. По желанию проводите рефакторинг, чтобы улучшить план реализации.
  5. Возвращайтесь к пункту #2, пока список не закончится.

Читать продолжение


Мой ТОП-5 лучших CSS-in-JS решений

В одном из проектов мне нужно было создать сложную админку для крупного клиента. Интерфейс требовал большо количества интерактивностей, а также поддержку различных тем и динамических стилей. Именно тогда я решил обратить свой взгляд на CSS‑in‑JS библиотеки, и это для меня стало большим открытием.

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

Здесь вот и приходят на помощь решения CSS‑in‑JS, объединяющие фичи JS и CSS. CSS‑in‑JS — это подход к стилизации, который позволяет писать стили прямо в JavaScript‑коде. Преимущества такого подхода:Linaria

  1. Изоляция стилей: компоненты получают свои собственные стили.
  2. Динамические стили: легко применять стили в зависимости от состояния компонента или пропсов.
  3. Поддержка тем: удобное управление темами и их переключение на лету.
  4. Интеграция с JavaScript.

В этой статье я хотел бы представить свой ТОП-5 лучших решений CSS‑in‑JS, которые я использовал:

  • Styled Components
  • Linaria
  • Emotion
  • Stitches
  • Vanilla-Extract

Узнать подробнее


Как работают изоляты в Dart?

При разработке Dart изначально была заложена идея полной независимости динамической памяти (objectstore / heap), снимка кода и event loop между изолятами. Одним из сценариев использования такой изоляции является разделение сервисного процесса виртуальной машины (vm-service, используется в том числе в DevTools) и основного кода, но также API для изолятов позволяет создавать собственные независимые процессы для выполнения кода с автономной памятью.

Но как на самом деле работают изоляты сейчас, и почему порты на самом деле существуют в модели «плоского мира»? Попробуем разобраться в этой статье.

Перейти к статье


Автоматизируем тестирование с помощью Lettuce

Для автоматизации проведения тестов QA существует множество различных инструментов, они предлагают разный функционал и обладают различными возможностями.

Lettuce — это инструмент тестирования на Python, который предоставляет высокоуровневый API для написания тестов. Он предоставляет понятный и простой интерфейс API для тестирования с такими функциями, как автоматическое редактирование, шаблоны тестов и многое другое. Lettuce также построен на базе платформы Behavior Driven Development (BDD), которая помогает упростить разработку тестов, предоставляя клиентам общие утверждения BDD, такие как @given или @when.

Читать далее


Реверсинг приложений под Android. Ищем уязвимости

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

Читать далее


TypeScript + React: путь к идеально типизированному коду

Многие частенько сталкиваются с проблемой поддержания типовой безопасности в React-проекте. Код разрастается, и управление типами становится всё сложнее. Ошибки, вызванные неправильной типизацией, приводят к крашам и длительным отладкам. Тогда приходит время внедрения TypeScript!

В статье рассмотрим как TypeScript может помочь решить проблемы с типизацией и сделать React-код идеально типизированным.

Читать далее


Кратко про сетевые протоколы в Golang: TCP, QUIC и UDP

В этой статье мы кратко рассмотрим то, как реализовать такие протколы, как TCP, UDP и QUIC в Golang.

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

  • Надежность: подтверждения и повторная отправка потерянных пакетов.
  • Упорядоченность: передача данных в том порядке, в котором они были отправлены.
  • Контроль перегрузки: предотвращение коллапса сети за счет контроля скорости передачи данных.

UDP — это простой протокол без установления соединения, который не гарантирует доставку, порядок или интегральность данных. Но зато, он дает минимум задержки. Основные черты:

  • Отсутствие процесса установления соединения уменьшает задержку.
  • Меньше накладных расходов, больше производительности.

QUIC — это уже современный протокол, разработанный Google и стандартизированный IETF, который стремится улучшить производительность соединений, предоставляемых TCP, с добавлением функций безопасности, аналогичных TLS/SSL. QUIC работает поверх UDP и предназначен для снижения задержек соединения, поддерживает мультиплексирование потоков без взаимного блокирования и управляет потерей пакетов более лучше, чем TCP. Основные черты:

  • Уменьшение задержек:уменьшает задержку соединения за счет использования 0-RTT и 1-RTT рукопожатий.
  • Безопасность: включает встроенное шифрование на уровне соединений.
  • Мультиплексирование: позволяет нескольким потокам данных обмениваться данными в рамках одного соединения без взаимной блокировки.

Читать подробнее


Как синхронизировать потоки в Java

Многопоточность — это не просто возможность приложения выполнять несколько задач одновременно, это его способность делать это эффективно и безопасно. В Java многопоточность неотделима от синхронизации, ведь именно она помогает управлять состоянием разделяемых ресурсов между потоками.

Всё начинается с потребности в быстродействии и масштабируемости. C несколькими потоками можно обрабатывать больше операций одновременно.

В этой статье мы рассмотрим, как синхронизировать потоки в Java.

Читать далее


Разгоняем C++ с кастомными аллокаторами

В этой статье мы обратим свой взор на производительность в C++, и как ни странно, нашими главными героями станут не библиотеки или сложные алгоритмы, а казалось бы, простые аллокаторы. Но не просто аллокаторы, а кастомные, которые могут заметно ускорить работу приложений.

Читать далее

OTUS на Хабр: лучшие статьи за июль

Чтобы не пропускать свежие статьи в блоге OTUS на Хабр, подписывайтесь на страницу блога.