![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
k0rvin |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
Есть допустимый процент покрытия. А про C/C++ один знакомый, занимающийся тестированием (авиационного, кажется) софта:
Про Ada он немного слышал:
-------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||||||||
|
|||||||||||
drug007 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
Вполне разумные требования к надежности для авиационной и космической техники. Лично я считаю, что это как раз там, где должен использоваться С. Это ближе к железу. Да и как-то бессмысленно использовать Пролог для программирования блока управления двигателем, имхо, не для этого он.
Но у меня вопрос - почему требования к data coupling ставит крест на функциональных и декларативных языках? Да, там порядок промежуточных действий не определен (в функциональных) или сами действия не определены (декларативные), но результат-то определен. Или я что-то путаю? |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
||||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Я не говорю, что юнит тесты должны обеспечить проверку всех вариантов. По факту есть такие проблемы. У меня реально такой проект где я руками попал на такой вариант, когда конечный автомат ломался лишь в некоторых точках. А вариантов примерно столько сколько я указал. Случайно вышел на круглые числа и система фейлиться. Потратил день отладки на выяснение причины, а потом еще время на исправление. Именно из-за особенностей С++ тратиться куча времени на поиск причин ошибок.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
k0rvin |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
Потому что они плохопредсказуемы по времени и памяти. Результат — это одно, а затраты ресурсов — другое, сложно писать код, подходящий под требования. Добавлено через 1 минуту и 15 секунд
А при чем тут С++? Можно подумать на любом другом языке аналогичный код вел бы себя по-другому. -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||
|
|||||
Wowa |
|
|||
Эксперт ![]() Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
![]() просьба распространять графику по другим сайтам ![]() |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Wowa,
![]()
Еперный театр, конечно же по другому. Уже, наверное, десяток сообщений был о том, что ошибка должна диагностироваться в момент появления, а не постфактум по странностям поведения программы. Ставили пример C#, Java, Ada и т.д. и тут опять на тебе! Наша песня хороша, начинай сначала! -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
k0rvin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
Здрасте-приехали. Пример того автомата реквестирую на C#/Java/Ada/Что-там-тебе-нравится, в котором внезапно не будет этой ошибки. -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Еще раз читаем текст.
На С++ отладил конечный автомат, выпустил релиз, и все проверки благополучно исчезли из кода. То что пропустили юнит тесты потом можно ловить неделями, изучая странности работы программы. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
k0rvin |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
Лолшто, простите? Какие проверки исчезли? Еще раз: покажи как тот же C#
поможет тебе избежать этой ошибки. P.S. А тестируют вообще-то релизный скомпилированный ппродукт. Это сообщение отредактировал(а) k0rvin - 13.2.2013, 13:42 -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||
|
|||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
k0rvin, я думаю ассертами люди увлекаюцца непомерно.
![]() Alexeis, исключения надо кидать в вашем случае, а не ассертами обильно проверять. Впрочем, телепатирую. Не видя код вряд-ли можно что-то конкретное подсказать. |
|||
|
||||
drug007 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
volatile, ассерты и исключения не взаимоисключающие вещи. И не вижу ничего выдающегося в обильных проверках чтобы их выделять курсивом - разве что некоторая художественность в слове "обильный". Видимо она (художественность) у вас не сочетается с образом сурового челябинского программиста?
![]() Ассерты это по сути дела инваринты, а исключения это способ проинформировать вызывающий код о незапланированном развитии событий. Нарушение инварианта недопустимо ни при каких условиях и равно смерти, так как гарантировать корректную работу уже невозможно. А исключение лишь означает, что его нельзя обработать на текущем уровне кода, но вызывающий код вполне может это сделать. Это я к тому, что увлечься ассертами довольно сложно - ну если только не иметь в виду клинический случай ассерта после каждого оператора. Ясное дело, что проверка пользовательского ввода должна выбрасывать исключение, а вот передача нулевого указателя уже достойна ассерта. Alexeis, имхо, имеет в виду, что средства языка должны выявлять максимум ошибок еще на этапе компиляции. и с++ с его блекджеком и прочим наследством лишен такого удовольствия - так как разработчикам компилятора проще будет повесится, чем добавить такую красоту, да и помимо имплементации еще нужно же и дизайн продумать - а тут просто черт ногу сломит. За навороченность языка и совместимость с legacy кодом приходится платить. И получилось, что С это human-readable ассемблер, а С++ - ассемблер с классами, причем дизайн языка не блещет в силу того что язык был первопроходцем. Та же STL неоднозначна, но глупо ругать Степанова за то, что он был первым. И я не ругаю плюсы, ни в коем случае, просто факт. С++ сложно ругать - его достоинства в одной ситуации могут быть и преимуществами и наоборот. |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
![]() drug007, вам прежде чем строчить гневные посты, следует хоть поверхостно ознакомицца с особенностями языка. Прочитайте про ассерты. Это дебаговая вещь. причем исключительно дебаговая. фактически в релизе это - ничто. Т.е., что вы их написали, что не написали - смерти, не будет. ![]()
Вот именно ассерты и исчезли. зы: Мне уже вообще по барабану с вами спорить. просто хочу помочь Alexeis, |
|||
|
||||
drug007 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
Я так понимаю, что вы ассерты и не юзаете, отсюда и такой вывод сделали? Возможно я неправильно выразился, но вы совсем не поняли, что я имел в виду. Под "смерти подобно" я имел в виду, что ассерт убивает программу - если условие в ассерте не выполнилось, это означает, что приложение вышло за рамки допустимого, восстановить работоспособное состояние невозможно и выполнение приложения не имеет смысла (т.е. был нарушен инвариант). А исключение просто сигнализирует, что что-то пошло не так и вполне возможно (и чаще всего) что восстановить работоспособность приложения возможно. Т.е. не было нарушения инварианта, а возникла нетипичная ситуация неразрешимая в данном блоке кода. И происходит развертывание стека до нахождения кода, способного обработать это исключение. И только если такого обработчика не будет найдено, тогда уже будет нарушен инвариант, что все исключения должны быть обработаны и будет program terminated. То, что ассерты используются при отладке и в релизе их не будет - попрекать меня якобы не знанием этого факта не стоило, осведомлен. Более того, именно этот факт, что ассерты сразу убивают приложение и что их не будет в релизе вообще заставляет удивиться вашему утверждению, что ассертами можно чересчур увлечься и следует использовать исключения - ведь ассерты и исключения это довольно ортогональные вещи. Уж вам то, знакомому с языком не понаслышке должно быть это известно. З.Ы. хотя возможно это я вас не понял - вы имели в виду, что в ассертах не должно быть проверок, нужных в релизе, т.к. в релизе ассертов не будет и такие проверки нужно организовывать в виде исключений? тогда я с вами совершенно согласен. ![]() Это сообщение отредактировал(а) drug007 - 22.2.2013, 19:29 |
|||
|
||||
mes |
|
||||||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
Вы просто не умеете их готовить ©
ага, может, если программировать нa нем как на дельфи..
![]()
Да, и С++ позволяет так писать.. но также позволяет и по дрругому.. Ну а то что в неуклюжих руках он опасен, полностью поддерживаю.. Для таких рук есть шарпы, пусть там и кодоляпят... и да.. Шарп позволяет загладить неуклюжeсти, но качества коду это не прибавляет.. Добавлено через 4 минуты и 19 секунд итого вопрос упирается в то, лучшим считается тот язык, на котором труднее споткнуться, или на котором можно свободнее выразить мысль ? Это сообщение отредактировал(а) mes - 22.2.2013, 21:03 |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила ведения Религиозных войн | |
|
1. Уважайте собеседника 2. Собеседник != враг 3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez" С уважением, Smartov. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Религиозные войны | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |