2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Как эффективно отследить многие ошибки после изменений?
Сообщение20.12.2010, 12:29 
Аватара пользователя


01/04/10
910
Zealint в сообщении #389282 писал(а):
Опять же, когда научитесь программировать, поймете, что ничего больше кроме этого не умеете. А к 35 годам, как вы говорите, студенты будут предпочтительнее вас в силу более скорого мышления. Так обычно и происходит. К этому моменту нужно успеть занять руководящую должность. Искусственный интеллект написать нельзя - это не из области программирования. Веб страничка - это вёрстка, но не программирование. Веб-сайт, наверно, вы имели в виду. Вообще, разделяйте Computer Science и программирование - это разные области. В нашем гнилом обществе нужны прикладные науки, вот все ими и занимаются. Развитие фундаментальных для многих - круто, но сколько круто, столько же и непонятно, почему им надо этим заниматься.


И сейчас многие быстрее думают, чем я, однако я работаю. Вообще у меня есть подозрение, что не так всё хорошо с поиском кандидатов на должность программиста. Где эти ненаглядные студенты? Например, я знаю одну вакансию рядового программиста, где программиста не могут найти наверное уже месяца два (при том, что это в Москве, а офис почти в центре).
Я не хочу занимать должность тупого манагера, слишком скучно. Если и буду руководителем, то только тогда, когда смогу быть на уровне ведущего программиста.
Я так-же изучаю фундаментальные вещи, так как ограничиваться чисто прикладными вещами скучно, но продвигаюсь очень медленно. То есть я не ограничиваюсь чистым программированием, в отличии от многих программистов с которыми я сталкивался лично.

Sanyok

Спасибо, я почитаю эту книгу. Но есть большой вопрос. Мне давно в голову приходили идеи автоматического тестирования, но есть большие препядствия. Например, я написал хэндлер который вызывается веб-сервером, так вот этот хэндлер принимает в качестве аргумента указатель на большую, большую структурку и эта структурка передается в качестве аргумента API, которые я использую в этом хэндлере. Чтобы написать автоматический тест, нужно сэмулировать инициализацию этой структурки, а это очень сложно и нужно расковырять пол исходного кода этого сервера. Вы можете посмотреть исходный код Apache httpd и посмотреть код модулей.

Я незнаю как там можно организовать автоматическое тестирование.

 Профиль  
                  
 
 Re: Как эффективно отследить многие ошибки после изменений?
Сообщение20.12.2010, 14:49 
Аватара пользователя


01/04/10
910
Sanyok

Если быть более конкретным, то как бы Вы написали тест вот для этой функции?

http://lxr.evanmiller.org/http/source/h ... ule.c#L119

Вкратце о ней:

ngx_http_limit_zone_handler() принимает в качестве аргумента объект структуры ngx_http_request_t, который хранит все состояние текущего запроса. В этой функции сосредоточена почти вся логика этого модуля (его описание можно найти в мануале). Это callback функция как Вы можете заметить. Регистрируется она в ngx_http_limit_zone_init(), на которую есть ссылка в объекте структуры регистрирующей этот модуль.

 Профиль  
                  
 
 Re: Как эффективно отследить многие ошибки после изменений?
Сообщение20.12.2010, 15:13 
Заслуженный участник


08/04/08
8556
На работе придумали новый прибамбас: ты пишешь код, скидываешь его в хранилище и сразу же выбирается случайный сотрудник, ему назначается задача посмотреть на твой код примерно полчаса. Сформулировано несколько простых принципов проверки кода + сотрудники сами могут чего-то подсказать, когда смотреть будут. В принципе часть ошибок отслеживается, хотя немного тупо.

-- Пн дек 20, 2010 18:18:29 --

А вообще такое ощущение, что есть 2 типа кусков кода: которые надо тестить эмпирически (особенно низкоуровневые какие-нибудь) и которые надо писать на голой логике, продумывая все варианты, ну а потом тестить на предмет тупых ошибок.
Ошибки все всё равно тупые...

 Профиль  
                  
 
 Re: Как эффективно отследить многие ошибки после изменений?
Сообщение21.12.2010, 11:07 
Заслуженный участник
Аватара пользователя


12/10/05
478
Казань
creative, поскольку структура действительно очень большая, я бы написал сначала функцию для сохранения этой структуры в текстовом формате на диске (например, в отдельном логе). Потом засунул бы эту ф-ю в тело ф-ции ngx_http_limit_zone_handler(). Аналогично поступаем с тем значением, которое ф-я возвращает. В итоге для каждого вызова этой ф-ции получаем входное и выходное значения.
Тут еще вопрос в том, определяется ли поведение этой ф-ции только теми значениями, которые ей передаются в виде параметров. Если да, то нужна только информация о том, какой результат работы функции должен соответствовать определенному набору входных параметров. Если нет, то нужно обеспечить какие-то дополнительные "тепличные условия" (например, наличие каких-либо файлов на диске, открытых соединений и т.п.).
Вот это:
Цитата:
информация о том, какой результат работы функции должен соответствовать определенному набору входных параметров

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

 Профиль  
                  
 
 Re: Как эффективно отследить многие ошибки после изменений?
Сообщение21.12.2010, 12:26 
Аватара пользователя


01/04/10
910
Sanyok в сообщении #389737 писал(а):
creative, поскольку структура действительно очень большая, я бы написал сначала функцию для сохранения этой структуры в текстовом формате на диске (например, в отдельном логе). Потом засунул бы эту ф-ю в тело ф-ции ngx_http_limit_zone_handler(). Аналогично поступаем с тем значением, которое ф-я возвращает. В итоге для каждого вызова этой ф-ции получаем входное и выходное значения.
Тут еще вопрос в том, определяется ли поведение этой ф-ции только теми значениями, которые ей передаются в виде параметров. Если да, то нужна только информация о том, какой результат работы функции должен соответствовать определенному набору входных параметров. Если нет, то нужно обеспечить какие-то дополнительные "тепличные условия" (например, наличие каких-либо файлов на диске, открытых соединений и т.п.).
Вот это:
Цитата:
информация о том, какой результат работы функции должен соответствовать определенному набору входных параметров

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


Да, все это теоретически звучит хорошо, однако на практике трудно понять какие значения из этой структуры использует функция, так как внутри неё могут быть API в которые тоже передается объект этой структуры, а в коде этих API могут быть другие функции, которые принимают в качестве аргумента этот объект.
И ещё один вопрос, nginx и apache httpd уже написаны, но я не вижу в исходном дистрибутиве подобных тестов. Apache httpd открытый проект и если там и были тесты, то они должны быть в дистрибутиве, а их нет (не считая нескольких маленьких программок в папке tests).
Как тогда он тестировался? На их сайте я не вижу упоминания о unit тестировании.

 Профиль  
                  
 
 Re: Как эффективно отследить многие ошибки после изменений?
Сообщение21.12.2010, 17:49 
Заслуженный участник
Аватара пользователя


12/10/05
478
Казань
Цитата:
Да, все это теоретически звучит хорошо, однако на практике трудно понять какие значения из этой структуры использует функция, так как внутри неё могут быть API в которые тоже передается объект этой структуры, а в коде этих API могут быть другие функции, которые принимают в качестве аргумента этот объект.

creative, если мы пытаемся протестировать какую-то ф-ю, мы обязаны хотя бы приблизительно знать, какие входные параметры ей нужны, и какого результата от нее ждать. Если мы этого не знаем, то как мы можем эту функцию использовать в своей программе?
Опять же, Вы привели пример некой уже готовой ф-ции, написанной не Вами. На вскидку, я вижу 1 причину, что бы такую ф-ю тестировать: уверенность в том, что ф-я работает не совсем так, как требуется. А что бы быть в этом уверенным, нужно знать, как она должна работать, т.е., возвращаемся к тому, что необходимо
Цитата:
наличие хотя бы приблизительного словесного описания алгоритма ее работы (например, какие поля в этой большой входной структуре она использует и для чего)

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

 Профиль  
                  
 
 Re: Как эффективно отследить многие ошибки после изменений?
Сообщение21.12.2010, 22:21 
Заслуженный участник
Аватара пользователя


12/10/05
478
Казань
Недавно в голову пришло (казалось бы, очевидная вещь, не знаю, почему сразу в голову не пришло): если это компонент сервера, то тестировать его в какой-то степени можно, написав клиент, который будет посылать различные запросы серверу. Конечно, это не совсем то, что нужно, но все же лучше, чем совсем ничего.

 Профиль  
                  
 
 Re: Как эффективно отследить многие ошибки после изменений?
Сообщение23.12.2010, 00:17 
Аватара пользователя


01/04/10
910
Sanyok в сообщении #389860 писал(а):
creative, если мы пытаемся протестировать какую-то ф-ю, мы обязаны хотя бы приблизительно знать, какие входные параметры ей нужны, и какого результата от нее ждать. Если мы этого не знаем, то как мы можем эту функцию использовать в своей программе? ...


На самом деле в подобных функциях не нужно знать какие именно поля мы используем, так как во все API которые находятся в этой функции мы можем передавать объект запроса, а результат иметь в виде внешнего эффекта (например, запись в лог, отдача ответа клиенту и т.д.). С данными моих структур всё понятно, а вот как быть с эмуляцией подачи объекта в функцию, вот в чем затык у меня происходит при желании написать юнит тест.

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


Я так уже делал, но всё равно это слишком примерно, хотелось бы написать тесты для каждой ключевой функции.

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

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

Сейчас этот форум просматривают: mihaild


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group