Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Модульного тестирования неудовлетворительно. Необходима статическая типизация!

Anna | 16.06.2014 | нет комментариев
Когда я работал над своей магистерской диссертацией, я пообещал себе, что опубликую ее в Интернете под свободной лицензией. Я получил степень, но, к сожалению, натолкнулся на одно из неписаных правил ВУЗов — когда вы тратите на волнующий вопрос много времени, он вам докучает.
Наконец, через год, я все-таки ее публикую.
Для тех, кому лень знакомиться с моим полным трудом (в любом случае, 60 страниц текста это не так много для исследовательской работы, но это все же не немного), я предлагаю короткую версию статьи. Умоляю подметить, что короткая версия не рассматривает некоторые значимые данные, следственно я умоляю писать отзывы только о полной версии.

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

Суть их рассуждений в дальнейшем:

  1. Статической типизации неудовлетворительно для обнаружения багов, следственно нужны модульные тесты;
  2. Статическая типизация становится лишней, так как у вас есть тесты;
  3. Из-за статической типизации некоторые правильные программы могут выдавать предупреждения на стадии компиляции.

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


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

Раньше, чем начать эксперимент, необходимо было предпочесть языки с динамической и статической типизацией для работы.

Критерии для динамического языка были следующими:

  1. данный язык должен быть динамически типизированным;
  2. язык должен поддерживать модульное тестирование;
  3. нужно довольное число opensource-решений на этом языке;
  4. язык должен быть знаменитым и иметь довольное число последователей.

Под эти критерии отменно подходит Python.

Дальше предстояло предпочесть статический язык, рассматривающий несколько требований:

  1. язык должен выполняться на тех же платформах, что и Python;
  2. язык должен иметь суровую типизацию;
  3. язык должен пользоваться уважением последователями статической типизации.

Haskell удовлетворял каждому этим требованиям.

Дальше я предпочел четыре случайных плана, которые предстояло транслировать с Python на Haskell: The Python NMEA ToolkitMIDIUtilGrapeFruit и PyFontInfo.

The Python NMEA Toolkit

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

MIDIUtil

Трансляция MIDIUtil привела к обнаружению 2-х ошибок. Одну из них дозволено было бы отследи

Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB