English
בפוסט הקודם סיפרתי למה, לדעתי, אין באמת צורך בבודקי תוכנה, לפחות לא לאורך זמן. למרות זאת, זה המקצוע שבחרתי לעצמי ואני משקיע לא מעט זמן ומאמץ כדי להשתפר בו - איך שני הדברים האלה מסתדרים יחד? האם אני פשוט משקר? האם אני מרמה את המעסיק שלי בכך שאני מקבל משכורת על עבודה שאני יודע שאין בה צורך? כמו שאפשר לנחש - זה לא המצב, ולכן צריך ליישב את הסתירה הזו. לתשובה הזו יש שני צדדים - הצד האישי, בו נמצאת המוטיבציה שלי, והצד האובייקטיבי - הערך שאני מאמין שיש לבודקי תוכנה ייעודיים, ובכללם אני.
בראש ובראשונה, כמובן, כל בודק תוכנה צריך להיות מורה דרך וסוכן שינוי. בפרט, השינוי הזה הוא אל עבר מצב בו אין יותר בודקי תוכנה ייעודיים. בלע"ז קוראים לזה work yourself out of a job. באופן בסיסי, אני מאמין שזה תפקידו של כל בודק תוכנה. זה יכול להיות בודק בתחילת דרכו שמגיע עם השאלה הנכונה שעוזרת למתכנת לחשוב באופן קצת יותר רחב, וזה יכול להיות בודק מנוסה בפקיד בכיר שיושב שעות עם ההנהלה כדי לבנות תהליכי עבודה טובים יותר שיעבירו עוד חלק מהאחריות של בודקי התוכנה למקום נכון יותר. מעט או הרבה - זה צריך להיות חלק מהעבודה. כדאי לשים לב לכך שיש הבדל משמעותי בין האמירה "בודקי תוכנה ייעודיים הם לא אסטרטגיה לטווח ארוך" לבין "בואו נשלח את כל בודקי התוכנה הביתה מחר". יש ארגונים שישרדו כזה צעד ואפילו ישגשגו, אבל רוב הארגונים שינסו כזה מהלך יחוו תקופה של כאוס שבסופה, אם הם ישרדו, הם יכריזו על כישלון הניסוי ויבנו מחדש צוות בדיקות מבוצר היטב. כדי שאפשר יהיה להעלים את תפקיד בודק התוכנה הייעודי הארגון צריך להתבגר ולהיות במצב בו תחומי האחריות השונים שחונים אצל בודקי תוכנה מקבלים מענה טוב בדרכים אחרות. בחלק מהמקומות יקראו לזה אולי "אחריות משותפת", אבל אני לא מאמין באחריות, אני מאמין בתהליכים, במבנים ארגוניים ובנטייה האנושית לעשות את מה שקל ומה שמועיל באופן אישי. כך או אחרת, אני אולי לא מאוד מיומן בזה עדיין, אבל להיות חלק מארגון שנמצא בשלב ההתבגרות הזה ולעזור לעצב אותו לפי מיטב הבנתי וכישורי זה מרתק, וזה מאפשר לי לבנות כישורים מקצועיים שמעניינים אותי. היכולת למצוא שיפור תהליכי קטן שיוביל אותנו עוד צעד בכיוון הנכון, הבחירות שאני עושה כדי לתת מענה לצרכי המציאות עד שההתבגרות הזו תושלם - זה אחד הדברים שבשבילם כיף לי לקום לעבודה.
מעבר לזה, גם בעולם האידיאלי שבעיני רוחי, זה לא שאין בכלל צורך בבודקי תוכנה. פשוט, צריך הרבה פחות מהם. אם אמרנו שלפחות 95% מהעבודה לא דורשת מומחיות משמעותית, זה עדיין משאיר לנו כמה אחוזים של עבודה קשה שעבורה כדאי שיהיה איזה מומחה בסביבה. למשל, במקום העבודה הקודם שלי התחלנו לפתח מוצר מבוסס ענן, בלי שהיה לנו הרבה ניסיון בסביבה. כדי להפוך את העניין למאתגר, יחידת הייחוס הבסיסית הייתה "חשבון AWS", כך שהפרקטיקה של יצירת סביבת פיתוח או בדיקות בכל פעם בה היה צורך לא הייתה טריוויאלית ועלתה השאלה איך צריכים להיראות מאמצי הבדיקות שלנו. היו לא מעט מגבלות ודרישות שהשפיעו על ההחלטות - מה קצב הפיתוח שאנחנו שואפים אליו? כמה צוותים שונים יעבדו על הפרוייקט במקביל? מה רמת הביטחון שנדרשת כדי לשחרר את המוצר לשטח? במסגרת ההחלטות האלה היה צורך להוביל דיונים עם ההנהלה ומובילי הפיתוח כדי להחליט איך יראה התהליך כולו, מה בחירות עיצוב שונות יאפשרו לנו ואילו פשרות מקובלות עלינו. היה צורך גם לנסות כמה טכנולוגיות חדשות (כך, למשל, למדנו שעבודה עם PACT בפיית'ון לא הייתה ברמת הבשלות שהיינו צריכים באותו זמן) וליצור כמה דוגמאות טובות לסוגי הבדיקות האוטומטיות שרצינו לראות ברמות הבדיקה השונות. כדי להצליח בזה גייסתי את היכולת שלי לדבר על בדיקות באופן מעמיק ולוודא שכולם בחדר מסכימים לגבי מה אנחנו מנסים להשיג ועל מה אנחנו מוותרים, ניצלתי את ההיכרות שלי עם קהילת הבדיקות ורעיונות ששמעתי בכנסים שונים כדי לשים על השולחן כמה אפשרויות שונות (למשל, בדיקות חוזה נועדו לאפשר לנו לעבוד מהר יותר בלי ליצור תלויות בין צוותים, המחיר לזה הוא עלות הקמת התשתית וויתור על בדיקה מלאה של כל המערכת - אז אם משהו התפספס בחוזה, חבל), כדי להבין איך להתגבר על על המגבלה של "התקנה אחת לכל חשבון AWS" נדרשתי לכישורי מידול טובים - בקיצור, כל מיני משימות שדרשו ממני כישורים טובים למדי בתחום הבדיקות - אולי לא משהו מטורף, אבל בהחלט יותר מאשר מביא לשולחן מפתח תוכנה ממוצע.
המוטיבציה האישית שלי, במקרה הזה, ברורה - אלו בעיות שאני נהנה להתמודד איתן, ולכן הגיוני לשפר את היכולות שלי בתחום. אם יום אחד נגיע לעולם האידיאלי שאני מזכיר כאן ונגלה שהמומחיות הזו היא עוד אחד מהכישורים שיש לארכיטקט תוכנה ולא חונים אצל מומחה בדיקות ייעודי? אחלה, אז יהיו לי חלק מהכישורים הנדרשים, ואפתח את האחרים לרמה הנדרשת.
עם זאת, מה לגבי הרצון שלי ללמד אנשים אחרים להיות בודקי תוכנה טובים יותר? איך זה מתיישר? הרי לא כולם יכולים להיות ארכיטקטים, והשיקולים שלי לא בהכרח מתאימים לכולם. וזה נכון - הבחירה להיות בודק תוכנה היא בחירה לא טריוויאלית, בטח באקלים בו בודקי תוכנה נמצאים אי שם בתחתית שרשרת המזון של המקצועות ה"טכניים". מצד שני, כישורים של בדיקות תוכנה הם קריטיים. זה נכון שעדיף שמי שיטפל בעניין לא יהיו בודקי תוכנה ייעודיים, אבל מי שזה לא יהיה - הוא יזדקק לכמה כישורים בתחום, ואם מישהו (נניח, אני) יצטרך ללמד את הכישורים האלה, רשימת נושאי לימוד וקצת ניסיון יכולים בהחלט לעזור.
עד כאן, הרבה מילים על מוטיבציה, אבל עיקר מה שהזכרנו היה הסיוע במעבר ואותן בעיות קשות שתופסות פחות מ5% מהעבודה. זה לא ממש מצדיק תפקיד, נכון? הרי אין טעם במורה דרך שיעזור לעבור ממצב בו יש בודקי תוכנה ולא באמת צריך אותם למצב בו אין בודקי תוכנה, פשוט מזיזים אותם הצידה. אז מה תורמים בודקי תוכנה בחברות שעדיין להשלימו את המעבר? הנה הרשימה שלי, וכמו שאפשר לצפות - "בודק תוכנה ייעודי" הוא לא הפיתרון היחיד לצרכים הארגוניים האלה, זה פשוט ערך שחונה הרבה פעמים אצל בודקי תוכנה עד שמוצאים מקום נכון יותר. חדי העין גם ישימו לב לכך שלא בכל ארגון כל פריט ברשימה הזו יהיה תחת האחריות של בודקי תוכנה - כל ארגון והדרך שלו לארגן את העבודה. הטענה הבסיסית שלי לגבי הנקודות ברשימה הזו היא שבעוד שעדיף שמי שמטפל בהם לא יהיה בודק תוכנה ייעודי, לבנות את החלופות האלה לוקח זמן ומאמץ, ולכן אנחנו רוצים מומחה שיעזור לנו במעבר הזה.
- מודעות לסיכונים: מפתחי תוכנה ואנשי מוצר מתמקדים במה אפשר לעשות ואיך, הם אמיצים, הם מעזים לחלום בגדול ולא נותנים לפרטים הקטנים לעצור אותם. זה אולי נשמע כאילו אני לועג להם, אבל למעשה זה כישור חיוני שבלעדיו כל הפרוייקטים לא יגיעו לשלב ההתחלה בגלל כל הדברים שעשויים להשתבש וצריך להחליט איך מתכוננים אליהם. אבל איפה עובר הגבול בין אומץ בריא לבין התעלמות פושעת מסיכונים שיכשילו את החברה? עם מספיק אימון וניסיון, אפשר להחזיק בראש גם את הלך הרוח המודע לסיכון וגם את זה מוכוון המטרה, אבל זה לא טריוויאלי. לפעמים קל יותר לומר למישהו לשחק את פרקליטו של השטן כדי לוודא שהסיכון שאנחנו אפילו לא שמים לב שנטלנו יפיל אותנו מצוק גבוה.
- שותף תכנון: זה מאוד קשור לתפקיד מחפש הסיכונים. בודק התוכנה לא רק מסתכל על המוצר כדי לומר "הנה, זה מסוכן", אלא משתתף בתהליכי התכנון ובזכות המיקוד שלו בסיכונים מציע חלופות מורכבות פחות, או קלות יותר לשינוי או לתחזוקה, גם במחיר של פיתוח קצת יותר ארוך או ויתור על כמה נצנצים - כל מיני בחירות שאולי לא יעמדו בראש מעייניו של צוות שממוקד בלגרום למוצר לצאת לשוק כמה שיותר מהר.
- בניית רשתות בטחון: יש מי שיקראו לזה מנגנוני משוב (פידבק, בלע"ז), אבל בודק תוכנה בונה, בכל מיני מקומות, סט כלים שנועד לאתר תקלות מסוגים שונים במוצר. פיתוח מערכות בדיקה אוטומטיות הוא תחום התמחות שלם, שלמרבה הצער עדיין אינו נפוץ מספיק בקרב מפתחי תוכנה (קצת כמו שהיה עם בדיקות יחידה לפני עשור או שניים). עד שהידע הזה יהיה נפוץ מספיק במקומות הנכונים, בודקי תוכנה הם אלו שמתמחים בזה.
- מתרגמים: ברנדן קונולי כתב על זה לפני עשור, והנושא נשאר רלוונטי באותה מידה גם היום. על רגל אחת - בודקי תוכנה חיים בין כמה עולמות. בפרט, בין העולם העסקי - של לקוחות, מנהלי מוצר ומציאות מציקה - לעולם הטכנולוגי - בו צריך לדאוג לדברים כמו מורכבות הקוד, סביבת ההרצה, ביצועים, אבטחה ועוד מגוון תכונות. כפועל יוצא של זה הם מתורגלים בשפה של כל אחד מהעולמות האלה ויכולים לעזור לחקור את הסיבות לתקלה שחווה הלקוח, או להסביר למנהל המוצר בשפה שלו למה צריך ספרינט שלם "רק כדי להוסיף כפתור קטן" מצד אחד, אבל לדבר עם אנשי הפיתוח לגבי ההשלכות המלאות של הכפתור הקטן הזה ואיפה הוא עלול לפגוש את המציאות בצורה שהקוד של היום לא יודע להתמודד איתה.
- המרגיע הלאומי: לפעמים, כל מה שמישהו מההנהלה צריך זה שיהיה מישהו שיאמר לו "אל תדאג, הכל בסדר, עלי". זו, כמובן, לא דרישה לשקר, אלא ההכרה בכך שלפעמים בעלי העניין פשוט רוצים את השורה התחתונה - האם יש מידע שצריך להדאיג אותם או לא? הם צריכים לקבל החלטה והם לא מעוניינים ברעש - או שהכל טוב והם יכולים לישון בשקט, או שאנחנו לא מגיעים ליעד בלי שהם יעשו משהו בנידון.
- הערכת תכונות תפעוליות: איכשהו, לנושא הזה התקבע המונח "בדיקות לא פונקציונליות", שהוא די חסר תועלת. אבל ורד, כפי שכתב שייקספיר, ריחו מתוק ולא משנה באיזה שם הוא נקרא - בדיקות ביצועים, אבטחת תוכנה, נגישות, נהירות ועוד שלל תכונות שנחמד שיש לתוכנה שלנו גם בלי שיש בהכרח דרישה מפורשת בנידון מאנשי המוצר. בדיקה של הדברים האלה מורכבת יותר ודורשת פיתוח הסתכלות קצת שונה מאשר בדיקות פונציונליות. כנראה שמומחה יידרש כאן לזמן קצת יותר ארוך.
- וידוא נכונות של הקוד: זה אחד התפקידים הנפוצים ביותר, והמיותרים ביותר שבודקי תוכנה מבצעים - מפתחי התוכנה שאנחנו עובדים איתם הם אנשים מבוגרים, ואפילו אנשי מקצוע טובים למדי. להעסיק מישהו שיחפש שגיאות מטופשות זה בזבוז זמן של כולם. הדרישה "ודא שהקוד שלך עושה מה שאתה חושב שהוא צריך לעשות" צריכה להישאר אצל מי שכותב את הקוד. רוצים לדבר על מקרי קצה? על השפעות על פיצ'רים נוספים? אוקי, פה כבר יותר לגיטימי לבקש עזרה. אבל בדיקת נכונות בסיסית של הקוד צריכה לעבור למי שכותב אותו, ועדיף אתמול.
- שעיר לעזאזל. מדי פעם צריך שיהיה מישהו שאפשר להצביע עליו ולומר "הוא אחראי", בעיקר בתחומים בהם יש רגולציה שאולי אפילו תדרוש מישהו ספציפי שאפשר להאשים, או שלפחות יחתום על כל מיני טפסים ו"ייקח אחריות". קשה לי לחשוב על מקרה בו הגיוני שבודקי תוכנה יהיו אלו שנכון שימלאו את התפקיד הזה. ברוב המקרים אפשר לפתור את הצורך הרגולטורי גם בלי בודקי תוכנה ייעודיים על ידי התאמת התהליך. עדיין צריך מישהו להצביע עליו? יש שתי אפשרויות לגיטימיות - מישהו עם כוח להגדיר, לתקן ואפילו לעצור את התהליך (נניח, אחראי הרגולציה בחברות רפואיות, מנהל הפיתוח במקומות בהם לא נדרשת הפרדה בפועל) או חברה חיצונית שחושפת את עצמה לתביעות אם משהו מתפספס להם בביקורת. לתת תפקיד כזה לבודקי תוכנה (או למי שמנהל אותם) חוטא לדרישה הרגולטורית של הפרדה, או מכניס תהליכים לא נכונים ויוצר חיכוך והפרדה.



