Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.02;
Скачать: CL | DM;

Вниз

А как вы тестируете свои шедевры?   Найти похожие ветки 

 
Галинка ©   (2008-01-23 13:05) [0]

собсно сабж. В основном интересует ситуация, если ошибка/баг вылазит не все время (т.е. при трассировке то вылазит, то нет).


 
Riply ©   (2008-01-23 13:08) [1]

>  [0] Галинка ©   (23.01.08 13:05)
Меня очень "логи" выручают.
Прописываю их во всех подозрительных местах. :)


 
Palladin ©   (2008-01-23 13:08) [2]

подробнейший лог
честно сказать, я F7/F8 никогда и не пользуюсь


 
ZoldBerger   (2008-01-23 13:23) [3]

procedure TfrmMain.MyExceptionHandler(Sender : TObject; E : Exception );
var
QuerySQL : string;
nrID     : string;
FileName : string;
CS       : string;
N        : TNotifyEvent;
ErrorS   : TStringList;
PropInfo : PPropInfo;
jpgImg: TJPEGImage;
begin
..
ErrorS := TSTringList.Create;
screen.cursor := crDefault;
cs := "ABCDEF0123456789";
fileName := IncludeTrailingBackslash(GetCurrentDir)+"LOGS\ERROR-"+DateToStr(date)+"-"+IntToStr(Random(99999))+cs[Random(16)]+".bmp";
with frmError do
begin
 VMSG.Lines.Clear;
 VMSG.Lines.Add(E.Message);
// VMSG.Lines.Add(GetClassHelp(e.ClassName));
 UpdateType.caption := e.ClassName;
 ErrorMsg.Lines.Clear;
 ErrorMsg.Lines.Add(E.Message);
 ErrorMsg.Lines.Add(E.ClassName);
 GetBaseClassInfo(Sender,ErrorMsg.Lines);
 ErrorMsg.Lines.Add("");
 ErrorMsg.Lines.Add("");
 ScreenShot(IMage1.Picture.Bitmap);
// jpgImg:= TJPEGImage.Create;
// jpgImg.Assign(IMage1.Picture.Bitmap);
//  jpgImg.SaveToFile(fileName);
Image1.Picture.SaveToFIle(FileName);
 with ErrorMsg.Lines do
 begin
   add("Родитель класса: " + e.ClassParent.ClassName);
   add("=== Базовые методы ===");
   GetBaseMethodInfo(PTypeInfo(e.classtype), ErrorMsg.lines);
   add("=== Дифференциальные методы ===");
   GetMethodDefinition(PTypeInfo(e.classtype),
   ErrorMsg.lines);
   add("=== Родительские свойства ===");
   add("Родитель: " + sender.Classname);
   add("Имя: " +(sender as TComponent).Name);
 end; //sender.
   // ShowModal;
 with frmMain.ADOQuerySp do
 begin
   close;
   sql.Clear;
   QuerySQL := "DECLARE @nResult INT, @nId INT " +
               "EXECUTE @nResult = DBO.up_InsertReleaseError @nId OUTPUT,"+
               (runl)+","+
               QuotedStr(ErrorMsg.Lines.text)+","+QuotedStr(E.ClassName)+
               " SELECT @nResult RESULT, @nID ID";

   sql.Add(QuerySQL);
   open;
   nrID := FieldByName("ID").AsString;
 end;
 screen.cursor := crHourGlass;
 if nrID = "" then begin
   screen.Cursor := crDefault;
 end else
 begin
   ADOQuerySp.sql.text:="UPDATE ut_LogReleaseError SET MSG_PICT=:b WHERE ID="+nrID;
   ADOQuerySp.parameters.parseSQL(ADOQuerySp.sql.text, true);
   ADOQuerySp.parameters.parambyname("b").LoadFromFile( fileName,ftBlob);
   ADOQuerySp.execsql;
   screen.Cursor := crDefault;
   if not ReadBoolean("CONFIG","SaveLOGS") then deletefile(fileName);
