Программист с 45-тилетним стажем поделился советами перед уходом на пенсию. В основном все советы не про технологии, а про команды и отношения. И крутятся вокруг «делай как проще, чтобы другим было понятнее» и «заботься о коллегах и команде, плохие команды хороший продукт не сделают». Но среди них только один технический: пишите автотесты, чтобы команда могла уверенно двигаться вперед.
via
via
Bti360
What I've Learned in 45 Years in the Software Industry
BTI360 teammate Joel Goldberg recently retired after working in the software industry for over four decades. When he left he shared with our team some of the lessons he learned over his career. With his...
Среди систем непрерывной интеграции высокая конкуренция, они борются за пользователя всеми возможными способами: поддержкой редких ОС (типа FreeBSD), какими-то фишками или хорошим "железом". Но несмотря на конкуренцию есть проблема, с которой никто не спешит разбираться. Это vendor lock-in на конфигурацию определённой CI системы. То есть если вы используете Travis CI (не используйте их) и решили переехать на другой сервис или self-hosted систему, то вам надо будет переписать
Я уже писал про сервис Cirrus CI, я им пользуюсь потому что там есть поддержка FreeBSD, которая мало где есть, и мне понравилось как они развязали руки своим пользователям. Те, кто использует в своем проекте Cirrus CI, могут запускать пайплайн отдельно от сервиса с помощью их утилиты. Это позволяет при наличии одного конфига запускать локально, на другом CI сервисе или где-то ещё. Круто же!
via
.travis.yml
на другом декларативном языке, то есть буквально воссоздать пайплайн с нуля. В некоторых случаях это переписывание с одного YAML на другой YAML. Можно конечно вынести все проектно-зависимые вещи в скрипты (например под каждую операцию: run.sh
, build.sh
, test.sh
, bootstrap.sh
) и в конфиге CI вызывать их или все это реализовать в Make/CMake и в конфиге вызывать таргеами, типа make build; make test
, но по моему опыта так мало кто делает и к тому же окружение на всех CI немного разное и на Travis CI нужно установить компилятор, а на другом нет и т.д. Все равно вы потратите ощутимое время на переезд с одного CI на другой.Я уже писал про сервис Cirrus CI, я им пользуюсь потому что там есть поддержка FreeBSD, которая мало где есть, и мне понравилось как они развязали руки своим пользователям. Те, кто использует в своем проекте Cirrus CI, могут запускать пайплайн отдельно от сервиса с помощью их утилиты. Это позволяет при наличии одного конфига запускать локально, на другом CI сервисе или где-то ещё. Круто же!
via
Telegram
Протестировал
Помню время, когда из всех доступных CI, были только CruiseControl, Дженкинс и может несколько других. Про CI-as-a-service тогда никто и не думал. Сейчас ассортимент доступных CI сильно увеличился, конкуренция в лучшем виде. Доступны и бесплатные CI в облаке…
Амазон анонсировала появление нового сервиса для chaos инжиниринга (напомню, это "проведение экспериментов в распределенных системах с целью укрепления уверенности в способности системы противостоять турбулентным условиям в эксплуатационной среде". см основные принципы хаос инженерии). По сути это AWS Chaos Runner, который реализует разного рода сбои, интегрированный в экосистему AWS (см. иллюстрацию). Амазон не первыми делают такой сервис, уже давно существует Gremlin, который предоставляет сбои как сервис. Тут, как мне кажется, интересно другое - Амазон с этим продуктом выходит на рынок продуктов для тестирования ПО. С таким же успехом они могут сделать сервис для тестирования Web UI.
https://aws.amazon.com/fis/
https://aws.amazon.com/fis/
В свежих сборках Chrome появилась возможность записывать сценарии действий пользователя в скрипты на Javasript. То есть открываете нужную страницу в бразере, в DevTools включаете запись действий и делаете что-то на странице обычным образом. По мере выполнения действий браузер генерирует Javascript код, описывающий через API Puppeteer все ваши действия. После этого запись можно остановить, и сохранить полученный код.
https://developers.google.com/web/updates/2021/01/devtools#record
P.S. За конкуренцией в области сокращения расходов на автоматизацию тестирования WebUI становится интересно следить. Помимо встроенной в Chrome поддержки записи сценариев ещё есть: Selenium IDE, который не так давно реанимировали после длительного анабиоза, есть коммерческие сервисы, призванные снизить порог вхождения в автоматизацию тестирования Web UI (например малоизвестные у нас стартапы testRigor или Virtuoso QA) и у них тоже есть расширения для записи сценариев. Про Cucumber и прочие BDD-like решения я даже и не говорю.
https://developers.google.com/web/updates/2021/01/devtools#record
P.S. За конкуренцией в области сокращения расходов на автоматизацию тестирования WebUI становится интересно следить. Помимо встроенной в Chrome поддержки записи сценариев ещё есть: Selenium IDE, который не так давно реанимировали после длительного анабиоза, есть коммерческие сервисы, призванные снизить порог вхождения в автоматизацию тестирования Web UI (например малоизвестные у нас стартапы testRigor или Virtuoso QA) и у них тоже есть расширения для записи сценариев. Про Cucumber и прочие BDD-like решения я даже и не говорю.
JetBrains каждый год делает опрос разработчиков, чтобы узнать состояние индустрии разработки ПО. Потом они публикуют данные по результатам опроса.
За предыдущие года результаты можно найти здесь. Результатами я неоднократно сам пользовался.
Недавно стартовал опрос за 2021 год и я предлагаю вам тоже в нем поучаствовать.
https://surveys.jetbrains.com/s3/a1-developer-ecosystem-survey-2021
За предыдущие года результаты можно найти здесь. Результатами я неоднократно сам пользовался.
Недавно стартовал опрос за 2021 год и я предлагаю вам тоже в нем поучаствовать.
https://surveys.jetbrains.com/s3/a1-developer-ecosystem-survey-2021
JetBrains: Developer Tools for Professionals and Teams
The State of Developer Ecosystem in 2020 Infographic
The results of the fourth annual JetBrains Developer Ecosystem Survey 2020 based on the insights of almost 20,000 developers. Learn about programming languages, tools, technologies, and even developer lifestyles.
Захватывающая история о неработающей синхронизации в rsync, причиной которой был баг 24-летней (!) давности в реализации протокола TCP Linux ядра. Буквально через несколько часов после появления письма с описанием проблемы в рассылке Neal Cardwell подготовил патч с исправлением (фикс из двух строк). Знаю Neal Cardwell как автора packetdrill - утилиты для функционального тестирования TCP, IP протоколов. С её помощью тесткейсы для тестирования можно описывать на DSL в декларативном стиле и они выглядят короче и нагляднее, чем такой же тексткейс, но на Си.
// Create a listening TCP socket.https://engineering.skroutz.gr/blog/uncovering-a-24-year-old-bug-in-the-linux-kernel/
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
+0 bind(3, ..., ...) = 0
+0 listen(3, 1) = 0
// Establish a new connection.
+0 < S 0:0(0) win 32792 <mss 1000,sackOK,nop,nop,nop,wscale 7>
+0 > S. 0:0(0) ack 1 win 29200 <mss
1460,nop,nop,sackOK,nop,wscale 6>
+.1 < . 1:1(0) ack 1 win 257
+0 accept(3, ..., ...) = 4
// sequence number out of window!
+.010 < R. 29202:29202(0) ack 1 win 257
// verify that the connection is OK
+.010 write(4, ..., 1000) = 1000
+0 > P. 1:1001(1000) ack 1
GitHub
GitHub - google/packetdrill: The official Google release of packetdrill
The official Google release of packetdrill. Contribute to google/packetdrill development by creating an account on GitHub.
Почему вы должны писать тесты? Версия ответа от Dave Cheney:
- Even if you don't, someone will test your software
- The majority of testing should be performed by development teams
- Manual testing should not be the majority of your testing because manual testing is O(n)
- Tests are the critical component that ensure you can always ship your master branch
- Tests lock in behavior
- Tests give you confidence to change someone else's code
- Even if you don't, someone will test your software
- The majority of testing should be performed by development teams
- Manual testing should not be the majority of your testing because manual testing is O(n)
- Tests are the critical component that ensure you can always ship your master branch
- Tests lock in behavior
- Tests give you confidence to change someone else's code
Компания Gremlin опубликовала результаты опроса об использовании Chaos Engineering в 2021 году. Для доступа к полному отчету надо зарегистрироваться, на InfoQ есть краткая сводка. Я добавил скриншоты тех частей отчёта, которые мне показались наиболее интересными.
Протестировал
Photo
За последнее время в Hypothesis (библиотека на Python для property-based тестирования) появились новые фишки, о которых я расскажу в нескольких следующих постах.
Гугл недавно опубликовал под свободной лицензией исходный код Аtheris. Это фаззер для кода на Python, он использует LibFuzzer и, как следствие, генерирует такие входные данные, которые максимимизируют покрытие кода, то есть это фаззер с обратной связью. Как пишут в анонсе, в 2013 году гуглеры организовались и начали писать фаззеры для внутренних проектов кода. В рамках этой активности и был создан Аtheris. Hypothesis позволяет использовать внешние фаззеры для генерирования тесткейсов (например на базе AFL -
Пример кода для тестирования с использованием Atheris и Hypothesis:
Гугл недавно опубликовал под свободной лицензией исходный код Аtheris. Это фаззер для кода на Python, он использует LibFuzzer и, как следствие, генерирует такие входные данные, которые максимимизируют покрытие кода, то есть это фаззер с обратной связью. Как пишут в анонсе, в 2013 году гуглеры организовались и начали писать фаззеры для внутренних проектов кода. В рамках этой активности и был создан Аtheris. Hypothesis позволяет использовать внешние фаззеры для генерирования тесткейсов (например на базе AFL -
python-afl
), и теперь есть интеграция с Atheris. В инфраструктуре oss-fuzz, в которой Гугл фаззит код открытых проектов, теперь появилась поддержка проектов на Python и туда уже добавили два модуля (ujson
и urllib3
), которые теперь регулярно тестируются с помощью связки Hypothesis и atheris. Все это говорит о том, что Hypothesis умеет генерировать тесты не только с использованием свойств, но и абсолютно случайными данными. Кстати нативная поддержка coverage-guided генератора была в самом Hypothesis, но её удалили в основном из-за проблем с производительностью в 2018 году (см. тикет).Пример кода для тестирования с использованием Atheris и Hypothesis:
@given(obj=JSON_OBJECTS, kwargs=st.fixed_dictionaries(UJSON_ENCODE_KWARGS))#непишитетесты, а лучше генерируйте их
def test_ujson_roundtrip(obj, kwargs):
"""Check that all JSON objects round-trip regardless of other options."""
assert obj == ujson.decode(ujson.encode(obj, **kwargs))
if __name__ == "__main__":
atheris.Setup(sys.argv, test_ujson_roundtrip.hypothesis.fuzz_one_input)
atheris.Fuzz()
Google Online Security Blog
How the Atheris Python Fuzzer Works
Posted by Google Information Security On Friday, we announced that we’ve released the Atheris Python fuzzing engine as open source. In th...
Инициативная группа компаний организовала Mobile Native Foundation, в рамках которого планируется обмен опытом между инженерами в сфере разработки мобильных приложений. Недавно дискуссии стали публичными и там есть интересные треды. Например в треде про тестовую стратегию сотрудники компаний делятся данными о том, сколько у них тестов для самого большого мобильного приложения:
- Airbnb: 10K unit, 30K screenshot tests, zero UI & E2E
- Robinhood: thousands unit, 400 snapshot, 10-15 E2E
- Norstrom: 30K unit, 1,500 UI
- Shopify: 8K unit, 2K screenshot, 20 E2E
- Target: 10K+ unit
А в треде про культуру тестирования мнения об использовании BDD, TDD, покрытия кода, геймификации процесса тестирования.
- Airbnb: 10K unit, 30K screenshot tests, zero UI & E2E
- Robinhood: thousands unit, 400 snapshot, 10-15 E2E
- Norstrom: 30K unit, 1,500 UI
- Shopify: 8K unit, 2K screenshot, 20 E2E
- Target: 10K+ unit
А в треде про культуру тестирования мнения об использовании BDD, TDD, покрытия кода, геймификации процесса тестирования.
Платформа для фаззинга OSS Fuzz от Гугла стала ближе к миру энтерпрайза вместе с поддержкой кода на Java. В феврале компания Code Intelligence опубликовала с открытой лицензией код своего фаззера Jazzer. Помимо языка Java Jazzer ещё поддерживает Scala, Kotlin и Clojure. А сегодня Гугл анонсировал поддержку Java проектов в OSS Fuzz с помощью Jazzer.
Чтобы два раза не вставать. OSS Fuzz это только одна платформа для фаззинга и только для проектов с открытым исходным кодом. Для проприетарных проектов есть ClusterFuzz, на базе которого работает OSS Fuzz, и платформы от других компаний: Microsoft OneFuzz, сервис уже упомянутой компании Code Intelligence, FuzzBuzz.
https://google.github.io/oss-fuzz/getting-started/new-project-guide/jvm-lang/
Чтобы два раза не вставать. OSS Fuzz это только одна платформа для фаззинга и только для проектов с открытым исходным кодом. Для проприетарных проектов есть ClusterFuzz, на базе которого работает OSS Fuzz, и платформы от других компаний: Microsoft OneFuzz, сервис уже упомянутой компании Code Intelligence, FuzzBuzz.
https://google.github.io/oss-fuzz/getting-started/new-project-guide/jvm-lang/
GitHub
GitHub - CodeIntelligenceTesting/jazzer: Coverage-guided, in-process fuzzing for the JVM
Coverage-guided, in-process fuzzing for the JVM. Contribute to CodeIntelligenceTesting/jazzer development by creating an account on GitHub.
Интересные результаты опроса за 2020 год о популярности SQA активностей в проектах в сравнении с 2017-2019 гг.