Перейти к содержимому

Публикации galogenIt

64 публикаций создано galogenIt (учитываются публикации только с 07 июня 2023)



#92020 Как файл .xls Save As .txt?

Отправлено автор: galogenIt 03 августа 2011 - 15:06 в SmartBear (AutomatedQA) - Functional Testing

Просто на форумах не всегда полезный пост сопровождается положенными благодарностями.
Так что я за всех скажу -- muchas gracias!
Побольше бы таких "банальных" ответов, подробно и по существу.

Спасибо, Алексей. Вы не правильно меня поняли :). Я, конечно, не жду благодарности. Ну право слово, все мы бываем воспрошающими и бываем отвечающими. Я интересовался, решена ли проблема? Предложенные варианты удовлетворили топикстартера.

Но все равно, приятно получить "muchas gracias" :)



#91974 Как файл .xls Save As .txt?

Отправлено автор: galogenIt 02 августа 2011 - 17:34 в SmartBear (AutomatedQA) - Functional Testing

Никому не интересно? Или банальные вещи?



#91889 Как файл .xls Save As .txt?

Отправлено автор: galogenIt 31 июля 2011 - 18:58 в SmartBear (AutomatedQA) - Functional Testing

Может просто сохранить в csv формате?

tab15, совершенно прав. Проще сохранить в csv. Хотя нет никакого труда сохранить в ЛЮБОМ нужном Вам формате. Для этого нужно обратится к Excel как COM_объекту

// Excel - сохранить как----------------------------------------------------------------------------
// тип файла, если 1 - в формате "xls"
//                 6 - в формате "csv"
function SaveAs(aFileName : String; aFileType : Integer = 1) : boolean;
var
  vMsExcel : OleVariant;
begin
  _FileDelete(aFileName);
  vMsExcel := _OleObjectCreate();
  // сохраянем книгу
  vMsExcel.Workbooks.Item[1].SaveAs(aFileName, aFileType);
  vMsExcel.Quit();
  vMsExcel := nil;
  // убиваем процесс
  while Sys.WaitProcess('EXCEL').Exists do
    Sys.Process('EXCEL').Terminate();
  // проверяем, существует ли сохраняемый файл; это и будет проверкой, что данная функция отработала нормально
  result := _FileExists(aFileName);
end;

или

// Excel - сохранить как...
// тип файла, если 1 - в формате xls, 6 - в csv
function ExcelSaveAs(aFileName : String; aFileType : Integer = 1) : boolean;
var
  vMsExcel : OleVAriant;
  p1       : OleVAriant;
begin
  if aqFile.Exists(aFileName) then
    aqFile.Delete(aFileName);
  Delay(2000);  
  // ожидание открытия окна MSExcel
  p1 := Sys.WaitProcess('EXCEL', 120000, -1);
  Delay(2000); // тут уж ничего неподелаешь ... непонятные тормоза независящие от процесса  
  if not (p1.Window('XLMAIN', '*').Window('XLDESK').WaitWindow('EXCEL7', '*', 1, 120000).Exists) then
  begin
    Log.Error('Окно Excel не открылось. Тест продолжен не будет');
    if Sys.WaitProcess('EXCEL').Exists then
      p1.Terminate();
      CloseProcess;  
    Runner.Stop(true);
  end;
  p1.Window('XLMAIN', '*').Minimize(); 
  Delay(5000);
  vMsExcel := Sys.OleObject('Excel.Application');
  vMsExcel.DisplayAlerts := False;
  vMsExcel.Workbooks.Item[1].SaveAs(aFileName, aFileType);
  vMsExcel.Displayalerts := 0; // типа отключить встроенные предупреждения Excel'я
  vMsExcel.Quit();
  vMsExcel := nil;
  
  while Sys.WaitProcess('EXCEL').Exists do
    Sys.Process('EXCEL').Terminate();
    
  if aqFile.Exists(aFileName) then
  begin
    Log.Message('Файл: ' + aFileName + ' - успешно сохранен.');
    result := true
  end else
  begin
    Log.Error('Файл: ' + aFileName + ' - не сохранен.');
    result := false;
  end;
end;



#92634 Работа с логами

Отправлено автор: galogenIt 15 августа 2011 - 13:57 в SmartBear (AutomatedQA) - Functional Testing

А в чем смысл выгрузки сообщений лога в текстовый файл? Лог собственно и есть ТЕКСТОВЫЙ файл. Не эффективнее ли просто разобраться с разметкой лога?
Мы, например, на VS написали программу, которая анализирует логи и формирует Excel-файл (отчет) в удобном для восприятия и работы виде. Гораздо лучше разобраться с устройством лога и научиться работать с ним. Это открывает для вас самые широкие горизонты. Для нас открыло



#91892 Покупка TestComplete 8

Отправлено автор: galogenIt 31 июля 2011 - 19:07 в SmartBear (AutomatedQA) - Functional Testing

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



#93757 Ликбез по unit-тестированию

Отправлено автор: galogenIt 06 сентября 2011 - 11:01 в Автоматизированное тестирование

Лучше это перенести в форум по Автоматизации тестирования, а не с привязкой к конкретному инструменту.
Только сегодня наткнулся на отличное видео про юнит тесты. Рекомендую к просмотру вместе с программистом. Там как раз подробно объясняется, как изолироваться от внешних зависимостей.

Спасибо за совет.

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

Коллеги-модераторы, можете сделать это? Перенести тему.



#93720 Ликбез по unit-тестированию

Отправлено автор: galogenIt 06 сентября 2011 - 06:26 в Автоматизированное тестирование

Коллеги,

не судите строго, но объясните на примере. Как правильно составить (вообще) как составить unit-тест, например для подобного кода?
if vDoc.ClassID.InheritsFromClass(КПДокументНаПериод) and (позФИКСЦЕНА >= 0 or позНДСФИКСЦЕНА >= 0 or позСУММАФЦЗАПЕРИОД >= 0)  then
        begin
          netStrok := false;
          var ДопСостоянияДистр := ArrayToComma([СостояниеДистрибутива.Подключен, СостояниеДистрибутива.НаСкладе]);
          var ДатаНачала := EndOfDay(ToDate(vDoc.GetAttrValuesByName('ДатаНачала')));
          if fSN.AsString <> '' then
            ТекДистрибутив := Номенклатура.ВернутьДистрибутив(vDoc.Клиент, CommaGet(fSN.AsString, 0),
             Номенклатура(fArticle.AsInteger), ДопСостоянияДистр, ДатаНачала);
          if assigned(ТекДистрибутив) then
            var ФиксЦена := Rat.EvalQuery(
             SQLText
              !Select Reg.DistrFixedPrice
                From RegChangeDistributiv Reg
                Where Reg.Distributiv = &ToInt(ТекДистрибутив)&
                  and Reg.BeginDate <= &ToStr(ДатаНачала)&
                  and Reg.EndDate > &ToStr(ДатаНачала)&
                  and IsWorked = -1
                Order by Reg.BeginDate desc!
             end);
          ФиксЦена := ToFloat(ФиксЦена);
          if позФИКСЦЕНА >= 0 then
            vMas[i, позФИКСЦЕНА] := ФиксЦена;
          if позНДСФИКСЦЕНА >= 0 then
            vMas[i, позНДСФИКСЦЕНА] := Round(ToFloat(ФиксЦена) * fNDSRate.AsFloat / 100, 2, 1);
          if позСУММАФЦЗАПЕРИОД >= 0 then
          begin
            var ДатаОкончания := EndOfDay(ToDate(vDoc.GetAttrValuesByName('ДатаОкончания')));
            var КолМес := Функции_мат.КолМесяцев(ДатаНачала, ДатаОкончания);
            vMas[i, позСУММАФЦЗАПЕРИОД] := ФиксЦена * КолМес;
          end;

Т.е. на выходе будем иметь ФИКСЦЕНА или НДСФИКСЦЕНА или СУММАФЦЗАПЕРИОД. Как правильно изолироваться от реальных объектов и переменных? Мне нужно объяснить это на пальцах, а лучше показать пример программисту, чтобы мотивировать его на создание собственных юнит-тестов. :)

Спасибо



#93780 Ликбез по unit-тестированию

Отправлено автор: galogenIt 06 сентября 2011 - 18:33 в Автоматизированное тестирование

переместил

Большое спасибо



#91251 Особенности тестирования тяжелых бизнес-насыщенных приложений

Отправлено автор: galogenIt 14 июля 2011 - 05:12 в Тест-дизайн и ручное тестирование

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

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

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

Вопрос: существуют ли какие-то особенности, правила, методики и способы, ориентированные на такие долгоиграющие тяжелые системы? С длинными цепочками бизнес-процессов, со сложной зависимостью между операциями, со значительной долей автоматизации их?



#91265 Особенности тестирования тяжелых бизнес-насыщенных приложений

Отправлено автор: galogenIt 14 июля 2011 - 09:15 в Тест-дизайн и ручное тестирование

Не могу выделять явную проблему, хотя ...

