TFUI (Test First User Interfaces) - first blood
1 отговора
182 прегледа
TFUI (Test First User Interfaces) - first blood
Здравейте всички. Това мнение беше провокирано от един личен въпрос към мен. Пускам отговора тук с цел някой да ме допълни и да разшири знанията ми... или да помрънка за нещо, което съм объркал.
>Та видях че споменаваш за TFUI - ако можеш да каже нещо
>повече по въпроса и да
>метнеш някой линк, ще ти бъда благодарен.
Test First User Interfaces - традиционно потребителските интерфейси са били доста трудни за тестване. Било то поради по-голямата сложност на събитийния модел, било поради модалността на някои вградени функции или задължаването да прехвърчат прозорци по екрана. Пионера в тази област е Phillip Plumlee - Phlip. Той демонстрира различни начини да третираш УИ-то просто като поредната библиотека, която може да се укроти и да се поддаде на TDD. Основните идеи, които той често споменава на TFUI листа ([линк]) са:
- не тествай всичко. УИ-то има 2 компонента: програмиране и дизайн. шаренията - цветове, позиции на контроли и т.н. няма нужда да се тества. Или може би нуждата е съвсем малка - колкото да знаем, че цвета на буквите не е черен, а фона зад тях - също или че бутона Search е в рамките на диалога.
- не показвай никакви прозорци и не отнемай фокуса от редактора на кода. Тестовете не трябва да се различават от обикновени тестове.
- имай възможност да покажеш прозорец в произволно състояние по време на теста. Това трябва, за да можеш да инспектираш дизайн частта в случай на нужда.
- не викай събитийния цикъл (event loop) на ГУИ библиотеката. Ще останеш да чакаш натискането на затварящ бутон, тъй като този цикъл е безкраен. Създай прозореца, установи го в някакво положение, тествай, унищожи.
Повечето от тези философии могат да се прилагат и в други типове ГУИ, например уеб приложения, с малки изменения. Не съм опитвал. Пускам тест и код от първия ми опит за TFUI. Кода е на python и използва Tkinter библиотеката. Обърни внимание на done() метода - ако го извикам с параметър False показва прозореца и извиква събитийния цикъл, че да мога да инспектирам.
=====================================
DialogTest.py
=====================================
=========================================
EntryDialog.py
=========================================
Първото голямо описание на техниките, които споменавам е от Phlip на уикито на Уорд КЪнингам. Адреса е [линк]. Много информация може да се намери в архивите на TFUI групата.
--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
>Та видях че споменаваш за TFUI - ако можеш да каже нещо
>повече по въпроса и да
>метнеш някой линк, ще ти бъда благодарен.
Test First User Interfaces - традиционно потребителските интерфейси са били доста трудни за тестване. Било то поради по-голямата сложност на събитийния модел, било поради модалността на някои вградени функции или задължаването да прехвърчат прозорци по екрана. Пионера в тази област е Phillip Plumlee - Phlip. Той демонстрира различни начини да третираш УИ-то просто като поредната библиотека, която може да се укроти и да се поддаде на TDD. Основните идеи, които той често споменава на TFUI листа ([линк]) са:
- не тествай всичко. УИ-то има 2 компонента: програмиране и дизайн. шаренията - цветове, позиции на контроли и т.н. няма нужда да се тества. Или може би нуждата е съвсем малка - колкото да знаем, че цвета на буквите не е черен, а фона зад тях - също или че бутона Search е в рамките на диалога.
- не показвай никакви прозорци и не отнемай фокуса от редактора на кода. Тестовете не трябва да се различават от обикновени тестове.
- имай възможност да покажеш прозорец в произволно състояние по време на теста. Това трябва, за да можеш да инспектираш дизайн частта в случай на нужда.
- не викай събитийния цикъл (event loop) на ГУИ библиотеката. Ще останеш да чакаш натискането на затварящ бутон, тъй като този цикъл е безкраен. Създай прозореца, установи го в някакво положение, тествай, унищожи.
Повечето от тези философии могат да се прилагат и в други типове ГУИ, например уеб приложения, с малки изменения. Не съм опитвал. Пускам тест и код от първия ми опит за TFUI. Кода е на python и използва Tkinter библиотеката. Обърни внимание на done() метода - ако го извикам с параметър False показва прозореца и извиква събитийния цикъл, че да мога да инспектирам.
=====================================
DialogTest.py
=====================================
import unittest
import dialogs
import Tkinter
class DialogTest( unittest.TestCase ):
def getToplevel( self ):
self.top = Tkinter.Tk()
def setUp( self ):
self.getToplevel()
self.dialog = dialogs.EntryDialog( self.top, "EntryDialog" )
def testProben( self ):
self.done( True )
def done( self, isDone ):
if not isDone:
self.top.mainloop()
def testEntryText( self ):
self.dialog.setEntryText( "bau bau" )
self.failUnless( self.dialog.getEntryText() == "bau bau" )
self.done( False )
=========================================
EntryDialog.py
=========================================
import Tkinter
import time
class EntryDialog( object ):
def __init__( self, parent, windowTitle = "" ):
self.frame = Tkinter.Frame( parent )
self.frame.grid()
self.createWidgets()
parent.title( windowTitle )
def createWidgets( self ):
self.messageLabel = Tkinter.Label( self.frame, text = "Enter a number" )
self.messageLabel.grid( padx = 5, pady = 5, row = 0, column = 0, sticky = "E" )
self.textEntry = Tkinter.Entry( self.frame )
self.textEntry.grid( padx = 5, pady = 5, row = 0, column = 1, sticky = "W" )
self.entryVar = Tkinter.StringVar()
self.textEntry.configure( textvariable = self.entryVar )
self.setupCloseButton()
def setupCloseButton(self):
self.closeButton = Tkinter.Button( self.frame, command = self.close, text = "Close" )
self.closeButton.grid( padx = 5, pady = 5, row = 1, columnspan = 2, sticky = "EW" )
def close( self ):
self.frame.quit()
def setEntryText( self, newText ):
self.entryVar.set( newText )
def getEntryText( self ):
return self.entryVar.get()
Първото голямо описание на техниките, които споменавам е от Phlip на уикито на Уорд КЪнингам. Адреса е [линк]. Много информация може да се намери в архивите на TFUI групата.
--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
Re: TFUI (Test First User Interfaces) - first blood
По темата не мога да се изкажа но виж само какво излиза на първо място ако търсиш в гугъл за TFUI 
----------
Кирилица Forever
----------
Кирилица Forever