Kolejne kroki związane z projektem – Testy A/B

Na stronie wszystkie elementy są testowane niezależnie od siebie. Testuje kolor buttona, display buttona, tekst, obraz, kolor tekstu oraz film. Losowanie odbywa się na odświeżeniu karty.

AB testing - wynik losowania
Wynik losowania
AB testing - wynik losowania
Wynik losowania
AB testing - wynik losowania
Wynik losowania

Wreszcie udało mi się znaleźć błąd w kodzie. Poprawiłam obydwie uniwersalne funkcje. Jedna pozwala na wybranie CSS property i testowanie dwóch wariantów np. jeden z dwóch kolorów czcionki, jednego z kolorów tła, display. Druga funkcja pozwala na np. losowanie jednej z dwóch ścieżek do obrazka bądź filmu, a także na testowanie treści tekstu na stronie.

function drawOneCssProperty(whatToTest, optionA, optionB, elementId) {
  const testedElement = document.getElementById(elementId);
  var randomNumber = Math.random();
  if (randomNumber < 0.5) {
    testedElement.style[whatToTest] = optionA;
  } else {
    testedElement.style[whatToTest] = optionB;
  }
}

function drawOneOption(whatToTest, optionA, optionB, elementId) {
  const testedElement = document.getElementById(elementId);
  var randomNumber = Math.random();
  if (randomNumber < 0.5) {
    testedElement[whatToTest] = optionA;
  } else {
    testedElement[whatToTest] = optionB;
  }
}

A tutaj poniżej wywołuje funkcje. Testowane argumenty są przekazywane w osobnym pliku.

function testColor(colorA, colorB, elementId) {
    drawOneCssProperty('backgroundColor', colorA, colorB, elementId);
}

function testTextColor(colorA, colorB, elementId) {
    drawOneCssProperty('color', colorA, colorB, elementId);
}

function testDisplay(elementId) {
    drawOneCssProperty('display', 'none', 'inline-block', elementId);
}

function testTekst(textA, textB, elementId) {
    drawOneOption('innerHTML', textA, textB, elementId);
}

function testImage(imageSrcA, imageSrcB, elementId) {
    drawOneOption('src', imageSrcA, imageSrcB, elementId);
}

function testIframe(iframeSrcA, iframeSrcB, elementId) {
    drawOneOption('src', iframeSrcA, iframeSrcB, elementId);
}

function testVideo(videoSrcA, videoSrcB, elementId) {
    drawOneOption('src', videoSrcA, videoSrcB, elementId);
}

export { testColor,  testTekst, testImage, testDisplay, testTextColor, testIframe, testVideo};

Co dalej? 

  1. Będę przechowywać informacje o wynikach losowania w local storage.
  2. Zamierzam pobrać informacje o użytkowniku, który wejdzie na testowaną stronę.
  3. Testowanie nie na odświeżeniu strony, ale na jednej sesji
  4. Będę nasłuchiwać na eventy – czyli sprawdzać czy użytkownik podjął akcje na stronie np. kliknął na button, odtworzył wideo za pomocą uniwersalnej funkcji, która pozwoli na nasłuchiwanie na dowolnym elemencie strony.
  5. Będę badać jak wpływa zmiana jednego elementu na inny, czyli np. jak zmiana obrazu na stronie będzie wpływać na klikalność buttona. Do tego będzie potrzebna funkcja, w której będzie trzeba podać id testowanego elementu oraz id elementu na którym badamy ilość eventów.

Konferencja UX oczami developera – czyli Ciemna Strona UX #3

Dzisiaj miałam okazję uczestniczyć w konferencji organizowanej przez ITberries pod tytułem „Break the Rules! – Ciemna Strona UX #3”. Było to ciekawe doświadczenie, ponieważ mogłam słuchać prelekcji i patrzeć przez pryzmat Frontend Developera. W sumie było 12 prelekcji, pod tym linkiem możesz zobaczyć agendę oraz dowiedzieć się więcej o prelegentach. Zebrałam 10 wniosków, które udało mi się zapisać w postaci notatki wizualnej (ang. sketchnote).

1. Badania i burze mózgów przynoszą nowe pomysły i pozwalają na doskonalenie produktów

Badania UX-owe (UX – User Experience) pomagają w dostosowaniu produktu do potrzeb użytkownika. Ich przeprowadzanie oraz analizowanie może prowadzić do odkrywania nowych problemów i potrzeb. W rzeczywistości firmy rzadko dysponują budżetem na takie badania.

