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

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

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

he icon   en icon

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

תכונות הטסט: תחזוקה

נכתב על ידי 
שני, 18 אוגוסט 2014 14:42
דרגו כתבה זו
(2 הצבעות)

לאורך השנים שנאתי את המילה תחזוקתיות (maintainability) בקונטקסט של טסטים. טסטים הם ניתנים לתחזוקה כמו כל קוד אחר. זה מגיע בסוף לנקודה שנשבר לנו ואנחנו כותבים את הכל מחדש. אבל עד אז – אנחנו יכולים לשנות את הקוד.

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

אז מדוע אנחנו מדברים עדיין על טסטים "תחזוקתיים"?

אחת הבעיות היא שאנחנו לא מסתכלים על קוד של טסטים כקוד "אמיתי". הם לא חלק מ קוד production.

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

המחיר הוא הקשור לתחזוקה. זה הוא מחיר עתידי נוסף על עבודת משנה, שנחשבת פחות.

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

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

לתחזוקה יש אכן מחיר גבוה. אבל לא בגלל זה.

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

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

הנה דוגמא מאד פשוטה, מקוד שכבר ראינו בפוסט על תכונת המיקוד:

maintenance-code

מה יקרה אם נרצה לשנות בקוד הנבדק את השם PositiveCalculatorל Calculator?

הטסט לא יתקמפל. נצטרך לשנות את הטסט כדי שיעבור.

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

מה קורה שבשפות עם שמן קומפילציה ארוך כמו C++ ? או שפות script שנותנות פידבק רק בזמן ריצה?

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

אז כיצד ניתן להנמיך את מחיר התחזוקה?

העצה הבדוקה היא "לא לצמד את הקוד לטסט".

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

  • בדקו תוצאות, לא אלגוריתמים. מכיוון שהטסטים כבר מצומדים ממילא, ככל שנדע פחות בתוך הטסטים על המימוש בקוד, תהיינה פחות בעיות. טסטים שבירים פחות כאשר הם לא נסמכים על קריאות בתוך הקוד. במקום זאת, נתייחס לקוד כאל קופסא שחורה, למרות שאנחנו יודעים איך הקוד עובד. בנוסף, טסטים אלה יהיו גם קריאים יותר.
  • עבודה מול ממשק חשוף. בדיקה צריכה להיעשות מבחוץ פנימה, ולא לבדוק פונקציות פנימיות. ננסה לשמור את שמות הפונקציות הפנימיות, והחתימות שלהן בתוך הקופסא השחורה. אם אתם מרגישים שאין ברירה, הפכו את הפונקציות הפנימיות לחיצוניות באובייקט אחר. עצם החשיפה יהפוך אותן לקלות לשינוי.
  • חסכו ב asserts. ספציפי מדי עבור קריטריון מעבר הטסט, במיוחד כשמדובר באימות של קריאת פונקציות על תלויות, יכול להביא לשבירת טסטים. האם אנחנו באמת צריכים לבדוק שפונקציה נקראה 5 פעמים, או שדי לבדוק קריאה אחת לפחות? האם כשהיא נקראה, מעניינים אותנו הערכים שנשלחו אליה, או שאנחנו יכולים להסתפק בתחום ערכים? ככל שהטסטים הופכים למדויקים יותר, אנחנו מוסיפים רמות של צימוד, וכתוצאה מזה הזדמנויות לשבירת טסטים ללא צורך. זכרו שבמקרה של שבירה, נרצה שהטסטים יתנו לנו כמה שיותר מידע לפתירת הבעיה. אך אם אנחנו לא מרוויחים את המידע הנוסף כתוצאה מה assert המדויק, אפשר להנמיך את קריטריון המעבר.
  • השתמשו בכלי refactoring טובים. וכלי פיתוח טוב. ועבדו בשפות שתומכות באלו. אם לא, הפידבק על שגיאות מתאחר, ומחיר התחזוקה עולה.
  • השתמשו פחות ב mocking. שימוש בכלי mocking הוא כמו שימוש בקרני רנטגן. הם טובים למטרתם, אבל חשיפת יתר היא רעה. Mocks יוצרים צימוד יתר בין הקוד לטסט. אנחנו שוב נסמכים על אלגוריתם פנימי, שיכול להשתנות, ואתו גם הטסט.
  • אל תשתמשו ב mocks ידניים – אלו הגרועים ביותר. מלבד המקרה שהם מאד פשוטים, הם מעודדים העתקה של הקוד לתוך הטסט. כלי mock מעודדים עבודה מול ממשק.

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

במקור הופיע בבלוג שלי.

בפעם הבאה: עקבות.

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

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

  • Introduction to ERP Testing and its Importance

    Introduction to ERP Testing and its Importance <This is a guest post by Jason Roy> In this era of cut-throat competition, global enterprises are facing tremendous pressure to enhance efficiency, reduce costs, increase sales and profitability. For this, more and more enterprises are embracing ERP (Enterprise Resource Planning) software. Apart from enabling enterprises to make accurate, informed and strategic decisions, ERP also […]

    9.05.2021 | 2:36 קרא עוד...
  • Staying Positive in a Pandemic (a personal story)

    TL;DR I know it can be hard but to look for the positives in any situation. This post covers things that have happened in my life and how I’ve tried to respond to them. My motivation for writing this is to highlight the positive things that have happened to me during these trying times. I appreciate everyone's experiences will be different and by no means mean to diminish any mental health affects this time has had on me or others. That said I’ve always been one who tries hard to find positives in any situation. It was really clarified for me when I watched former professional wrestler Diamond Dallas Page (yes I’m a big wrestling fan) talk about living life at 90%. He said life is 10% what happens to you and 90% how you react to it. If you want to hear more the link is in the references below. To give you some perspective please let me share a couple of things that have happened to me in my life. When I was 7 I crossed the road without looking, stepping in front of a car I’m informed was doing ‘at least’ 45 miles an hour in a 30 zone. My mother was told I wouldn’t walk unaided, if I woke up from my coma. Spending half a year in hospital then visiting regularly over the next couple wasn’t exactly fun but I was alive. Over the years I’ve managed to play football, cricket and rugby with a[…]

    9.05.2021 | 10:50 קרא עוד...
  • Five Blogs – 7 May 2021

    The (best) five blogs we can read today. Check them out. 9 Roadblocks to Success Written by: Frank Sonnenberg Limiting Beliefs About Evolutionary Design Written by: Bill Wake How To Compete In A New Era Of Innovation Written by: Greg Satell Your Leadership Is Contagious—Whether You Know It Or Not Written by: Lolly Daskal Are you really a Test Coach? Written by: Maria Kedemo Quote of the day: “Sometimes it seems safer to hold it all in, where the only person who can judge is yourself.” -Sarah Dessen You can follow this page on Twitter

    9.05.2021 | 1:04 קרא עוד...

טיפים

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