Скажем так. Мое представление классического тестирования. Есть бааальшая система. Типично, что она поделена на системы по-меньше, те в свою очередь и т.д. Декомпозиция, ведь.

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

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

Да еще проблема, в том, что тестирование началось системно не так давно. Так что покрытие довольно слабоватое. главным образом генеральное направление и новый функционал
...

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



#91299 Особенности тестирования тяжелых бизнес-насыщенных приложений

Отправлено автор: galogenIt 15 июля 2011 - 07:17 в Тест-дизайн и ручное тестирование

Вопрос: существуют ли какие-то особенности, правила, методики и способы, ориентированные на такие долгоиграющие тяжелые системы? С длинными цепочками бизнес-процессов, со сложной зависимостью между операциями, со значительной долей автоматизации их?

RUP?Маловато данных для анализа ситуации. Как организован процесс разработки и конкретно тестирования? Есть ли требования и специальные люди которые ими занимаются? Какие ресурсы имеются у тестирования: люди, навыки? Какая цель ставится перед командой?

Не, никакой не RUP. Водопад скорее, но такой неклассический, что-то от agile, что-то от других.
Процесс организован примерно так:
есть некоторые длинные работы-проекты, многорелизные.
Релиз типично занимает 2 месяца. Накануне планируется список работ к исполнению: исправление сложных ошибок, доработка, новый некрпный функционал или достаточно быстро разрабатываемый, работы на проектирование и подготовку длинных задач.
В конце периода дней за 10 - бранч. Тестирование происходит практически с момента начала нового релиза в фоновом режиме - (регрессия) + проверка релизных работ вручную с проектированием и реализацией новых автотестов.
Затем ставят на учебную базу скажем так для бета-тестирования, а потом на живую на бета-тестирование но уже в таком жестком режиме.

Группа тестирования: 6 человек. 1 системный программист, 3 прикладных тест-программиста, 1 тест-дизайнер-аналитик, 1 руководитель
2 сотрудника с годичным опытом, 1 с трехлетним, 3 в 2-2,5 годичным. Ранее нигде тестированием не занимались
Задачи: анализ логов прогонов автоматизированных тестов, прием работ над ошибками, прием релизных работ.
Цель по-моему одна - находить ошибки :) Ранее ставилась цель обеспечения устойчивости системы, отслеживание и перехват регрессии. Сейчас на раннее обнаружение ошибок, разгрузка аналитиков по приему релизных работ

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

