Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 16.07.09 13:47
Оценка: -9 :))) :))
У кого еще остались сомнения в целесообразности модульных тестов, в целесообразности использования языков/платформ с большим количеством статических и динамических проверок...

http://habrahabr.ru/blogs/lifehack/64627/

"Прелесть" С++ (кто представляет себе ассемблерный код после компиляции поймет что в таком случае произойдет):
int i;
int array[4];
for (int i = 0; i <= 4; i++) { 
    array[i]=0;
}



(подсказка: бесконечный цикл)
Re: Модульные тесты и "безопасные" языки - хорошо.
От: Antikrot  
Дата: 16.07.09 14:00
Оценка: +4
Здравствуйте, criosray, Вы писали:


C>"Прелесть" С++ (кто представляет себе ассемблерный код после компиляции поймет что в таком случае произойдет):

C>
C>int i;
C>int array[4];
C>for (int i = 0; i <= 4; i++) { 
C>    array[i]=0;
C>}
C>


C>(подсказка: бесконечный цикл)

далеко не самый наглядный пример, если кто захочет проверить вероятность что счётчик цикла окажется сразу за array[3] и не будет загнан в регистр очень сильно не 100%
компилятор + опции?
Re[2]: Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 16.07.09 14:20
Оценка:
Здравствуйте, Antikrot, Вы писали:

C>>"Прелесть" С++ (кто представляет себе ассемблерный код после компиляции поймет что в таком случае произойдет):

C>>
C>>int i;
C>>int array[4];
C>>for (int i = 0; i <= 4; i++) { 
C>>    array[i]=0;
C>>}
C>>


C>>(подсказка: бесконечный цикл)

A>далеко не самый наглядный пример, если кто захочет проверить вероятность что счётчик цикла окажется сразу за array[3] и не будет загнан в регистр очень сильно не 100%
A>компилятор + опции?
Важно другое — важно, что сильно не 0%, что счетчик не окажется сразу за array[3] и не будет перезаписан 0.
Прямой доступ к памяти и ручные манипуляции указателями это бомба с часовым механизмом.
Re[3]: Модульные тесты и "безопасные" языки - хорошо.
От: Antikrot  
Дата: 16.07.09 14:30
Оценка:
Здравствуйте, criosray, Вы писали:

C>Важно другое — важно, что сильно не 0%, что счетчик не окажется сразу за array[3] и не будет перезаписан 0.

C>Прямой доступ к памяти и ручные манипуляции указателями это бомба с часовым механизмом.
а типа в C# ты не допускаешь использование unsafe кода с указателями при обработке больших массивов и получения всяких нехорошестей?
Re: Модульные тесты и "безопасные" языки - хорошо.
От: Antikrot  
Дата: 16.07.09 14:36
Оценка:
Здравствуйте, criosray, Вы писали:

C>У кого еще остались сомнения в целесообразности модульных тестов, в целесообразности использования языков/платформ с большим количеством статических и динамических проверок...


настоящие джедаи используют С++ со включением всех runtime checks и статический анализатор кода
Re: Модульные тесты и "безопасные" языки - хорошо.
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.07.09 14:41
Оценка: 5 (4) +6 -3
Здравствуйте, criosray, Вы писали:

C>У кого еще остались сомнения в целесообразности модульных тестов, в целесообразности использования языков/платформ с большим количеством статических и динамических проверок...


Я где-то читал, что повсеместное введение автомобильных ремней безопасности не снизило количество смертей на дорогах: люди почувствовали себя "безопаснее" и стали ездить быстрее.

Точно так же введение более "безопасных" языков, инструментов и методик для написания программ не сделает их в надежнее (в том смысле, как эта надежность видна пользователям). Вместо этого программы будут писаться более небрежно, уровень квалификации программистов снизится, в надежде, что некоторая часть ошибок уйдет благодаря более безопасным инструментам.

Внедрение безопасных методик и инструментов может повысить продуктивность и качество каждого из нас, уже сложившихся программистов, но не увеличит качество индустрии в целом. Продуктивность может и увеличит, за счет снижения требований к квалификации работников.
Re: Модульные тесты и "безопасные" языки - хорошо.
От: Хвост  
Дата: 16.07.09 14:46
Оценка: 2 (2) +2 -1
Здравствуйте, criosray, Вы писали:


C>У кого еще остались сомнения в целесообразности модульных тестов, в целесообразности использования языков/платформ с большим количеством статических и динамических проверок...


конечно не осталось! ведь всем известно что модульные тесты и языки/платформы с большим количеством статических и динамических проверок исключают ошибки на корню!

P.S.
я конечно понимаю что тебе С++ в детстве на ухо наступил, но всё же вот тебе домашнее задание — подумать почему же Lockheed Martin пишут софт для всяких там шаттлов и стелсов на С++. И ещё подумать почему у них в среднем одна ошибка на полмиллиона строк кода.
People write code, programming languages don't.
Re[2]: Модульные тесты и "безопасные" языки - хорошо.
От: Mr.Cat  
Дата: 16.07.09 15:01
Оценка: +1
Здравствуйте, Хвост, Вы писали:
Х>я конечно понимаю что тебе С++ в детстве на ухо наступил, но всё же вот тебе домашнее задание — подумать почему же Lockheed Martin пишут софт для всяких там шаттлов и стелсов на С++.
Потому что негоже отказываться от тонн отлаженно-оттестированного и надежного легаси-кода.

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

А вот не факт, что код этот не подвергается какого-либо рода верификации. По "embedded code verification" гуглится огого сколько всего.

Ну и процесс тестирования грамотно поставлен.

Альсо, в аэрокосмосе наверняка последствия просочившихся в релиз багов для команды разработчиков весьма плачевны. Слышал про увольнения целых отделов на этой почве. Так что у руководства есть стимул набирать квалифицированных сотрудников, а у девелоперов — хорошо работать.
Re[2]: Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 16.07.09 15:03
Оценка: -1
Здравствуйте, Pzz, Вы писали:


C>>У кого еще остались сомнения в целесообразности модульных тестов, в целесообразности использования языков/платформ с большим количеством статических и динамических проверок...


Pzz>Я где-то читал, что повсеместное введение автомобильных ремней безопасности не снизило количество смертей на дорогах: люди почувствовали себя "безопаснее" и стали ездить быстрее.


Некорректная аналогия.
Re[2]: Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 16.07.09 15:04
Оценка: -1 :))) :)))
Здравствуйте, Хвост, Вы писали:


C>>У кого еще остались сомнения в целесообразности модульных тестов, в целесообразности использования языков/платформ с большим количеством статических и динамических проверок...


Х>конечно не осталось! ведь всем известно что модульные тесты и языки/платформы с большим количеством статических и динамических проверок исключают ошибки на корню!

Исключают такого рода ошибки на корню фактически, да.

Х>P.S.

Х>я конечно понимаю что тебе С++ в детстве на ухо наступил,
Я на С++ писал не меньше, а то и побольше Вашего.
Re[2]: Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 16.07.09 15:05
Оценка:
Здравствуйте, Antikrot, Вы писали:


C>>У кого еще остались сомнения в целесообразности модульных тестов, в целесообразности использования языков/платформ с большим количеством статических и динамических проверок...


A>настоящие джедаи используют С++ со включением всех runtime checks и статический анализатор кода


Ну и какой компилятор С++ поможет в вышеуказанном случае?
Re[3]: Модульные тесты и "безопасные" языки - хорошо.
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.07.09 15:06
Оценка: 1 (1) +4
Здравствуйте, criosray, Вы писали:

Pzz>>Я где-то читал, что повсеместное введение автомобильных ремней безопасности не снизило количество смертей на дорогах: люди почувствовали себя "безопаснее" и стали ездить быстрее.


C>Некорректная аналогия.


Почему?

Вернее нет, следовало бы ответить в вашем стиле, корректная! И никаких объяснений
Re[4]: Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 16.07.09 15:06
Оценка:
Здравствуйте, Antikrot, Вы писали:

C>>Важно другое — важно, что сильно не 0%, что счетчик не окажется сразу за array[3] и не будет перезаписан 0.

C>>Прямой доступ к памяти и ручные манипуляции указателями это бомба с часовым механизмом.
A>а типа в C# ты не допускаешь использование unsafe кода с указателями при обработке больших массивов и получения всяких нехорошестей?

unsafe крайне редкое явление и там, где его применяют, куда как хорошо понимают чем это чревато, а потому вдвойне внимательно тестируют такой код.
Re[4]: Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 16.07.09 15:08
Оценка: +4
Здравствуйте, Pzz, Вы писали:

Pzz>>>Я где-то читал, что повсеместное введение автомобильных ремней безопасности не снизило количество смертей на дорогах: люди почувствовали себя "безопаснее" и стали ездить быстрее.


C>>Некорректная аналогия.


Pzz>Почему?


Потому, что управляемые языки ИСКЛЮЧАЮТ "ДТП", связанные, с этим (манипуляция указателей) классом ошибки.
Ремень безопасности повышает шанс выжить в ДТП, но не уменьшает вероятности ДТП. Понимаете?
Re[3]: Модульные тесты и "безопасные" языки - хорошо.
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.07.09 15:16
Оценка: +1
Здравствуйте, criosray, Вы писали:

