Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> А пишут ли ещё на Си++? 
:(
    Опции темы
k0rvin
Дата 12.2.2013, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Alexeis @ 12.2.2013,  13:21)
  Допустим у меня есть конечный автомат с 10ю входами. Каждый вход имеет 2^32 варианта значений. Известно, что есть всего 5-6 комбинаций входных значений, которые фейлят автомат. Итого имеем (2^32)^10 = 2^320 вариантов входного состояния. Для справки это число комбинаций с сотней десятичных нулей. Подскажите как мне юнит-тестами попасть на эти нужные 5-6 комбинаций входов.

Есть допустимый процент покрытия.

А про C/C++ один знакомый, занимающийся тестированием (авиационного, кажется) софта:
Цитата
Вот пара наиболее набивших оскомину (выдержек из отраслевого стандарта -- мое прим.).
Цитата
These aspects of the system should be considered when designed partitioning protection to determine their potential for violating that protection:

  • Hardware resource...
  • ...
  • Data coupling...
  • ...

Предсказуемость по ресурсам и связности данных фактически ставит крест на функциональных и декларативных языках. Первые очень сложно, а вторые невозможно прогнозировать в плане требований к памяти и времени. Некие верхние границы в целом на процесс, безусловно, есть всегда, но требования к предсказуемости распространяются на весь софт как целиком, так и на каждую его часть сколь угодно малого размера вплоть до отдельных пунктов low-level требований. Предсказуемость как свойство гарантирует возможность полностью восстановить работу комплекса по документации на него и данных чёрных ящиков. Думаю, не нужно объяснять, зачем это надо и почему это так важно для высококритичного ПО.

Цитата
The structural coverage analisys may be performed on the Source Code, unless the software level is A and the compiler generates object code that is not directly traceable to Source Code statements. ...

Это практически ставит крест на всякоразных сборщиках мусора (впрочем, они и в предыдущий пункт не вписываются), проверках индексов массивов, инициализированности переменных перед использованием итп, в общем всего того, что "черезчур умный" компилятор может добавить в код по своему усмотрению сверх того, что явно написано в сырцах. Потому как покрытие софта уровня А по факту собирается по объектному коду, и если нет однозначной трассировки на исходный или требования, то это дыры в покрытии, которые нужно закрыть. Попробуй закрыть дыру, которая в принципе не может случиться, потому что программер идиот нигде не вышел за пределы массива. Я утрирую, если кто не понял. И это всего лишь императив...
Потому-то тут C/C++ обычно рулят, они очень предсказуемы. Впрочем, даже Плюсам достаётся с его-то нулевой стоимостью. Исключения, RTTI и шаблоны обычно запрещены стандартом предприятия, в крайнем случае разрешены в очень консервативном виде. 


Про Ada он немного слышал:
Цитата
Был проект на ADA. Я им не занимался, но парни рассказывали, что супер. Там больше половины кода - это типизация, а тестов - анализ типов, их свойств и взаимоотношений. И покрытие собирается средой почти на автомате. Ишуков было мало и практически все - на использование типов.



--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
drug007
Дата 12.2.2013, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



Вполне разумные требования к надежности для авиационной и космической техники. Лично я считаю, что это как раз там, где должен использоваться С. Это ближе к железу. Да и как-то бессмысленно использовать Пролог для программирования блока управления двигателем, имхо, не для этого он. 

Но у меня вопрос - почему требования к data coupling ставит крест на функциональных и декларативных языках? Да, там порядок промежуточных действий не определен (в функциональных) или сами действия не определены (декларативные), но результат-то определен. Или я что-то путаю?

PM MAIL   Вверх
mes
Дата 12.2.2013, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(Alexeis @  12.2.2013,  12:21 Найти цитируемый пост)
Известно, что есть всего 5-6 комбинаций входных значений, которые фейлят автомат. 


Цитата(Alexeis @  12.2.2013,  12:21 Найти цитируемый пост)
Подскажите как мне юнит-тестами попасть на эти нужные 5-6 комбинаций входов.  

 smile 


--------------------
PM MAIL WWW   Вверх
Alexeis
Дата 12.2.2013, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Я не говорю, что юнит тесты должны обеспечить проверку всех вариантов. По факту есть такие проблемы. У меня реально такой проект где я руками попал на такой вариант, когда конечный автомат ломался лишь в некоторых точках. А вариантов примерно столько сколько я указал. Случайно вышел на круглые числа и система фейлиться. Потратил день отладки на выяснение причины, а потом еще время на исправление. Именно из-за особенностей С++ тратиться куча времени на поиск причин ошибок. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
k0rvin
Дата 13.2.2013, 07:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(drug007 @ 12.2.2013,  18:27)
Но у меня вопрос - почему требования к data coupling ставит крест на функциональных и декларативных языках? Да, там порядок промежуточных действий не определен (в функциональных) или сами действия не определены (декларативные), но результат-то определен. Или я что-то путаю?

Потому что они плохопредсказуемы по времени и памяти. Результат — это одно, а затраты ресурсов — другое, сложно писать код, подходящий под требования.

