Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
Галинка ©   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.041 c
2-1202233101
Res
2008-02-05 20:38
2008.03.02
Tnt Unicode companent


15-1201686214
andreoman
2008-01-30 12:43
2008.03.02
Microsoft Word 9.0 что за версия ?


15-1201198455
Embargo
2008-01-24 21:14
2008.03.02
Дайте линк


15-1201435178
Kolan
2008-01-27 14:59
2008.03.02
Вот это да. Не спам, а шедевр.


2-1202195960
иИи
2008-02-05 10:19
2008.03.02
Полупрозрачность





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский