Найти тему
Techno coffee

"Поощерительное" исследование посвящено статическому набору текста и количественному определению обнаруживаемых ошибок в JS.

Вы сторонник статического или динамического набора текста в JavaScript, или же другого языка? Новое исследование, проведенное исследователями Университетского колледжа Лондона (UCL) совместно с Microsoft, показало, что пара продуктов прошли проверку - с довольно солидными результатами.

Исследователи протестировали Flow, статическую систему Facebook и TypeScript от Microsoft, разумеется, и обнаружили, что при консервативной оценке каждый продукт может обнаружить около 15% ошибок, которые в противном случае попали бы в фиксированный код.

Важность статического набора текста по сравнению с динамическим зависит от возможности проверки кода во время компиляции, а не во время выполнения - в этот момент часто бывает слишком поздно. Как отметил Андерс Хейлсберг, технический сотрудник Microsoft, представляя TypeScript в 2012 году, написание JavaScript в масштабе приложений "трудно... [он] никогда не был разработан, чтобы быть языком программирования для больших приложений", и поэтому не было статического ввода.

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

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

Рассмотрев общее количество закрытых проблем для JavaScript-проектов на GitHub - 3 910 969 по состоянию на август 2015 года, исследователи увеличили количество исправленных ошибок на 400, протестированных на Flow и TypeScript, добавив примечания типа (см. ниже).

-2

Из 400, Flow успешно обнаружил 59 и TypeScript 58 на первом анализе, хотя после маркировки всех ошибок как обнаруживаемых или не обнаруживаемых в Flow и TypeScript, число выросло до 60 для каждой. С учетом доверительного интервала, возможный процент составляет от 11,5% до 18,5%, а средний - 15%. Согласно данным, подавляющее большинство обнаруженных ошибок было сделано обеими программами, и только три с каждой стороны могут быть предотвращены только с помощью Flow и TypeScript.

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

В конечном счете, вопрос заключается в том, стоит ли 15-процентное сокращение количества ошибок в аннотациях выполнять дополнительную работу. Как написал Эдриан Колиер в блоге, оценивающем исследование, более легкий подход Flow потенциально лучше подходит сторонникам динамического набора текста, поскольку TypeScript является лучшим вариантом для сторонников жесткого набора текста, говорящих на других языках. Исследователи добавили, что результаты исследования были "обнадеживающими".