Из опыта работы с большими (но не бааальшими) системами. А вы потом проверяете общую работоспособность системы? Регресс полностью пускаете по системе?К примеру, у нас модули связаны так, что даже когда разработчики уверяют, что вот это не трогали, то с вероятностью раз в год там что-то громко сломается :( И самое обидное, что может уже и у заказчика((

Постоянно проверяем это. Регресс крутится в автоматическом режиме без нашего участия по ночам.
У нас это легко может происходить ежедневно. Раз в год - это просто чудо :)
Проблема в том, что регресс на все не поставишь. Ясно, что там где идет интенсивное изменение и рефакторинг применяется и усиленное внимание. Однако бывает и так, что где-то тронули. Наш регресс прошел, поскольку он же не всемогущ, и проявляется у клиента :(



#94890 VirtualBox

Отправлено автор: galogenIt 29 сентября 2011 - 06:11 в Автоматизированное тестирование

Это не особенность какого-то окружения на мой взгляд. На VMW в течение 3 лет актвиной эксплуатации на разных хостовых машинах и с разными гостевыми ОС не было такого НИ РАЗУ. А при первом же запуске VB- хлабысь и хлабысь в одном и том же месте. Загадка сия великая есть



#94805 VirtualBox

Отправлено автор: galogenIt 27 сентября 2011 - 11:26 в Автоматизированное тестирование

Странно, писал ответ. Куда исчез?

Нам никак не удается поработать с VB. Она у нас падает с ошибкой bad_coll_header или bad_pool_header. Ошибка возникает на гостевой винде. Можем повторить вручную при выполнении действий в тестируемом приложении. На VMW этого не происходит. В чем может быть проблема? VB 4+



#94307 VirtualBox

Отправлено автор: galogenIt 17 сентября 2011 - 16:34 в Автоматизированное тестирование

Для прогона автотестов мы активно используем виртуальную машину. Пока используется VMWare. В самом начале выбора пытались использовать VirtualBox, но вынуждены были от нее отказаться. VB постоянно синхронизировала время с хост-машиной. А нам этого было не надо. Мы активно во время тестирования перемещаемся в прошлое и будущее. Найти ответ на вопрос, можно ли как-то отключить эту синхронизацию в то время не смогли. Потому пользовались VMWare. Однако потребности растут, приходится расширять парк машин и соответственно нужны еще лицензии на VMWare. Потому решили вернуться к экспериментам с VB. Нашли решение. Можно отключить службу VB и тогда синхронизация времени перестает быть проблемой. Но проблемой стало вообще само использования этой виртуальной машины. За все время экспериментов ни разу не удалось прогнать тесты полностью, постоянно вылезали какие-то проблемы, приводящие к зависанию VB или хоста. VB крутилась на 7. Сам файл с окружением и стендами был от VMWare.

Может кто-то поделиться опытом использования VirtualBox? Особенно интересует мнение людей кто перешел на VB с VMWare. Спасибо



#92524 Mantis на русский

Отправлено автор: galogenIt 12 августа 2011 - 07:42 в Управление тестированием

Русификация Mantis

Начиная с MySQL 5.0, нужно явно задавать кодировку соединения (utf-8 или cp1251, в зависимости от выбранной русской локализации Mantis). Этот баг уже зарегистрирован http://www.mantisbt....php?bug_id=6782 , и возможно уже исправлен в последующих версиях, но в версии 1.0.6 (если база под MySQL 5.0), нужно добавить строчку-определение кодировки в функцию db_connect, файла core/database_api.php:
$t_result = $g_db->Connect($p_hostname, $p_username, $p_password, $p_database_name );
$g_db->Execute ("SET NAMES utf8");
При этом стоит использовать только «Настройки/Язык» из русских языков стоит использовать только «russian_utf8».



#92578 Mantis на русский

Отправлено автор: galogenIt 13 августа 2011 - 17:14 в Управление тестированием

2 galogenIt - отличное владение копипастом

тогда уж копипейстом :)



#100724 Здравый смысл и тестирование

Отправлено автор: galogenIt 08 февраля 2012 - 13:35 в Управление тестированием

Я получил такой ответ от руководства.

- У пользователей не может быть данных с тремя знаками после запятой. Если эти данные у них появились - это проблемы пользователей. Мы потратили достаточное количество времени на выяснение данной проблемы, она не стоит этого. Потому прошу(приказываю) привести тестируемые данные к значению с точностью до двух знаков. Ошибка устранятся будет возможно в будущем (=не будет). Тему закрыть.



#100725 Здравый смысл и тестирование

Отправлено автор: galogenIt 08 февраля 2012 - 13:37 в Управление тестированием


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

В исходных данных стоит 0,325 или 0.375
в отчете может отображаться
- 0.32 0.38
- 0.32 0.37
- 0.33 0.38
- 0.33 0.37


Простите за дурацкий вопрос, а у вас это происходит именно при одинаковых входных данных, как описано в примере? Потому что если 3.75 округляется до 3.8, и 3.85 округляется до 3.8, то это правильно для финансового отчета - пятерка округляется к четному числу.

Спрашиваю просто на всякий случай, а то мало ли.


Да нет, там странное поведение, то идет округление по математическим правилам, то идет просто отсекание третьего знака. Т.е. проблема в том, что поведение не регулярное и не понятное.



#100743 Здравый смысл и тестирование

Отправлено автор: galogenIt 08 февраля 2012 - 16:49 в Управление тестированием

Логично. Это ограничений (фича) системы. Не баг.

SALar, в чем фича-то? Почему не баг.



#100704 Здравый смысл и тестирование

Отправлено автор: galogenIt 08 февраля 2012 - 10:17 в Управление тестированием


Я бы сюда не писал, а просто блокировал бы выпуск релиза :)

Если у вас есть такая возможность, то вы можете ею воспользоваться. Всё в ваших руках. Предсказать какую роль может сыграть найденный вами баг, в вашем проекте, никто не сможет на данном форуме. Если вы считаете его критичным, то действуйте.


Погодите, я не спрашиваю совета, что делать. Тут все ясно. Я считаю, это ошибкой, руководство считает это ошибкой, но столь незначительной, что на нее не стоит и тратить время (зачем тестировать "космос"?). Мне говорят, ИСПРАВЬ эти данные в базе, и ошибка исчезнет. Пользователи ничего не говорят же об этом. Я же пытаюсь доказать, что прав я, что данные должны быть такими, которые позволяют выявить ошибку. А обратился сюда я, за поддержкой своей точки зрения или наоброт, что бы мне указали, что я ошибаюсь в своих выводах и почему.



#100674 Здравый смысл и тестирование

Отправлено автор: galogenIt 08 февраля 2012 - 07:18 в Управление тестированием

Коллеги,

хотел спросить у вас, возникают ли подобные "конфликты" у вас и как они решаются? Кто прав, кто лев?

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

В отчете стоит точность отображения ранвая 2 знакам после запятой.
Исходные данные в принципе могут иметь большее количество знаков после запятой.

В исходных данных стоит 0,325 или 0.375
в отчете может отображаться
- 0.32 0.38
- 0.32 0.37
- 0.33 0.38
- 0.33 0.37

Выяснилось, что сейчас хранимая точность значения не может быть лучше 2 знаков после запятой, т.е. значение 0.325 или 0.375 является некорректным.

В чем конфликт
1. Я считаю, что данные хотя и "нежизненные", тем не менее фиксируют ошибку. А слеовательно они просто замечательные
2. Мне говорят, ерунда, это нереальные, несуществующие данные, подобного у пользователей не может проявится, потому нечего тестировать "космос", замените данные и не парьтесь. Есть дела поважнее.

Кто что думает по этому поводу?



#100685 Здравый смысл и тестирование

Отправлено автор: galogenIt 08 февраля 2012 - 08:44 в Управление тестированием

В данном случае интересно вот что - вы сами знаете, что данные "нежизненные"?

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

И у вас есть возможность получить и проверить правильные боевые данные?

думаю, я ответил ранее. Да , конечно.

Можно ли спросить у пользователей - насколько эти данные далеки от действительности?

Нет, непосредственно с пользователем мы не общаемся. Наш интерфейс общения с ними - аналитики.

Про тестирование космоса вам именно говорят или это вписано в багобазу в качестве ответа на данную ошибку?

В данный момент пока говорят. И ранее часто говорили, причем это исходит из уст руководителя. Может он прав? В багобазе как раз и написано, что с ошибкой следует разобраться, хотя проблема и не приоритетна

А что именно вы тестируете? Я надеюсь, что не финансовые документы с таким округлением?:)

