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

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

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

he icon   en icon

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

תכונות הטסט - מיקוד

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

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

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

נסתכל על מקרה פשוט נוסף, הפעם באותה פונקציה. יש לנו class בשם PositiveCalculator עם פונקציה Add שמחברת שני מספרים חיוביים, או זורקת exception אם הם לא כל כך חיוביים:

אנחנו יכולים לכתוב את הטסטים הבאים:

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

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

אז מה אפשר לעשות?

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

"אבל לא אני כתבתי את הקוד! מה לעשות?"

זוכרים את נקודת ההתחלה שלנו? אנחנו בודקים את הטסט שכבר כתבנו על פי התכונות השונות.

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

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

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

  • Assert אחד לכל טסט – ה Assert הוא קריטריון המעבר של הטסט. אם בודקים רק קריטריון אחד, בדרך כלל הטסט ממוקד יותר, כי הוא בודק פחות מסלולים בקוד. אם יש מספר קריטריונים בטסט אחד, פצלו את הטסט למספר טסטים.
  • בדיקת תהליכים קצרים – בקוד legacy, כזה שצברנו לאורך שנים, מאד מפתה לבדוק תהליכים ארוכים, כי הקוד עושה המון דברים. הוא גם לא חושף נקודות כניסה לפעולות יחידניות. נסו לבדוק תהליכים קצרים יותר, ולבדוק אובייקטים קטנים יותר. נסו לשבור את התהליכים הארוכים לתת-תהליכים קצרים יותר אם טסטים קצרים יותר. אם השתמשתם בטסטים ארוכים כדי לשפר את הקוד, אפשר לבדוק בנפרד את החלקים הקטנים בדיוק רב יותר.
  • שימוש בכלי mocking – אם יש תלויות בקוד שעושות הרבה דברים, ולכן גורמות לתהליכים להתארך, זייפו אותם. לא רק שהטסט הופל לממוקד יותר, הוא גם ירוץ מהר יותר.
  • בדיקת כיסוי הקוד – עדיף בצורה ויזואלית. כלי פיתוח ובדיקות המאפשרים לנו לראות את הכיסוי על הקוד עצמו, מוסיפים רמז ויזואלי לגבי הקוד שהטסט עובר בו. בקוד טריוויאלי אין לכך יתרון גדול, אבל בקוד מסובך, ניתן להשוות את מסלולי הקוד השונים אל מול הטסטים המתאימים. ע"י תהליך אלימינציה, ניתן להגיע לבעיות. כמו כן, פידבק ויזואלי עוזר לדעת כמה הטסטים באמת ממוקדים, ואם הם לא – שפרו אותם.

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

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

בפעם הבאה: בידול.

 

שונה לאחרונה ב רביעי, 30 יולי 2014 10:03

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

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

  • 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 קרא עוד...

טיפים

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