Не всегда задачи решаются в терминах языка программирования. И когда дело доходит до реализации, иногда "волосы становятся дыбом" от мысли, как это придется делать на конкретном языке. В данном докладе автор "изольет душу" на тему идиом в языках программирования, чем они отличаются от паттернов проектирования, рассмотрит преимущества и недостатки их использования, а также подробно рассмотрит несколько наиболее популярных идиом для C++.
Доклад на hotcode.org о инструментах и методиках которые помогают нам повышать и следить за качеством PHP кода.
Среди затронутых тем:
- Стандарты в коде
- Средства для статического анализа кода.
- Git хуки
- Непрерывная интеграция
- IDE
- Code review
- почему PHP программисты снискали дурную славу;
- что делать, чтобы стать хорошим программистом;
- как писать идеальный код;
- что такое командная разработка проекта;
- учет позиции бизнеса при разработке проекта;
- основные задачи, который должен решать программист;
Александр Сербул. Прикладное XP в «1С-Битрикс»: как развивать продукт более 1...ScrumTrek
В компании «1С-Битрикс более 10 лет успешно используется плеяда Agile методологий как для управления продуктом, так и для развития технологической платформы: от XP до Model Storming и Story Mappings, от глубокого проникновения всех «бойцов» общими командными целями и интенсивных визуальных коммуникаций без ТЗ, до выполнения топ-менеджерами компании интегрирующих ролей Scrum Master/ProductOwner, вплоть до парного программирования с генеральным директором. Самобытное и глубокое проникновение в культуру команды принципов Agile Manifesto, уважение клиента, возведенное в культ, с искренним желанием решить его технологические задачи, практическое стремление к техническому совершенству. Мы расскажем об этом, поделимся собственным опытом и инструментами, расскажем что работает лучше и когда, а что не взлетает ни при каких условиях. Особое внимание уделим особенностям применения Agile к задачам, требующим глубокого системного анализа и проектирования.
Доклад на hotcode.org о инструментах и методиках которые помогают нам повышать и следить за качеством PHP кода.
Среди затронутых тем:
- Стандарты в коде
- Средства для статического анализа кода.
- Git хуки
- Непрерывная интеграция
- IDE
- Code review
- почему PHP программисты снискали дурную славу;
- что делать, чтобы стать хорошим программистом;
- как писать идеальный код;
- что такое командная разработка проекта;
- учет позиции бизнеса при разработке проекта;
- основные задачи, который должен решать программист;
Александр Сербул. Прикладное XP в «1С-Битрикс»: как развивать продукт более 1...ScrumTrek
В компании «1С-Битрикс более 10 лет успешно используется плеяда Agile методологий как для управления продуктом, так и для развития технологической платформы: от XP до Model Storming и Story Mappings, от глубокого проникновения всех «бойцов» общими командными целями и интенсивных визуальных коммуникаций без ТЗ, до выполнения топ-менеджерами компании интегрирующих ролей Scrum Master/ProductOwner, вплоть до парного программирования с генеральным директором. Самобытное и глубокое проникновение в культуру команды принципов Agile Manifesto, уважение клиента, возведенное в культ, с искренним желанием решить его технологические задачи, практическое стремление к техническому совершенству. Мы расскажем об этом, поделимся собственным опытом и инструментами, расскажем что работает лучше и когда, а что не взлетает ни при каких условиях. Особое внимание уделим особенностям применения Agile к задачам, требующим глубокого системного анализа и проектирования.
Евгений Джамалов. Agile в условиях мульти-вендорности и распределённых команд.ScrumTrek
Мы запустили 12 команд за 9 месяцев. У нас дружат 7 вендоров. Разрабатываем 4 больших продукта. Люди разбросаны по 7-ми локациям. В команде может быть до 4 представителей вендоров. Как минимум, по 1 человеку от другого вендора в команде. Сказка? Этот доклад о том, как мы их "дружили" и синхронизировали. Мой опыт и доклад интересны тем, что я столкнулся с проблемой, которой не было найдено никакого решения в свободном доступе. Мне хотелось бы в формате сказки, поделится с вами тем, как именно мы строили нашу работу и отношения для достижения результата, а так же рассказать, как и почему мы оказались в такой ситуации. К сожалению, много придётся оставить за кадром... так что - спрашивайте!
Алексей Трошин. Менеджер не нужен: быстрые шаблоны правильных коммуникацийScrumTrek
Алексей Трошин.
Первый коммерческий сайт создал в 2002 году, первый интернет-магазин вывел в плюс в 2005, участвовал в развитии крупнейших порталов Рунета - АВТО.РУ (www.auto.ru) и Банки.ру (www.banki.ru), развивал конструктор сайтов Сетап (www.setup.ru), создавал первый российский интернет-магазин, вышедший на IPO - Ютинет.ру (www.utinet.ru), поучаствовал в развитии SaaS-системы управления задачами Мегаплан (www.megaplan.ru). Успел нанести непоправимую пользу нескольким стартапам, запустить новые продукты в B2B-Center.ru. Сейчас в ФИНАМ. Выступал на AgileDays в 2012, 14, 15, 16, Agile с 2009-го года (CSM, CSPO), в работе и по жизни :)
“Обезьянье тестирование” в мобильных проектах, Роман Подолян
Хотите уйти от проторённых путей, проверить приложение самыми разнообразными, случайными последовательностями действий? Задать ему встряску чтобы проверить его на выносливость? Сделать с ним то, что даже не собирались? Отдайте его “обезьяне”.
Какие навыки наиболее востребованы и перспективны для разработчика? Давайте посмотрим, что компании ценят уже сейчас и как научиться всегда быть в тренде. Результаты исследования рынка труда техническими специалистами. Детализация анализа с уровня языков программирования до отдельных технологий и навыков.
Презентация доклада "Рейтинг навыков .NET-разработчика" Александра Рахманова на конференции Go# Moscow 15 ноября 2014 года (http://gosharp.ru). См. подробнее в заметке "Рейтинг навыков .NET-разработчика" (http://wp.me/p5n7k3-7) в официальном блоге SkillsWiki.
Картинки к моему рассказу о том, как мы делаем Банки.ру. Некоторые слайды очень неоднозначны без текста. Тезисы тут: http://nastachku.ru/lectures?lecture_id=630#lecture_630
Видео тут https://www.youtube.com/watch?v=m5QuiTZwMrU
Keyword-driven testing, Геннадий Алпаев
Keyword-driven подход к автоматизации тестирования был описан в литературе более 10ти лет назад, однако в русскоязычных источниках по этой теме информации довольно мало. В докладе Геннадий расскажет о том, в чем заключается подход, когда применяется, его достоинства и недостатки, а также покажет пример практической реализации Keyword-driven подхода для простого тестируемого приложения с помощью TestComplete и SilkTest.
Курс молодого бойца-автоматизатора – как стать ветераном и остаться в живыхautomated-testing.info
Курс молодого бойца-автоматизатора – как стать ветераном и остаться в живых, Андрей Ребров
Сейчас, когда интерес к автоматизации более чем велик, многие команды задумываются над вопросом – нужна ли автоматизация им самим? Нужно ли TDD? Какой CI сервер поставить? Какую автоматизацию применить? Да и вообще, какой первый шаг сделать?
В своем докладе я постараюсь рассказать основные приемы внедрения автоматизации:
- постановка цели автоматизации
- первые шаги
- анализ и метрики
- коммуникации
Конечной темой доклада будет переход к DevOps.
Презентация для ЮТИ ТПУ "Путь отраслевого переводчика"Eugene Bartov
В данной презентации была дана попытка обозначить специфику работы отраслевого письменного переводчика и возможное место Школы отраслевых переводчиков "Альянс ПРО" в пути становления будущего специалиста. Презентация предназначена для студентов, планирующих после окончания вуза работать по профессии "технического переводчика".
В презентации использованы слайды шутливых "Правил письменного переводчика", все слайды можно посмотреть здесь: https://www.facebook.com/media/set/?set=a.488103684633144.1073741828.100003005507518&type=1&l=34488f09ea
Освоение новых тематик в научно-технических переводах с привлечением специали...Eugene Bartov
Модель работы с экспертами-практиками в узкоспециализированных проектах в БТП "Альянс ПРО". Доклад подготовлен для Translation Forum Russia 2012 (г. Казань)
Быстрое расширение Robot Framework под свои нужды с использованием Pythonautomated-testing.info
Быстрое расширение Robot Framework под свои нужды с использованием Python, Михаил Поляруш
Когда мы начинаем заниматься автоматизацией тестирования ПО, мы редко знаем и понимаем, что нам надо будет делать, а тем более, как это нужно реализовать. Потому, выбираем самые простые решения, которые иногда даже не подразумевают программирования. Вы считаете, что успешная автоматизация может быть без программирования? Я уверен, что НЕТ, и с уверенностью могу сказать, что процесс автоматизации с помощью python и RobotFramework может значительно упростить Вам жизнь. Убедитесь в том, что архитектура RobotFramework очень гибкая, а python – лучший друг автоматизатора. Вас ждет увлекательная теория и много практики в живую.
Картинки к моему рассказу о том, что такое фреймворки и с чем их едят, что лучше не есть и как выбрать приправы для приготовления. Тезисы тут: http://backendconf.ru/2016/abstracts/2123.html
Евгений Джамалов. Agile в условиях мульти-вендорности и распределённых команд.ScrumTrek
Мы запустили 12 команд за 9 месяцев. У нас дружат 7 вендоров. Разрабатываем 4 больших продукта. Люди разбросаны по 7-ми локациям. В команде может быть до 4 представителей вендоров. Как минимум, по 1 человеку от другого вендора в команде. Сказка? Этот доклад о том, как мы их "дружили" и синхронизировали. Мой опыт и доклад интересны тем, что я столкнулся с проблемой, которой не было найдено никакого решения в свободном доступе. Мне хотелось бы в формате сказки, поделится с вами тем, как именно мы строили нашу работу и отношения для достижения результата, а так же рассказать, как и почему мы оказались в такой ситуации. К сожалению, много придётся оставить за кадром... так что - спрашивайте!
Алексей Трошин. Менеджер не нужен: быстрые шаблоны правильных коммуникацийScrumTrek
Алексей Трошин.
Первый коммерческий сайт создал в 2002 году, первый интернет-магазин вывел в плюс в 2005, участвовал в развитии крупнейших порталов Рунета - АВТО.РУ (www.auto.ru) и Банки.ру (www.banki.ru), развивал конструктор сайтов Сетап (www.setup.ru), создавал первый российский интернет-магазин, вышедший на IPO - Ютинет.ру (www.utinet.ru), поучаствовал в развитии SaaS-системы управления задачами Мегаплан (www.megaplan.ru). Успел нанести непоправимую пользу нескольким стартапам, запустить новые продукты в B2B-Center.ru. Сейчас в ФИНАМ. Выступал на AgileDays в 2012, 14, 15, 16, Agile с 2009-го года (CSM, CSPO), в работе и по жизни :)
“Обезьянье тестирование” в мобильных проектах, Роман Подолян
Хотите уйти от проторённых путей, проверить приложение самыми разнообразными, случайными последовательностями действий? Задать ему встряску чтобы проверить его на выносливость? Сделать с ним то, что даже не собирались? Отдайте его “обезьяне”.
Какие навыки наиболее востребованы и перспективны для разработчика? Давайте посмотрим, что компании ценят уже сейчас и как научиться всегда быть в тренде. Результаты исследования рынка труда техническими специалистами. Детализация анализа с уровня языков программирования до отдельных технологий и навыков.
Презентация доклада "Рейтинг навыков .NET-разработчика" Александра Рахманова на конференции Go# Moscow 15 ноября 2014 года (http://gosharp.ru). См. подробнее в заметке "Рейтинг навыков .NET-разработчика" (http://wp.me/p5n7k3-7) в официальном блоге SkillsWiki.
Картинки к моему рассказу о том, как мы делаем Банки.ру. Некоторые слайды очень неоднозначны без текста. Тезисы тут: http://nastachku.ru/lectures?lecture_id=630#lecture_630
Видео тут https://www.youtube.com/watch?v=m5QuiTZwMrU
Keyword-driven testing, Геннадий Алпаев
Keyword-driven подход к автоматизации тестирования был описан в литературе более 10ти лет назад, однако в русскоязычных источниках по этой теме информации довольно мало. В докладе Геннадий расскажет о том, в чем заключается подход, когда применяется, его достоинства и недостатки, а также покажет пример практической реализации Keyword-driven подхода для простого тестируемого приложения с помощью TestComplete и SilkTest.
Курс молодого бойца-автоматизатора – как стать ветераном и остаться в живыхautomated-testing.info
Курс молодого бойца-автоматизатора – как стать ветераном и остаться в живых, Андрей Ребров
Сейчас, когда интерес к автоматизации более чем велик, многие команды задумываются над вопросом – нужна ли автоматизация им самим? Нужно ли TDD? Какой CI сервер поставить? Какую автоматизацию применить? Да и вообще, какой первый шаг сделать?
В своем докладе я постараюсь рассказать основные приемы внедрения автоматизации:
- постановка цели автоматизации
- первые шаги
- анализ и метрики
- коммуникации
Конечной темой доклада будет переход к DevOps.
Презентация для ЮТИ ТПУ "Путь отраслевого переводчика"Eugene Bartov
В данной презентации была дана попытка обозначить специфику работы отраслевого письменного переводчика и возможное место Школы отраслевых переводчиков "Альянс ПРО" в пути становления будущего специалиста. Презентация предназначена для студентов, планирующих после окончания вуза работать по профессии "технического переводчика".
В презентации использованы слайды шутливых "Правил письменного переводчика", все слайды можно посмотреть здесь: https://www.facebook.com/media/set/?set=a.488103684633144.1073741828.100003005507518&type=1&l=34488f09ea
Освоение новых тематик в научно-технических переводах с привлечением специали...Eugene Bartov
Модель работы с экспертами-практиками в узкоспециализированных проектах в БТП "Альянс ПРО". Доклад подготовлен для Translation Forum Russia 2012 (г. Казань)
Быстрое расширение Robot Framework под свои нужды с использованием Pythonautomated-testing.info
Быстрое расширение Robot Framework под свои нужды с использованием Python, Михаил Поляруш
Когда мы начинаем заниматься автоматизацией тестирования ПО, мы редко знаем и понимаем, что нам надо будет делать, а тем более, как это нужно реализовать. Потому, выбираем самые простые решения, которые иногда даже не подразумевают программирования. Вы считаете, что успешная автоматизация может быть без программирования? Я уверен, что НЕТ, и с уверенностью могу сказать, что процесс автоматизации с помощью python и RobotFramework может значительно упростить Вам жизнь. Убедитесь в том, что архитектура RobotFramework очень гибкая, а python – лучший друг автоматизатора. Вас ждет увлекательная теория и много практики в живую.
Картинки к моему рассказу о том, что такое фреймворки и с чем их едят, что лучше не есть и как выбрать приправы для приготовления. Тезисы тут: http://backendconf.ru/2016/abstracts/2123.html
Метод анализа C/C++ программ. Использование LLVM и декомпиляции в таком анализе. Проблемы декомпиляции и возможные способы применения анализа. Примеры.
The method of analysis of C/C++ programms. The usage of LLVM and decompilation in this analysis. Problems of decompilation. Possible ways of usage of analysis. Examples.
А давайте будем многопоточить и масштабировить! - записки сумасшедшего №0COMAQA.BY
Хочешь, чтобы веб-сервисы работали быстрее? Тогда используй Add to dictionary и масштабируемость в "облаке". В докладе кратко представлен проектный опыт сокращения времени тестирования SOAP+REST WS на основе multithreading и возможности масштабируемости в Azure.
В топку Postman - пишем API автотесты в привычном стекеCOMAQA.BY
Postman - отличный инструмент для автоматизации тестирования API, но он требует дополнительного софта, дополнительных навыков и дополнительных настроек. Есть ли способ обойти эти ограничения и перейти сразу к автоматизации API-тестов в привычной среде, если вы уже разрабатываете автотесты на Java? Конечно! Давайте поговорим о способах автоматизации API-тестов с использованием Java
Автоматизация тестирования API для начинающихCOMAQA.BY
Потенциальные сложности в тестировании веб-сервисов. Мы поговорим об основах тестирования API, докладчик поделится опытом создания фреймворка для эффективной организации автоматизации регрессионного тестирования с нулся и в сжатые сроки. Уверен: идеи и практический опыт докладчика будет небесполезен слушателям, особенно тем, кому предстоит заняться автоматизацией тестирования веб-сервисов «на голом месте».
Лекция 3. Распределённая файловая система HDFSTechnopark
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Career boost: как джуниору случайно стать лидом и не получить от этого удовол...COMAQA.BY
Мы поговорим о неоправданно быстром карьерном росте тестировщика и потенциальных проблемах, которые могут встретиться на его пути, проговорим личный опыт докладчика и, по возможности, сделаем выводы: как остаться единственным тестировщиком – «выжившим», получить крупный проект из моря сервисов и не сойти с ума; как совмещать тестирование нового функционала, поддержку билдов, тестового окружения и контроль релизного процесса; как за год не найти опытного тестировщика в команду и успешно взять не-айтишника и «интегрировать» его.
Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Р...DevDay
- Часть первая. SQL и программный код - как, имея очень простую задачу, получить очень плохое решение.
- Антракт. Почему нам неудобно писать SQL
- Часть вторая. Почему существующие решения - отстой.
- Антракт. Мечты об идеальном инструменте разработки SQL
- Часть третья. История велосипеда, или свой инструмент самый лучший
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
На примере некоторых архитектурных решений Крипты Дмитрий расскажет о способах реализации полиморфного поведения в программах на C++, о преимуществах и недостатках этих способов, а также о новых возможностях C++11.
Слайды одноименного доклада с конференции "C++ Russia 2018". В докладе речь идет о том, насколько C++ мешает и насколько C++ помогает в разработке акторного фреймворка для C++.
Уменьшение влияния человеческого фактора при разработке бизнес приложенийngrebnev
В этом докладе мы постараемся рассказать о принципах разработки инструментов для написания бизнес-логики, позволяющих сократить количество ошибок. Речь пойдет о нескольких практиках, принятых в отделе технологического развития нашей компании. Принципы будут проиллюстрированы на примере инструментария компании для платформы Microsoft .NET.
Максимум статических проверок. Под статическими проверками мы понимаем проверки времени компиляции. Этот принцип является важным, но, к сожалению, зачастую недооценивается разработчиками инструментария разработки. Проверки времени компиляции могут отлавливать большой спектр ошибок. Есть и другая особенность – это удобство. Ошибки времени исполнения сложнее воспринимаются, труднее найти причину ошибки.
Разнообразие и декларативность проверок. Проверки общего назначения удобно задавать в декларативном виде. При этом сами проверки должен осуществлять фреймворк. За счет уменьшения дублирования и декларативности снижается вероятность ошибок. Проверки должны быть, как техническими, так и уровня доменной модели. Мы будем говорить о проверках уровня доменной модели.
Возможность анализа декларативных проверок. Любые ограничения порождают некоторую модель. Эту модель (проверки) можно формально верифицировать. Вообще, проблема доказательства большинства свойств программы невозможна. Этот вопрос выходит далеко за рамки нашего доклада. Но существует возможность верификации более слабых (менее выразительных моделей).
Во второй части мы обсудим функционал, который мы называем "состояния". Эти "состояния" образуют что-то вроде автомата, или структуру Крипке. Так вот, существуют алгоритмы проверки выполнимости темпоральных логик на таких структурах.
Cтатический анализ кода (на примере DDD-фреймворка)ngrebnev
Они расскажут как при разработке бизнес-приложений в модели Domain-driven design они предупреждают ошибки программиста с помощью статического анализа кода и доменной модели. А именно: возможности ORM-платформы по статическому анализу, преимущества широкого использования Linq, декларативных ограничений, модель состояний и формальной верификации элементов доменной модели.
Они разберут, в чем заключается удобство разработчика по использованию статического анализа и простота применения механизмов для задания формальных ограничений на модель предметной области. Интеграция средств статического анализа ORM в среду разработки, невозможность игнорирования ошибок, гарантия прохождения всех статических проверок до первого запуска программы. Ограниченные возможности запросов Linq к модели предметной области по сравнению с Linq to Objects и пути их преодоления.
Они расскажут, как обстоят дела с аналогичными механизмами в других ORM-системах и почему они решили реализовать собственную платформу для поддержки разработки в рамках DDD.
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
На примере некоторых архитектурных решений Крипты Дмитрий расскажет о способах реализации полиморфного поведения в программах на C++, о преимуществах и недостатках этих способов, а также о новых возможностях C++11.
"IntelliJ IDEA и Android Studio для Android-разработчиков". Филипп Торчинский...Yandex
В мае 2013 года Google анонсировал Android Studio — новую IDE для мобильных разработчиков. Она основана на открытой платформе JetBrains IntelliJ, которая также является основой для IntelliJ IDEA и ряда других сред разработки. В докладе говорится о том, как создавалась платформа IntelliJ и как она устроена, что привлекло в ней Google. Мы обсудим различия Android Studio и IntelliJ IDEA, посмотрим новый layout designer и прямо в ходе доклада настроим сервер непрерывной интеграции для сборки и тестирования билдов под Android и соберём какой-нибудь проект с помощью Gradle.
WebCamp:Back-end Developers Day Андрей Чебукин "ASP.NET Identity 2.0 исполь...GeeksLab Odessa
03.07.2015 WebCamp:Back-end Developers Day
Андрей Чебукин (Основатель The Secret Circle Solutions)
"ASP.NET Identity 2.0 используя Entity Model теперь проще простого"
Если вы пишете на ASP.NET используя Identity 2.0 и не любите EntityFramework Code First подход то, чтобы содать проект с моделью Entity Framework, подключить её к Identity и поддерживать требуется довольно много усилий.
Я создал расширение для Visual Studio для упрощения создания и поддержки таких проектов и в этом докладе расскажу как можно решать такие задачи используя такие возможности Visual Studio как:
- Создание собственных шаблонов прокетов
- Создание собственных шаблонов элементов проектов
- Использование T4 трансформаций
- Расширение дизайнера Entity Framework в Visual Studio
Подробнее:
http://geekslab.co,
http://webcamp.in.ua/
https://www.facebook.com/GeeksLab.co , https://www.facebook.com/OdessaInnovationWeek
https://www.youtube.com/user/GeeksLabVideo
Перспектива разработки мобильного приложения, которое не потребуется скачивать и ждать review из App Store, очень заманчива, ведь аналогов привычного ПО существует несколько: Progressive Web Apps (PWA), Android Instant Apps (AIA) и Accelerated Mobile Pages (AMP). Как сделать верный выбор, найти «серебряную пулю», ведь у каждой из перечисленных технологий своя специфика разработки, поддержки и тестирования, сильные и слабые стороны. В докладе мы, по возможности, детально рассмотрим каждую из платформ, проведем сравнительный анализ альтенратив “обычными” мобильными приложениями. Давайте все вместе подготовимся к грядущим вызовам обеспечения качества в столь «необычных», новых проектах.
Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...COMAQA.BY
В рамках нашего сдвоенного доклада мы проговорим проблему построения Архитектуры решений Автоматизации «от обратного» - систематизируем классические Архитектурные недочеты, в том числе процессного происхождения, сформулируем варианты решения каждой рассмотренной проблемы, критерии выбора решения, и конечно условия перехода проблемы из не идеальной, но промышленно приемлемой, в потенциально опасный для проекта прецедент.
Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...COMAQA.BY
Using real life test stories, I will present to you examples of mindset tools that I have identified, how I have used them to optimize collaboration in software development teams, become a valuable team member and a skilled tester. I will further propose a model that can help individuals develop their own mindset tools depending on the type of environment and product being developed.
Roman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важностьCOMAQA.BY
Рассмотрим как используется QA в различных аспектах жизни. Поговорим о его основных целях и задачах. Рассмотрим примеры хороших и плохих подходов. Поговорим о рисках.
Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...COMAQA.BY
Мы поговорим о новых возможностях Open Source фреймворка JDI для Автоматизации UI Тестирования и не только на языках Java, C# .Net и Python. Архитектор проекта расскажет «всю правду» о своем детище, а мы послушаем, сделаем выводы и, возможно, используем это решение для нашего следующего проекта.
Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...COMAQA.BY
This presentation is based on Kimmo’s experiences in product component QA at Qvantel and it is aimed at everyone willing to know and understand, what are the challenges we’re facing in QA during software product development in BSS & Telco domain and, in the other hand, what are the good practices and success factors, so that we are able to 1. Test the product properly 2. Deliver smoothly and also 3. Continuously improve. The perspective of the presentation is “managerial”. However, we will also discuss about the technical and methodical aspects in component testing like different test levels, methods, test automation, test data management and testing tools. We also take a look at the different expectations towards testing personnel, like documentation, visibility of test activities, re-usable test assets etc. Finally we discuss about the key success factors in QA for software product development.
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...COMAQA.BY
В докладе я расскажу, как был организован запуск автоматических тестов (appium/javascript) в gitlab CI для нативного Android приложения на каждый Merge Request. Опишу, как можно встроить автотесты в существующий процесс сборки, как правильно настроить запуск тестов в docker image (тесты бегут в TestObject облаке), как произошла интеграция с клаудом и какие результаты это принесло. Tech stack: Gitlab CI, kubernetes, android, appium, javascript, testobject.
Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.COMAQA.BY
Чем тестирование RESTful API сервисов схоже и чем отличается от тестирования других типов приложений? Какое покрытие тестами является достаточным? Какие лучшие практики существуют для автоматизированного тестирования REST API? Эти и другие темы будут раскрыты в рамках доклада.
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.COMAQA.BY
Все, кто когда-либо сталкивался с тестированием производительности, прекрасно знают, как сложно сделать отчеты понятными, хорошо визуализированными и прозрачными для заказчика. Очень важно выбрать "правильные" метрики и разработать нужные профили нагрузки, но если в результате заказчик увидит скучные и непонятные кривые на белом фоне, он вполне может отказаться от тестирования производительности как такового, поскольку результат будет не вполне прозрачен. Давайте посмотрим, как можно улучшить впечатление от результатов тестирования производительности, на примере интеграции JMeter с мощным инструментом визуализации - Grafana.
Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...COMAQA.BY
Candy Crush Saga is one of the biggest mobile games today with more than 1000 levels of difficulty - and users continue to ask for more. When building new content, it is extremely important to make sure that the level of difficulty is balanced and that the user does not experience crashes or problems through some unforeseen level of play. Alexander Andelkovic shows you how King is training artificial intelligence (AI) programs (bots) to test its games by mimicking human interactions. Join Alex as he discusses how King is taking testing to the next level by employing Monte Carlo Tree Search, automatic heuristic construction, and NeuroEvolution of Augmenting Topologies (NEAT) to train bots to test and evaluate difficulty levels. He discusses ways to extend and use AI bots to predict game success rates and conduct automatic performance testing. Alex explains how this AI approach can be generalized to test other applications. Learn how AI can help you with testing that's getting very difficult to master with traditional testing techniques.
Даже если вы - самый мирный человек, конфликты все равно случаются. Как и почему это происходит, можно ли их избежать и как вести себя, если конфликт уже случился - об этом мы поговорим в рамках доклада "Мое место в конфликте". Конфликт - интереснейшее явление, и то, какие он принесет плоды - разрушение или сотрудничество - зависит в том числе и от того поведения, которое мы реализуем. И напоследок вы узнаете о том, как защитить себя, даже если конструктивно выйти из конфликта уже не удалось.
Организация приемочного тестирования силами матерых тестировщиковCOMAQA.BY
Тестировщик и его взгляд на бизнес тестирование. Как охватить необъятное или совместить своё желание всё проверить как в обычном функциональном тестировании и проверку с точки зрения бизнеса. Организация такого тестирования, взаимодействие с командой разработки и тестирования. Какие плюсы и минусы от того, что в UAT тестировании участвуют матерые тестировщики, а не люди, которые эксплуатируют систему.
Развитие специалиста, менеджера - дело добровольное. Равно как и выживание. Приходите на доклад и мы обсудим: а надо ли развиваться, как развиваться, какие подходы и интструменты можно использовать, обсудим тепловую смерть специалиста.
Системный взгляд на параллельный запуск Selenium тестовCOMAQA.BY
Параллельный запуск тестов – не просто желание, но острая необходимость, стандартная задача, с которой рано или поздно столкнется каждый проект, за исключением, разве что, совсем небольших и краткосрочных. Порой, вопрос параллелизации тестов превращается в сложный или даже почти невыполнимый. Давайте поговорим о том, как избежать подобной ситуации: какие рекомендации и инструменты существуют, какую архитектуру стоит выбрать изначально, каких решений следует избегать. Антон попробует ответить на все эти актуальные вопросы и конечно приведет множество примеров для наглядности и практического подтверждения. Мы проговорим «хорошие» варианты параллельного запуска автоматизированных тестов, но так же рассмотрим ситуацию с противоположной стороны «от противного». Проанализируем десяток «плохих» решений по параллелизации на реальных примерах – сложных, медленных, дорогих, неэффективных. Фактически, беседа будет состоять из двух частей: «что такое хорошо и что такое плохо» в примерах, с аргументацией и рекомендациями.
Мы уделяем много внимания темам автоматизации тестирования. Но что, если мы посмотрим на сам процесс нашей работы? Сколько рутинных задач мы выполняем каждый день? Насколько эффективно мы их выполняем? Иван расскажет о своем опыте эффективной работы с подобными ежедневными задачами
Исходя из своего опыта работы инженером в автоматизации, экспертом в Java automation assessment комитете в компании Epam, Иван поделится общими рекомендациями, советами, материалами для тех, кто хочет достичь уровня Senior инженера в автоматизации. Доклад будет полезен в первую очередь Junior и Middle инженерам, которые смогут использовать его как своего рода «гайд»: посмотреть где есть пробелы, что стоит вспомнить, чему уделить больше внимания.
В своей презентации я бы хотел рассказать о своем личном опыте в OpenSource. Начиная от контрибьюта в популярные проекты и публикации своих проектов на GitHub до участия в процессе отбора и развития OpenSource решений Презентация позволит взглянуть на OpenSource с разных сторон и понять зачем это нужно как для обычного инженера, так и для большой компании
Мы поговорим о новых возможностях Open Source фреймворка JDI для Автоматизации UI Тестирования. Архитектор проекта расскажет «всю правду» о своем детище, а мы послушаем, сделаем выводы и, возможно, используем это решение для нашего следующего проекта.
Out of box page object design pattern, javaCOMAQA.BY
Самая сложная часть в изучении новой дисциплины - разбираться с основами и базовыми понятиями. Давайте поговорим о самых популярных паттернах, которые используются в автоматизации тестирования UI - Page Object: использование статического и динамического решения, границы применимости и неприменимости, особенности реализации в зависимости от содержания, живые примеры.
2. Обо мне
Опыт разработки ПО: 4.5 года
Основной язык: C++
Осановные сферы интересов:
▧ Сетевая разработка
▧ Защита информации
▧ Обработка изображений
2
Siarhei.Homan@regula.by
3. Содержание
▧ Что такое идиомы в лингвистике
▧ Что такое идиомы в программировании
▧ Почему существуют идиомы в программировании
▧ Что такое идиомы в C++
▧ Примеры идиом в C++
▧ Заключение
3
7. Как отличить идиому
▧ Позволяют выразить задуманное элегантно
▧ Имеют смысл только для конкретного языка
▧ Требуют глубокого понимания особенностей
языка
▧ Легко подхватываются другими
7
8. Что такое идиомы в C++
▧ Не связаны напрямую с проектированием
▧ Относятся к уровню языка
программирования
▧ Имеют большую специфичость для C++
8
26. Запретить создание объекта на стеке
class EventHandler {
public:
virtual ~EventHandler() {}
};
class MouseEventHandler : public EventHandler {
protected:
~MouseEventHandler() {}
public:
MouseEventHandler() {}
};
int main() {
MouseEventHandler m; // We can’t do it
EventHandler *e = new MouseEventHandler (); // We can do it
delete e; // Polymorphic delete call
}
26
27. Запретить создание объекта на стеке
class MouseEventHandler {
protected:
MouseEventHandler() {}
~MouseEventHandler() {}
public:
static MouseEventHandler *instance () {
return new MouseEventHandler();
}
void destroy() {
delete this;
}
};
27
28. Запретить создание объекта в куче
class ScopedLock {
private:
static void *operator new(size_t size);
static void *operator new(size_t, void * mem); // placement new
};
int main() {
ScopedLock s; // We can do it
ScopedLock *sl = new ScopedLock(); // We can’t do it
void * buf = ::operator new(sizeof(ScopedLock));
ScopedLock *s2 = new(buf) ScopedLock; // We can’t do it
}
28
29. Другие идиомы
▧ Copy-on-write
▧ Interface Class
▧ Member Detector
▧ Named Constructor
▧ Scope Guard
▧ Runtime Static Initialization Order Idioms
Книга про идиомы C++:
https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms
29
30. Итоги
Преимущества:
▧ Лаконичность и простота
▧ Единый словарь
Недостатки:
▧ Код трудно понять программисту на другом языке
▧ Использование старых идиом может усложнять понимание
кода
30
Здравствуйте! Меня зовут Гомон Сергей. Я являюсь сотрудником компании Regula. У меня примерно 4.5 года опыта разработки на C++. В основном приходилось заниматься сетевой разработкой. В настоящее время пытаюсь заниматься новой для себя областью - обработкой изображений.
Сегодня я бы хотел обсудь с вами тему “Идиомы C++”. В докладе будут рассмотрены следующие вопросы:
Что такое идиомы в лингвистике
Что такое идиомы в программировании
Почему сущесвуют идиомы в программировании
Что такое идиомы в C++
Примеры идиом в C++
В конце мы подведем краткий итог.
Итак, начнем с идиом в лингвистике.
Идиома (или фразеологические сращения) - это присущий только данному языку и не переводимый на другие языки устойчивый оборот речи, значение которого не вытекает из суммы значений составляющих его элементов. Из-за того, что идиому невозможно перевести дословно (теряется смысл) часто возникают трудности перевода и понимания. С другой стороны такие фразеологизмы придают языку яркую эмоциональную окраску.
На картинке можно увидить пример буквального понимания идиомы I’ve got your back. Дословный перевод на русский данной идиомы не имеет большого смысла. Идиома означает, что за тобой кто-то приглядывает, чтобы ты был в порядке. Подразумевается, что человеку сложно следить за тем, что происходит у него за спиной, и чтобы быть в безопасности, за ней нужно приглядывать.
Стоит отметить, что некоторые идиомы имеют смысл как в английском, так и врусском языках, например идиома “ветер перемен”. В данном случае приведенное определение не является точным в том смысле, что идиома может быть присуща не только одному языку, но и нескольким языкам.
Теперь рассмотрим вопрос, что же подразумевают, когда говорят об идиомах в контексте языков программирования. Определение из википедии звучит следующим образом: Программная идиома — способ выражения некой не-элементарной конструкции, типичный для одного или нескольких языков программирования. Идиома представляет собой типовой способ выразить задачу, алгоритм или структуру данных, не встроенные в язык на уровне примитивов, либо наоборот, нетривиальный способ использования встроенных элементов языка. Термин часто используется в широком смысле, в том числе в качестве синонима термина шаблон проектирования, и знание идиом в этом случае часто служит показателем свободного владения этим языком.
Среди программистов часто наблюдается путаница в понимании того, что является идиомами. Как следует из определения, идиомы иногда путают с паттернами проектирования. От паттернов проектировани идиомы отличаются своей специфичностью для языка. Трудудно их применить на этапе проектирования системы, в отличии от паттернов. Также в интернетах можно найти статьи, в которых утверждается, что в языках программирования идиом не сущесвует. Это также происходит от неправильного понимания смысла идиом.
Иногда говорят об идиоматичном использовании конструкций языков программирования. Например, в ruby использование циклов .each to do вместо циклов foor loop, является идиоматичным. Это значит, что для опытного разработчика на ruby увидеть использование цикла foor loop будет непривычным. Он, конечно, поймет написанный код, но так обычно не делают. То же самое с генерацией списков в Python. Иногда можно услышать фразу типа “Pythonc way”, что подразумевает использование чегото идиоматически для питона. Если проводить аналогии с естественным языком, то это как спросить “сколько времени”, чтобы выяснить “который час”. Скорее всего вас поймут, но люди, которые хорошо владеют языком, обычно так не говорят.
Почему же сущесвуют идиомы в языках программирования?
Ни один язык не может содержать достаточно средств для выражения всего. Когда появляется необходимость выразить какой-то аспект, для которого язык не имеет прямых средств, на помощь приходят идиомы.
С развитием языка в нем могу появляться новые средства, которые могут позволять выражать новые аспекты, в этом случае необходимость в некоторых идиомах может исчезать.
Например, благодаря появлению enum class в C++11 отпадает необходимость в использовании идиомы Type Safe Enum.
Также зачастую идиомы являются лаконичнее других подходов для выражения задуманного, при отсутвии прямой поддержки от языка программирования.
Нет единого критерия для того, чтобы определить, содержит написанный код идиомы или нет. Тем не менее, можно ориентироваться не некоторые признаки. Например:
Часто идиомы позволяют выразить задуманную идею элегантно по сравнению с другими доступными решениями
Часто идиомы имееют смысл только для конкретного языка программирования
Часто идиомы требуют глубокого понимания особенностей языка программирования (но чтобы их использовать, глубоких знаний языка не нужно. Например, я знаю, что означает “бить баклуши”, но я не знаю, что такое “баклуши” и почему данная идиома означает “ничего не делать”)
Часто идиомы легко используются другими программистами, которые о них узнали (их использование не нужно навязывать, как и идиомы в естественном языке, которые сами случайно вырываются при появлении нужных условий)
Эти признаки не являются 100% способом отличить идиому от чего-то другого, например от паттернов. Однако, на мой взгялд, в большинстве случаев их хватает. Также стоит понимать, что конкретная идиома необязательно должна удовлетворять всем этим требованиям. Есть идиомы, которые не требуют глубокого понимания языка программирования. Есть идиомы, которые не очень-то и подхватываются другими программистами. А некоторые идиомы имеют смысл для большого количества языков программирования.
Теперь перейдем непосредственно к C++.
Под идиомами C++ будем понимать такие приемы программирования на C++, которые:
Решают задачу, которая не связана напрямую с проектированием
Решают задачу, которая должна быть решена на уровне языка программирования
Имеют большую специфичность для C++ и вряд ли будут полезны для других языков (но могут быть и полезны!)
Цели у данной идиомы следующие:
Гарантировать очисту ресурсов в конце области видимости
Гарантировать basic exception safety (no-leak guarantee)
Basic exception safety - гарантия отсутсвия утечер ресурсов. Частичное выполнение или ошибка выполнения операции может привести к побочным эффектам, но все инварианты остаются верны и не происходит утечки ресурсов. Все хранимые данные имеют валидные значения, но могут отличаться от тех, которые были перед выполнением операции.
Рассмотрим небольшоей пример использования RAII. Из-за наличия условий в функции, нам нужно дублировать очистку ресурсов в каждой ветке с return. Также есть опасность, что вызовы функций бросят исключения. Попытки предусмотреть все возможные выходы из функции могут сделать код сложным для понимания и очень запутанным. В свою очередь использование RAII позволяет не беспокоится об очистке ресурсов.
ВАЖНО!!! Деструктор не должен бросать исключений, так как нам нужно обеспечить basic exception safety. Если бросить исключение в деструкторе, то появляется большая вероятность, что некоторые ресурсы будут не очищены.
В C++ данная идиома испольуезтся крайне широко: ее используют контейнеры (удаляют за собой память), потоки (закрывают за собой файлы), умные указатели (удаляют память, когда на нее никто не ссылается). Большое количество идиом и паттернов реализованы с ипользованием идиомы RAII.
В языках программирования со сборщиком мусора RAII также часто имеет смысл, сборщик мусора не закрывает открытые файлы. Отсутсвие деструкторов у классов делает идиому RAII не родной для данных языков. Часто для этого используется блок try-finally (иногда это единственный способ). Иногда для подобной конструкции в языке добавляют синтаксический сахар типа using в C# и with в Python. В целом деструкторы в C++ позволяют добиться большей гибкости, RAII для C++ - это что-то естественное, не доставляющее дискомфорта и даже наоборот, делающее жизнь лучше, в то время как в языках со сборщиком мусора его использования выглядит чужиродно.
Данная идиома приследует 2 основные цели:
Сымитировать поведение обычного указателя
Добавить дополнительные фунеции к указателю: проверка выхода за границы массива, автоматическое удаление памяти и т. п.
Smart Pointer позволяет создавать объекты в куче, при этом избежать большого количества проблем, связанных с работой с сырыми указателями, в частности, с проблемой удаления памяти. Однако злоупотребление умными указателями может привести к появлению трудноуловимых багов.
Рассмотрим небольшой пример. Экземпляр класса Bar создается в куче через оператор new. Память очищается в конце метода. К сожалени, есть очень много факторов, которые могут привести к тому, что выполнение программы никогда не попадет в конец функции, и память останется неочищенной.
Чтобы не беспокоится о вызове оператора delete, можно не использовать оператор new. Это становится возможможным, если соединить идиому SmartPointer вместе с шаблонной магией. В примере память под объект выделяется вызовом функции make_shared. Возвращаемый объект имеет семантику указателя. При этом нам не нужно беспокоится об удалении памяти, вызов деструктора нам гарантирован.
Сейчас вы можете заметить, что Smart Pointer - это идиома RAII. Это действительно так. Но в отличии от RAII идиома Smart Pointer призвана решать немного другие проблемы. Это пример того, как одни идиомы могут реализовываться через использование других.
В STL уже реализован набор умных указателей:
unique_ptrs - для единоличного владения объектом
shared_ptrs - для совместного владения объектом
weak_ptrs - для проверки существования объекта перед его использованием. Этот умный указатель реализует невладеющую семантику, его можно использовать вместо сырых указателей для решения циклических ссылок. В этой ситуации использование владеющих указателей может приводить к утечке ресурсов.
Очень мощная и полезная идиома.
Преимущества:
Инкапсуляция всех деталей реализации: легко читать заголовочный файл, легко поддерживать бинарную совместимость при изменении реализации, можно скрыть реализацию от пользователей
Ускоряется компиляция (в больших проектах - значительно ускоряется)
Недостатки:
Дополнительное выделение памяти
Косвенный вызов методов класса
Проблемы с использованием inline методов
Много дополнительного кода
Очень ярким и удачным примером использования идиомы является библиотека Qt. В Qt Wiki данную идиому называют d-pointer. Также на нее ссылкаются как на паттерн проектирвоания. Это связано с тем, что паттерн проектирования “Bridge” реализуется через идиому pImpl.
В Qt pImpl используется для двух основных целей:
Обеспечение бинарной совместимости между версиями библиотек
Закрыть реализацию
Также pImpl позволяет упростить реализацию implicit-sharing (Copy-on-write)
Идиома немного выносит мозг. Не смотря на это является одной из самых распространенных и полезных.
Идиому CRTP можно использовать для реализации статического полиморфизма. Статический полиморфизм подразумевает, что во время компиляции мы точно знаем у какого объекта будет вызван метод, поэтому нет необходимости тратиться на виртуальный вызов. Также данный подход позволяет делать некоторое подобие перегрузки статических методов.
CRTP позволяет унаследовать реализацию. Написав такой класс, мы можем легко сделать другой класс синглетоном, просто отнаследовавшить. Не стоит забывать, что для C++ паттерн singleton является антипаттерном, что требует особой осторожности при его использовании.
Еще один пример унаследования реализации. Таким образом можно легко добавить счетчик объектов в любой класс, который отнаследуется от counter. Для идиомы SmartPointer похожим образом можно реализовать счетчик ссылок.
В стандартной библиотеке std::enable_shared_from_this. Позволяет классам наследникам создавать std::shared_ptr на самих себя.
В boost.operators реализуя один из операторов и унаследовав один из классов представленных в operators мы получаем весь спектр необходимых операторов.
Данная идиомя очень широко распространена, поэтому примеры ее реализации и использования можно найти почти где угодно.
Небольшая но полезная идиома. При удалении элементов из вектора, он автоматически не очищает зарезервированную память при вызове метода clean(). Чтобы освободить память, можно воспользоваться данной идиомой.
Данная идиома может пригадиться для создателей библиотек. Она позволяет предотвратить некоторые варианты неправильного использования классов библиотеки.
При помощи данного приема можно запретить создание объектов на стеке. Однако это не мещает нам создавать объект в куче.
Еще один способ запретить создание объектов на стеке.
А данный способ позволяет запретить создание объекта в куче через использование операторов new и placement new. В частости приведен пример использование данной идиомы для класса ScopedLock, создание объектов которого на стеке не имеет смысла.
Copy-on-write - широко используется в Qt. Контейнеры в Qt могут передаваться по значению, при это не будет происходит копирования данных, если нет их модификации.
Interface Class - позволяет отделить интерфейс класса от его реализации.
Member Detector - позволяет получить метоинформацию о классе во время выполнения.
Named Constructor - позволяет создавать объекты класса осмысленным способом.
Scope Guard - позволяет очищать ресурс только в случае, если произошло исключение, и оставлять его занятым, если исключения не было.
Runtime Static Initialization Order Idioms - позволяет задать порядок инициализации статических переменных.
Преимущества использования идиом:
Лаконичность и простота кода по сравнению с доступными альтернативами
Единый словарь среди разработчиков
Недостатки:
Код трудно понять программисту на другом языке
Использование старых идиом при наличии средств в языке программирования может неоправданно усложнять понимание кода