IntroÌîòèâàöèîííàÿ
ÂíåäðåíèåÏðàêòèêà
Test Driven Development. Ïðàêòèêà
Âëàä 'mend0za' ØàõîâLinux and Embedded department
SaM Solutions
March 2012
SaM Solutions: Linux and Embedded department Test Driven Development. Ïðàêòèêà
IntroÌîòèâàöèîííàÿ
ÂíåäðåíèåÏðàêòèêà
Outline: Êðàòêîå ñîäåðæàíèå è òåìû
þíèò-òåñòèðîâàíèå
ôóíêöèîíàëüíîå òåñòèðîâàíèå
çàïóñê òåñòîâ è ïðîâåðêà ðåçóëüòàòîâ
êîíòðîëü ïîêðûòèÿ òåñòàìè êîäà
óòèëèòû è áèáëèîòåêè (Free Software)
íà ïðèìåðå 2õ ðåàëüíûõ embedded ïðîåêòîâ
äëÿ ÿçûêà ïðîãðàììèðîâàíèÿ Ñè
SaM Solutions: Linux and Embedded department Test Driven Development. Ïðàêòèêà
IntroÌîòèâàöèîííàÿ
ÂíåäðåíèåÏðàêòèêà
À íàäî ëè âîîáùå òåñòèðîâàòü?
Çà÷åì êîçå áàÿí TDD ?
SaM Solutions: Linux and Embedded department Test Driven Development. Ïðàêòèêà
IntroÌîòèâàöèîííàÿ
ÂíåäðåíèåÏðàêòèêà
Ïðè÷èíû ïî÷åìó �ÄÀ�
òåñòèðóåò ñàì ðàçðàáîò÷èêýòî òîæå ïðîãðàììèðîâàíèå
ñîîòâåñòâèå òðåáîâàíèÿì
ãàðàíòèÿ, ÷òî âàø êîä äåëàåò âñ¼ êàê íàäî
êîíòðîëü êîððåêòíîñòè èçìåíåíèéèñïðàâëåíèÿ ëåãêî ïðîâåðèòü ïðîñòî çàïóñòèâ òåñòû
ìåíåäæåðü¼ è çàêàç÷èêè ëþáÿò êðàñèâûå öèôðû
TDD äàñò öèôðû äëÿ îò÷¼òà
èòîãî
êà÷åñòâî è óïðàâëÿåìîñòü ðàçðàáîòêè óëó÷øèòñÿ
SaM Solutions: Linux and Embedded department Test Driven Development. Ïðàêòèêà
IntroÌîòèâàöèîííàÿ
ÂíåäðåíèåÏðàêòèêà
Ïðè÷èíû ïî÷åìó �ÄÀ�
òåñòèðóåò ñàì ðàçðàáîò÷èêýòî òîæå ïðîãðàììèðîâàíèå
ñîîòâåñòâèå òðåáîâàíèÿì
ãàðàíòèÿ, ÷òî âàø êîä äåëàåò âñ¼ êàê íàäî
êîíòðîëü êîððåêòíîñòè èçìåíåíèéèñïðàâëåíèÿ ëåãêî ïðîâåðèòü ïðîñòî çàïóñòèâ òåñòû
ìåíåäæåðü¼ è çàêàç÷èêè ëþáÿò êðàñèâûå öèôðû
TDD äàñò öèôðû äëÿ îò÷¼òà
èòîãî
êà÷åñòâî è óïðàâëÿåìîñòü ðàçðàáîòêè óëó÷øèòñÿ
SaM Solutions: Linux and Embedded department Test Driven Development. Ïðàêòèêà
IntroÌîòèâàöèîííàÿ
ÂíåäðåíèåÏðàêòèêà
Ïðè÷èíû ïî÷åìó �ÄÀ�
òåñòèðóåò ñàì ðàçðàáîò÷èêýòî òîæå ïðîãðàììèðîâàíèå
ñîîòâåñòâèå òðåáîâàíèÿì
ãàðàíòèÿ, ÷òî âàø êîä äåëàåò âñ¼ êàê íàäî
êîíòðîëü êîððåêòíîñòè èçìåíåíèéèñïðàâëåíèÿ ëåãêî ïðîâåðèòü ïðîñòî çàïóñòèâ òåñòû
ìåíåäæåðü¼ è çàêàç÷èêè ëþáÿò êðàñèâûå öèôðû
TDD äàñò öèôðû äëÿ îò÷¼òà
èòîãî
êà÷åñòâî è óïðàâëÿåìîñòü ðàçðàáîòêè óëó÷øèòñÿ
SaM Solutions: Linux and Embedded department Test Driven Development. Ïðàêòèêà
IntroÌîòèâàöèîííàÿ
ÂíåäðåíèåÏðàêòèêà
Ïðè÷èíû ïî÷åìó �ÄÀ�
òåñòèðóåò ñàì ðàçðàáîò÷èêýòî òîæå ïðîãðàììèðîâàíèå
ñîîòâåñòâèå òðåáîâàíèÿì
ãàðàíòèÿ, ÷òî âàø êîä äåëàåò âñ¼ êàê íàäî
êîíòðîëü êîððåêòíîñòè èçìåíåíèéèñïðàâëåíèÿ ëåãêî ïðîâåðèòü ïðîñòî çàïóñòèâ òåñòû
ìåíåäæåðü¼ è çàêàç÷èêè ëþáÿò êðàñèâûå öèôðû
TDD äàñò öèôðû äëÿ îò÷¼òà
èòîãî
êà÷åñòâî è óïðàâëÿåìîñòü ðàçðàáîòêè óëó÷øèòñÿ
SaM Solutions: Linux and Embedded department Test Driven Development. Ïðàêòèêà
IntroÌîòèâàöèîííàÿ
ÂíåäðåíèåÏðàêòèêà
Ïðè÷èíû ïî÷åìó �ÄÀ�
òåñòèðóåò ñàì ðàçðàáîò÷èêýòî òîæå ïðîãðàììèðîâàíèå
ñîîòâåñòâèå òðåáîâàíèÿì
ãàðàíòèÿ, ÷òî âàø êîä äåëàåò âñ¼ êàê íàäî
êîíòðîëü êîððåêòíîñòè èçìåíåíèéèñïðàâëåíèÿ ëåãêî ïðîâåðèòü ïðîñòî çàïóñòèâ òåñòû
ìåíåäæåðü¼ è çàêàç÷èêè ëþáÿò êðàñèâûå öèôðû
TDD äàñò öèôðû äëÿ îò÷¼òà
èòîãî
êà÷åñòâî è óïðàâëÿåìîñòü ðàçðàáîòêè óëó÷øèòñÿ
SaM Solutions: Linux and Embedded department Test Driven Development. Ïðàêòèêà
IntroÌîòèâàöèîííàÿ
ÂíåäðåíèåÏðàêòèêà
Âíåäðåíèå. Ïðîñòûå ðåöåïòû
Òåñòû áåç ïðîâåðêè ïîêðûòèÿ - áåñïîëåçíû
Sad but truea
aMetallica c©1993 �Sad but true� single
Ìàëåíüêèé ïðîåêò - ïðîñòûå ïðîöåññû
Áîëüøîé ïðîåêò - ãåìîððîéíûå èíñòðóìåíòû
Rational R© Purify R© íàïðèìåð
Ôèçèêà
çàêîíû ìàêðîìèðà è ìèêðîìèðà îòëè÷àþòñÿ
êîðåííûì îáðàçîì
SaM Solutions: Linux and Embedded department Test Driven Development. Ïðàêòèêà
IntroÌîòèâàöèîííàÿ
ÂíåäðåíèåÏðàêòèêà
Âíåäðåíèå. Ïðîñòûå ðåöåïòû
Òåñòû áåç ïðîâåðêè ïîêðûòèÿ - áåñïîëåçíû
Sad but truea
aMetallica c©1993 �Sad but true� single
Ìàëåíüêèé ïðîåêò - ïðîñòûå ïðîöåññû
Áîëüøîé ïðîåêò - ãåìîððîéíûå èíñòðóìåíòû
Rational R© Purify R© íàïðèìåð
Ôèçèêà
çàêîíû ìàêðîìèðà è ìèêðîìèðà îòëè÷àþòñÿ
êîðåííûì îáðàçîì
SaM Solutions: Linux and Embedded department Test Driven Development. Ïðàêòèêà
IntroÌîòèâàöèîííàÿ
ÂíåäðåíèåÏðàêòèêà
Âíåäðåíèå. Ïðîñòûå ðåöåïòû
Òåñòû áåç ïðîâåðêè ïîêðûòèÿ - áåñïîëåçíû
Sad but truea
aMetallica c©1993 �Sad but true� single
Ìàëåíüêèé ïðîåêò - ïðîñòûå ïðîöåññû
Áîëüøîé ïðîåêò - ãåìîððîéíûå èíñòðóìåíòû
Rational R© Purify R© íàïðèìåð
Ôèçèêà
çàêîíû ìàêðîìèðà è ìèêðîìèðà îòëè÷àþòñÿ
êîðåííûì îáðàçîì
SaM Solutions: Linux and Embedded department Test Driven Development. Ïðàêòèêà
IntroÌîòèâàöèîííàÿ
ÂíåäðåíèåÏðàêòèêà
Âíåäðåíèå. Ïðîñòûå ðåöåïòû
Òåñòû áåç ïðîâåðêè ïîêðûòèÿ - áåñïîëåçíû
Sad but truea
aMetallica c©1993 �Sad but true� single
Ìàëåíüêèé ïðîåêò - ïðîñòûå ïðîöåññû
Áîëüøîé ïðîåêò - ãåìîððîéíûå èíñòðóìåíòû
Rational R© Purify R© íàïðèìåð
Ôèçèêà
çàêîíû ìàêðîìèðà è ìèêðîìèðà îòëè÷àþòñÿ
êîðåííûì îáðàçîì
SaM Solutions: Linux and Embedded department 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 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 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 Test Driven Development. Ïðàêòèêà
IntroÌîòèâàöèîííàÿ
ÂíåäðåíèåÏðàêòèêà
Êàê ðàçðàáàòûâàåì 3: ïðîâåðêà ïîêðûòèÿ
ïðîâåðêà ïîêðûòèÿ
ãäå îòðàáîòàëè, ãäå íå âîøëè + ñòàòèñòèêà
ggcov
SaM Solutions: Linux and Embedded department Test Driven Development. Ïðàêòèêà
IntroÌîòèâàöèîííàÿ
ÂíåäðåíèåÏðàêòèêà
Êàê ðàçðàáàòûâàåì 3: ïðîâåðêà ïîêðûòèÿ
ïðîâåðêà ïîêðûòèÿ
ãäå îòðàáîòàëè, ãäå íå âîøëè + ñòàòèñòèêà
ggcov
SaM Solutions: Linux and Embedded department Test Driven Development. Ïðàêòèêà
IntroÌîòèâàöèîííàÿ
ÂíåäðåíèåÏðàêòèêà
Ïðèìåð 1. Áèáëèîòåêà ñ âíåøíèì API
Ïðîåêò: ïðîøèâêà BMC ñåðâåðîâ Fujitsu Primergy
Íàçíà÷åíèå: óïðàâëåíèå ïåðåìåííûìè äëÿ IPMI-ñòåêà
Ðîëü TDD: òîëüêî Unit-òåñòèðîâàíèå
Èíñòðóìåíû è ëèáû TDD: check, gcc/gcov, ggcov
SaM Solutions: Linux and Embedded department 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 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 Test Driven Development. Ïðàêòèêà
IntroÌîòèâàöèîííàÿ
ÂíåäðåíèåÏðàêòèêà
Âîïðîñû?
Âàøè âîïðîñû
www: http://www.sam-solutions.com
email: [email protected]
jabber: [email protected]
SaM Solutions: Linux and Embedded department Test Driven Development. Ïðàêòèêà
Top Related