Русский
Русский
English
Статистика
Реклама

Методологии разработки

Справочная разбираемся с принципами SOLID

06.10.2020 22:07:22 | Автор: admin
Расскажем, кто их придумал и в чем они заключаются. Также поговорим о критике этого подхода о том, почему некоторые разработчики отказываются следовать SOLID-методологиям.


Фото nesa Unsplash

Акроним


SOLID обозначает пять первых принципов объектно-ориентированного программирования:

  • Единственной ответственности (SRP). Один модуль/класс одна задача. Кажется, что-то такое мы уже обсуждали, когда разбирали философию Unix вместе с принципами KISS.
  • Открытости/закрытости (OCP). Компоненты расширяемые и немодифицируемые. Его основоположником считают Бертрана Мейера (Bertrand Meyer) автора Eiffel.
  • Подстановки (LSP). Разработчик должен иметь возможность заменить тип на подтип, не сломав систему. Иерархию типов нужно тщательно моделировать, чтобы избежать путаницы. Принцип предложила Барбара Лисков (Barbara Liskov) один из авторов Clu.
  • Разделения интерфейса (ISP). Специализация, чтобы развязать их и программные сущности, плюс упростить рефакторинг. Этот принцип определил Роберт Мартин (Robert Martin) международно признанный эксперт в области разработки.
  • Инверсии зависимостей (DIP). Управляющие компоненты должны быть абстрагированы от модулей нижних уровней, а детали не зависеть от абстракций и модулей верхних уровней. Роберт Мартин предложил и этот пункт (вот текст его оригинальной публикации).

Если следовать этому и структурировать классы и функции так, чтобы SOLID-принципы выполнялись, можно с высокой вероятностью получить надежный, понятный и легко поддерживаемый код. Кстати, здесь есть примеры, иллюстрирующие работу каждого из принципов.

Кто вывел SOLID


Как вы уже успели догадаться, за основную часть принципов отвечал именно Дядя Боб. Комплексно он описал их в работе Design Principles and Design Patterns 2000 года, а сам акроним SOLID уже позже предложил инженер Майкл Фэзерс (Michael Feathers). Если интересно, у Майкла есть книга, где он дает рекомендации о том, как оживить legacy-систему и не сойти с ума по ходу дела.


Фото Oskar Yildiz Unsplash

Задача SOLID способствовать разработке приложений, которые легко поддерживать и расширять в течение долгого времени. Но этот свод рекомендаций часто подвергают критике.

За что критикуют


Иногда эти принципы называют слишком расплывчатыми, что усложняет их практическое использование. Программист и писатель Джоэл Спольски (Joel Spolsky) в одном из выпусков The StackOverflow Podcast также отметил, что SOLID-методология слишком утопична и вынуждает разработчиков тратить время на избыточный код фактически ради галочки.

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

Есть мнение, что SOLID-код имеет слабую связность и его легко тестировать, но очень сложно понимать (в критике используется слово unintelligible). Программисту приходится писать множество детализированных интерфейсов и небольших классов, которые больше отвлекают и путают, чем помогают наладить какую-то систему. С этим утверждением соглашаются многие, кто считает, что достаточно фокусироваться на простоте кода, чтобы его могли поддерживать другие разработчики.


Фото Kevin Canlas Unsplash

В тематическом треде на Hacker News говорят и о том, что гораздо большее значение имеет выбор архитектуры, технологического стека и управление зависимостями проекта, а не основополагающие принципы, по которым строится его написание. Здесь вновь указывают на излишнюю сложность старта с комплексного проектирования системы, указывая уже на принцип YAGNI или You aren't gonna need it. В какой-то степени это очередной ремикс классического KISS-подхода.

Стоит признать, что есть и множество высказываний в защиту SOLID. Так, один из резидентов HN говорит, что следование эти принципам поможет быстро заменить условную библиотеку, если на уровне абстракции что-то пойдет не совсем так. Достаточно будет удостовериться в выполнении тестов для новой реализации и на этом все, максимум дополнительно проверить зависимости для старой версии класса и по мере необходимости использовать доработанный, чтобы тесты прошли успешно. Тогда в коде не будет и излишней сложности, а тем, кто будет заниматься им впоследствии, не будет грозить так называемый синдром неприятия чужой разработки.

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



О чем мы пишем в корпоративном блоге 1cloud.ru:

Необычные приглашения на собеседование от HTTP-заголовка до сообщения в поисковике
Почему разработчики дороже денег, как их сохранить и приумножить
Группа разработчиков предлагает перейти на UTF-8


Подробнее..

Из песочницы Принципы PDD Panic Driven Development

02.09.2020 18:14:51 | Автор: admin
Привет, Хабр! Уважаемые читатели, сие есть перевод замечательной статьи за авторством Мауро Фрезза. Надеюсь, он доставит вам истинное наслаждение и поддержит вас в курсе современных тенденций в методологиях разработки.