A>>настоящие джедаи используют С++ со включением всех runtime checks и статический анализатор кода


C>Ну и какой компилятор С++ поможет в вышеуказанном случае?


Ну gcc такие штучки ловит:

foo.cpp:4: warning: unused variable ‘i’
foo.cpp:7: warning: array subscript is above array bounds


Мне только пришлось вынести массив из тела функции. Иначе он довольно быстро соображал, что за записанными туда значениями все равно никто не придет, и не делал более глубокий анализ (ибо если ему очевидно, что в массив можно вовсе не писать, то по его мнению не за чем проверять, корректно ли вычисляется индекс, которым он все равно не собирался воспользоваться).
Re[3]: Модульные тесты и "безопасные" языки - хорошо.
От: Antikrot  
Дата: 16.07.09 15:35
Оценка:
Здравствуйте, criosray, Вы писали:

C>>>У кого еще остались сомнения в целесообразности модульных тестов, в целесообразности использования языков/платформ с большим количеством статических и динамических проверок...

A>>настоящие джедаи используют С++ со включением всех runtime checks и статический анализатор кода
C>Ну и какой компилятор С++ поможет в вышеуказанном случае?
а почему обязательно компилятор? тебе же религия не запрещает пользоваться fxcop-ом. вот и тут можно взять внешний bounds checker какой-нибудь.

впрочем... код такой — массив никуда не выносил:
#include <stdio.h>
int main()
{
    int i;
    int array[4];
    for (int i = 0; i <= 4; i++) { 
        array[i]=0;
    }

    for(int k = 0; k < 4; k++)
    {printf("%d ",array[k]);}
}


статически:

icl -Qdiag-enable:sc test.cpp
C:\temp>icl /Qdiag-enable:sc test.cpp
test.cpp
test.cpp(7): error #12049: Buffer overflow: array index of "array" is possibly o
utside the bounds; array "array" of size (0:3) can be indexed by value 4


динамически:

icl -RTC1 test.cpp
test.exe

выбрасывает в отладчик (если он есть конечно)
Re[3]: Модульные тесты и "безопасные" языки - хорошо.
От: Antikrot  
Дата: 16.07.09 15:38
Оценка: 1 (1) +2 -1 :))
Здравствуйте, criosray, Вы писали:

C>Я на С++ писал не меньше, а то и побольше Вашего.

если судить по этому форуму, то пИсал ты на него больше, чем все остальный тут вместе взятые
Re[4]: Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 16.07.09 15:46
Оценка: +1 -3 :))) :))) :)
Здравствуйте, Antikrot, Вы писали:

C>>Я на С++ писал не меньше, а то и побольше Вашего.

A>если судить по этому форуму, то пИсал ты на него больше, чем все остальный тут вместе взятые
Я не пИсал на него, как Вы выражаетесь. Просто я, имея нескромный опыт программирования на самых разных языках и парадигмах, понимаю на сколько убог этот язык.
Re[5]: Модульные тесты и "безопасные" языки - хорошо.
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.07.09 16:04
Оценка: +7
Здравствуйте, criosray, Вы писали:

C>Потому, что управляемые языки ИСКЛЮЧАЮТ "ДТП", связанные, с этим (манипуляция указателей) классом ошибки.

C>Ремень безопасности повышает шанс выжить в ДТП, но не уменьшает вероятности ДТП. Понимаете?

Управляемые языки исключают некоторые классы ошибок (например, обращение по невалидному указателю или за пределами массива), совсем никак не исключая других классов ошибок (например, использование некорректных алгоритмов).

Если продолжить аналогию с ДТП, управляемые языки (я бы, кстати, предпочел термин "безопасные", потому что безопасный язык можно реализовать на голом железе, без всяких "управляемых" сред) не позволяют вам нарушать правила дорожного движения. Но можно убиться насмерть не нарушив ни одного правила, потому что жизнь сложнее правил.

А пользователю вашему все равно, к какому классу относилась ошибка, убившая его файл или банковский счет, к тому, которые предотвращаются использованием "безопасных" инструментов, или к тому, которые не предотвращаются.
Re[5]: Модульные тесты и "безопасные" языки - хорошо.
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 16.07.09 16:20
Оценка:
Здравствуйте, criosray, Вы писали:

C>Потому, что управляемые языки ИСКЛЮЧАЮТ "ДТП", связанные, с этим (манипуляция указателей) классом ошибки.


Будут ошибки, связанные не с манипуляцией указателями, а с манипуляцией индексами. Если код перевести на C#, то ошибка никуда не исчезнет, но сразу проявится при запуске.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.