Testing

В этом форуме автор намерен рассказывать о своём нелегком пути становления программистом.

Модератор: SLIM

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Testing

Сообщение SLIM » 10.10.2010 (Вс) 0:24

Решил выложить на глобальный тест одно приложение дабы почерпать мнений.

О чем проект
По роду своей работы мне иногда приходится выполнять одну и ту же работу но немного изменять что-то перед ее началом. Допустим нужно обновить какой-то отчет и делать это нужно каждую неделю\месяц\декаду. Соответственно каждую неделю мне нужны какие-то свежие данные и я должен их вручную как-то изменить. А бывает, нужно проверить их корректность и полноту. Или нужно отправлять какой-то файл на какие-то адреса, причем каждый день этот файл разный. И т.д. В общем все то что нужно делать почти вручную. Да и почту у каждого есть такая часть работы - каждую неделю или месяц офисные работники сдают какие-то отчеты, на формирование которых уходит немало времени.
Исходя из этого я решил написать выполняющего планировщика. Его суть - выполнять какие-то действия в определенное время и с определенной периодичностью. Решил написать потому что не нашел ни одного приложения, которое удовлетворяло моим требованиям. А самым важным требованием было то, что я мог бы произвольно менять, добавлять, удалять задания планировщика. Были варианты например с Job-ми в MS SQL. Я слышал что там можно выполнять внешние скрипты. Это было уже лучше, но тоже не удовлетворяло. Если кто-то хочет знать почему - я могу пояснить, но это уже будет другой спор.
Ну и плюс мне было интересно самому это сделать

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

Немного о работе
С приложением обязательно идет xml (мой любимый) файл где описываются задачи. В него можно добавлять новые задачи, редактировать старые, по-новому планировать их и т.д. В этом файле описывается и модуль выполнения.
Вот параметры файла с описанием.
CountTask - количество планируемых задач. Планироваться будут первые n задач в файле (n=атрибуту val этой ноды)
Дальнейшее справедливо для каждого Task-а
Name - имя задачи
Activate - активна ли задача. Если задача не активна, она никогда не планируется. Но в списке висит.
StopAllThreadForExec - не тестировал на все сто. Если в атрибуте val стоит -1, то при запуске этой задачи приостанавливаются все остальные пока эта задача не выполнится. Это нужно когда две задачи работают например с одними и теми же данными. И нужно чтобы только одна задача работала с ними. Пробуем тестить, но полностью не отвечаю :))
LastExecTime - все атрибуты описывают последнее время выполнения задач. Лениво парсить одну строку, так как надо много проверять на ошибки. Да и в данном виде удобнее считывать и записывать в файл. Данные переписываются при выполнении каждой задачи
PeriodExec - в том же формате описывают периодичность выполнения. Если нужно запускать каждую минуту - то везде ставим нули, кроме minute, ну и т.д. Атрибут года пока не читается за ненадобностью.
NextExecTime - следующее время запуска. От этого времени всегда отсчитывается следующее время выполнения. Править его не рекомендуется. Пишем туда только раз при планировании задачи. Дальше оно само пересчитывается. В общем трогать его без надобности не нужно.
ModulePath - путь к библиотеке с кодом задачи. Ну тут все понятно.
LogFilePath - лог файл задачи. Пока не ведется. А может и не будет, думаю лучше будет вести один лог на все задачи
FinishCode - в атрибуте val - сам код последнего выполнения задачи. В laststep - последний шаг выполнения. Здесь должно быть 0 если последнее выполнение задачи в целом прошло успешно (в val будет записан 0). Если какой-то шаг задачи прошел с ошибкой, то в laststep запишется на какой конкретно шаге это произошло, а в val попадет...пока что просто 1. Далее добавим нормальные коды ошибок.
OnErrorTask - работает обычно в связке с FinishCode. Атрибут StartFromLastStep говорит, что при следующем запуске задачи по плану нужно его выполнять с последнего шага. Это если будет -1, иначе задача будет выполняться полностью. Это нужно если например необходимо перезапустить задачу после ошибки вручную с последнего шага. Атрибут RecelcNextTime - говорит пересчитывать ли следующее время запуска если какой-то шаг оборвался. Если здесь стоит 0, значит и код ошибки не равен 0 (FinishCode), то задача не будет планировать больше, пока не сбросятся параметры. Если -1, то будет пересчет следующего времени запуска (соответственно в зависимости от параметров следующий запуск может начаться заново, или с последнего шага, я уже об этом говорил)
AskAboutStart - думаю мало пригодится, но сделал. Если здесь стоит -1, то будет спрашиваться нужно ли выполнять задачу, если ответят нет, то не выполняется и переносится на следующий запуск.
CountSteps - количество шагов в задаче. Тут понятно
Далее идет описание шагов. Их может быть произвольное количество, все они должны быть реализованы в библиотеке задачи. Выполняться будут первые n шагов, где n=CountSteps
Name - Это имя функции в библиотеке. Я его считаю и именем шага. Но важно помнить - это имя функции.
LastExecTime - последнее время выполнения шага
TimeExecuteInSeconds - последнее время выполнения шага в секундах
FinishCode - возвращенный код выполнения
Active - активен ли шаг. Если не активен, то он пропускается и переходит к следующему если нужно.
ExitIfFailedCode - если здесь стоит -1, то выполнение задачи прекратится на этом шаге, если задача вернула "плохой код возврата". В задаче все это отразится - в FinishCode запишется 1, и соответственно в шаге тоже. При выбросе из шага действие будет зависеть от параметров OnErrorTask
FailedCodes - это "плохие" коды возвратов. Т.е. коды, по которым считается что шаг фигово выполнился или не выполнился. В count - указывается количество разных кодов, а в code0, code1...coden указываются числовые значения кодов, где n=count.