Добавлено через 1 минуту и 15 секунд
Цитата(Alexeis @ 12.2.2013,  22:05)
Я не говорю, что юнит тесты должны обеспечить проверку всех вариантов. По факту есть такие проблемы. У меня реально такой проект где я руками попал на такой вариант, когда конечный автомат ломался лишь в некоторых точках. А вариантов примерно столько сколько я указал. Случайно вышел на круглые числа и система фейлиться. Потратил день отладки на выяснение причины, а потом еще время на исправление. Именно из-за особенностей С++ тратиться куча времени на поиск причин ошибок.

А при чем тут  С++? Можно подумать на любом другом языке аналогичный код вел бы себя по-другому.


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Wowa
Дата 13.2.2013, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



user posted image
просьба распространять графику по другим сайтам smile
PM WWW   Вверх
Alexeis
Дата 13.2.2013, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Wowasmile 

Цитата(k0rvin @  13.2.2013,  08:06 Найти цитируемый пост)
А при чем тут  С++? Можно подумать на любом другом языке аналогичный код вел бы себя по-другому. 

  Еперный театр, конечно же по другому. Уже, наверное, десяток сообщений был о том, что ошибка должна диагностироваться в момент появления, а не постфактум по странностям поведения программы. Ставили пример C#, Java, Ada и т.д. и тут опять на тебе! Наша песня хороша, начинай сначала! 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
k0rvin
Дата 13.2.2013, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Alexeis @ 13.2.2013,  13:11)
  Еперный театр, конечно же по другому. Уже, наверное, десяток сообщений был о том, что ошибка должна диагностироваться в момент появления, а не постфактум по странностям поведения программы. Ставили пример C#, Java, Ada и т.д. и тут опять на тебе! Наша песня хороша, начинай сначала!

Здрасте-приехали. Пример того автомата реквестирую на C#/Java/Ada/Что-там-тебе-нравится, в котором внезапно не будет этой ошибки.


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Alexeis
Дата 13.2.2013, 13:33 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



  Еще раз читаем текст. 

Цитата(Alexeis @  13.2.2013,  14:11 Найти цитируемый пост)
Еперный театр, конечно же по другому. Уже, наверное, десяток сообщений был о том, что ошибка должна диагностироваться в момент появления, а не постфактум по странностям поведения программы. Ставили пример C#, Java, Ada и т.д. и тут опять на тебе! Наша песня хороша, начинай сначала!  

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
k0rvin
Дата 13.2.2013, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Alexeis @ 13.2.2013,  13:33)
Еще раз читаем текст. 

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

Лолшто, простите? Какие проверки исчезли? Еще раз: покажи как тот же C#
Цитата

Я не говорю, что юнит тесты должны обеспечить проверку всех вариантов. По факту есть такие проблемы. У меня реально такой проект где я руками попал на такой вариант, когда конечный автомат ломался лишь в некоторых точках. А вариантов примерно столько сколько я указал. Случайно вышел на круглые числа и система фейлиться. Потратил день отладки на выяснение причины, а потом еще время на исправление. Именно из-за особенностей С++ тратиться куча времени на поиск причин ошибок.


поможет тебе избежать этой ошибки.

P.S. А тестируют вообще-то релизный скомпилированный ппродукт.

Это сообщение отредактировал(а) k0rvin - 13.2.2013, 13:42


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
volatile
Дата 13.2.2013, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: нет
Всего: 85



Цитата(k0rvin @  13.2.2013,  13:42 Найти цитируемый пост)
Лолшто, простите? Какие проверки исчезли? 

k0rvin, я думаю ассертами люди увлекаюцца непомерно.
Цитата(drug007 @  11.2.2013,  17:35 Найти цитируемый пост)
Также полностью согласен с подходом, когда код обильно проверяется (ассертами или другими средствами языка)

 smile 

Alexeis, исключения надо кидать в вашем случае, а не ассертами обильно проверять.
Впрочем, телепатирую. Не видя код вряд-ли можно что-то конкретное подсказать.

PM MAIL   Вверх
drug007
Дата 14.2.2013, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



volatile, ассерты и исключения не взаимоисключающие вещи. И не вижу ничего выдающегося в обильных проверках чтобы их выделять курсивом - разве что некоторая художественность в слове "обильный". Видимо она (художественность) у вас не сочетается с образом сурового челябинского программиста?  smile 

Ассерты это по сути дела инваринты, а исключения это способ проинформировать вызывающий код о незапланированном развитии событий. Нарушение инварианта недопустимо ни при каких условиях и равно смерти, так как гарантировать корректную работу уже невозможно. А исключение лишь означает, что его нельзя обработать на текущем уровне кода, но вызывающий код вполне может это сделать. Это я к тому, что увлечься ассертами довольно сложно - ну если только не иметь в виду клинический случай ассерта после каждого оператора. Ясное дело, что проверка пользовательского ввода должна выбрасывать исключение, а вот передача нулевого указателя уже достойна ассерта.

