pragmatic test driven development. Практика

21

Upload: samsolutionsby

Post on 30-May-2015

448 views

Category:

Documents


0 download

DESCRIPTION

Доклад в двух частях (практика и теория) от специалистов компании SaM Solutions, применявших TDD на практике. Теория: http://www.slideshare.net/samsolutionsby/pragmatic-test-driven-development-18180858

TRANSCRIPT

Page 1: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

Pragmatic Test Driven Development. Ïðàêòèêà

Âëàä 'mend0za' ØàõîâLinux and Embedded department

SaM Solutions

March 2012

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 2: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

Outline: Êðàòêîå ñîäåðæàíèå è òåìû

þíèò-òåñòèðîâàíèå

ôóíêöèîíàëüíîå òåñòèðîâàíèå

çàïóñê òåñòîâ è ïðîâåðêà ðåçóëüòàòîâ

êîíòðîëü ïîêðûòèÿ òåñòàìè êîäà

óòèëèòû è áèáëèîòåêè (Free Software)

íà ïðèìåðå 2õ ðåàëüíûõ embedded ïðîåêòîâ

äëÿ ÿçûêà ïðîãðàììèðîâàíèÿ Ñè

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 3: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

À íàäî ëè âîîáùå òåñòèðîâàòü?

Çà÷åì êîçå áàÿí TDD ?

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 4: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

Ïðè÷èíû ïî÷åìó �ÄÀ�

òåñòèðóåò ñàì ðàçðàáîò÷èêýòî òîæå ïðîãðàììèðîâàíèå

ñîîòâåñòâèå òðåáîâàíèÿì

ãàðàíòèÿ, ÷òî âàø êîä äåëàåò âñ¼ êàê íàäî

êîíòðîëü êîððåêòíîñòè èçìåíåíèéèñïðàâëåíèÿ ëåãêî ïðîâåðèòü ïðîñòî çàïóñòèâ òåñòû

ìåíåäæåðü¼ è çàêàç÷èêè ëþáÿò êðàñèâûå öèôðû

TDD äàñò öèôðû äëÿ îò÷¼òà

èòîãî

êà÷åñòâî è óïðàâëÿåìîñòü ðàçðàáîòêè óëó÷øèòñÿ

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 5: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

Ïðè÷èíû ïî÷åìó �ÄÀ�

òåñòèðóåò ñàì ðàçðàáîò÷èêýòî òîæå ïðîãðàììèðîâàíèå

ñîîòâåñòâèå òðåáîâàíèÿì

ãàðàíòèÿ, ÷òî âàø êîä äåëàåò âñ¼ êàê íàäî

êîíòðîëü êîððåêòíîñòè èçìåíåíèéèñïðàâëåíèÿ ëåãêî ïðîâåðèòü ïðîñòî çàïóñòèâ òåñòû

ìåíåäæåðü¼ è çàêàç÷èêè ëþáÿò êðàñèâûå öèôðû

TDD äàñò öèôðû äëÿ îò÷¼òà

èòîãî

êà÷åñòâî è óïðàâëÿåìîñòü ðàçðàáîòêè óëó÷øèòñÿ

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 6: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

Ïðè÷èíû ïî÷åìó �ÄÀ�

òåñòèðóåò ñàì ðàçðàáîò÷èêýòî òîæå ïðîãðàììèðîâàíèå

ñîîòâåñòâèå òðåáîâàíèÿì

ãàðàíòèÿ, ÷òî âàø êîä äåëàåò âñ¼ êàê íàäî

êîíòðîëü êîððåêòíîñòè èçìåíåíèéèñïðàâëåíèÿ ëåãêî ïðîâåðèòü ïðîñòî çàïóñòèâ òåñòû

ìåíåäæåðü¼ è çàêàç÷èêè ëþáÿò êðàñèâûå öèôðû

TDD äàñò öèôðû äëÿ îò÷¼òà

èòîãî

êà÷åñòâî è óïðàâëÿåìîñòü ðàçðàáîòêè óëó÷øèòñÿ

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 7: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

Ïðè÷èíû ïî÷åìó �ÄÀ�

òåñòèðóåò ñàì ðàçðàáîò÷èêýòî òîæå ïðîãðàììèðîâàíèå

ñîîòâåñòâèå òðåáîâàíèÿì