2. Moderator może pomóc zespołowi osiągnąć więcej w krótkim czasie

Moderator – tutaj jako osoba zewnętrzna, która przychodzi do firmy na kilka godzin, bądź dni i wchodzi w interakcje z pracownikami firmy (często z różnych działów) i pomaga im w rozwoju / znalezieniu rozwiązań na problemy i ustaleniu konkretnych działań.

3. Praca z personami pozwala na więcej empatii

„Persony to swoisty archetyp użytkownika danego produktu przedstawiony w postaci perswazyjnego, „uczłowieczonego” opisu cech, umiejętności, potrzeb, celów (zarówno życiowych jak i realizowanych przy użyciu produktu). Zadaniem tych modeli jest przybliżenie zespołowi pracującemu nad projektem różnych typów użytkowników, tak, aby ułatwić podjęcie decyzji związanych z koncepcją, funkcjonalnościami projektu oraz grafiką.”

źródło: http://uxbite.com/2010/08/tworzenie-person/

Poznawanie i pracowanie z personami pozwala na przybliżenie potencjalnego użytkownika produktu czy usługi. Zamiast abstrakcyjnych użytkowników mamy do czynienia z profilami osób, co pozwala twórcom na więcej empatii.

4. Machine learning może być przyszłością projektowania oraz ulepszania produktów

Sztuczna inteligencja rozwija się z niebywałą prędkością, jest w stanie tworzyć muzykę, pomagać w rozpoznawaniu chorób. Również zagadnienie self-driving cars jest bardzo fascynujące. Jaka będzie przyszłość projektowania i developmentu w erze maszyn? Przekonany się za pewne w przeciągu dekady.

5. Testujmy i ulepszajmy MVP (minimum value product)

Dzięki testowaniu MVP możemy w szybki sposób zweryfikować czy pomysł produktu / usługi jest trafny, a dzięki analizie będziemy mogli sprecyzować oczekiwania użytkowników i wyjść im na przeciw z skrojonymi na miarę rozwiązaniami.

6. Istotne jest projektowanie badań – najlepiej w interdyscyplinarnym teamie

Projektowanie badań jest samo w sobie ciekawym zagadnieniem. Tutaj również możemy starać się aby UX był jak najlepszy. Nie dość, że trzeba dbać o jasno sformułowane pytania, odpowiednie pola do odpowiedzi, to możemy również użyć kreatywności aby zaangażować osobę, która bierze udział w badaniu.

7. Obserwowanie użytkownika podczas badań może zaburzać wyniki

Ludzie, który są świadomi, że biorą udział w badaniu mogą zachowywać się zupełnie inaczej niż w rzeczywistości. Przy organizacji testów wato o tym pamiętać.

8. Komputery mogą rozpoznawać emocje użytkownika w głosie – szansa na rozwój UX?

Komputery mają coraz większy wpływ na nasze życie, są one już w stanie rozpoznawać emocje na podstawie głosu bądź mimiki twarzy. Jest to szansa na rozwój UX, ponieważ znając emocje użytkownika, jako twórcy, projektanci i developerzy możemy na nie odpowiednio reagować.

9. Konflikt UX/UI vs Developer – umiejętność przyjmowania krytyki, umiejętność dawania konstruktywnego feedbacku, otwartość na inne rozwiązania oraz edukacja

W pracy osobiście spotkałam się z sytuacją, w której Designer kłócił się z Developerem. Każdy miał swoją rację i nie dopuszczał innego rozwiązania. Czasami warto się zastanowić dlaczego dana osoba tak myśli. Zastanowić czy moje rozwiązanie jest na pewno najlepsze? Szanujmy siebie nawzajem i uczmy się od siebie.

10. Developer ma wpływ na UX!

Developerzy mają ostateczny wpływ na wygląd i działanie stron / aplikacji / oprogramowania. Powinniśmy to brać pod uwagę podczas wdrażania funkcjonalności.

Serdecznie polecam branie udał w podobnych wydarzeniach. Zdecydowanie to poszerza horyzonty oraz  pozwala na zaczerpnięcie wiedzy z pokrewnych dziedzin, a w rezultacie lepsze zrozumienie innych ludzi.

Projekt jakoś ciężko idzie…

To już piąty tydzień blogowania. Szczerze mówiąc, projekt idzie trochę opornie, nie ma za bardzo czym się chwalić w tym tygodniu… Zdecydowanie łatwiej przychodzi mi pisanie postów nie związanych z projektem. Często przychodzą mi go głowy nowe na tematy artykułów – zapisuję je i powoli realizuję.

Co z projektem? Ameryki nie odkryłam, ale zrobiłam mały krok do przodu.

  1. Napisałam kawałek kodu do testowania filmów. Wcześniej nie miałam jeszcze okazji wstawiać filmów na stronę, więc jest to dla mnie mała nowość, dowiedziałam się kilku ciekawych rzeczy. Na początku skorzystałam z tagu <iframe>, który pozwala na wstawienie kawałka innej strony internetowej do naszej strony. YouTube w łatwy sposób udostępnia już gotowe kawałki kodu (udostępnij -> umieść na stronie -> gotowy kawałek kodu). Drugim sposobem na wstawienia filmu jest użycie tagu <video>.  Tutaj nie korzystamy z linka tylko podajemy ścieżkę do naszego pliku wideo. Dodatkowo, mamy też kilka opcji: możemy zapętlić, wyciszyć, a także odtworzyć film automatycznie.
  2. Co do uniwersalnej funkcji, która ma służyć optymalizacji – mam wrażenie, że mnie blokuje – miałam moment oświecenia w tym tygodniu (w czasie powtarzania wiedzy na rozmowę kwalifikacyjną), próbowałam innego podejścia, ale dalej mi coś nie trybi. Obiecuję, że posiedzę nad tym w przyszłym tygodniu.

 

Praca developera – najważniejsze pojęcia

praca developera

praca developera

Asana – uniwersalna aplikacja do zarządzania projektami.

branch – gałąź projektu. Wyróżniamy gałąź główną, deweloperską i gałęzie boczne. Gałąź deweloperska to tzw. develop w której znajduje się najbardziej aktualna wersja kodu. Gałąź boczna to taka na której rozwijana jest konkretna funkcjonalność. Gałęzi bocznych może być kilka. Tworzenie gałęzi pozwala na kontrolowanie wersji projektu, przykładowym narzędziem do tego jest GIT.

bug – błąd w kodzie

call – rozmowa z klientem odbywająca się przez komunikator tj. Skype, Google Hangouts

CLI – command-line interface – sposób komunikowania się użytkownika z programem za pomogą tekstowych poleceń wpisywanych do konsoli

code review – proces sprawdzania kodu przez innego programistę/programistkę,  zazwyczaj przed połączeniem kodu z głównym branchem deweloperskim

develop – gałąź deweloperska, w której znajduje się najbardziej aktualna wersja kodu

commit – zapis aktualnego stanu kodu w danym momencie

critical – najważniejszy task w danym momencie

feature – funkcjonalność w aplikacji / na stronie internetowej

GUI – Graphical User Interface – sposób komunikowania się użytkownika z programem za pomogą interfejsu graficznego.

JIRA – aplikacja do zarządzania projektami dedykowana dla software developmentu. Pomaga w organizacji pracy zespołu, usprawnia proces naprawiania bugów

JSON – JavaScript Object Notation – uniwersalny format przesyłania danych

master – główna gałąź projektu

merge – połączenie jednej gałęzi z drugą

repozytorium – miejsce w którym trzymane są wszystkie pliki związane z projektem oraz przetrzymywane są informacje na temat historii rozwoju projektu.  Pozwala to w łatwy sposób na śledzenie zmian w kodzie.

standup – spotkanie członków zespołu dotyczące danego projektu. Stundupy odbywają się codziennie, każdy członek zespołu określa co udało mu się zrobić dnia poprzedniego, jakie napotkał trudności oraz co zamierza zrobić danego dnia. Mogą się obywać w biurze bądź przez komunikator tj. Skype, Google Hangouts. Project Manager określa priorytety oraz przekazuje dodatkowe informacje ze strony klienta.

taski – pojedyncze zadania wyznaczone przez np. Project Managera, Tech Leada, Testera. Powinny one znaleźć się w aplikacji do zarządania projektem tj. Trello, Asana, Jira. Mogą polegać na stworzeniu konkretnej funkcjonalności, naprawieniu konkretnego buga. Idealnie taski powinny być małe, najlepiej aby czas przeznaczony na ich sfinalizowanie nie przekraczał kilku godzin. W Scrumie maksymalny czas jaki może być przypisany do jednego taska to 2 dni. Jeśli na etapie planningu okazuje się, że dana rzecz ma zając więcej niż dwa dni, to koniecznie trzeba ją podzielić na więcej niż jeden task.