Вот и все описание.
Значит понимаем что реализуем в библе функции, возвращающие целочисленные значения. И если нужно указываем какие коды плохие на какие не обращать внимания.

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

На что обращать внимание
Ну на функциональность конечно. Нужно знать все ли что я описал работает. В частности все что указано в параметрах xml-файла должно учитываться и работать.
Протестировать нужно сверху донизу - приостановки потоков, обработку кодов возвратов, вопросы о выполнении, пересчеты времени выполнения и запусков и т.д.

Я жду...
Конструктивной критики и предложений а также мнений. Замечаний по работе. Ошибки. В общем то можно устраивать краш-тест. Ну и т.д.

Замечания
Библиотека должна быть нативная. Я пробовал писать на FLDLL сделанной Хакером, но приложение вылетает. Еще не разбирался почему. Если есть вопросы по функционалу - то я все расскажу, даже код могу дать, но он сишный. Даю пробную библу с двумя функциями, где есть выводится сообщения для теста. Ну и после Ваших замечаний я буду переделывать приложение - поэтому их тоже неплохо бы тестировать. Да, пути к библиотеке нужно будет прописать, так как там сейчас не действительные. Чтобы запустить цикл планирования в меню Сервис жмем "запустить цикл обработки задач"



Спасибо всем отозвавшимся заранее.
Вложения
JobMaker.zip
Приложение + xml-файл с описание + тестовая библиотека
(132.32 Кб) Скачиваний: 55
Пишите жизнь на чистовик.....переписать не удастся.....

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Testing

Сообщение arvitaly » 10.10.2010 (Вс) 1:03

Честно говоря тестить без интерактивного добавления задач ужасно неудобно.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Testing

Сообщение SLIM » 10.10.2010 (Вс) 1:15

arvitaly писал(а):Честно говоря тестить без интерактивного добавления задач ужасно неудобно.

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

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Testing

Сообщение arvitaly » 10.10.2010 (Вс) 1:17

Согласен. Просто разработка полным ходом идет, и делать под все это нормальный интерфейс не с руки - приходится переписывать и код работы и код интерфейса. А так пока что только код работы.


Да хоть бы просто инпутбоксом)

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Testing

Сообщение SLIM » 10.10.2010 (Вс) 1:27

arvitaly писал(а):Да хоть бы просто инпутбоксом)

Ну как бэ в сях не такое уж секундное дело организовать диалог такого типа с пользователем. К тому же будет куча вопросо. Проще файл заполнить. Там нужно то - путь к библе и период настроить для первого запуска.
Пишите жизнь на чистовик.....переписать не удастся.....

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Testing

Сообщение SLIM » 10.10.2010 (Вс) 18:59

Кто-нибудь пробовал?
Или все таки интерактивность нужна?
Пишите жизнь на чистовик.....переписать не удастся.....

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Testing

Сообщение Debugger » 10.10.2010 (Вс) 19:09

Если программа будет удобной, то я буду её использовать.
Интерактивность нужна.
Отсутствие потери фокуса на листбоксе тоже нужно.
А вот таймер не нужен.
Программист - это локальный бог (С) Я

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Testing

Сообщение SLIM » 10.10.2010 (Вс) 19:41

Debugger писал(а):Если программа будет удобной, то я буду её использовать.

Debugger писал(а):А вот таймер не нужен.

Не понял? Общий смысл был в том чтобы задания выполнялись по таймеру в заданное время. Тебе это не нужно? Если не нужно, задание можно не планировать, а чтобы оно просто висело в списке, и запускать в любое время если нужно вручную.
Debugger писал(а):Отсутствие потери фокуса на листбоксе тоже нужно.