Alexeis, имхо, имеет в виду, что средства языка должны выявлять максимум ошибок еще на этапе компиляции. и с++ с его блекджеком и прочим наследством лишен такого удовольствия - так как разработчикам компилятора проще будет повесится, чем добавить такую красоту, да и помимо имплементации еще нужно же и дизайн продумать - а тут просто черт ногу сломит. За навороченность языка и совместимость с legacy кодом приходится платить. И получилось, что С это human-readable ассемблер, а С++ - ассемблер с классами, причем дизайн языка не блещет в силу того что язык был первопроходцем. Та же STL неоднозначна, но глупо ругать Степанова за то, что он был первым. И я не ругаю плюсы, ни в коем случае, просто факт. С++ сложно ругать - его достоинства в одной ситуации могут быть и преимуществами и наоборот.
PM MAIL   Вверх
volatile
Дата 14.2.2013, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: нет
Всего: 85



Цитата(drug007 @  14.2.2013,  13:26 Найти цитируемый пост)
Ассерты это по сути дела инваринты, а исключения это способ проинформировать вызывающий код о незапланированном развитии событий. Нарушение инварианта недопустимо ни при каких условиях и равно смерти

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

Цитата(Alexeis @  13.2.2013,  13:33 Найти цитируемый пост)
На С++ отладил конечный автомат, выпустил релиз, и все проверки благополучно исчезли из кода

Вот именно ассерты и исчезли.

зы:
Мне уже вообще по барабану с вами спорить. просто хочу помочь Alexeis

PM MAIL   Вверх
drug007
Дата 22.2.2013, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



Цитата(volatile @  14.2.2013,  18:31 Найти цитируемый пост)
  
drug007, вам прежде чем строчить гневные посты, следует хоть поверхостно ознакомицца с особенностями языка. 
Прочитайте про ассерты. Это дебаговая вещь. причем исключительно  дебаговая.
фактически в релизе это - ничто. Т.е., что вы их написали, что не написали - смерти, не будет.  

Я так понимаю, что вы ассерты и не юзаете, отсюда и такой вывод сделали? Возможно я неправильно выразился, но вы совсем не поняли, что я имел в виду. Под "смерти подобно" я имел в виду, что ассерт убивает программу - если условие в ассерте не выполнилось, это означает, что приложение вышло за рамки допустимого, восстановить работоспособное состояние невозможно и выполнение приложения не имеет смысла (т.е. был нарушен инвариант). А исключение просто сигнализирует, что что-то пошло не так и вполне возможно (и чаще всего) что восстановить работоспособность приложения возможно. Т.е. не было нарушения инварианта, а возникла нетипичная ситуация неразрешимая в данном блоке кода. И происходит развертывание стека до нахождения кода, способного обработать это исключение. И только если такого обработчика не будет найдено, тогда уже будет нарушен инвариант, что все исключения должны быть обработаны и будет program terminated. То, что ассерты используются при отладке и в релизе их не будет - попрекать меня якобы не знанием этого факта не стоило, осведомлен. Более того, именно этот факт, что ассерты сразу убивают приложение и что их не будет в релизе вообще заставляет удивиться вашему утверждению, что ассертами можно чересчур увлечься и следует использовать исключения - ведь ассерты и исключения это довольно ортогональные вещи. Уж вам то, знакомому с языком не понаслышке должно быть это известно.

З.Ы. хотя возможно это я вас не понял - вы имели в виду, что в ассертах не должно быть проверок, нужных в релизе, т.к. в релизе ассертов не будет и такие проверки нужно организовывать в виде исключений? тогда я с вами совершенно согласен.  smile 

Это сообщение отредактировал(а) drug007 - 22.2.2013, 19:29
PM MAIL   Вверх
mes
Дата 22.2.2013, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(Alexeis @  12.2.2013,  21:05 Найти цитируемый пост)
Именно из-за особенностей С++ .  

Вы просто не умеете их готовить ©

Цитата(Alexeis @  12.2.2013,  21:05 Найти цитируемый пост)
Именно из-за особенностей С++ тратиться куча времени на поиск причин ошибок.  

ага, может, если программировать нa нем как на дельфи.. 

Цитата(Alexeis @  13.2.2013,  12:33 Найти цитируемый пост)
 То что пропустили юнит тесты потом можно ловить неделями, изучая странности работы программы.  


Цитата(k0rvin @  13.2.2013,  06:06 Найти цитируемый пост)
А при чем тут  С++? Можно подумать на любом другом языке аналогичный код вел бы себя по-другому. 

 smile 


Цитата(Alexeis @  13.2.2013,  12:11 Найти цитируемый пост)
Уже, наверное, десяток сообщений был о том, что ошибка должна диагностироваться в момент появления, а не постфактум по странностям поведения программы.

Да, и С++ позволяет так писать.. но также позволяет и по дрругому.. 
Ну а то что в неуклюжих руках он опасен, полностью поддерживаю.. Для таких рук есть  шарпы, пусть  там и кодоляпят... 

и да.. Шарп позволяет загладить неуклюжeсти, но качества коду это не прибавляет..

Добавлено через 4 минуты и 19 секунд
итого вопрос упирается в то,  лучшим считается тот язык, на котором труднее споткнуться, или на котором можно свободнее выразить мысль ?

Это сообщение отредактировал(а) mes - 22.2.2013, 21:03


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.1025 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.