Trello – uniwersalna aplikacja do zarządzania projektami.

Jeśli masz jakieś uwagi lub propozycje pojęć – proszę napisz w komentarzu, postaram się uzupełnić posta.

Rozwój projetku AB-Testing

W tym tygodniu:

  1. Napiałam dwa kolejne kawałki kodu służące do testowania display elementu oraz koloru czcionki
  2. Odizolowałam kod biblioteki do oddzielnego pliku
  3. Zdecydowałam się pisać kod w czystym JS, żeby mój program był bardziej uniwersalny
  4. Zaczęłam stosować elementy ES6
  5. Pracuję jeszcze nad optymalizacją kodu – sporo rzeczy się w nim powtarza, dlatego chciałabym napisać jedną ogólną i uniwersalną funkcję, którą będzie można wykorzystać we wszystkich metodach.
  6. Postawiłam środowisko deweloperskie na moim drugim komputerze. Na Ubuntu zainstalowałam Node.js, Ruby, Git oraz nowy edytor VS Code (wcześniej korzystałam z Atoma).

Setup projektu „AB Testing”- Webpack i Webpack DevServer

W tym tygodniu byłam na wykładzie organizowanym przez IT Akademia j-labs pod tytułem “Webpack, czyli mniej znaczy więcej”. Prelegent, Jakub Pikoń, opowiadał o narzędziu deweloperskim Webpack oraz przeprowadził sesję live coding, podczas której zademonstrował jak z niego korzystać. 

Dowiedziałam się, co to jest bundle (duży plik, który powstaje po przez połączenie małych plików) oraz że Webpack jest narzędziem, który jest module bundlerem, czyli umożliwia automatyczne budowanie plików bundle.

Zdecydowałam się na skorzystanie z Webpacka w moim projekcie. Do jego instalacji użyłam NPM. Następnie trzeba było go skonfigurować. Było to dla mnie dość trudne zadanie, dlatego poprosiłam o pomoc mojego znajomego. Pobraliśmy też kompilator Babel, który umożliwia pisanie JS przy użyciu ES6 oraz kilka innych loaderów.

Zainstalowaliśmy również Webpack DevServer co umożliwiło śledzenie zmian w kodzie w czasie rzeczywistym. Teraz już wszystko jest gotowe i mogę już skupić się na tworzeniu mojej biblioteki do testów AB.

 

Słownik początkującego Frontend Developera

słownik frontend developera

słownik frontend developera

Tu powstaje słowniczek początkującego Frontend Developera. Podzielony jest on na kilka sekcji: pojęcia, technologie oraz narzędzia developerskie.

Pojęcia

BEM – Block Element Modifier – konwencja, która określa sposób nazywania CSS-owych klas, który pomaga w wprowadzeniu jednolitości w kodzie.

DRY – Don’t repeat yourself – konwencja, która zakłada, że w programowaniu powinniśmy unikać powtarzania kodu, który wykonuje takie samo zadanie. Najlepszym przykładem jest tworzenie re-używalnych funkcji. Pozwala to na optymalizację, zredukowanie ilości kodu oraz zwiększenie jego czytelności.

RWD – Responsive Web Design – konwencja, która zakłada, że układ strony powinien dostosowywać się do wielkości oraz orientacji ekranu użytkownika. Znaną biblioteką ułatwiającą kodowanie RWD jest Bootstrap.

Technologie

AJAX – Asynchronous JavaScript And XML – sposób komunikacji przeglądarki z serwerem, gdzie wysyłane zapytania są asynchroniczne, czyli nie musimy czekać aż przyjdzie odpowiedź z jednego zapytania, żeby wykonało się drugie. Przykładem użycia AJAXa jest dynamicznie ładujący się kontent na stronie.

ECMAScript 6, ES6 – jest najnowszą ustandaryzowaną wersją JavaScript z 2015 roku. Wprowadza ona dodatkowe funkcjonalności, skróty, słowa kluczowe oraz inne ulepszenia. Obecnie jeszcze nie wszystkie przeglądarki wspierają ES6, dlatego aby używać ES6 należy użyć kompilatora (np. Babel), który skompiluje nasz kod do ES5.