Точнее не нужно. Это временно, так как listview обновляется каждую секунду по таймеру, чтобы отроажать ход событий. Сейчас конкретно делаю изменения касаемо этого.
Debugger писал(а):активность нужна.


Ок, делаем интерфейс поудобней.
Пишите жизнь на чистовик.....переписать не удастся.....

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Testing

Сообщение SLIM » 25.10.2010 (Пн) 22:23

Добавил немного интерактивности.
Теперь можно планировать задачи. Меню Сервис->настройки откроет вам диалог, где можно будет редактировать старые задачи и добавлять новые.
Также можно добавлять шаги и коды ошибок.
В общем и целом - это полный редактор файла конфигурации задач.
Убрал цикл обновления главного списка задача. Теперь он обновляется только при изменении статусов.
По умолчанию запланирована одна задача, выполняемая раз в минуту. Путь к библе по умолчанию на C:\ в корне, но можно перенастроить если кому-то нужно.
В библиотеке 3 функции. Они просто выводят сообщения. Можно планировать сколько угодно шагов (функций) и сколько угодно задач.

Так что пробуем. Жду хоть какую-то критику. Потому что в планах:
(В кратковременной перспективе)
1. Добавить возможность перезапуска шага, если тот при выполнении вернет определенные коды ошибки. Коды ошибки определяет пользователь. С возможностью указывать сколько раз нужно перезапустить и с какой периодичностью.
2. Думаю по поводу "сторожевого потока". У него одна функция - вырубать задачу если она выполняется больше чем нужно. "Больше чем нужно" определяет пользователь.
3. Полнофункциональный интерфейс. Это уже после того как будет отлажена работа всего того что сделано.

(после многочисленных тестов и выпуска первой рабочей Beta)
4. Добавить выполнение vbs-скриптов. Т.е. не обязательно будет иметь под руками язык, способный скомпилировать Native-DLL.
5. Добавить возможность планирования VB-шных Active-X библиотек. (правда это под вопросом, но очень мне хочется писать задачи на VB)

(после того как допишу свой универсальный синтаксический анализатор)
6. Можно будет планировать задачи с помощью своего скриптового языка. Но это очень немного. Можно будет писать простые задачи. Например копирование файлов или отправка сообщений SendMessage.

(на сегодняшний день вряд ли мной осуществимо)
7. Добавить работу в своем скриптовом языке работу с COM. Т.е. писать скрипты для работы с Excel-ем например.


Так что я очень надеюсь на вас, для меня важно чтобы программа тестировалась.
Вложения
Test.zip
Новый комплект
(152.53 Кб) Скачиваний: 42
Пишите жизнь на чистовик.....переписать не удастся.....

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Testing

Сообщение Debugger » 25.10.2010 (Пн) 22:31

Поигрался.
Нельзя сказать, что интерфейс понятный. Но его наличие - уже хорошо.
Можно задавать непериодичеость,аа время запуска?
Идея хорошая, жду годной версии. Кстати,
Код: Выделить всё
---------------------------
Unhandled exception
---------------------------
-1073741819
---------------------------
ОК   
---------------------------
Последний раз редактировалось Debugger 25.10.2010 (Пн) 23:27, всего редактировалось 1 раз.
Программист - это локальный бог (С) Я

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Testing

Сообщение SLIM » 25.10.2010 (Пн) 22:36

Debugger писал(а):Нельзя сказать, что интерфейс непонятный. Но его наличие - уже хорошо.

Может хотел сказать что "нельзя сказать что понятный"?
Debugger писал(а):Можно задавать непериодичеость,аа время запуска?

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

Сначала хочется отточить то что есть. Нужно пробовать на разных задачах, пробовать приостанавливать, пробовать несколько задач сразу запускать и т.д. Это сейчас важнее всего. Только после этого будет нормальный интерфейс.
Debugger писал(а):Кстати,...

Гуд. Поймал исключение. При каких обстоятельствах?
Пишите жизнь на чистовик.....переписать не удастся.....

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Testing

Сообщение SLIM » 25.10.2010 (Пн) 22:45

Поменял немного caption-ы с ошибками.
Приношу извинения
Вложения
JobMaker.zip
(141.87 Кб) Скачиваний: 43
Пишите жизнь на чистовик.....переписать не удастся.....

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Testing

Сообщение SLIM » 09.11.2010 (Вт) 22:19

А этот подфорум кто-нибудь видит?
Пишите жизнь на чистовик.....переписать не удастся.....

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Testing

Сообщение FireFenix » 09.11.2010 (Вт) 23:36

Твой бложег - видят все.
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる


Вернуться в SLIM

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

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

    TopList  
cron