Типовые ошибки приразработке ПО, и методы ихпредотвращенияЮрий Зеленский                                 2011             ...
2012 © Itransition Group. Proprietary and Confidential   2
Статистика1 (найденная, функциональная) ошибка каждый день                        количество проектов с issue/fte 10  9  8...
Статистика 20-30 ошибок на kSloc “свежего” кода (1 на 40 строк) 1-5 ошибок на kSloc в тестированном release 10 строк в ...
ОпределениеСистема возвращает некорректный илинеожидаемый результат фактическим и Расхождение между или ведет себянепредус...
Ошибка?send(to, from, count)register short *to, *from;register count;{     register n = (count + 7) / 8;     switch(count ...
Так лучше?do {          /* count > 0 assumed, “to” pointer have to have “volatile” qualifier */   *to = *from++;         /...
Основные причины ошибок  Невежество  Безразличие     Лень         2012 © Itransition Group. Proprietary and Confidential   8
Основные средства предотвращения      Кропотливость       Дотошность       Аккуратность    Внимание к деталям     Ответств...
Классификация по источнику                    Ошибки процессанет времени, нет разработчиков, нет менеджера, нет спецификац...
Классификация по типу                     Функциональные Проектирования и программирования: misconception Функциональные...
Функциональные ошибки программирования Логические: бесконечные циклы, off-by-one и т.п. Арифметические: деление на  нуль...
Антипаттерн: определениеЧасто встречающийся подход к решениюпроблем, приводящий к однозначноотрицательным последствиям.htt...
Вот такая вот у нас ООПаГлобальные переменныеПоведение без состоянийНеобоснованное наследованиеLCOM4>3Божественный объект ...
Несколько (вопиющих) примеровНе аккуратненько как-то: не выравнено, неединообразно, при изменении размера всерасползается,...
Ещѐ примеры Волшебная кнопка, она же волшебная ASP, волшебная  JSP, волшебный сервлет, монолитный сервлет. Неиспользован...
Ещѐ примерКомпактно, эффектно, возможно даже эффективно, но не читаемо.IOCCC открыт для всех. Эта программа играет в шахма...
А что делать?  2012 © Itransition Group. Proprietary and Confidential   18
Народная мудрость Если что-то может сломаться - оно обязательно  сломается (закон Мѐрфи) Сложность – главный враг надежн...
Практические советы      Кропотливость       Дотошность       Аккуратность    Внимание к деталям     Ответственность      ...
Ещѐ более практические советыИспользуйте уже отлаженный код. Не пишите свой. Изучайте(стандартные) библиотеки. Повесьте ch...
И ещѐ советыНе используйте copy & paste – вы копируете ошибки!                   Do not repeat yourself!Регулярно проверяй...
И ещѐ советыОблегчите и ускорьте себе отладку. Под рукой должнабыть возможность запустить отладчик, даже если кодна далеко...
Последнее но не по значению              Статический анализ кода   Sonar (требуйте размещения своего проекта на           ...
Статический анализ?          2012 © Itransition Group. Proprietary and Confidential   25
Статический анализ? Да, но не так!           2012 © Itransition Group. Proprietary and Confidential   26
Статический анализ! Да! Вот так!           2012 © Itransition Group. Proprietary and Confidential   27
2012 © Itransition Group. Proprietary and Confidential   28
Физики шутятБорбаг (Bohrbug)Просто баг. Простой какпланетарная модель ядра.               2012 © Itransition Group. Propri...
Физики шутятГейзенбаг(Heisenbug)Баг который меняет своеповедение при попыткеего пронаблюдать.                2012 © Itrans...
Физики шутятМандельбаг(Mandelbug)Ошибки, чьи причинынастолько сложны инеясны, что кажутсяхаотичными (изавораживающими како...
Физики шутятШрединбаг(Schroedinbug)После того как в текстеобнаруживаетсякритическаяошибка, программа(ранее вполнеработающа...
Discuss!                              2011www.itransition.com              y.zelensky@itransition.com          2012 © Itra...
Внеклассное чтение   http://tinypaste.com/0659d1a1          2012 © Itransition Group. Proprietary and Confidential   34
Внеклассное чтениеhttp://en.wikipedia.org/wiki/Duffs_devicehttp://en.wikipedia.org/wiki/Software_bughttp://en.wikipedia.or...
Upcoming SlideShare
Loading in...5
×

лекция типовые ошибки

714

Published on

Слайды к лекции о типовых ошибках при разработке ПО (на русском языке).

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
714
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Не противопоставляется творческому подходу, но дополняет, усиливает эффект. Позволяет избежать потерь и меньшими силами достичь большего результата.
  • Неотличимые программы, с разным исходным кодом и стоимостью владения, внесения изменений, развития.Безопасность – которую можно эксплуатировать – функциональный дефект. Фактические проблемы с масштабированием – функциональный.Неэффективность, потенциальная угроза безопасности – нефункциональный.Деффект это расхождение реальности с ожиданиями. Для нефункциональных критериев нужно понимать ожиданияНужно четко понимать, на какой компромис мы идем, например: читаемость vs. эффективность
  • Off by one двух типов: из за нумерации с нуля и из за того что интервалов меньше чем вех
  • Пусть лучше бедненько, но зато чистенько.Пусть уж безобразно, но хотя бы единообразноЗаButton1 раньше увольнялиЕсли затрудняетесь подобрать название, то вероятно вообще не понимаете что пишите.
  • Нужно использовать правильно
  • лекция типовые ошибки

    1. 1. Типовые ошибки приразработке ПО, и методы ихпредотвращенияЮрий Зеленский 2011 2012 © Itransition Group. Proprietary and Confidential 1
    2. 2. 2012 © Itransition Group. Proprietary and Confidential 2
    3. 3. Статистика1 (найденная, функциональная) ошибка каждый день количество проектов с issue/fte 10 9 8 7 6 5 4 3 2 1 0 0 4 8 12 16 20 24 28 32 36 40 44 48 52 54 2012 © Itransition Group. Proprietary and Confidential 3
    4. 4. Статистика 20-30 ошибок на kSloc “свежего” кода (1 на 40 строк) 1-5 ошибок на kSloc в тестированном release 10 строк в час – наша производительность Лучшие показатели (embedded в aerospace) 0.1/kSloc 35% изменений в support не вносят ошибок (international conference software maintainers 1998) 16% изменений вносят 15 и более ошибок 2012 © Itransition Group. Proprietary and Confidential 4
    5. 5. ОпределениеСистема возвращает некорректный илинеожидаемый результат фактическим и Расхождение между или ведет себянепредусмотренным результатами ожидаемым образомСинонимы:ошибка, дефект, проблема, отказ, сбой, неисправность, повреждение, несоответствие, особенность, bug, issue 2012 © Itransition Group. Proprietary and Confidential 5
    6. 6. Ошибка?send(to, from, count)register short *to, *from;register count;{ register n = (count + 7) / 8; switch(count % 8) { case 0: do { *to = *from++; case 7: *to = *from++; case 6: *to = *from++; case 5: *to = *from++; case 4: *to = *from++; case 3: *to = *from++; case 2: *to = *from++; case 1: *to = *from++; } while(--n > 0); }} 2012 © Itransition Group. Proprietary and Confidential 6
    7. 7. Так лучше?do { /* count > 0 assumed, “to” pointer have to have “volatile” qualifier */ *to = *from++; /* Note that the to pointer is NOT incremented */} while(--count > 0); 2012 © Itransition Group. Proprietary and Confidential 7
    8. 8. Основные причины ошибок Невежество Безразличие Лень 2012 © Itransition Group. Proprietary and Confidential 8
    9. 9. Основные средства предотвращения Кропотливость Дотошность Аккуратность Внимание к деталям Ответственность 2012 © Itransition Group. Proprietary and Confidential 9
    10. 10. Классификация по источнику Ошибки процессанет времени, нет разработчиков, нет менеджера, нет спецификации, нет issue tracking, нет version control, нет понимания задачи Ошибки проектирования Сложность, «велосипед» и другие design antipatterns. Ошибки программирования Copy paste, неряшливость, и другие подводные камни (aka pitfalls) 2012 © Itransition Group. Proprietary and Confidential 10
    11. 11. Классификация по типу Функциональные Проектирования и программирования: misconception Функциональные ошибки программирования Не функциональные Тестопригодность (модульная, интеграционная) Надежность Простота внесения изменений(читаемость, понятность) Безопасность Эффективность (производительность) Портируемость Пригодность к повторному использованию Сопровождаемость(читаемость, понятность, документиро ванность) 2012 © Itransition Group. Proprietary and Confidential 11
    12. 12. Функциональные ошибки программирования Логические: бесконечные циклы, off-by-one и т.п. Арифметические: деление на нуль, overflow, underflow Синтаксические: = вместо == и т.п. Ресурсные: неинициализированные значения, утечки памяти и ресурсов, переполнения буфера и стека Многопоточности: блокировки, гонки Интерфейсов: некорректное использование API, протоколов, аппаратных возможностей Производительности: алгоритмическая сложность, беспорядочные операции ввода вывода 2012 © Itransition Group. Proprietary and Confidential 12
    13. 13. Антипаттерн: определениеЧасто встречающийся подход к решениюпроблем, приводящий к однозначноотрицательным последствиям.http://c2.com/cgi/wiki?AntiPatternsCataloghttp://en.wikipedia.org/wiki/Antipatterns#Software_design_anti-patterns 2012 © Itransition Group. Proprietary and Confidential 13
    14. 14. Вот такая вот у нас ООПаГлобальные переменныеПоведение без состоянийНеобоснованное наследованиеLCOM4>3Божественный объект 2012 © Itransition Group. Proprietary and Confidential 14
    15. 15. Несколько (вопиющих) примеровНе аккуратненько как-то: не выравнено, неединообразно, при изменении размера всерасползается, не единообразно.Что в имени тебе моем: невнятные, или дажестандартные имена переменных, классов объектов.Button1 на Form1?! Вы что издеваетесь?Английский (можно подсматривать в словарь). Безакронимов! Не экономим символы! 2012 © Itransition Group. Proprietary and Confidential 15
    16. 16. Ещѐ примеры Волшебная кнопка, она же волшебная ASP, волшебная JSP, волшебный сервлет, монолитный сервлет. Неиспользование regexp (мне же, буквально, проверить email это или нет, что ради этого regexp учить?) Отсутствие контроля данных (это же мы сами сформировали параметр, тут не может быть других значений) Не использование кэша или бездумное использование кэша Ручной разбор текстовых форматов (xml, http, и т.п.) Ручная конкатенация данных для формирования текстовых представлений (sql, xml, html, и т.п.) Не использование пула ресурсов(подключений) Манипуляции с immutable объектами Магические константы 2012 © Itransition Group. Proprietary and Confidential 16
    17. 17. Ещѐ примерКомпактно, эффектно, возможно даже эффективно, но не читаемо.IOCCC открыт для всех. Эта программа играет в шахматы, всѐ ещѐгордитесь мастерством владения тернарным оператором?char*l="ustvrtsuqqqqqqqqyyyyyyyy}{|~z|{}" " 76Lsabcddcba .pknbrq PKNBRQ?A6J57IKJT576,+-48HLSU"; #define F getchar()&z #define v X(0,0,0,21, #define Z while(#define _ ;if( #define P return--G,y^=8, B,i,y,u,b,I[411],*G=I,x=10,z=15,M=1e4;X(w,c,h,e,S,s){intt,o,L,E,d,O=e,N=-M*M,K =78-h<<x,p,*g,n,*m,A,q,r,C,J,a=y?-x:x;y^=8;G++;d=w||s&&s>=h&&v0,0)>M;do{_ o=I[ p=O]){q=o&z^y _ q<7){A=q--&2?8:4;C=o-9&z?q["& .$ "]:42;do{r=I[p+=C[l]-64]_!w|p ==w){g=q|p+a-S?0:I+S _!r&(q|A<3||g)||(r+1&z^y)>9&&q|A>2){_ m=!(r-2&7))PG[1]=O, K;J=n=o&z;E=I[p-a]&z;t=q|E-7?n:(n+=2,6^y);Z n<=t){L=r?l[r&7]*9-189-h-q:0 _ s)L +=(1-q?l[p/x+5]-l[O/x+5]+l[p%x+6]*-~!q-l[O%x+6]+o/16*8:!!m*9)+(q?0:!(I[p-1]^n)+!(I[p+1]^n)+l[n&7]*9-386+!!g*99+(A<2))+!(E^y^9)_ s>h||1<s&s==h&&L>z|d){p[I]=n,O[I]=m?*g=*m,*m=0:g?*g=0:0;L-=X(s>h|d?0:p,L-N,h+1,G[1],J=q|A>1?0:p,s)_!(h||s-1|B -O|i-n|p-b|L<-M))P y^=8,u=J;J=q-1|A<7||m||!s|d|r|o<z||v 0,0)>M;O[I]=o;p[I]=r;m?*m=*g,*g=0:g?*g=9^y:0;}_ L>N){*G=O _ s>1){_ h&&c-L<0)P L _!h)i=n,B=O,b=p;}N=L;}n+=J||(g=I+p,m=p<O?g-3:g+2,*m<z|m[O-p]||I[p+=p-O]);}}}}Z!r&q>2||(p=O,q|A>2|o>z&!r&&++C*--A));}}}Z++O>98?O=20:e-O);P N+M*M&&N>-K+1924|d?N:0;}main(){Z++B<121)*G++=B/x%x<2|B%x<2?7:B/x&4?0:*l++&31;Z B=19){Z B++<99)putchar(B%x?l[B[I]|16]:x)_ x-(B=F)){i=I[B+=(x-F)*x]&z;b=F;b+=(x-F)*x;Z x-(*G=F))i=*G^8^y;}else v u,5);v u, 1);}} 2012 © Itransition Group. Proprietary and Confidential 17
    18. 18. А что делать? 2012 © Itransition Group. Proprietary and Confidential 18
    19. 19. Народная мудрость Если что-то может сломаться - оно обязательно сломается (закон Мѐрфи) Сложность – главный враг надежности Самые дешевые, быстрые и надежные компоненты – те, которых нет Два подхода: «так просто, что очевидно нет недостатков» и «так сложно, что нет очевидных недостатков» Сложность программы растет до тех пор, пока не превысит способности программиста Один волос на голове - слишком мало, в супе - слишком много 2012 © Itransition Group. Proprietary and Confidential 19
    20. 20. Практические советы Кропотливость Дотошность Аккуратность Внимание к деталям Ответственность 2012 © Itransition Group. Proprietary and Confidential 20
    21. 21. Ещѐ более практические советыИспользуйте уже отлаженный код. Не пишите свой. Изучайте(стандартные) библиотеки. Повесьте cheetsheet, убедитесьчто вы знаете про свою библиотеку все.Боритесь за простоту. Refactor! Пишите хорошиекомментарии и не пишите плохих, потому что это отнимаетвремя от написания хороших (плеоназмы, тавтологии ничемне лучше отсутствия комментария)Комментарий должен пояснять не что написано, а почему, ипочему именно так. Лучше большой комментарий набольшой кусок, чем много микро-комментариев.Именуйте все (extract method, extract variable).Пользуйтесь шаблонами IDE (как минимум всемистандартными). 2012 © Itransition Group. Proprietary and Confidential 21
    22. 22. И ещѐ советыНе используйте copy & paste – вы копируете ошибки! Do not repeat yourself!Регулярно проверяйте себя и окружающих на предметиспользования copy & paste (при помощи специальныхсредств)Если совсем невмоготу: можно cut & pasteЗапускайте автоформат, пусть ваш код будет (хотя бы)гладким и шелковистымЧитайте чужой код (например код библиотек вашего языка)Читайте свой кодПереведите написанное в коде на натуральный язык(обратная семантическая трассировка)Требуйте проведения code review (Fagan process какапофеоз peer review – это работает!) 2012 © Itransition Group. Proprietary and Confidential 22
    23. 23. И ещѐ советыОблегчите и ускорьте себе отладку. Под рукой должнабыть возможность запустить отладчик, даже если кодна далеком сервере.Экстернализируйте параметры конфигурации.Обеспечьте возможность их менять в runtime.Имейте хоть какой-то интеграционный тест.Используйте модульные тесты.Пользуйтесь edit & continue, hot replace и (или Ruby )Дефекты в последних изменениях. Самый частоменяемый файл – проблемный.Попробуйте time machine debug (intellitrace и подобные) 2012 © Itransition Group. Proprietary and Confidential 23
    24. 24. Последнее но не по значению Статический анализ кода Sonar (требуйте размещения своего проекта на корпоративном sonar сервере) FindBugs, FxCop, lint, PMD, тысячи их: http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis Источник информации об antipatterns. 2012 © Itransition Group. Proprietary and Confidential 24
    25. 25. Статический анализ? 2012 © Itransition Group. Proprietary and Confidential 25
    26. 26. Статический анализ? Да, но не так! 2012 © Itransition Group. Proprietary and Confidential 26
    27. 27. Статический анализ! Да! Вот так! 2012 © Itransition Group. Proprietary and Confidential 27
    28. 28. 2012 © Itransition Group. Proprietary and Confidential 28
    29. 29. Физики шутятБорбаг (Bohrbug)Просто баг. Простой какпланетарная модель ядра. 2012 © Itransition Group. Proprietary and Confidential 29
    30. 30. Физики шутятГейзенбаг(Heisenbug)Баг который меняет своеповедение при попыткеего пронаблюдать. 2012 © Itransition Group. Proprietary and Confidential 30
    31. 31. Физики шутятМандельбаг(Mandelbug)Ошибки, чьи причинынастолько сложны инеясны, что кажутсяхаотичными (изавораживающими какодноименное множество). 2012 © Itransition Group. Proprietary and Confidential 31
    32. 32. Физики шутятШрединбаг(Schroedinbug)После того как в текстеобнаруживаетсякритическаяошибка, программа(ранее вполнеработающая) перестаетфункционировать. 2012 © Itransition Group. Proprietary and Confidential 32
    33. 33. Discuss! 2011www.itransition.com y.zelensky@itransition.com 2012 © Itransition Group. Proprietary and Confidential 33
    34. 34. Внеклассное чтение http://tinypaste.com/0659d1a1 2012 © Itransition Group. Proprietary and Confidential 34
    35. 35. Внеклассное чтениеhttp://en.wikipedia.org/wiki/Duffs_devicehttp://en.wikipedia.org/wiki/Software_bughttp://en.wikipedia.org/wiki/Software_bug#Common_types_of_computer_bugshttp://c2.com/cgi/wiki?AntiPatternsBookhttp://dou.ua/lenta/articles/resign-patterns/http://en.wikipedia.org/wiki/Anti-patternhttp://en.wikipedia.org/wiki/Antipatterns#Object-oriented_design_anti-patternshttp://en.wikipedia.org/wiki/Fagan_inspectionhttp://en.wikipedia.org/wiki/Category:Software_engineering_disastershttp://ru.wikipedia.org/wiki/Обратная_семантическая_трассировкаhttp://msdn.microsoft.com/en-us/library/dd264915.aspx //intelliTracehttp://www.lambdacs.com/debugger/ //historical debugger for Javahttp://www.chrononsystems.com/ //another historical debugger for Javahttp://en.wikipedia.org/wiki/SQALE#The_indiceshttp://quotes.cat-v.org/programming/http://lib.ru/ANEKDOTY/marphy.txthttp://www.opennet.ru/opennews/art.shtml?num=19763 //most widespread that lead to SW vulnerabilitieshttp://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601/http://en.wikipedia.org/wiki/Toledo_Nanochesshttp://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysishttp://en.wikipedia.org/wiki/Static_program_analysishttp://www.aivosto.com/project/help/pm-oo-cohesion.htmlhttp://www.ozon.ru/context/detail/id/1425895/ //горький вкус Java 2012 © Itransition Group. Proprietary and Confidential 35
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×