Sass – Syntactically Awesome Style Sheets – prepocesor języka CSS. Wprowadza większe możliwości niż CSS tj. zmienne, zagdzieżdżanie selekorów, mixiny.

Narzędzia developerskie

Babel – kompilator, który pozwala na używanie ECMAScript 6 i kompilowanie kodu do ECMAScript 5.

Webpack – module bundler, który dzięki szeregowi dodatkowych pluginów i loaderów może służyć do wielu do podstawowych tasków np. do kompilacji ES6 do ES5 (przy pomocy Babel loader), czy Sass do CSS. Dzięki dodatkowemu pluginowi Webpack DevServer dostajemy w prosty konfiguracji serwer deweloperski.

To nie jest ostateczna wersja posta, będzie on dalej aktualizowany. Jeśli masz jakieś propozycje pojęć, które powinny się znaleźć w słowniczku proszę napisz w komentarzu, postaram się uzupełnić.

Nazewnictwo w programowaniu – 20 cennych wskazówek

nazewnictwo w programowaniu

nazewnictwo w programowaniu

Czas na lekcję dobrych praktyk w programowaniu, dzisiaj będzie konkretnie o nazewnictwie. Post ten powstał na podstawie 2 rozdziału książki Roberta C. Martina “Czysty Kod” oraz moich własnych przemyśleń.

Nazewnictwo klas, funkcji, metod, zmiennych plików jest NIEZWYKLE ważne. To tak jak pisanie instrukcji obsługi, ale bez obrazków. Musimy dokładnie wyrazić o co nam chodzi. Warto poświęcić trochę więcej czasu na przemyślenie nazwy, to naprawdę pozwoli nam i innym programistom zaoszczędzić sporo czasu i nerwów.

  1. Nie bagatelizuj nazewnictwa.
  2. Postaw się w sytuacji programisty który będzie utrzymywał Twój kod. Wykrzesaj z siebie chociaż odrobinę empatii.
  3. Spójność to podstawa – warto przyjąć jedną konwencję i być konsekwentnym np. BEM
  4. KISS – Zasada Keep it Simple Stupid – czyli najprościej jak się da, bez zbędnych słów.
  5. Jeśli nazwa wymaga komentarza jest to zła nazwa.
  6. Nie używaj skrótów. Mogą one powodować nieporozumienia, ponieważ skróty często mają więcej niż jedno rozwinięcie.
  7. Uważaj na dwuznaczności słów, one też mają często więcej niż jedno znaczenie.
  8. Liczby też można nazywać! Nie każdy będzie wiedział skąd się wzięła i co robi cyfra “4” w Twoim kodzie. Będzie też łatwiej ją zlokalizować.
  9. Żarty, kolokwializmy, metafory – daruj sobie, jak wrócisz do kodu za dwa miesiące nie będziesz wiedział/a o co chodzi.
  10. Nie używaj jednoliterowych nazw. Są one trudne do wyszukania oraz nie wskazują na żaden kontekst. Wyjątek: jako zmienne lokalne w małych kawałkach kodu np. w liczniku pętli zmienna “i”.
  11. Nie mieszaj różnych języków! Polecam angielski, jest uniwersalny.
  12. Pamiętaj, że w niektórych czcionkach litery małe L i O łatwo pomylić z 1 i 0.
  13. Jeśli masz pomysł na lepszą nazwę, nie zastanawiaj się tylko ją zmień (ale nie w jednym miejscu – we wszystkich!).
  14. Unikaj nazw ze słowami jak “data”, “info”, “message” – sprecyzuj!
  15. Nazwy metod, funkcji to zwykle czasowniki (w stronie czynnej) lub wyrażenia czasownikowe. Czyli zwykle odpowiada na pytanie “co to robi”? Pomocne słowa: getSomething, setSomething, isSomething.
  16. Nazwy klas to zwykle rzeczowniki lub wyrażenia rzeczownikowe. Czyli zwykle odpowiada na pytanie “co to jest”?
  17. Jedno słowo na jedno abstrakcyjne pojęcie. Skąd będziesz wiedzieć jaka jest różnica pomiędzy: get, fetch albo retrieve?
  18. Jedno słowo na jedno zagadnienie. “Należy unikać używania tego samego słowa do dwóch celów”.
  19. Podczas code review zwracaj uwagę na nazewnictwo.
  20. Nie każdy element potrzebuje nazwy, jeśli jej nigdzie nie używasz nie zaśmiecaj nią kodu.
  21. Bonus: LITERÓWKI – bardzo na nie uważaj!

