<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.3.1-beta1" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>
<channel>
	<title>Comments on: Грешки, изключения и assert-ове</title>
	<link>http://skanev.com/2008/02/18/errors-exceptions-assertations/</link>
	<description>Блогът на Стефан Кънев</description>
	<pubDate>Thu, 28 Aug 2008 03:17:34 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.1-beta1</generator>
		<item>
		<title>By: Anislav</title>
		<link>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1024</link>
		<dc:creator>Anislav</dc:creator>
		<pubDate>Fri, 22 Feb 2008 13:00:43 +0000</pubDate>
		<guid>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1024</guid>
		<description>Мисля, че темата е доста интересна :) 
Също така Стефан добре се е справил с описанието на проблемната област ;Р и т.н.
Даже като се замисля точно тази тема си го вълнуваше и преди 2 години :-D явно доста е помисли за да стигне до тия заключения ;)

Бих използвал assert по начина, по който го прави Стефан именно за J2EE приложения. В останалите случаи ще мисля намясто..</description>
		<content:encoded><![CDATA[<p>Мисля, че темата е доста интересна <img src='http://skanev.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Също така Стефан добре се е справил с описанието на проблемната област ;Р и т.н.<br />
Даже като се замисля точно тази тема си го вълнуваше и преди 2 години <img src='http://skanev.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> явно доста е помисли за да стигне до тия заключения <img src='http://skanev.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Бих използвал assert по начина, по който го прави Стефан именно за J2EE приложения. В останалите случаи ще мисля намясто..</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Стефан Кънев</title>
		<link>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1018</link>
		<dc:creator>Стефан Кънев</dc:creator>
		<pubDate>Thu, 21 Feb 2008 10:04:52 +0000</pubDate>
		<guid>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1018</guid>
		<description>Е разбира се ще махнеш асертите, които те бавят. Ако не ти "дропеха фрейма" въобще, нямаше да имаш причина да ги махаш, нали? Тъй като аз не пиша нито OpenGL, нещо друго, което трябва да работи бързо, разлика между включени асерти и изключени такива не се забелязва.

И смисъла на assert-а е "това в този момент трябва да я вярно". Смисъла му няма нищо общо с това дали е включен, изключен и как ще го забележи потребителя. Смисъла му е да спре програмата ако тя изпадне в неправилно състояние. Дали ще го включваш си зависи от теб вече. Там може да се уповаваш на логика (тия асерти ме бавят значително), на религия (те трябват да се изключват щото така пише в библията; напиши си свои) или да бъдеш крайно неразумен и въобще да не мислиш (не звучало професионално, разбираш ли). Така че, не, не измествам смисъла. Просто за теб assert е това в C++. Аз не си позволявам да бъда толкова фокусиран.

Да, "btw" ще променя темата в скоро време. Междувременно, мога ли аз да ти помоля за две неща?

Първо, преди да коментираш теми на блога ми, да ги прочиташ. Може би е О.К. да пишеш без да мислиш и четеш по разни форуми и dir.bg клубове, но това се е моя личен сайт и ще се радвам на някакво качество в него. Направил съм си труда да подготвя некратък материал, да го изредактирам няколко пъти, да си построя внимателно аргументите. Не очаквам всеки да ги прочете, не очаквам и да променя мнението на всеки, но ми се ще ако някой се ангажира достатъчно с материалите ми че да коментира, то поне да има уважението да ги прочете хубаво. И като тръгне да пише нещо в отговор да види дали не съм го написал в материала. Както почти всичко което ти си ми написал в коментар.

И второ, може ли като коментираш тук, да бъдеш една идея по-грамотен? Знам че не съм пример за прекрасен български език, но поне се старая. Например знам, че изреченията започват с главна буква, както и че има достатъчно глаголи и съществителни, за да не ми се налага да ги правя на заемки ("дропят фрейма") или направо да вкарвам английски фрази ("изминаваш extra mile"). Така де, като добавиш това към непрочитането и полу-религиозния, полу-менторски тон лишен от всякаква аргументация (или здрав разум) в някои от коментарите по-горе, то сигурно разбираш защо съм леко раздразнен в отговорите си? И защо много ще се радвам, ако в случай че смяташ да продължаваш да коментираш, мислиш като пишеш, а не тъпчеш едно и също нещо, за което на всичкото отгоре съм писал в поста?

Благодаря ти предварително.</description>
		<content:encoded><![CDATA[<p>Е разбира се ще махнеш асертите, които те бавят. Ако не ти &#8220;дропеха фрейма&#8221; въобще, нямаше да имаш причина да ги махаш, нали? Тъй като аз не пиша нито OpenGL, нещо друго, което трябва да работи бързо, разлика между включени асерти и изключени такива не се забелязва.</p>
<p>И смисъла на assert-а е &#8220;това в този момент трябва да я вярно&#8221;. Смисъла му няма нищо общо с това дали е включен, изключен и как ще го забележи потребителя. Смисъла му е да спре програмата ако тя изпадне в неправилно състояние. Дали ще го включваш си зависи от теб вече. Там може да се уповаваш на логика (тия асерти ме бавят значително), на религия (те трябват да се изключват щото така пише в библията; напиши си свои) или да бъдеш крайно неразумен и въобще да не мислиш (не звучало професионално, разбираш ли). Така че, не, не измествам смисъла. Просто за теб assert е това в C++. Аз не си позволявам да бъда толкова фокусиран.</p>
<p>Да, &#8220;btw&#8221; ще променя темата в скоро време. Междувременно, мога ли аз да ти помоля за две неща?</p>
<p>Първо, преди да коментираш теми на блога ми, да ги прочиташ. Може би е О.К. да пишеш без да мислиш и четеш по разни форуми и dir.bg клубове, но това се е моя личен сайт и ще се радвам на някакво качество в него. Направил съм си труда да подготвя некратък материал, да го изредактирам няколко пъти, да си построя внимателно аргументите. Не очаквам всеки да ги прочете, не очаквам и да променя мнението на всеки, но ми се ще ако някой се ангажира достатъчно с материалите ми че да коментира, то поне да има уважението да ги прочете хубаво. И като тръгне да пише нещо в отговор да види дали не съм го написал в материала. Както почти всичко което ти си ми написал в коментар.</p>
<p>И второ, може ли като коментираш тук, да бъдеш една идея по-грамотен? Знам че не съм пример за прекрасен български език, но поне се старая. Например знам, че изреченията започват с главна буква, както и че има достатъчно глаголи и съществителни, за да не ми се налага да ги правя на заемки (&#8221;дропят фрейма&#8221;) или направо да вкарвам английски фрази (&#8221;изминаваш extra mile&#8221;). Така де, като добавиш това към непрочитането и полу-религиозния, полу-менторски тон лишен от всякаква аргументация (или здрав разум) в някои от коментарите по-горе, то сигурно разбираш защо съм леко раздразнен в отговорите си? И защо много ще се радвам, ако в случай че смяташ да продължаваш да коментираш, мислиш като пишеш, а не тъпчеш едно и също нещо, за което на всичкото отгоре съм писал в поста?</p>
<p>Благодаря ти предварително.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: nedko</title>
		<link>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1017</link>
		<dc:creator>nedko</dc:creator>
		<pubDate>Thu, 21 Feb 2008 09:19:45 +0000</pubDate>
		<guid>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1017</guid>
		<description>нека дам и пример - пиша графично приложение на c++, което в доста от функциите има маса assert-и, които са толкова тежки, че ми дропят фрейма с над 75%! На мен не ми пречи, че приложението се влачи с 15 fps, но потребителя ще иска да види всичките 60 кадъра в секунда. Това забавяне, което имам в debug mode напълно си заслужава, защото чрез него отстранявам нередностите, които ми позволят да осигуря на потребителя нормална работа.</description>
		<content:encoded><![CDATA[<p>нека дам и пример - пиша графично приложение на c++, което в доста от функциите има маса assert-и, които са толкова тежки, че ми дропят фрейма с над 75%! На мен не ми пречи, че приложението се влачи с 15 fps, но потребителя ще иска да види всичките 60 кадъра в секунда. Това забавяне, което имам в debug mode напълно си заслужава, защото чрез него отстранявам нередностите, които ми позволят да осигуря на потребителя нормална работа.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: nedko</title>
		<link>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1016</link>
		<dc:creator>nedko</dc:creator>
		<pubDate>Thu, 21 Feb 2008 09:11:21 +0000</pubDate>
		<guid>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1016</guid>
		<description>идеята е, че в assert можеш да сложиш extensive verification, която да е твърде тежка за нормална работа в продукция. по този начин при нормален (подчертавам: нормален! Лъчезар правилно е разчоплил темата по-горе) цикъл на разработка assert ти помагат да хванеш бъговете и когато отстраниш тези бъгове и минеш тестовете махаш assert-ите. Това е смисъла от тях - да съществуват само по време на тестването, защото с тяхна помощ изминаваш extra mile, която няма как да изминеш в продукция (по-точно не можеш да си позволиш да изминеш, защото утежнява излишно приложението). 

Ако искаш да имаш проверки, които да живеят и в debug и в release си напиши собствени такива, а недей да изместваш смисъла на assert.

btw разшири малко полето за коментар на тази тема, защото при писане на по-дълъг коментар видимите 5 реда не стигат и се налага да използвам notepad :)</description>
		<content:encoded><![CDATA[<p>идеята е, че в assert можеш да сложиш extensive verification, която да е твърде тежка за нормална работа в продукция. по този начин при нормален (подчертавам: нормален! Лъчезар правилно е разчоплил темата по-горе) цикъл на разработка assert ти помагат да хванеш бъговете и когато отстраниш тези бъгове и минеш тестовете махаш assert-ите. Това е смисъла от тях - да съществуват само по време на тестването, защото с тяхна помощ изминаваш extra mile, която няма как да изминеш в продукция (по-точно не можеш да си позволиш да изминеш, защото утежнява излишно приложението). </p>
<p>Ако искаш да имаш проверки, които да живеят и в debug и в release си напиши собствени такива, а недей да изместваш смисъла на assert.</p>
<p>btw разшири малко полето за коментар на тази тема, защото при писане на по-дълъг коментар видимите 5 реда не стигат и се налага да използвам notepad <img src='http://skanev.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Стефан Кънев</title>
		<link>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1012</link>
		<dc:creator>Стефан Кънев</dc:creator>
		<pubDate>Wed, 20 Feb 2008 10:33:02 +0000</pubDate>
		<guid>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1012</guid>
		<description>О, да, не ми беше хрумнало, че занаята трябва да се съобразява с немарливите програмисти... *върти очи* . Очаквам скоро и да престанат да правят високи сгради, понеже немърливите архитекти не могат да се справят с това да ги проектират достатъчно здрави, разбираш ли...</description>
		<content:encoded><![CDATA[<p>О, да, не ми беше хрумнало, че занаята трябва да се съобразява с немарливите програмисти&#8230; *върти очи* . Очаквам скоро и да престанат да правят високи сгради, понеже немърливите архитекти не могат да се справят с това да ги проектират достатъчно здрави, разбираш ли&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: excessmind</title>
		<link>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1011</link>
		<dc:creator>excessmind</dc:creator>
		<pubDate>Wed, 20 Feb 2008 10:23:21 +0000</pubDate>
		<guid>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1011</guid>
		<description>Той те е разбрал, човека де. Просто ТЕОРЕТИЧНО не трябва да имаме СЛУЧАЙНО пропадане. На ПРАКТИКА имаме.
Интересен момент, ако не се изключват assert-ите би бил липсващи проверки на по-горното ниво, т.е. някой по-немарлив програмист, ще реши че така и така има проверка по-навътре, няма смисъл да слага и той. Тук също ТЕОРЕТИЧНО има само добри програмисти, но на ПРАКТИКА не е така :)</description>
		<content:encoded><![CDATA[<p>Той те е разбрал, човека де. Просто ТЕОРЕТИЧНО не трябва да имаме СЛУЧАЙНО пропадане. На ПРАКТИКА имаме.<br />
Интересен момент, ако не се изключват assert-ите би бил липсващи проверки на по-горното ниво, т.е. някой по-немарлив програмист, ще реши че така и така има проверка по-навътре, няма смисъл да слага и той. Тук също ТЕОРЕТИЧНО има само добри програмисти, но на ПРАКТИКА не е така <img src='http://skanev.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Стефан Кънев</title>
		<link>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1010</link>
		<dc:creator>Стефан Кънев</dc:creator>
		<pubDate>Wed, 20 Feb 2008 10:07:58 +0000</pubDate>
		<guid>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1010</guid>
		<description>Може би не успя да го прочетеш първите два пъти, затова ще го напиша за трети път:

АКО изключиш assert-ите и СЛУЧАЙНО някой от тях пропадне, то РИСКУВАШ системата ти да изпадне в невалидно състояние и ЧАСОВЕ ПО-КЪСНО потребителя да разбере, че цялата му работа е ПРЕЕБАНА.

Съответно, кое е "по-професионално"? Да изведеш съобщение "Съжалявам, имаме бъг. Моля свържете се с нас" или да обясняваш по телефона защо човека и е загубил половината ден и как смяташ да му възстановиш това време?

Впрочем, "Knuth". :/</description>
		<content:encoded><![CDATA[<p>Може би не успя да го прочетеш първите два пъти, затова ще го напиша за трети път:</p>
<p>АКО изключиш assert-ите и СЛУЧАЙНО някой от тях пропадне, то РИСКУВАШ системата ти да изпадне в невалидно състояние и ЧАСОВЕ ПО-КЪСНО потребителя да разбере, че цялата му работа е ПРЕЕБАНА.</p>
<p>Съответно, кое е &#8220;по-професионално&#8221;? Да изведеш съобщение &#8220;Съжалявам, имаме бъг. Моля свържете се с нас&#8221; или да обясняваш по телефона защо човека и е загубил половината ден и как смяташ да му възстановиш това време?</p>
<p>Впрочем, &#8220;Knuth&#8221;. :/</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Лъчезар Ангелов</title>
		<link>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1009</link>
		<dc:creator>Лъчезар Ангелов</dc:creator>
		<pubDate>Wed, 20 Feb 2008 09:57:44 +0000</pubDate>
		<guid>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1009</guid>
		<description>Да се "застраховаме" по подобен начин не звучи професионално. 


Но разбирам прекрасно, защо държиш на assert в release. В днешно време натиска от ръководството и сроковете са такива, че все повече и повече продукти се пускат не добре изтествани и изчистени от бъгове. Но защо да подтискаме симптомите, вместо да се целим в причинителя.


И "ДА" - всеки път ТРЯБВА да се минава през подробно тестване преди пускане на версия. Потребителите плащат за продукт, с който да си вършат работата и не им се плаща да намират и докладват ТВОИТЕ бъгове. И като си говорим за плащане:

http://www-cs-faculty.stanford.edu/~uno/abcde.html
"If you do succeed in finding a previously undiscovered bug in the programs for either TeX or METAFONT, I shall gladly pay you a reward of $327.68. Corrections to errors in The TeXbook or The METAFONTbook are worth $2.56, as in all my other books."
D.E.Knith

Този човек е сигурен в кода си, бъди и ти!</description>
		<content:encoded><![CDATA[<p>Да се &#8220;застраховаме&#8221; по подобен начин не звучи професионално. </p>
<p>Но разбирам прекрасно, защо държиш на assert в release. В днешно време натиска от ръководството и сроковете са такива, че все повече и повече продукти се пускат не добре изтествани и изчистени от бъгове. Но защо да подтискаме симптомите, вместо да се целим в причинителя.</p>
<p>И &#8220;ДА&#8221; - всеки път ТРЯБВА да се минава през подробно тестване преди пускане на версия. Потребителите плащат за продукт, с който да си вършат работата и не им се плаща да намират и докладват ТВОИТЕ бъгове. И като си говорим за плащане:</p>
<p><a href="http://www-cs-faculty.stanford.edu/~uno/abcde.html" rel="nofollow">http://www-cs-faculty.stanford.edu/~uno/abcde.html</a><br />
&#8220;If you do succeed in finding a previously undiscovered bug in the programs for either TeX or METAFONT, I shall gladly pay you a reward of $327.68. Corrections to errors in The TeXbook or The METAFONTbook are worth $2.56, as in all my other books.&#8221;<br />
D.E.Knith</p>
<p>Този човек е сигурен в кода си, бъди и ти!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Стефан Кънев</title>
		<link>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1008</link>
		<dc:creator>Стефан Кънев</dc:creator>
		<pubDate>Wed, 20 Feb 2008 09:28:16 +0000</pubDate>
		<guid>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1008</guid>
		<description>Не, не предоставяме unit теста с готов продукт, но (1) имаш контрол над това как потребителя ще види асертите и (2) те все пак могат да се провалят по време на работа в продукция. Тогава защо да ги махаш? Какво печелиш от това, че ги няма?

Ако някой от тях се провали, значи "програмиста не си е свършил работата". Съответно, какво предпочиташ - приложението ти да продължи да работи по мистериозен начин или бързо да умре, казвайки на потребителя, че е попаднал на някакъв бъг и е хубаво да го репортне? И винаги ли си сигурен, че след някоя промяна всичко е изрядно? Всеки път ли минаваш през подробно тестване преди да пуснеш нова версия на продукта публично, та си супер уверен, че нито един асерт няма да се счупи? Може ли човек да бъде толкова уверен въобще?</description>
		<content:encoded><![CDATA[<p>Не, не предоставяме unit теста с готов продукт, но (1) имаш контрол над това как потребителя ще види асертите и (2) те все пак могат да се провалят по време на работа в продукция. Тогава защо да ги махаш? Какво печелиш от това, че ги няма?</p>
<p>Ако някой от тях се провали, значи &#8220;програмиста не си е свършил работата&#8221;. Съответно, какво предпочиташ - приложението ти да продължи да работи по мистериозен начин или бързо да умре, казвайки на потребителя, че е попаднал на някакъв бъг и е хубаво да го репортне? И винаги ли си сигурен, че след някоя промяна всичко е изрядно? Всеки път ли минаваш през подробно тестване преди да пуснеш нова версия на продукта публично, та си супер уверен, че нито един асерт няма да се счупи? Може ли човек да бъде толкова уверен въобще?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Лъчезар Ангелов</title>
		<link>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1007</link>
		<dc:creator>Лъчезар Ангелов</dc:creator>
		<pubDate>Wed, 20 Feb 2008 09:20:26 +0000</pubDate>
		<guid>http://skanev.com/2008/02/18/errors-exceptions-assertations/#comment-1007</guid>
		<description>assert != check external data

Проверките на всякакви входни данни (било от потребител, файл, DB и т.н.) се правят с код за проверка:

if(...) {}
try { ... } catch() { ... }

и се генерира съответния изход към потребителя, че нещо не е наред - т.е. User Friendly диалог с описание на проблема, от който нормален човек, без достъп до изходния код на приложението да разбере проблема и евентуално как да го реши.

assert е програмистко средство, да се предпазим от пропуснати проверки на по-горно ниво.
Проверките, който се правят с assert БИ ТРЯБВАЛО да дублират проверки, направени преди това. Ако по време на разработка се случи, така че програмата да стигне до assert, минавайки по различен път от предвидения и заобикаляйки проверките - програмиста ще види това и ще реши ПРОБЛЕМА, който не е в assert, а в начина по който е стигнато до него.

assert служи на програмиста и пречи на потребителя. Ако нормален потребител получи 
"assertion failed in ..., line ..."
така или иначе няма да знае какво им там, и какво да предприеме. Това само ще значи, че някой програмист не си е свършил работата да провери за некоректни данни, преди да се стигне то това място в кода.

Unit test-овете са програмистко средство, също като assert, не ги предоставяме заедно с готовия продукт, нали ?</description>
		<content:encoded><![CDATA[<p>assert != check external data</p>
<p>Проверките на всякакви входни данни (било от потребител, файл, DB и т.н.) се правят с код за проверка:</p>
<p>if(&#8230;) {}<br />
try { &#8230; } catch() { &#8230; }</p>
<p>и се генерира съответния изход към потребителя, че нещо не е наред - т.е. User Friendly диалог с описание на проблема, от който нормален човек, без достъп до изходния код на приложението да разбере проблема и евентуално как да го реши.</p>
<p>assert е програмистко средство, да се предпазим от пропуснати проверки на по-горно ниво.<br />
Проверките, който се правят с assert БИ ТРЯБВАЛО да дублират проверки, направени преди това. Ако по време на разработка се случи, така че програмата да стигне до assert, минавайки по различен път от предвидения и заобикаляйки проверките - програмиста ще види това и ще реши ПРОБЛЕМА, който не е в assert, а в начина по който е стигнато до него.</p>
<p>assert служи на програмиста и пречи на потребителя. Ако нормален потребител получи<br />
&#8220;assertion failed in &#8230;, line &#8230;&#8221;<br />
така или иначе няма да знае какво им там, и какво да предприеме. Това само ще значи, че някой програмист не си е свършил работата да провери за некоректни данни, преди да се стигне то това място в кода.</p>
<p>Unit test-овете са програмистко средство, също като assert, не ги предоставяме заедно с готовия продукт, нали ?</p>
]]></content:encoded>
	</item>
</channel>
</rss>
