חשיבות הכיסוי (coverage) בבדיקות התוכנה – ואיך עושים את זה בד'נגו

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

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

מהן בדיקות כיסוי (coverage)

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

חשוב לציין כמה נקודות קטנות בקשר לבדיקות האלה:

  • קשה מאוד להגיע ל100% בדיקות, ומעט מאוד אנשים חושבים שזה היעד. יש תלות מסויימת בקוד הספציפי שלכם, אבל קטנה מאוד – אני ממליץ לנסות להגיע לפחות ל70% כיסוי, ולא לנסות להלחם יותר מדי על ה10% האחרונים.
  • בדיקות קוד צד לקוח בעתיות יותר ואני לא הולך להתיחס אליהן בפוסט הזה (במיוחד כי הדגש כרגע הוא על django)
  • התירוץ החוזר הוא ש"הקוד שלנו שונה כי xyz, ולכן קשה בהרבה להגיע לכיסוי טוב". החליפו את xyz בדברים כמו "הוא מערב הרבה מודולים שונים", "אי אפשר להגיע לבדיקה של כל פינה", "יש לנו הרבה יותר נקודות קצה", והחביב עלי: "הקוד שלנו מאוד שונה כי הוא פועל על שילוב מחלקות שונות וקריאות מסובכות, תלויות חצוניות ודברים דומים". יש עוד הרבה כאלה. אל תקשיבו – עוד לא פגשתי קוד שבלתי אפשרי להגיע לאחוזים גבוהים של כיסוי – אם כי פגשתי קוד שהיה צריך לכתוב כמה mockups, נקודות קצה וירוטאליות ועוד משחקים שונים ומשונים.

בדיקות כיסוי בdjango

בדיקות הכיסוי בdjango במוססות על בדיקות כיסוי של נד בצ'לדר (Ned Batchelder) שנמצאות גם כאן או כאן. בחרו את הדרך הנוחה לכם להתקנה:pip install hg+https://bitbucket.org/ned/coveragepy

אוeasy_install coverage

וכדומה. בצורה דומה אפשר לחבר את החבילה לbuildout.

לאחר מכן התקינו את התוסף לdjango:https://bitbucket.org/kmike/django-coverage/src

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

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

python manage.py test_coverage

אני ממליץ ללכת שלב נוסף, כמו שהזכרתי בפוסט הקודם, וליצור בדיקות רק לקוד שלכם:

בתוך management->commands (הפוסט הקודם מסביר את זה):

from django.core.management.base import AppCommand, BaseCommand[python] from django.core.management.base import AppCommand, BaseCommand from django.core.management import call_command from django.conf import settings class Command(BaseCommand): def handle(self, *args, **options): test_app_path = () for app in settings.MY_INSTALLED_APPS: test_app = app.split('.') if len(test_app) > 1: test_app = (test_app[-1],) else: test_app = (app,) test_app_path += test_app call_command("test_coverage",*test_app_path, **options) [/python]

הוסיפו בsettings שלכם את מיקום יצירת הhtml:

COVERAGE_REPORT_HTML_OUTPUT_DIR כדי לבחור את הספריה ליצירת תוצאות הHTML

דנקן סטיוארט מדליוט על תחזיות לשנת 2011

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

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

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

המצגת נשלחה אבל התבקשנו לא לחלוק אותה, אבל אל דאגה, אתם יכולים למצא אותה כאן.

  • יותר מחצי מהמחשבים אינם מחשבים כבר. אפילו לא לפטופים. רוב האנשים משתמשים במחשב ל5 דברים: גלישה באינטרנט, אימיילים, משחקים, וידיאו ורשתות חברתיות. בשביל זה לא צריך מחשב, והפתרונות של טלפונים חכמים ובעיקר טבלטים (ipad וכו) – קטנים, לא יקרים, בעלי בטריה חזקה ומסך מצויין – נותנים פתרון שאינו רק משתווה אלא אפילו עדיף.  התחזית אינה ששוק המחשבים ייפול, אלא ששוק הטבלטים יגדל מעליו. כולם זוכים.
  • לא יהיה מנצח בזירת מערכות ההפעלה. כשמיקרוסופט קמה לא היו לה מתחרים אמיתיים, זה אינו המצב עכשיו. מיקרוסופט ונוקיה הם שחקן חזק מאוד בתוכנה וחומרה. אנדרויד כבר חזק מאוד ולאפל יש כוח שלא יעלם במהרה. אפילו בלקברי לא יכול להעלם – היתרונות שלו במקומות מסויימים גדולים מדי. בסופו של דבר אנחנו הולכים לקראת פילוג של מערכות שלכולן חלק גדול מדי מכדי שנוכל להתעלם ממנו. במילים אחרות: היו מוכנים לתמוך בכמה מערכות הפעלה.
  • אם אתם חושבים לפתור את הבעיה הקודמת ע"י פתרונות ווב (אפילקציות ווב מוכנות לטלפונים) – תחשבו שוב. הרמה שלהן לא מתקרבת לאפליקציות אמיתיות המותקנות על המכשירים.
  • מכירת הטבלטים תבלוט במיוחד בתחום באנטרפריז, איפה שעד כה מחשבים קטנים וטלפונים לא באמת הצליחו לחדור. במיוחד כדאי לשים לב לתחומי הרפואה (איפה שקל יותר להסתובב עם טבלט, לחלוק מידע ו… כן.. לנקות את המסך אחרי שכולם נוגעים בו), תחומי הריטייל (חנויות שתספקנה פתרונות קיוסק, הסברים ועוד למי שנכנס לחנות) וככלי עבודה שימושי לאנשי שטח.
  • טלויזיה כאן להשאר – האינטרנט לא הורג אותה אלא משלים אותה. אנשים לא אוהבים מיזוג של מידע לתוך הטלויזיה שלהם אלא מעדיפים אותו זורם בצד, ולכן אנחנו רואים גידול בגלישה תוך כדי צפיה. שאלתי האם תרגום בגוף הסרט לא מוכיח אחרת (דוברי האנגלית תמיד לא מודעים לעולם החיצון..) והוא לא ממש ענה לי על השאלה הזו, אז לא בדיוק ברור לי על מה הוא מתבסס, אבל ככה זה נשאר.
  • וופי (wifi) חודש לרתות ריטייל. אם פעם הם ראו בגלישה בחנות איום (השוואת מחירים וכו) וניסו לחסום את הגלישה, היום הם מבינים שחסימת הגלישה רק גורמת לאנשים לצאת החוצה מהחנות כדי לקבל קליטה, ולקוח שיוצא פיזית מהחנות שלך זה הדבר הרע ביותר שתוכל לעשות. במקום זה הם מגבירים את השימוש בwifi ונותנים פיצ'רים משלימים: מציאת דברים בחנות, השוואת מחירים (ממילא רוב המחירים דומים ואם לא, זה לרוב לא שווה לצאת מהחנות ולחפש במקום אחר) – וכן המלצות, הצעות ומבצעים. בקשר למידע על פריטים דנקן אומר שכנראה הפתרון יהיה nfc כי wifi לא מדויק מספיק.