Русские вычислители

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Русские вычислители » Любопытное в Сети » Модульного тестирования недостаточно. Нужна статическая типизация!


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

Сообщений 1 страница 4 из 4

1

Интересная статья на Хабре (в переводе).

Автор взял программы с открытым исходным кодом на Питоне (язык с динамической типизацией) и построчно переписал их на Хаскеле (язык со статической типизацией). И получил такие результаты:

Опыт показал, что все проекты без особого труда можно было бы транслировать на язык со статической типизацией, причем изменения были бы минимальными. Выяснилось, что модульное тестирование нельзя назвать адекватной заменой статической типизации. В ходе эксперимента обнаружилось 17 ошибок типизации, которые не были обнаружены тестами; но многие ошибки тестами все-таки покрывались.

Подробности здесь

0

2

Нужна статистика

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

Возможно питонная программа изначально была ошибочна и это выяснилось только при трансляции

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

Другое дело, что автор заметки утверждает, что

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

Честно говоря, не знаю языков со статической типизацией, где бы работала функция eval(). Не знаю, есть ли она в Питоне. Но если есть, то её употребления достаточно, чтобы возникли трудности с переводом программы на языки со статической типизацией.

0

3

Тут подробнее пишут про типизацию. Интересный график там есть. Жаль, что нет графика по языкам программирования: зависимость количества ошибок/стоимости их исправления в больших/малых проектах для каких-либо языков.

В языках Clipper и PHP раздражало, что компилятор не может выявить простейшие ошибки, по сути своей - описки:

Код:
if A = B
    width = 10
    lenght = 20
else
    widht = 40
    length = 50
endif

function (width, lenght)

А ведь похожие ошибки могут тихо сидеть в "засаде" годами, дожидаясь своего звёздного часа. Не потому ли в JavaScript переменные всё-таки предварительно объявляются:

var  variable;

Хотя есть теория о том, что количество ошибок пропорционально вводимому тексту. И поскольку не надо  описывать типы переменных, то сам текст становится короче и ошибок в нём, соответственно, становится меньше.

0

4

Ну типизация и имена переменных вещи разные.

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

функции/процедуры должны быть маленькие - 1-2 экрана максимум

Есть легенда, что раньше в IBM было негласное правило – функция должна помещаться в 24 строки – размер экрана в алфавитно-цифровых дисплеях.

пытается доказать нужность множественного наследования

В литературе тема "наследование" нередко сопровождается примерами из животного мира. Если бы в животном мире наследование было бы таким, как в ООП, то у потомков должно было бы быть по 2 сердца, 2 головы и т.д. :) Действительно, пусть у класса – общего предка есть свойство «сердце». Его потомки А и Б так же наследуют это свойство. Но у В, который наследует у А и Б, есть 2 свойства «сердце»: одно унаследовано от А, а другое от Б!

0

Быстрый ответ

Напишите ваше сообщение и нажмите «Отправить»



Вы здесь » Русские вычислители » Любопытное в Сети » Модульного тестирования недостаточно. Нужна статическая типизация!