ãàðàíòèÿ, ÷òî âàø êîä äåëàåò âñ¼ êàê íàäî

êîíòðîëü êîððåêòíîñòè èçìåíåíèéèñïðàâëåíèÿ ëåãêî ïðîâåðèòü ïðîñòî çàïóñòèâ òåñòû

ìåíåäæåðü¼ è çàêàç÷èêè ëþáÿò êðàñèâûå öèôðû

TDD äàñò öèôðû äëÿ îò÷¼òà

èòîãî

êà÷åñòâî è óïðàâëÿåìîñòü ðàçðàáîòêè óëó÷øèòñÿ

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 8: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

Ïðè÷èíû ïî÷åìó �ÄÀ�

òåñòèðóåò ñàì ðàçðàáîò÷èêýòî òîæå ïðîãðàììèðîâàíèå

ñîîòâåñòâèå òðåáîâàíèÿì

ãàðàíòèÿ, ÷òî âàø êîä äåëàåò âñ¼ êàê íàäî

êîíòðîëü êîððåêòíîñòè èçìåíåíèéèñïðàâëåíèÿ ëåãêî ïðîâåðèòü ïðîñòî çàïóñòèâ òåñòû

ìåíåäæåðü¼ è çàêàç÷èêè ëþáÿò êðàñèâûå öèôðû

TDD äàñò öèôðû äëÿ îò÷¼òà

èòîãî

êà÷åñòâî è óïðàâëÿåìîñòü ðàçðàáîòêè óëó÷øèòñÿ

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 9: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

Âíåäðåíèå. Ïðîñòûå ðåöåïòû

Òåñòû áåç ïðîâåðêè ïîêðûòèÿ - áåñïîëåçíû

Sad but truea

aMetallica c©1993 �Sad but true� single

Ìàëåíüêèé ïðîåêò - ïðîñòûå ïðîöåññû

Áîëüøîé ïðîåêò - ãåìîððîéíûå èíñòðóìåíòû

Rational R© Purify R© íàïðèìåð

Ôèçèêà

çàêîíû ìàêðîìèðà è ìèêðîìèðà îòëè÷àþòñÿ

êîðåííûì îáðàçîì

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 10: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

Âíåäðåíèå. Ïðîñòûå ðåöåïòû

Òåñòû áåç ïðîâåðêè ïîêðûòèÿ - áåñïîëåçíû

Sad but truea

aMetallica c©1993 �Sad but true� single

Ìàëåíüêèé ïðîåêò - ïðîñòûå ïðîöåññû

Áîëüøîé ïðîåêò - ãåìîððîéíûå èíñòðóìåíòû

Rational R© Purify R© íàïðèìåð

Ôèçèêà

çàêîíû ìàêðîìèðà è ìèêðîìèðà îòëè÷àþòñÿ

êîðåííûì îáðàçîì

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 11: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

Âíåäðåíèå. Ïðîñòûå ðåöåïòû

Òåñòû áåç ïðîâåðêè ïîêðûòèÿ - áåñïîëåçíû

Sad but truea

aMetallica c©1993 �Sad but true� single

Ìàëåíüêèé ïðîåêò - ïðîñòûå ïðîöåññû

Áîëüøîé ïðîåêò - ãåìîððîéíûå èíñòðóìåíòû

Rational R© Purify R© íàïðèìåð

Ôèçèêà

çàêîíû ìàêðîìèðà è ìèêðîìèðà îòëè÷àþòñÿ

êîðåííûì îáðàçîì

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 12: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

Âíåäðåíèå. Ïðîñòûå ðåöåïòû

Òåñòû áåç ïðîâåðêè ïîêðûòèÿ - áåñïîëåçíû

Sad but truea

aMetallica c©1993 �Sad but true� single

Ìàëåíüêèé ïðîåêò - ïðîñòûå ïðîöåññû

Áîëüøîé ïðîåêò - ãåìîððîéíûå èíñòðóìåíòû

Rational R© Purify R© íàïðèìåð

Ôèçèêà

çàêîíû ìàêðîìèðà è ìèêðîìèðà îòëè÷àþòñÿ

êîðåííûì îáðàçîì

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 13: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

Ñáîðî÷íàÿ ñèñòåìà

1 Äîáàâëÿåì êîìïèëÿöèþ òåñòîâ â ñáîðêó

2 Âêëþ÷àåì ïîäñ÷¼ò ïîêðûòèÿ gcov :CFLAGS+= - -coverage

1 CFLAGS += −DDEBUG=$ (DEBUG) −g −−coverageBINARY_TEST = unit_test

3 OBJ_TEST = t e s t / t e s t . o source / f t s_b in s ea r ch t r e e . o

5 $ (BINARY_TEST) : $ (OBJ) $ (OBJ_TEST)$ (CC) $ (CFLAGS) $ (LDFLAGS) −o $@ $^ /usr / l i b /

l i b che ck . a7

check : $ (BINARY_TEST) $ (CONFIG_SPACE_PATH)9 . / $ (BINARY_TEST) $ (CONFIG_SPACE_PATH)

[

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 14: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

Êàê ðàçðàáàòûâàåì 1: êîä è òåñòû

test/test.c

1 START_TEST( conf ig_space_check_test ){

3 i n t r e t = config_space_check ( nvram_basedir ,BMCInst ) ;

f a i l _ i f ( r e t != −1, " config_space_check ( ) mustre turn −1" ) ;

5 }END_TEST

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 15: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

Êàê ðàçðàáàòûâàåì 2: êîìïèëÿöèÿ è çàïóñê

test/test.c

$ make check96%: Checks: 27, Failures: 1, Errors: 0test/test.c:54:F:Con�g Space:test_init:0: path should not opentest/test.c:1524:P:Con�g Space:con�g_space_check_test:0: Passedtest/test.c:1561:P:Con�g Space:string_with_zero_test:0: Passedtest/test.c:1595:P:Con�g Space:migration_test:0: Passed

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 16: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

Êàê ðàçðàáàòûâàåì 3: ïðîâåðêà ïîêðûòèÿ

ïðîâåðêà ïîêðûòèÿ

ãäå îòðàáîòàëè, ãäå íå âîøëè + ñòàòèñòèêà

ggcov

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 17: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

Êàê ðàçðàáàòûâàåì 3: ïðîâåðêà ïîêðûòèÿ

ïðîâåðêà ïîêðûòèÿ

ãäå îòðàáîòàëè, ãäå íå âîøëè + ñòàòèñòèêà

ggcov

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 18: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

Ïðèìåð 1. Áèáëèîòåêà ñ âíåøíèì API

Ïðîåêò: ïðîøèâêà BMC ñåðâåðîâ Fujitsu Primergy

Íàçíà÷åíèå: óïðàâëåíèå ïåðåìåííûìè äëÿ IPMI-ñòåêà

Ðîëü TDD: òîëüêî Unit-òåñòèðîâàíèå

Èíñòðóìåíû è ëèáû TDD: check, gcc/gcov, ggcov

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 19: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

Ïðèìåð 2. Óïðàâëÿþùåå ÏÎ ïðîøèâêè

Ïðîåêò: 4-õ êàíàëüíûé âèäåîðåãèñòðàòîð

Íàçíà÷åíèå: óïðàâëÿþùåå ÏÎ â user-space

Ðîëü TDD: Unit Testing, Functional Testing,Integration Testing, ýìóëÿöèÿ îáîðóäîâàíèÿ

Èíñòðóìåíû è ëèáû TDD: cunit, make,gcc/gcov, ggcov, Linux Kernel

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 20: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

èíñòðóìåíòû

Unit-test frameworks1. check - http://check.sourceforge.net2. cunit - http://cunit.sourceforge.net

Coverage tools3. Ðàñøèðåíèå gcov - âñòðîåíî â GCC (- -coverage)4. ggcov tool - http://ggcov.sourceforge.net

Âåñü èíñòðóìåíòàðèé - äîñòóïåí â äèñòðèáóòèâàõ, ïîäñâîáîäíûìè ëèöåíçèÿìè

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà

Page 21: Pragmatic Test Driven Development. Практика

IntroÌîòèâàöèîííàÿ

ÂíåäðåíèåÏðàêòèêà

Âîïðîñû?

Âàøè âîïðîñû

www: http://www.sam-solutions.com

email: [email protected]

jabber: [email protected]

SaM Solutions: Linux and Embedded department Pragmatic Test Driven Development. Ïðàêòèêà