Это аналитический отчет. Если бы это было в финансовом документ. Я бы сюда не писал, а просто блокировал бы выпуск релиза :)

Тема вопроса, прав ли руководитель, советующий (приказывающий) мне не тестировать космос (т.е. заведомо некорректные данные) или я, как истинный тестировщик, который тестирует разные ситуация, возможные и невозможные, но которые явно приводят к ошибке?



#100687 Здравый смысл и тестирование

Отправлено автор: galogenIt 08 февраля 2012 - 08:47 в Управление тестированием

1. Ошибку надо записывать всегда
2. Приоритет её определяет менеджер, как и дальнейшую работу по ней
3. Разработчик должен просыпаться в холодном поту с мыслью, что в его коде есть ошибка (в каждой шутке есть доля шутки).


1. ошибка записана.
2. была проанализирована, приоритет понижен, в моем расписании я вновь начал ее продвигать
3. скромно промолчу ...



#100689 Здравый смысл и тестирование

Отправлено автор: galogenIt 08 февраля 2012 - 08:49 в Управление тестированием


Выяснилось, что сейчас хранимая точность значения не может быть лучше 2 знаков после запятой, т.е. значение 0.325 или 0.375 является некорректным.


"хранимая точность значения" - это что?

И о каких данных идет речь?

Я тоже не совсем понял этого термина, полагаю, что значение коэффициента может иметь точность только до 2 знаков. Данные с точностью 3 знака признаются ошибочными (видимо)



#100692 Здравый смысл и тестирование

Отправлено автор: galogenIt 08 февраля 2012 - 08:58 в Управление тестированием


Тема вопроса, прав ли руководитель, советующий (приказывающий) мне не тестировать космос (т.е. заведомо некорректные данные) или я, как истинный тестировщик, который тестирует разные ситуация, возможные и невозможные, но которые явно приводят к ошибке?

Я думаю, если все области/случаи с более высоким приоритетом протестированы, а время свободное осталось :), то надо проверять и такие случаи. ВНЕЗАПНО может оказаться, что для заказчика это высокоприоритетный баг.


Предыстория вопроса. Мы не тестируем конкретно ситуацию округления. Мы тестируем отчет.Причем это был новый отчет. Чтобы тщательно его тестировать мы создали и крутим автоматизированный тест. Этот тест время от времени (не регулярно, но периодически) падает. Требует времени на анализ его.

Причем "ВНЕЗАПНО может оказаться, что для заказчика это высокоприоритетный баг".

Но в целом я понял, что я скорее прав, чем неправ :)