TFUI (Test First User Interfaces) - first blood

1 отговора 182 прегледа
#1

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
=====================================

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
Отговор
в отговор на Mycлoн #2

Re: TFUI (Test First User Interfaces) - first blood

По темата не мога да се изкажа но виж само какво излиза на първо място ако търсиш в гугъл за TFUI

----------

Кирилица Forever
Отговор