OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 15 Декабрь, 2019 07:32

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 94 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
СообщениеДобавлено: Среда, 01 Апрель, 2009 14:00 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4539
Откуда: Россия, Орёл
Уважаемый Валерий Лаптев сообщил главный принцип экстремальнго программирования: "сначала тесты, потом код." Уважаемый Madzi сообщил, что он с таким подходом не согласен, его принцип "сначала алгоритм, потом код, а потом уж тесты (если очень хочется).".

Братцы, каждый поделился своими знаниями/мнениями. Большая просьба - публичных споров здесь не начинать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Апрель, 2009 15:52 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9165
Откуда: Россия, Орёл
Madzi писал(а):
Вообще-то, правильно сначала алгоритм, потом код, а потом уж тесты (если очень хочется).

Не всегда. Иногда даже правильно поставить задачу на алгоритмизацию трудно без формулировки разных примеров. Часто каких-то особых случаев. Потом эти особые случаи будут дополнительным ориентиром на всех этапах, чтоб не ошибиться и всё учесть. Конкретная опора мозгам тоже нужна.
Конечно, если задача абсолютно "однородна" на всей области входных параметров, то можно и не заморачиваться заранее.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Апрель, 2009 16:41 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Madzi писал(а):
Vlad писал(а):
Блин, да поймите вы, программирование - это не только математика. Если бы все так было просто...

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


Если компилятор не проверяет сложение килограммов с километрами (что мы и имеем в случае оберона, кстати), то тестирование - единственный эффективный способ заставить работать такую "физическую" программу.

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


Про нежелание загружать себя лишними "знаниями" - это скорее к некоторым оберонщикам, которые ведутся на пропаганду простоты и отказ от всего "лишнего", и думают, что оберон поможет им не учиться всяким сложным вещам типа юнит-тестирования :)

Madzi писал(а):
У меня понятия о тестировании самые разнообразные, поскольку я участвовал в разных проектах от академических до индустриальных


Не верю (с) :) При все уважении. Можно писать без тестов (и пишут, и даже на C), но это неэффективно. Каменный век. И чем сложнее система - тем большее значение имеют автоматические тесты.

Madzi писал(а):
, но лично я предпочитаю тестировать программу на бумаге, до того как она будет реализована в языке на машине, а затем, следует проверка правильности набивки. При этом программа в 99% работает правильно с первого раза, сразу после набивки. и лишь 1% когда требуется некотороая переработка (было когда оказались ошибки в спецификациях в документации).


И вы говорите, что участвовали в каких-то реальных проектах? :) Ошибки/недодумки/недосказки в спецификациях - это и есть те самые 99% багов. Или вы действительно думаете, что в юнит тестах на C++ я тестирую выход за границы массивов, нарушение типизации, обращение по невалидному указателю, циклы с break и прочие ужасы С++, от которых (якобы) избавлен оберон? :)
Вот смотрите. У вас есть замечательная функция: parent_directory(path), которая как и следует из названия возращает директорию одного уровня выше для пути. Замечательна эта функция тем, что она математически доказана на бумажке, закодирована в лучших традициях Дейкстры и даже снабжена комментарием. Такая идиллия продолжается пару лет, пока ваш коллега (который работает совсем над другим проектом, но с которым у вас общая библиотека) не обнаруживает, что функция неправильно работает для случая вот такого пути: "c:\dir1\dir2\". А именно - она возвращает "c:\dir1\dir2". В комментарии такой случай (слэш на конце) не описан, в математическом доказательстве на бумажке (это конечно из области фантастики, но допустим, что ваш коллега эту бумажку умудрился откопать) - такой случай тоже никак не фигурирует. Исполненный уверенности, что он исправляет "багу", ваш коллега исправляет функцию (и прикладывает новую бумажку с новым доказательством) так, что она начинает возвращать "c:\dir1". Через полгода вам звонит клиент и говорит, что ваша !@#$% программа удалила ему папку "Мои документы" с очень важными документами. Вы начинаете разбираться и находите этот "фикс" вашего коллеги (это при условии, что вы пользуетесь какой-нибудь CVS, хотя тут некоторые утверждали, что при использовании оберона она им нафиг не нужна). Вы приходите к коллеге и начинаете ругаться, на что он вам выкатывает "железный" аргумент в пользу своей невиновности: безупречное математическое доказательство на бумажке :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Апрель, 2009 16:53 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Info21 писал(а):
Конечно, test-driven development -- очередное открытие старого инженерного колеса программерами. Подаваемое, как обычно, как сугубое откровение. А как же.


Да никто его не подает как откровение. Просто оберонщики склонны преувеличивать роль языка в разработке. Юнит-тестирование им стало уже не нужно, блин...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Апрель, 2009 16:59 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Madzi писал(а):
Вообще-то, правильно сначала алгоритм, потом код, а потом уж тесты (если очень хочется).


Почитайте про BDD. В смысле я не предлагаю какой-нибудь труд на эту тему изучить, а просто, посмотреть что это такое. Для расширения кругозора.

Madzi писал(а):
Это называется несоответствие ТЗ. И доказвать что-либо в данном случае глупо.


Заказчику не нужно соответствие ТЗ (которое скорее всего вы сами и составите). Ему нужна программа для решения его задач.

Madzi писал(а):
А ещё представте себе кошмар, существуют языки в которых нет поддержки исключений. И на них даже программы пишут, и сложные. И даже операционные системы :)


C.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Апрель, 2009 17:17 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4539
Откуда: Россия, Орёл
Вот пришёл наш Фома
Vlad писал(а):
Не верю (с)
и клеветник
Vlad писал(а):
...Просто оберонщики склонны преувеличивать роль языка в разработке. Юнит-тестирование им стало уже не нужно, блин...
Он сначала решает за "обернщиков" что им нужно или не нужно. И, на основе собственных выводов, начинает строить критику.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Апрель, 2009 17:22 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Евгений Темиргалеев писал(а):
клеветник


Поздравляю со вступлением в ряды верующих под флаг info21 :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Апрель, 2009 17:26 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 573
Откуда: Россия, Санкт-Петербург
Можете не верить. Я вас прекрасно понимаю, потому что работал в команде с такими людьми. Для вас мир уже состоялся и пытаться вас переубедить глупо. Тем более, что в коллективной работе, когда работают программисты разного уровня и язык (С++) не способен "утирать сопли" каждому новичку ничего кроме тестирования не остаётся. Как бы профессионалы не исхищрались над своими кусками. Но есть другой мир и другие подходы.
Когда каждую ночь идёт сборка проекта и не дай бог туда кто-то положил не протестированный модуль, который не даст проекту собраться, - это маразм. Я против такого программирования, хотя и вынужден иногда в нём участвовать. Именно по этому поводу я и пишу: ТЕСТИРОВАНИЕ - ФИГНЯ. И ничего более.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Апрель, 2009 17:39 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Madzi писал(а):
Можете не верить. Я вас прекрасно понимаю, потому что работал в команде с такими людьми. Для вас мир уже состоялся и пытаться вас переубедить глупо. Тем более, что в коллективной работе, когда работают программисты разного уровня и язык (С++) не способен "утирать сопли" каждому новичку ничего кроме тестирования не остаётся.


Гхм. Новички - это конечно серьезный фактор (особенно для C++). Но не в моем случае. В моей команде все имеют инженерный уровень выше среднего. Все понимают важность тестирования, в том числе и юнит.

Madzi писал(а):
Когда каждую ночь идёт сборка проекта и не дай бог туда кто-то положил не протестированный модуль, который не даст проекту собраться, - это маразм.


Гхм. Это вы к чему? Каким боком сборка проекта к юнит-тестированию?

Madzi писал(а):
Я против такого программирования, хотя и вынужден иногда в нём участвовать. Именно по этому поводу я и пишу: ТЕСТИРОВАНИЕ - ФИГНЯ. И ничего более.


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Апрель, 2009 17:54 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Vlad писал(а):
Евгений Темиргалеев писал(а):
клеветник
Поздравляю со вступлением в ряды верующих под флаг info21 :)
В то же самое время:
Info21 писал(а):
Любое формальное доказательство очень даже чревато ошибками в силу своей занудности. Живой организм как ни старается, но всё-таки не терпит занудности. Тестирование как дополнение к систематическим методам программироваия -- поэтому необходимо.
Бессовестный клеветник!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Апрель, 2009 18:15 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Сергей Губанов писал(а):
Info21 писал(а):
Тестирование как дополнение к систематическим методам программироваия -- поэтому необходимо.
Бессовестный клеветник!


Ну что ж поделаешь, и info21 может сказать правильную вещь.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Апрель, 2009 18:21 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3127
Откуда: Астрахань
Info21 писал(а):
Все правы :)

Конечно, test-driven development -- очередное открытие старого инженерного колеса программерами. Подаваемое, как обычно, как сугубое откровение. А как же.

Или воспринимаемое как откровение -- и тут странная параллель между массами молодых программеров и массами революционных курсисток-энтуазисток. (Это к социологии сферы ИТ.)

Пара замечаний. Любое формальное доказательство очень даже чревато ошибками в силу своей занудности. Живой организм как ни старается, но всё-таки не терпит занудности. Тестирование как дополнение к систематическим методам программироваия -- поэтому необходимо.

Но еще необходимее -- подвергать молодые организмы жестокому обучению систематическим методам -- желательно до того, как они корень "bug" в любом варианте услышат.

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

1. Да, про ХР - верно. Западники подали это как некое откровение в технологии разработки. Хотя мы аналогично работали еще в начале 80-х. И парами, и маленькие шажки, и одновременно с реальным кодом сразу и тестовый код клепали. По другому было не выкрутиться при написании оси восьмеричными кодами.
2. Категорически согласен с последней фразой: "жестокое обучение систематическим методам".
К сожалению в наш век "демократии", которая как ржа пролезла в образование, "жестоко" обучать достаточно сложно. Воплей много о "жестоком" обращении с детьми и даже с 20-тилетними дылдами-студентами... :( Разве что автоматизировать эту "жестокость" :).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Апрель, 2009 18:29 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3127
Откуда: Астрахань
Vlad писал(а):
Сергей Губанов писал(а):
Info21 писал(а):
Тестирование как дополнение к систематическим методам программироваия -- поэтому необходимо.
Бессовестный клеветник!


Ну что ж поделаешь, и info21 может сказать правильную вещь.

Он обычно всегда говорит правильные вещи... :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Апрель, 2009 20:05 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Валерий Лаптев писал(а):
Он обычно всегда говорит правильные вещи... :)


Да? А я несколько удивился, не услышав привычного: "читайте Дейкстру и тестирование вам будет не нужно".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Апрель, 2009 20:21 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9165
Откуда: Россия, Орёл
Роль разная у тестирования.

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

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

Человека, не умеющего обсчитать профиль самолёта, никто даже не подпустит к изготовлению макета и обдувке в трубе :) А в ИТ многие считают, что труба заменяет расчёты.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 02 Апрель, 2009 09:27 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3127
Откуда: Астрахань
Vlad писал(а):
Валерий Лаптев писал(а):
Он обычно всегда говорит правильные вещи... :)


Да? А я несколько удивился, не услышав привычного: "читайте Дейкстру и тестирование вам будет не нужно".

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 02 Апрель, 2009 09:29 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3127
Откуда: Астрахань
Илья Ермаков писал(а):
Роль разная у тестирования.

Человека, не умеющего обсчитать профиль самолёта, никто даже не подпустит к изготовлению макета и обдувке в трубе :) А в ИТ многие считают, что труба заменяет расчёты.

Какое ТОЧНОЕ сравнение!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 02 Апрель, 2009 11:09 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1040
Откуда: Россия, Чебоксары
Хотел тут ответить, но уже сильно не по теме получается.
В общем, кому интересно про проектирование, тестирование и иже с ними, прошу вот сюда: viewtopic.php?p=26835 !


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 02 Апрель, 2009 16:43 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1215
Vlad писал(а):
Вот смотрите. У вас есть замечательная функция: parent_directory(path), которая как и следует из названия возращает директорию одного уровня выше для пути.
...
Вы приходите к коллеге и начинаете ругаться, на что он вам выкатывает "железный" аргумент в пользу своей невиновности: безупречное математическое доказательство на бумажке :)


И что изменится если вместо "безупречного математического доказательства" будет длинный список пройденных тестов?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 02 Апрель, 2009 16:47 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3127
Откуда: Астрахань
Trurl писал(а):
Vlad писал(а):
Вот смотрите. У вас есть замечательная функция: parent_directory(path), которая как и следует из названия возращает директорию одного уровня выше для пути.
...
Вы приходите к коллеге и начинаете ругаться, на что он вам выкатывает "железный" аргумент в пользу своей невиновности: безупречное математическое доказательство на бумажке :)


И что изменится если вместо "безупречного математического доказательства" будет длинный список пройденных тестов?

Тестирование никогда не докажет отсутствие ошибок, а только их наличие.
А исчерпывающее тестирование невозможно.
Мысль эту впервые тоже, между прочим, высказал Дейкстра.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 94 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB