מחפש צרות | מיכאל שטאל

הכלי החביב עלי

לפני כשנה, מישהו שלח לי לינק לבלוג שעסק בשאלה מעניינת: "מה הכלי החביב עליך?" (“what is your favorite tool”). קראתי, וחשבתי: השאלה מעניינת. התשובה לעומת זאת, היתה לדעתי לא מועילה ובעיקר קיבלתי רושם שהכותב מנסה להציג את עצמו כאיש "עמוק". בקיצור, התאכזבתי. הרי מי ששאלה את השאלה לא רצתה לשמוע התחכמויות כמו "המוח שלי", "האנשים" או "כלים שמאפשרים לבנות כלים". היא רצתה לשמוע שם של כלי שתוכל להוריד מהרשת ולהנות ממנו.

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

 

קריטריונים

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

מהסתכלות על הרשימה, מסתבר לי שאני מעדיף כלים שניתן להפעיל דרך ה-Command Line. תגידו Old School... אבל הרבה פעמים יותר יעיל לעבוד ככה, בלי התעסקות יתר עם העכבר ועם האפשרות הנוחה להרצת פקודות מתוך קבצי batch.

 

PICT (Pairwise Independent Combinatorial Testing)

יש לא מעט כלים ליצירת בדיקות לכיסוי קומבינציוני (all-pairs testing; combinatorial testing). את רובם לא ניסיתי, פשוט כי PICT הוא הכלי שאני מעדיף. זה כלי שנכתב על ידי יאצק צ'רוונקה (Jacek Czerwonka) ממיקרוסופט ופורסם כקוד פתוח. מעבר לייצור קלט לבדיקה ברמות שונות של קומבינטוריקה, הכלי מאפשר הגדרת תנאים לוגיים שבעזרתם ניתן לפלטר מראש צירופים מיותרים, לתת משקל לצרופים מועדפים, להגדיר צירופים הכרחיים ועוד. ממשק המשתמש הוא CLI, וכל ההגדרות (ערכים אפשריים של קלט, לוגיקה) נמצאות בקובץ טקסט יחיד. גם אם בסוף מחליטים לא להשתמש בצירופים שהכלי מייצר, עצם הגדרת הלוגיקה של הצירופים עוזרת להבין הרבה יותר טוב את התוכנה שאנו צריכים לבדוק.

 

PerlScript

כלי CLI ממש ישן שפותח על ידי דני פוט (Danny Faught) וג'יימס באך (James Bach), הגורו של בדיקות חוקרות (exploratory testing). הכלי בן למעלה מ-18 שנה, אבל עדיין עובד אחלה. הכלי מייצר קלט על פי כללים שונים, שמועתק אוטומטית ל-clipboard, לשימוש מיידי. זה יעיל מאוד בבדיקות חוקרות. למשל: יצירת קלט ארוך מאוד (נגיד, מיליון תווים) בלי צורך לפתוח מעבד מילים ולהתחיל לספור. או מחרוזת שמכילה את כל 255 התווים שמוגדרים ב-ASCII. הכלי מאפשר ייצור "מחרוזת סופרת"  Counter String – מחרוזת שהתוכן שלה מתאר את אורכה. אפשר לייצר שתי מחרוזות כאלה, אחת שהיא קלט תקין (הבדיקה עוברת) ואחת ארוכה מידי ולכן הבדיקה נכשלת. מנקודה זו, הכלי מאפשר להמשיך ולייצר מחרוזות באורכים שמממשים חיפוש בינארי אחרי האורך המקסימלי שעדיין עובר בבדיקה.

 

Rapid Reporter

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

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

 

File Checksum Integrity Verifier (fciv.exe)

כלי פשוט ביותר שמחשב חתימה (hash) של קובץ או משווה חתימה של קובץ לחתימה צפויה. הכלי רץ במערכת Windows – אבל אני מנחש שיש משהו מקביל ב-Linux. בדיקת חתימה מאפשרת לבדוק אם קובץ נתון לא השתנה או אם התוכן של הקובץ תואם למה שציפינו. איך זה עוזר בבדיקות? לפעמים צריך לבדוק שפלט של בדיקה תואם לציפיות שלנו. אפשר כמובן לכתוב סקריפט בפייתון או שפה אחרת שיריץ את האפליקציה, יאסוף את הפלט לתוך משתנה, וישווה אותו. הפתרון הזה מסתבך לעיתים קרובות כשהפלט מכיל מספר שורות, משתנה בתלות בקלט, ויש בו גם טקסט שלא ממש קשור לבדיקה הספציפית (כגון כותרות, הודעות תוך כדי עיבוד וכו'). לפעמים אנחנו רוצים פתרון מהיר ופשוט בלי להתחיל לפתוח סביבת פיתוח. בעזרת fciv.exe אפשר ללכת על פתרון שהוא במידה רבה brute force:

  • מריצים את האפליקציה הנבדקת בעזרת קובץ פקודות של מערכת ההפעלה (למשל קובץ bat. ב-windows). אפשר להריץ את האפליקציה מספר פעמים, עם קלטים שונים, על ידי הוספת שורות לקובץ הפקודות.
  • מכוונים שהפלט יכתב לקובץ ולא למסך (בעזרת '<' או '<<' ).
  • עוברים בשבע עיניים על התוצאות שהודפסו. אם הם נראות נכונות, שומרים את הקובץ בתור "תוצאות מצופות"
  • מריצים את fciv על הקובץ ושומרים את החתימה בקובץ XML (fciv --help מסביר את זה)

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

 

Windows Subsystem for Linux (WSL)

גם משתמשים קבועים ב-Windows צריכים לעיתים גישה ל-Linux. זה יכול להיות כדי להריץ כלי שקיים בלינוקס ופותר בעייה מיידית; או צורך לפתח תוכנה שתרוץ על מכונת לינוקס, שאין אליה גישה נוחה (מישהו אמר עבודה מהבית ולא קיבל?), וכו'. אם אתם לא צריכים מכונת לינוקס "טהורה", רוב הסיכויים ש-WSL יהיה מספיק טוב בשבילכם. זו התקנה של לינוקס על Windows, ללא תסבוכות של dual boot או האיטיות המובנית בהתקנה על Virtual Machine. אחרי ההתקנה, WSL מאפשר להשתמש בכלים של windows לצורך גישה וניהול קבצים, להתממשק עם Visual Code, להתקין כמה ורסיות שונות של לינוקס ולעבור בקלות ביניהן, וכללית מקל על החיים למי שצריך לינוקס רק לפעמים.

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

 Bulk Rename Utility

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

 MergeCells() Excel macro

אחד הדברים המעצבנים בהעתקה מטבלה ב-Word ל-Excel זה שנתונים שבטבלת וורד המקורית נמצאים בתא אחד, מופיעים באקסל בתאים שונים. משום מה אקסל חושב שכל שורה צריכה לקבל תא פרטי משלה, למרות שבוורד זה לא היה ככה. ועוד יותר מעצבן זה שהמפתחים של אקסל לא נתנו כלי או פונקציה שתטפל בעניין בצורה סבירה. זה כבר הפריע לי מזמן, אז כתבתי מקרו שמטפל בעניין. אני עדיין משתמש בו היום מדי פעם. אפשר למצוא אותו באחת התשובות לשאלה ב-StackExchange (ראו לינק למטה).

 אחלה, אבל...

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