image

После того как прошла волна успеха методологий разработки из семейства Agile, проверку временем выдержали лишь немногие из них. Но среди них есть одна особая техника: PDD Panic Driven Development Разработка через панику.

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

Чем новее задача тем выше приоритет


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

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

Пишем ровно столько кода, сколько требуется для результата


Разработчики зарабатывают на жизнь написанием кода. Ошибки можно исправить только кодом. Обсуждение дизайна и UX только замедляет разработку. Поэтому поступаем так: Пишем решение, убеждаемся что фикс рабочий. Если всё ок, то проблема решена. Едем дальше.

Не надо торопиться с тестированием


После внедрения фикса тесты нужно планировать в виде отложенных задач. Тесты, конечно, полезны, но не надо перегибать. О них можно позаботиться позже. Создайте тикет и закиньте его в бэклог. Для проверки работоспособности вполне можно обойтись и ручным тестированием.

Доверьтесь чувствам


Программирование это искусство. Неотъемлемой частью любого искусства являются инстинкты и интуиция. Слушай своё сердце. Пиши решение. Смелее выкатывай его. Только смелым улыбается удача.

Процесс должен приспособиться под вас


Любой процесс разработки, тестирования и выпуска программного обеспечения это просто набор соглашений и правил. Они не высечены на камне. Критические же исправления требуют гибкости. Вполне ожидаемо, что для повышения скорости процессы будут изменены под нужды команды.

Всё исходит от менеджера


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

Заключение


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

Она находит применение в компаниях по всему миру и является фундаментом для гибкого и бескомпромиссного программирования.
Подробнее..

Перевод Меньше сложного тестирования, больше умного тестирования

28.04.2021 16:12:49 | Автор: admin

В связи с набором учащихся на курс "QA Engineer" подготовили перевод материала.

Приглашаем также всех желающих на демо-занятие Методологии разработки. На этом вебинаре рассмотрим методологии разработки scrum, kanban, waterfallи изучим роль тестирования в процессе разработки.


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

Мы должны исключить из наших проектов следующее: "Тестирование может начаться только после того, как кодирование будет завершено", мы должны рассмотреть инновационные способы проведения тестирования на более раннем этапе. Но, как только мы осознаем наше предположение, мы должны двигаться дальше: "Есть ли какой-нибудь способ, которым я мог бы тестировать "по-умному"?". Мы можем переосмыслить нашу деятельность по тестированию и помочь нашей команде.

Работать, как одна команда

В команде Scrum "Тестировщики" больше не являются "Тестировщиками", а являются "только" членами команды, основной специализацией которой является "Тестирование". Разработчики" - это любые члены команды, которые могут кодировать. Каждый член команды имеет общую цель и считается ответственным за достижение этой цели. Члены команды с различными первичными специализациями должны сотрудничать для достижения этой цели.

Независимость тестирования не означает независимость тестировщиков.

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

Тренинги по тестированию, сообщество тестировщиков

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

Цель отдела тестирования сделать это обучение возможным. Обсуждение и обмен опытом необходимы, например, путем создания сообщества тестировщиков. Это могут быть люди, заинтересованные в тестировании, а не только те, у кого тестирование является их основной специализацией. Люди этого сообщества могут встретиться, а затем поучиться друг у друга или пообщаться в чате или в wiki.

Рассмотрим сообщество тестировщиков. Вы можете создать обучающуюся организацию, которая поможет вашим тестировщикам обмениваться идеями и помогать друг другу. Предположим, что QA менеджер (менеджер-учитель) станет лидером практики в организации. В этом случае этот человек будет обучать навыкам, которые необходимы тестировщикам для того, чтобы стать сильнее и лучше справляться с постоянно меняющейся обстановкой.

"Менеджеры как учителя принципов бережливого мышления, проводящие время, обучая и тренируя других".

Умное тестирование

Мы делаем "умное" тестирование? Для некоторых команд тестировщиков это может быть трудным вопросом; если вы спросите о других областях, на это может найтись ответ.

"Как бы иронично это ни казалось, задача тестировщика проверить как можно меньше. Тестировать меньше, но тестировать "умнее"".

ФРИДРИКО ТОЛЕДО

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

Проверка это хорошо. Внедрение механизмов мониторинга может принести реальную пользу нашим клиентам; рассмотрим оба подхода как сдвиг влево раннее тестирование и как сдвиг вправо мониторинг систем и предотвращение возможных сбоев. Критическим аспектом "умного" тестирования является добавленная ценность; наши тесты должны это обеспечить; в противном случае, мы просто делаем сложное тестирование.

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