end;
end;
errors.free;
if not ReadBoolean("CONFIG","SaveLOGS") then deletefile(fileName);
   frmWarning.ShowMess("Запомните номер","В программе произошла ошибка, свяжитесь с разработчиком и назовите номер ошибки:  "#"+nrID+""");


 
SerJaNT ©   (2008-01-23 13:25) [4]


> ZoldBerger   (23.01.08 13:23) [3]

шо это было?


 
ZoldBerger   (2008-01-23 13:27) [5]


> SerJaNT ©   (23.01.08 13:25) [4]


во многих приложениях, которые работают  с БД, использую слежку за ошибками


 
Palladin ©   (2008-01-23 13:28) [6]

это бред


 
Галинка ©   (2008-01-23 13:31) [7]

логи это мысль. Спасибо за наводку.


 
Slym ©   (2008-01-23 13:31) [8]

Нужно тестировать не проект вцелом, а "кубики" из которых проект сделан...
В папке с проектом имеем папку TEST с набором тестовых приложений для тестирования "кубиков"


 
Ega23 ©   (2008-01-23 14:01) [9]


> ZoldBerger   (23.01.08 13:23) [3]


Какой ужас....
ещё и со скрин-шотом....


 
OSokin   (2008-01-23 14:04) [10]

Я обычно проверяю, вызывает строка кода ошибку или нет, вызовом MessageBox(0,0,0,0) до и после нее (исключения, конечно, хорошо, но в программах на WinAPI они не работают :/ ). А логи в неконсольных приложениях делаю так:
AssignFile(Output, "Log.Log");
Rewrite(Output);
...
WriteLn("Logged string");


 
ZoldBerger   (2008-01-23 14:05) [11]


> Ega23 ©   (23.01.08 14:01) [9]


ты предложи ...


 
Семеныч   (2008-01-23 14:07) [12]

> OSokin   (23.01.08 14:04) [10]

> исключения, конечно, хорошо, но в программах на WinAPI они не работают

Посмотрите Win32Check.


 
Lamer@fools.ua ©   (2008-01-23 14:08) [13]

>>OSokin   (23.01.08 14:04) [10]

RaiseLastOSError не спасёт отца русской демократии?


 
DiamondShark ©   (2008-01-23 14:13) [14]


> исключения, конечно, хорошо, но в программах на WinAPI они
> не работают

uses SysUtils;


 
Ega23 ©   (2008-01-23 14:15) [15]


> ты предложи ...


Что предложить?

procedure TMyClass.TMyMethod
begin
 try

 except on E : Exception do
   LogError("TMyClass.TMyMethod : " + E.Message);
   // если надо - raise Exception.Create("TMyClass.TMyMethod : " + E.Message);
 end;
end;


Ну и то же самое на уровне Application.OnException.


 
Mystic ©   (2008-01-23 14:18) [16]

Иногда помогает медитация на исходники.


 
ZoldBerger   (2008-01-23 14:20) [17]

Правильно обрати внимание на название процедуры MyExceptionHandler

Вот посмотри, какую информацию, я кидаю в SQL

ErrorMSG: Необходимо объявить скалярную переменную "@nIdDir_A"
ErrorCLASS: EOleException
Тип: tkClass
Размер: 1328
Модуль: uObjClaimPrep
Номер свойства: 104
Параметр: jClaimPrep

Родитель класса: EOleSysError
=== Базовые методы ===
Имя класса:    
Тип:           tkRecord
Номер параметра: 0
=== Дифференциальные методы ===
procedure ;
=== Родительские свойства ===
Родитель: TfrmObjClaimPrep
Имя: frmObjClaimPrep


Что твой лог пишет? и думаешь хранение скриншота глупо?


 
Palladin ©   (2008-01-23 14:23) [18]

бред


 
OSokin   (2008-01-23 14:25) [19]


> DiamondShark ©   (23.01.08 14:13) [14]


> Lamer@fools.ua ©   (23.01.08 14:08) [13]


> Семеныч   (23.01.08 14:07) [12]

Да знаю я. Я имел в виду обработку исключений по OnException. А делать подобное просто лень =)


 
No_Dead ©   (2008-01-23 14:25) [20]

> думаешь хранение скриншота глупо?

имхо, я бы еще видео— и аудио— записи сделал.
наверняка, это раз.
на память, это два.
место ж надо куда-то девать на винте, это три.
100% доказетльство начальству что я работаю, это четыре.
%>


 
OSokin   (2008-01-23 14:28) [21]

А в самом обработчике исключений в [3] исключение может возникнуть в нескольких местах ;)

> ErrorS := TSTringList.Create;


> Image1.Picture.SaveToFIle(FileName);


> ADOQuerySp.execsql;

И это на первый взгляд ;)


 
Dennis I. Komarov ©   (2008-01-23 14:31) [22]

Вот почему исходники так много весят...


 
Игорь Шевченко ©   (2008-01-23 14:37) [23]

1. пишем юнит-тесты.
2. при возникших исключениях отправляется письмо разработчику с детальной информацией об исключении и несколькими последними действиями пользователя.


 
Галинка ©   (2008-01-23 14:43) [24]

Про исключения. Тестится программа не на такие ошибки. А на ошибки логики сорее. Или на просчеты. По ним исключения не выдаются, но программа работает не так как хотелось бы. Вот и хочется посмотреть, что же мы там имеем.


 
Palladin ©   (2008-01-23 14:46) [25]


> [24] Галинка ©   (23.01.08 14:43)

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


 
OSokin   (2008-01-23 14:50) [26]


> Галинка ©   (23.01.08 14:43) [24]

Все равно логами и MessageBox"ами проблему решаю. Просто вывожу на экран или в лог значения необходимых переменных и проверяю. Хотя проще всего использовать консольное окно для этого.


 
Kolan ©   (2008-01-23 14:53) [27]

> 2. при возникших исключениях отправляется письмо разработчику
> с детальной информацией об исключении и несколькими последними
> действиями пользователя.

Можно пример простой? Как выглядит процедцра с исключением, без посылки писем ессно :)


 
Игорь Шевченко ©   (2008-01-23 15:36) [28]

Kolan ©   (23.01.08 14:53) [27]


> Можно пример простой? Как выглядит процедцра с исключением,
>  без посылки писем ессно :)


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

Процедура обработки исключений выглядит как обработчик события Application.OnException


 
Sandman25   (2008-01-23 15:44) [29]

1. Unit test
2. assert
3. LOG.debug(...)

PS. Java рулит :)


 
Mystic ©   (2008-01-23 15:55) [30]

> Sandman25   (23.01.08 15:44) [29]

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


 
engine ©   (2008-01-23 15:57) [31]

Может кто-нибудь пояснить, что за зверь такой — юнит-тест.
Где можно почитать про это?


 
Sandman25   (2008-01-23 15:58) [32]

Mystic ©   (23.01.08 15:55) [30]

3. LOG.debug(...)


 
Марсер ©   (2008-01-23 16:07) [33]


> Riply ©   (23.01.08 13:08) [1]
>
> >  [0] Галинка ©   (23.01.08 13:05)
> Меня очень "логи" выручают.

+100
Правда, в моей специфике без них вообще сложно...


 
Игорь Шевченко ©   (2008-01-23 16:27) [34]


> Может кто-нибудь пояснить, что за зверь такой — юнит-тест.
>
> Где можно почитать про это?


тут: http://www.exprogramming.ru/


 
Галинка ©   (2008-01-23 16:53) [35]

дык когда писалось на си без возможности отладки, тогда логи само собой. Но блин трасировка тоже достает.

сделала лог. Сразу исправила 3 бага.

"Спасибо этому дому" (с)


 
data ©   (2008-01-23 17:16) [36]


>  В основном интересует ситуация, если ошибка/баг вылазит
> не все время

логи, и отдел тестирования стоит напрячь


 
Галинка ©   (2008-01-23 17:36) [37]

data ©   (23.01.08 17:16) [36]

"Мы говорим Партия, подразумеваем Ленин. Мы говорим Ленин, подразумеваем Партия" (за точность не ручаюсь). Отдел тестирования это я... пока во всяком случае.


 
vpbar ©   (2008-01-23 17:37) [38]

исключения проверяю штукой типа madExcept. А логические ошибки логированием всего и вся.


 
Kenny   (2008-01-23 19:17) [39]

В Delphi очень не хватает джавовского стека вызовов при исключениях...


 
Mystic ©   (2008-01-23 19:20) [40]

> Sandman25   (23.01.08 15:58) [32]
>
> 3. LOG.debug(...)


LOG.debug(...) помогает исправить ошибку. Но для этого ее еще надо найти :)



Страницы: 1 2 вся ветка

Текущий архив: 2008.03.02;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.019 c
2-1202028229
Jimmy
2008-02-03 11:43
2008.03.02
Image на OpenFileDialog


2-1202216737
alexsashkan
2008-02-05 16:05
2008.03.02
Добавление Столбца в запросе.


3-1192536774
Lamer666
2007-10-16 16:12
2008.03.02
ADOConnection плохо видит MsSql


15-1201628450
Kerk
2008-01-29 20:40
2008.03.02
Посоветуйте прогу для монтажа видео


15-1200218991
Kolan
2008-01-13 13:09
2008.03.02
Рефакторин Extract resource string работает не так как ожидается.