LOGIN
התחברות או הרשמה
Avatar
להמשך הרשמה ידנית – לחץ על כפתור ההרשמה, להרשמה/כניסה מהירה בעזרת חשבון רשת חברתית – לחץ על הלוגו בכותרת

אפס סיסמה - שכחתי את שם המשתמש

שם משתמש
סיסמה
זכור אותי

he icon   en icon

בכדי להוסיף פוסט בבלוג יש להרשם או להתחבר - ההרשמה/כניסה מתבצעת מכותרת האתר.

תכונות הטסט: קריאות

נכתב על ידי 
שישי, 18 יולי 2014 09:54
דרגו כתבה זו
(1 הצבעה)

לעתים אנחנו שוכחים שרוב הערך של הטסטים מגיע אחרי שכתבנו אותם. כמובן ששימוש ב TDD עוזר באפיון הקוד. אבל האמת היא, שמרגע שהקוד עובד בפעם הראשונה, הטסטים הופכים לשומרי העתיד שלו. כשהטסטים שם, אנו יכולים לשנות את הקוד, לשפר אותו בידיעה שהקוד עדיין עובד.

אולם אם וכאשר טסט נכשל, יש לנו עבודה. אנחנו צריכים להבין מה השתנה והפסיק לעבוד. לאחר מכן, אנחנו צריכים לנתח את המצב: האם שברנו משהו בקוד שאנחנו עובדים עליו כרגע? או האם זו פונקציונליות חדשה, שנצטרך לכתוב לה טסטים חדשים, ולהחליף את הישנים? בהתאם לתוצאת הניתוח, יש לנו עוד עבודת קוד ובדיקות.

ככל שהזמן עובר, גם הקוד וגם הבדיקות פגות מזיכרוננו, עד שאנחנו שוכחים אותם לגמרי. כתוצאה מכך מחיר שינויי קוד עולה. שךב הניתוח מתארך, כיון שאנו צריכים להכיר מחדש את הקוד. אנחנו צריכים ללמוד מחדש מה עדיין עובד, ומה הפסיק לעבוד. בנוסף, לא נזכור אילו שינויים בדיוק יגרמו לתופעות לוואי, ומהן תהיינה בכלל.

טסטים אפקטיביים מקצרים את התהליך הזה. מה שמייחד אותם היא הקריאות.

זהו הפוסט השני מתוך סדרת התכונות כפי שתוארו בפוסט "מי בודק את הבדיקות". הפוסט מתורגם מהבלוג שלי: http://www.gilzilberfeld.com/2014/07/test-attribute-2-readability.html

קריאות היא תכונה סובייקטיבית. מה שקריא בעיניי היום (מיד אחרי שכתבתי) לא ייראה כך בעוד חצי שנה, ובטח לא למישהו אחר. לכן, במקום לנסות להגדיר קריאות, ננסה לאפיין אלמנטים שנוכל לאפיין.

 

מלבד היותו נכון, הדבר החשוב ביותר בטסט הוא השם. הסיבה פשוטה: כשטסט נכשל, השם הוא הדבר הראשון שאנו רואים. זהו הרמז הראשון שאנו מקבלים שמשהו השתבש, ולכן הוא צריך לספר לנו כמה שיותר.

שם של טסט צריך לכלול (לפחות) את התסריט הספציפי שהוא בודק, ומה התוצאה המצופה עבורו. אם אנחנו בודקים API, כדאי שיתאר זאת גם.

לדוגמא:

@Test

public void divideCounterBy5Is25() { ...

אפשר להבין מהשם מה הטסט בודק (תסריט של חלוקה של Counter), הפרטים של המקרה (חלוקה ב-5), והתוצאה המצופה (25).

אם השם נשמע כמו משפט –מעולה. שמות טובים מגיעים מתיאור וורבאלי.

פחות משנים סימני פיסוק בתוך השם, אותיות גדולות או קטנות. משנה הקונבנציה הנהוגה בצוות. כשעובדים בצורה קבועה, שמות (וגם קוד) הופכים ליותר קריאים.

שמות צריכים להיות מדויקים מספיק כדי שנוכל להבדיל אות מאחיהם, הבודקים תסריט אחר אך קרוב. בדוגמה שלנו:

Test@

public void divideCounterBy0Throws() { ...

הטסט הזה דומה לראשון, קל לזהות אותו כ"אח", על פי התחילית. התסריט הספציפי שונה, וכך גם התוצאה. כששני אלה יופיעו, אחד ליד השני, ברשימת הטסטים שרצו, ולדוגמא אחד עובר והשני נכשל, הדבר עוזר לנו למקם את הבעיה בקוד. לפעמים הדבר ייתר מאמץ debugging ארוך. אלו עוד רמזים לפתרון הבעיה.

 

אם השמות לא עוזרים לזהות את הבעיה, גוף הטסט צריך לעזור למלא את החסר. הוא אמור להכיל את המידע כדי להבין את התסריט.

הנה כמה טיפים כדי להפוך קוד של בדיקה לקריא יותר:

  • טסטים צריכים להיות קצרים. כ 10-15 שורות.
  • אם האתחול (setup) ארוך, יש להוציא אותו לפונקציות פנימיות, וגם להן לתת שם קריא.
  • הימנעו משימוש באתחול שרץ לפני כל טסט, כמו פונקציות @before ב JUnit. עדיף להשתמש בקריאות ישירות לפונקציות מתוך הטסט. כשמסתכלים על הטסט, אתחול וניקוי אמורים להיות חלקים רציפים ממנו. אחרת, נצטרך לחפש בקוד, וגם להניח הנחות (לא בהכרח נכונות). גם לדבג טסטים כאלה זה לא כיף גדול, מכיוון שנכנסים לתוך הטסט עם קונטקסט "מפתיע".
  • הימנעו משימוש ב base test class. קד משותף הנמצא בהן מחביא מידע רלוונטי להבנת התסריטים.
  • הבליטו את ה assert, תנאי המעבר של הטסט.
  • וודאו שהשם והגוף תואמים.
  • ניתוח לוקח הזמן, והדרך הגרועה (והאיטית) לעשות אותו היא לדבג. טסטים (וגם קוד) צריכים להיות קריאים מספיק כדי שלא נצטרך לעשות זאת.

 

אנחנו לא אובייקטיבים. אנו חושבים שהקוד והבדיקות שלנו כל כך טובים, שכולם יבינו אותם.

בדרך כלל אנחנו טועים.

התשובה לבעיה בעולם האג'ילי היא פידבק.

השתמשו בחוק "האוזן השלישית": תפסו את אוזנו של חבר קרוב, ומשכו אותו (בעדינות) לכיוון המסך. הוא (או היא) יגידו אם הם מבינים מה הטסט עושה. אם כבר, עבדו על הטסטים בזוגות (pairing)- פידבק מגיע כתוצר לוואי, וגם תקבלו טסטים טובים יותר.

בכל מקרה, הקדימו את המאוחר, וטפלו בקריאות עכשיו, כדי שתוכלו להבין מהר אחר כך.

 

הפוסט הבא: מהירות.

הכותב מעביר הדרכות וליווי בנושאי בדיקות ואג'ייל – המעוניינים יכולים לפנות דרך האתר:http://www.gilzilberfeld.com/p/contact.html

שונה לאחרונה ב שישי, 18 יולי 2014 10:08

חובה להיות משתמש רשום במערכת בכדי להגיב - ההרשמה/כניסה בכותרת האתר

חדשות מעולם הבדיקות

  • Five Blogs – 18 October 2018

    The (best) five blogs I read today. Check them out. What Is Data Democratization? A Super Simple Explanation And The Key Pros And Cons Written by: Bernard Marr What’s getting Agile down? Written by: Gary Watts Future of AI in Testing (Will You Be Replaced?) Written by: Joe Colantonio Jeff Hawkins Is Finally Ready to Explain His Brain Research Written by: Cade Metz Lower level Automation and testing? Be more precise! The Automation triangle revisited…again! Written by: Toyer Mamoojee Quote of the day: “When you’re young, being different is not cool. But when you’re older, it absolutely is.” -Lane Moore You can follow this page on Twitter

    17.10.2018 | 11:36 קרא עוד...
  • The Automated Regression Suite. Part 2 of 3. When to run the tests.

    Once you have your automated regression suite in place, you can create a scheduler to run them periodically, without any manual intervention. Mostly you will use Jenkins jobs (or some similar CI tool) to trigger them and have them running on an environment of your choice. Just because they are called “regression tests” it does not mean they are only meant to be run once before a release. They are in place to help validate your system, so you can run them as often as you want. But how often do you want to run them? That really depends on some factors like: how often are you releasing, how often are you committing, how many other services is your software dependent on, how often are those services also released, and so on. How often you are releasing determines the amount of new or changed code that needs to reach production. If you are releasing once a year, the amount of such code will be huge. If you release every two weeks you will have less such code, and in case a failure would occur in the software, it would be much easier to pinpoint the root of the problem (as compared to the one-year release cycle). If you are releasing rarely, with large amounts of time between releases, you really should run your tests at least once a week. From my experience, this test run frequency makes running these tests worth it, since you have a good amount of changed[…]

    17.10.2018 | 11:17 קרא עוד...
  • Let’s stop talking about testing, let’s start thinking about value

    Let’s stop talking about testing, let’s start thinking about value This year Alex Schladebeck and I did two keynotes titled “Let’s stop talking about testing, let’s start thinking about value” at QA Expo in Spain and TestNet in the Netherlands. This blogpost has the most important points we made in our talk. The keynote was inspired by some of our frustrations: “Testing is under appreciated” (Alex) and “Most testers are unable to explain what we do” (Huib). I wrote about my frustration back in 2016 already. This blogpost is about my frustration that most testers cannot come up with a decent definition of testing. And even worse: a big majority of the people who call themselves professional testers are not able to explain what testing is and how it works! They have trouble explaining what they are testing and why they are doing specifically the thing they are doing! How can anybody take a tester seriously who cannot explain what he is doing all day? Alex’s frustration is that testing is not valued by others. Developers are seen as the rockstars of the project because they create the software that adds value. But why are testers often not valued? Lowered expectations for testing expertise by stuff like ISO standards and ISTQB: I wrote about certification and standards before. ISTQB and standards put too much emphasis on process and documentation, rather than the real testing. By assuming there can be a standard, you say that there is one best way to organize and document your testing. But isn’t your test strategy[…]

    17.10.2018 | 5:05 קרא עוד...

טיפים

לרשימה המלאה >>