Zwracaj uwagę na nazewnictwo np. w popularnych bibliotekach. Zerknij na API jQuery i zobacz jakich oni nazw używają.  Po za tym ćwicz, ćwicz, ćwicz i proś innych o code review 

i pamiętaj:  

“Profesjonaliści piszą kod zrozumiały dla innych” Robert C. Martin

Losowanie jednego z dwóch kolorów, nagłówków i obrazków

Jak to czasami z projektami bywa, często nie wiemy jak się za nie zabrać, dlatego zwlekałam parę dni z napisaniem jakiejkolwiek linii kodu. Kontuzja kostki skutecznie mnie unieruchomiła i zmusiła do siedzenia (przed monitorem). Odpaliłam Codepena i zaczęłam się zastanawiać. Zdecydowałam, że spróbuję stworzyć skrypt, który będzie losował jeden z dwóch danych kolorów. Pisałam już kiedyś program, który randomowo losował kolor na kliknięciu, ale cel mojego skryptu był inny. Poprosiłam wujka Googla o podpowiedź.

Jak wylosować jedną z dwóch liczb używając JavaScriptu?

How to decide between two numbers randomly using JavaScript?

Na StackOverflow (portal na którym programiści publikują swoje problemy, a inni pomagają im w ich rozwiązaniach) znalazłam dokładnie to co było mi potrzebne. Plan był taki:

  1. Wylosuj randomową liczbę [0, 1) używając Math.random()
  2. Przypisz ją do zmiennej
  3. Jeśli wylosowana liczba będzie mniejsza od 0,5 wybierz wartość 1.
  4. W pozostałych przypadkach wybierz wartość 2.

Udało mi się na początku napisać skrypt w jQuery, następnie w czystym JavaScript. Cóż za satysfakcja! Tego samego dnia udało mi się napisać skrypt losujący treść nagłówka oraz obrazek. Przyjęłam założenie, że w tym samym czasie może być testowany tylko jeden element danego rodzaju. Wybierany on jest za pomocą odpowiedniego ID. Będę jeszcze usprawniać ten kod. Jeśli chcesz zerknąć na najnowszą wersję tego kodu zapraszam na razie na mojego Codepena.

screenshot from Codepen
Każdy element losuje się osobno na odświeżeniu przeglądarki

 

screenshot from Codepen
Wynik kolejnego losowania

Problemy:  

Nie wiem jeszcze jak połączyć Gita z Githubem, dlatego zaczęłam programować w Codepenie. Jeszcze większy problem mam z komputerem, ponieważ mam za mało pamięci i nie mogę niczego zainstalować, co utrudnia całą sprawę.

 

 

Mój program do testów A/B – faza przygotowania i planowania

A/B tests image

W ramach konkursu Daj się Poznać 2017 zdecydowałam się napisać swój własny opensourcowy program, który umożliwi przeprowadzanie testów A/B na stronach internetowych. Zaczęłam od przeczytania pełnej interesujących przykładów książki pt. “Testy A/B od kliknięcia do klienta”, której autorami są: Dan Siroker i Pete Koomen.

Następnie wypisałam elementy które można testować na stronach internetowych:

  1. tekst
  2. kolor tekstu, buttonów, linków
  3. display
  4. większe elementy layoutu
  5. obrazy
  6. wideo
  7. ilość pól w formularzu
  8. kolejność elementów
  9. położenie elementu
  10. inne: font-size, font-family, border-radius itd.

Założyłam również konto i repozytorium na GitHubie (po raz pierwszy sama!). Zaczęłam się zastanawiać co będę potrzebować do dalszej pracy. Zamierzam używać JavaScript oraz jQuery. Żeby przeprowadzać testy będę musiała losowo wybierać jeden z testowanych wariantów.

Testowanie testów – czyli jak będę sprawdzać czy mój program działa dobrze?

Z książki pt. “Testy A/B od kliknięcia do klienta” wyciągnęłam bardzo cenną radę. Jak sprawdzić czy mój program działa prawidłowo? Będę musiała przeprowadzić Test A/A – czyli testować dwa takie same warianty. Jeśli wyniki będą do siebie zbliżone będzie to oznaczać, że kod działa prawidłowo.