Умное тестирование, качественные продукты.

  • Надежный план тестирования Наличие плана должно иметь решающее значение для успеха.

  • Внедрение автоматизации тестирования Сосредоточение внимания на повторяющихся задачах и стратегии автоматизации тестирования на основе рисков (Не автоматизируйте задачи, которые не должны повторяться). Обратите внимание на визуальную автоматизацию тестирования.

  • Улучшение качества кода Никакие коммиты не остаются не протестированными.

  • Непрерывное обучение Исследовательское тестирование позволяет обнаружить важную информацию.

  • Performance / Load Testing & Security Testing Чтобы избежать любого сбоя или любого риска для безопасности.

  • Метрики и Dashboards Отслеживание ключевых показателей качества (например, дефектов производства, анализа рисков, дополнений к требованиям и т.д.). Постоянное совершенствование процесса обеспечения качества.

  • Мониторинг возможного риска на производстве Тестовый мониторинг на производстве.

Заключение

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

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

Полезная литература

Извлеченные уроки в программном тестировании (Lessons Learned in Software Testing) Cem Kaner, James Bach, and Bret Pettichord.

Трансформация Тестирования Непрерывное Тестирование на Предприятии для Agile и DevOps (Enterprise Continuous Testing Transforming Testing for Agile and DevOps) Wolfgang Platz, Cynthia Dunlop.

Гибкое мышление (Lean Thinking) Drs. Womack and Jones


Узнать подробнее о курсе "QA Engineer"

Смотреть вебинар Методологии разработки

Подробнее..

Перевод Процесс это не продукт антиманифест методологии разработки ПО

19.06.2021 14:07:57 | Автор: admin

TLDR:

Антиманифест методологии разработки ПО

Процесс это не продукт

Руководство, а не менеджмент

Диалог, а не диктат


Вот и всё, остальное вы можете додумать сами, но если хотите, продолжайте чтение.

Процесс это не продукт


За свою (очень) долгую карьеру в технологической сфере я ощутил на себе большинство методологий разработки ПО, и этот опыт показал мне, что они больше похожи на обязанность, а не на помощь. Скажу больше: мне кажется, что избыток методологии гораздо опаснее её недостатка. Однако культ Одной Истинной Методологии продолжает процветать, и стоит поразмыслить над тем, почему так происходит.

Если встретишь Будду на дороге убей его!

Думаю, что одна из причин заключается в том, что многие/большинство/все из нас втайне подозревают, что мы делаем всё не так, и есть кто-то, делающий всё правильно; если мы последуем его совету, то тоже будем делать правильно, и все ошибочные оценки, баги, плохой код и т.д, и т.п, исчезнут.

Не нужно так думать, они никуда не денутся.

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

Если можешь делать, то делай. Если не можешь, то управляй.

Однако ещё одна причина это бесконечное разрастание менеджмента среднего звена, поражающее и крупные, и мелкие компании. Если компания растёт, то нам кажется, что ей нужно больше менеджмента. И ещё. И ещё. Почему? Каков карьерный путь менеджера? Он нанимает менеджмент более низкого звена. Хуже того компании поддаются этому, они склонны укреплять свою иммунную систему. Любые попытки изменения статуса-кво менеджмента будут угрозой самим основам культуры менеджмента. Не говоря уже обо всех этих должностях в менеджменте. Нужны инновации? Отлично. Давайте наймём руководителя отдела инноваций. И, разумеется, менеджменту обязательно нужно чем-то заниматься, и это процесс, отслеживание спринтов, доски trello, что угодно, чтобы заполнить восемь рабочих часов.

Руководство, а не менеджмент


И это приводит нас к следующему пункту манифеста: к лидерству. Знаете, такому настоящему руководству. Ты приходишь и показываешь путь вперёд. Лично каждому, чётко, по одному программисту за раз, и не только то, что они должны знать, но и спринты с use cases. Нужно иметь достаточно технических возможностей, чтобы обучать, готовить и мотивировать. И учиться самому. Сообщать всем, вплоть до уборщиков, куда и зачем мы движемся. Не один раз, а постоянно. Организации, которые будут это делать, окажутся самоуправляемыми. Почему? Потому что люди (даже программисты) умны. Если даёшь им информацию и полномочия, они думают, правильно расставляют приоритеты, не ругаются из-за смены целей и не особо нуждаются в менеджменте. Если сделать всё правильно, то окажется, что вы следуете за коллективом, а не ведёте вперёд, потому что культура команды становится больше, чем любой из её участников.

Диалог, а не диктат


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

Если всё это заставило вас ощутить неудобство, то это хорошо. Для того и написана эта статья.

P.S.: Никакой Jira.



На правах рекламы


Многие клиенты уже оценили преимущества серверов от Вдсины.
Мы предлагаем выделенные и виртуальные серверы. Максимальная конфигурация позволит реализовать практически любую идею 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe. Закажите и вы!

Подписывайтесь на наш чат в Telegram.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru