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, Супермодераторы



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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