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

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

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

  • Fifteen Free Tools to Help With Testing

    Fifteen Free Tools to Help With Testing There are a great many articles, blog posts, and presentations that discuss automation frameworks and strategies.  But even the most robust automation framework won't eliminate the need to do exploratory testing.  There will always be situations where we need to generate a large amount of text to test a text field or where we need to encode a string in HTML to test for cross-site scripting.  In this week's post, I share fifteen of my favorite free tools that make testing faster and easier.  Text Tools:1. Letter Count:  This tool will count the characters or words in a block of text.  I use it for creating strings with a specific character count when I test text fields.2. Lorem Ipsum Generator: I use this tool when I need to generate large amounts of text for text fields where a user will be able to enter several paragraphs of text.3. Convert Case: This tool comes in handy when I'm testing with Postman and my assertions are expecting the exact casing for string comparison.  Convert Case will set all the characters in a string to lower case, upper case, sentence case, alternating case, and more.JSON Tools:4. Pretty Print: JSON objects need indentation to be easily readable.  This tool will take care of all of the indentation and spacing for you.  This is especially helpful when you receive flattened JSON in a response and you want to be able to read through it.5. Online JSON Viewer: This tool will flatten your JSON for you by removing[…]

    15.12.2018 | 2:14 קרא עוד...
  • Hacking Password Reset Functionality

    Hacking Password Reset Functionality So I have recently returned from 3 months travelling around Colombia and Central America and I am ready to get back to work! One thing that stayed with me during my travels is the amount of time technology would generally appear in conversations from Bitcoin to GPS systems – this gave me further motivation to expand my career in this varied and extremely interesting field. I recently got an email from Pluralsight with an invitation to use the platform for their free weekend, so I thought it would be a good opportunity to take some security classes. Especially considering one of my 2019 goals is to complete the CEH qualification. The course I decided to do focused on web hacking password reset functionality. Please continue reading to learn more about the various ways password reset functionality is vulnerable to attacks. There are generally 3 different ways to reset user password on websites: Password reset links (by far the most common) Generating a new Password which is sent (in plaintext) to the users email Question and Answer style A typical password reset link could look like this: https://example.com/reset.php?token=12345ab6 or it could look like this, using two parameters -> user ID and token https://example.com/reset.php?userId=12345&token=12345ab6 The userId parameter is unnecessary in the second example, as each token should be unique to the user, making the userId parameter arbitrary. A vulnerability which can be easily fixed is that the link should only be valid for a certain amount of time (enough time for the[…]

    15.12.2018 | 1:20 קרא עוד...
  • I Represent the User! And We All Do

    As a tester, I try to represent the interests of users. Saying the user, in the singular, feels like a trap to me. There are usually lots of users, and they tend to have diverse and sometimes competing interests. I’d like to represent and highlight the interests of users that might have been forgotten or overlooked. There’s another trap, though. As Cem Kaner has pointed out, it’s worth remembering that practically everyone else on the team represents the interests of end users in some sense. “End users want this product in a timely way at a reasonable price, so let’s get things happening on schedule and on budget,” say the project managers. “End users like lots of features,” say the marketers. “End users want this specific feature right away,” say the sales people. “End users want this feature optimized like I’m making it now,” say the programmers. I’d be careful about claiming that I represent the end user—and especially insinuating that I’m the only one who does—when lots of other people can credibly make that claim. Meanwhile, I aspire to test and find problems that threaten the value of the product for anyone who matters. That includes anyone who might have an interest in the success of the product, like managers and developers, of course. It also includes anyone whose interests might have been forgotten or neglected. Technical support people, customer service representatives, and documentors spring to mind as examples. There are others. Can you think of them? People who[…]

    15.12.2018 | 11:33 קרא עוד...

טיפים

  • אם נתקלת בבאג במקרה... - חפש באגים דומים
    אם נתקלת בבאג במקרה...  - חפש באגים דומים אם נתקלת בבאג במקרה... או שחזרה תקלה מלקוח - חפש באגים דומים, סביר להניח שפיקששת סדרה שלמה של באגים מאותו סגנון. בתרגום חופשי מהמסמך הבא של Cem Kaner.   ראה המסמך בלינק הבא, כמו גם רשימת Checklists נוספים…
    קרא עוד...
  • טיפ - עבודת בודקים בצמד עם המפתח
    טיפ - עבודת בודקים בצמד עם המפתח  עבודת בודקים בצמד עם המפתח "עבודה בצמד עם המפתח" – לעבודה בצמדים יתרונות רבים אך לעיתים היא נזנחת בשל "העלות הכפולה". בשנים האחרונות עם עליית שיטות אג'יליות ו- Extreme Programming צורת עבודה זו יותר נפוצה. כששני…
    קרא עוד...
לרשימה המלאה >>