במאמר הבא אשתף אתכם מדוע בודקים ובדיקות הם חלק חיוני בצוות DevOps ואיך לשלב בדיקות במהלך מחזור חיי פיתוח תוכנה (SDLC).
נבחן מספר נושאים מרכזיים שעלינו כבודקים בצוותים אלה להכיר.
אז יאללה מוכנים? בואו נצלול פנימה...
תפקיד הבדיקות ב- DevOps או למה צריך בודקים בצוות שכזה??
ראשית מה זה DevOps?
DevOps, זו תרבות ארגונית המשלבת מתודולוגיות, פרקטיקות וכלים, במטרה לשפר את תהליכי הפיתוח והתפעול של המוצר. המונח "DevOps" משלב בין פיתוח (Development) לתפעול (Operations) ומטרתו היא לשפר את שיתוף הפעולה בין צוותי הפיתוח והתפעול על מנת לייעל תהליכי עבודה, לקצר את זמן הפיתוח ולהגיב מהר יותר לשינויים ותקלות.
צוות שכזה פועל יחד, משתף ידע ומשלב אוטומציה בתהליכי פיתוח, בדיקה, התקנה, ניהול תשתיות והפעלת התוכנה.
ה-CD (Continue Development) וה-CI (Continue Integration) וה-CT (Continue Testing), הם הבסיס לתהליכים מהירים, בטוחים ויעילים יותר, שמאפשרים גם הפצת פיצ'רים חדשים לסביבת הייצור בקלות ובמהירות.
בצוותי DevOps תפקיד הבודקים שונה מאשר בשיטות פיתוח מסורתיות (כמו אג׳ייל ומפל מים) הבדיקות (CT) משולבות לכל אורך תהליך ה-CI/CD מה שיכול לגרום לשיטות בדיקה מסורתיות להיראות פחות מתאימות. לעיתים אנשי DevOps אינם בטוחים כיצד לשלב בדיקות בתהליך, או סבורים שהן אינן הכרחיות, משום שהגישה שלהם מתמקדת בתיקון מהיר ופריסה מחדש של התוכנה. עם זאת, התפיסה הזו השתנתה עם הזמן.
הפלטפורמה של CI/CD מאפשרת ביצוע בדיקות איכותיות לאורך כל הדרך. במילים אחרות, צוותי ה-DevOps חייבים לספק תוכנה יציבה אשר יכולה לעמוד בשימוש בסביבת הייצור, ולבודקים יש תפקיד קריטי בהבטחת האיכות הזו. הם אחראים לתכנון אסטרטגיית בדיקות שתכסה גם את תהליך ה-CI/CD וגם את התוכנה עצמה.
כיצד בודקים משתלבים בצוותי DevOps?
צוותי DevOps לא תמיד יקדישו מספיק מחשבה לבדיקות. הבודקים צריכים ליזום ולהכניס את עצמם לזרימות העבודה (workflows) זה אומר לאתר הזדמנויות ליישם בדיקות בכל שלב – לא רק בפיתוח ואינטגרציה, אלא גם בסביבת הייצור.
כדי להיות ספציפיים יותר, בודקים בצוותי DevOps עשויים למצוא את עצמם פועלים כ:
לפיכך אנו מבינים שלאיכות הבדיקות יש השפעה רבה על הצלחת המוצר בפרט והארגון בכלל. להלן מספר טיפים לשיפור אסטרטגיית הבדיקות בצוות DevOps שהטמענו בקבוצה שלנו:
סוגי כלי בדיקה ב-DevOps
אז ראינו ש-DevOps מתבסס על CI/CD, ודורש אוטומציה בכל שלב בתהליך, ולכן יש צורך בכלים לניהול גרסאות, אינטגרציה, בדיקות, ניהול מהדורות, פריסה וניטור .ולכן משוב אוטומטי הוא קריטי - מה שהופך את ניטור התשתיות, ניטור האפליקציות והאגרגטורים לכלים חיוניים בשרשרת הבדיקות של DevOps
כלים אלו מבצעים אוטומציה פונקציונלית ולא פונקציונלית, תומכים בדרישות ה-Continuous Testing עליו נרחיב בהמשך ומאפשרים להקים סביבות, לחקות התנהגות של המוצר ולהריץ יישומים מרובים על מערכת הפעלה אחת או יותר. הם מאפשרים גם ביצוע בדיקות אינטגרציה ללא כל הרכיבים הזמינים.
להבא נבחן מספר כלים מרכזיים לבדיקות:
Unit-Tests
בדיקות יחידה הן הראשונות שנעשות ונכתבות כחלק מתהליך הפיתוח המונחה-מבחן (TDD - Test-Driven Development). בבדיקות אלו, כל חלק של הקוד נבדק באמצעות מבחנים שנכתבים עוד לפני שהקוד עצמו מפותח. גישת ה-TDD היא קריטית, כיוון שהיא עוזרת למפתחים לחשוב לעומק על התנהגות כל יחידה בתוכנה.
לבדיקות עומס וביצועים, המיועד לבדוק את ההתנהגות הפונקציונלית ולמדוד את ביצועי התוכנה. הוא תומך בבדיקות של יישומים דינמיים וסטטיים, כמו גם אפליקציות Web .
תכונות עיקריות הן כמפורט להלן:
הערה:
קיימים כלים חדשים ומעניינים המתחרים ב-Jmeter לדוגמא:
כלי קוד פתוח המתמחה בבדיקות עומס וביצועים. הוא מאפשר כתיבת טסטים ב-JavaScript ומכיל מגוון רחב של פיצ'רים מובנים, ללא צורך בתוספים. הוא תומך בפרוטוקולים הבאים:
Framework המיועד ליצירת אובייקטים מדומים (Mocking) ומיועד לפרויקטים שמשתמשים ב-TDD. הוא מסייע בפישוט הבדיקות על ידי הפחתת התלות במהלך הבדיקה, וניתן להשתמש בו כדי לדמות תלות חיצונית כמו DB או Web Services למשל בודקים ב-DevOps יכולים להשתמש ב-Mockito יחד עם Junit כדי לחזק את יכולות הבדיקה.
כלי פופולרי מבוסס Java גם הוא מעולמות ה TDD המיועד לכתיבת מקרי בדיקה חוזרים (repeatable cases) על גבי Java Virtual Machine (JVM) הכלי מספק תכונות שונות כמו test suites, fixtures, test runners, JUnit classes.
בנוסף מציע API של TestEngine כך שניתן לפתח עליו Testing frameworks. כמו כן, הוא תומך ב-Continuous Integration.
דוגמא קצרה היא בדיקת סטטוס סרוויסים במוצר תוך שימוש ב-Assertions של Junit:
Testing Framework חזק וקל לשימוש עבור חברינו הפייתונים. פופולרי במיוחד לבודקים ב-DevOps המשתמשים בו כדי לכתוב ולהתאים בקלות טסטים על בסיס Python CLI, כך שבעזרתו ניתן לכתוב Test cases פשוטים בבדיקות UI, DB ו-API.
Pytest מסוגל לגלות אוטומטית פונקציות ומודולים. בנוסף, מציע תמיכה בהרצת בדיקות יחידה מובנית.
ישנם יותר מ-1000 פרוייקטים PyPI או תוספים שיכולים לתרום הרבה בתהליך ה-TDD.
דוגמא לטסט קצר (קרדיט לאתר pytest)
אם אתם מפתחים את הטסטים שלכם ב-.NET או שפות הנתמכות כמו F#, C#, Visual Basic תוכלו להשתמש ב-Framework הזה.
מבחינת פיצרים:
Framework נוסף המיועד לביצוע בדיקות מגוונות מ Unitests ועד בדיקות אינטגרציה.
הפיצ׳רים העיקריים שמבדילים אותו מ-Junit ו-Nunit
הרבה בודקים בצוותי DevOps משתמשים בפיתוח מונחה בדיקות קבלה ATDD (Acceptance Test-Driven Development) ופיתוח מונחה התנהגות BDD (Behavior Driven Development) שמאפשרות הרצה חוזרת ונשנית של בדיקות תוך כדי בניית רכיבי תוכנה מורכבים.
Robot Framework
כלי ATDD פופולרי המשתמש בגישת keyword-driven ומאפשר לכתוב תסריטי בדיקה בצורה קריאה ופשוטה תומך בטכנולוגיות שונות ומשתלב עם כלים וספריות שונות, מה שהופך אותו לגמיש וניתן להרחבה.
כלי BDD אותו סקרתי במאמרי הקודם מעודד שיתוף פעולה בין בודקים, מפתחים וצוותים נוספים בארגון, על ידי כתיבת תסריטי בדיקה בשפה קריאה וברורה.
לדוגמא: בחברה שבה אני עובד, המוצר נמצא על תשתית קוברנטיקס- K3s שהיא גרסה קלה של K8s לסביבות עם משאבים מוגבלים.
בקובץ הקונספט הבא בוחנים תסריט עבור התקנה על תשתית זו
במקטע הקוד הבא אנו משתמשים בפניות API לקליינט קוברנטיקס של Fabric8 כדי לבחון את מצבו של הקלאסטר.
עם זאת אומר שבצוות DevOps אין כלי "הטוב ביותר" לבדיקה. לכל צוות יש את הכלים שיכולים לענות על הדרישות הספציפיות של המערכת והבדיקות הנדרשות. הכרת הכלים המתאימים והטמעתם בצורה נכונה מאפשרת אוטומציה של תהליכים ותורמת לשיפור איכות התוכנה.
תנאי קדם ל-continuous testing ב-DevOps
במהלך השנים האחרונות, התפתחו כלים לביצוע בדיקות אוטומטיות (Automated Testing) שהפכו לפופולריים מאוד בזכות יעילותם ומהירותם.
בדיקות אלה כוללות אינטגרציה, בדיקות מערכת, ביצועים, רגרסיה, ובדיקות קבלה.
התהליך מוגדר כך שהקוד שנכתב עובר דרך כלי בדיקות, המבוססים על סקריפטים אשר מריצים את הבדיקות באופן אוטומטי. מלבד כתיבת הסקריפטים, אין מעורבות אנושית בתהליך.
Continuous Testing הוא תהליך אוטומטי גם הוא, אך הוא מהווה התקדמות נוספת לעומת הבדיקות האוטומטיות. בתהליך זה, הבדיקות מתחילות לפעול מיד לאחר שהקוד שולב (Continuous Integration) כאשר כל תסריטי הבדיקות כתובים מראש.
הבדיקות האוטומטיות רצות ברצף, ללא כל צורך במעורבות נוספת.
דוגמא לתהליך Continuous Testing
אז מהו ההבדל העיקרי בין Automated Testing לContinuous-Testing?
ב-Automated Testing הבדיקות נכתבות לאחר שהקוד כבר שולב, והבדיקות מתבצעות מול הקוד באמצעות תסריטי בדיקה מותאמים.
לעומת זאת, ב -Continuous Testing ,תסריטי הבדיקות נכתבים לפני שהקוד מפותח, כך שכאשר הקוד משולב, הבדיקות רצות אוטומטית אחת אחרי השנייה.
היתרון המרכזי של Continuous Testing הוא זמן תגובה מהיר יותר. ברגע שהקוד משולב, התהליך מתחיל באופן מיידי, והמשוב מתקבל כמעט בזמן אמת, ללא הפסקות או עיכובים הנובעים מהתערבות אנושית.
ניתן לראות בתרשים את ההבדלים
בסביבות עבודה מבוססות DevOps הבדיקות הללו חיוניות כדי לשמור על תהליך בדיקה רציף ומהיר. עם זאת, יש לזכור שהכנת סקריפטים ותחזוקתם דורש מאמץ ומשאבים. לכן, למרות היתרונות של בדיקות אוטומטיות בכלל, עדיין בדיקות ידניות נחוצות להשלמת התהליך ולהבטחת בדיקת המוצר באופן מקיף.
הבודקים הם שומרי האיכות לאורך כל תהליך ה-.SDLC ניהול איכות התוכנה כולל הרבה מעבר למשימות אוטומטיות. לכן, כישורי תקשורת הם קריטיים עבור בדיקות יעילות.
על הבודקים לשתף פעולה ולשתף ידע עם כלל חברי צוות ה-DevOps מפתחים, אנשי תפעול, מומחי אבטחה ואנשי מוצר.
חשיבות התרבות הארגונית ב DevOps
התרבות הארגונית של ה-DevOps נשענת על תקשורת פתוחה לכל אורך ורוחב הארגון. הבודקים משתפים פעולה עם צוותים מגוונים כדי לעמוד ביעדים ארגוניים ובכך תופסים תפקיד מרכזי. תיאום בין היעדים הטכניים ליעדים העסקיים הוא חיוני, והבודקים צריכים להיות יצירתיים וחדשניים בפתרון תקלות ובהערכת איכות. המיומנויות הללו הן הכרחיות כדי להשיג Continuous Testing אמיתי, יש צורך בשינוי תרבותי רחב. כל חברי הצוות צריכים לאמץ גישה של אחריות לאיכות, אך הבודקים – המומחים לאיכות – הם אלה שצריכים להוביל את השינוי הזה.
כדי לקדם Continuous Testing יש להסתמך לא רק על כישורים טכניים, אלא גם על כישורי מנהיגות כמו תקשורת, שיתוף פעולה וחשיבה יצירתית.
למשל תנאים מוקדמים לטובת Continuous Testing שהנחלנו בצוות שלנו:
דברו איתנו - תקשורת היא לעיתים מאתגרת, במיוחד כשכל אדם מפרש רעיון או פתרון באופן שונה. הדרך הטובה ביותר לוודא שהמסר עובר בצורה ברורה היא לדבר באופן ישיר וגלוי. שימו בצד את הסחות הדעת, כמו טלפונים, במהלך פגישות, והקדישו זמן לשיחה משמעותית.
עבדו איתנו - שיתוף פעולה הוא מפתח להצלחה. כשלוקחים רעיון ומפתחים אותו יחד, הסקופ נהיה ברור ומוגדר יותר. כדי לעמוד בקצב האיטרציות המהירות של צוותי DevOps, חשוב שכולם יעבדו לפי אותו הסקופ. שקיפות במדדים עוזרת לבודקים להגביר את הנראות ולהבטיח שכל הצוות מבין את ההתקדמות והאתגרים.
צרו איתנו - שיתוף פעולה אינו רק מייעל תהליכים, אלא גם מטפח יצירתיות וחדשנות. לעיתים, צוותים נוטים לפנות לפתרונות מוכרים מהעבר, אך הדבר מגביל את היכולת לפתח גישות חדשות. גיוון בתחומי עניין ומומחיות מביא למגוון רחב של רעיונות ומעודד חדשנות אמיתית.
חשבו איתנו - הבנת החשיבה והמיומנויות של חברי הצוות – לצד מודעות עצמית – מאפשרת להוביל שינוי תרבותי שבו כל אחד בצוות אחראי לאיכות.
היתרונות של chaos engineering ב-DevOps
הנדסת כאוס (Chaos Engineering) הינו מושג פופולרי בעולם הפיתוח וההנדסה כיום. ארגונים ומהנדסים רבים מזהים את היתרונות שביצירת "כאוס" מבוקר, כדי לאתר כשלים בפיתוח ולדעת כיצד להתמודד איתם בסביבת הייצור.
לפי אחת ההגדרות המקצועיות, הנדסת כאוס כוללת ביצוע ניסויים במערכות מבוזרות במטרה ליצור כשלים מלאכותיים, מתוך כוונה לבחון את יכולת המערכת לעמוד בתנאים מאתגרים ולהגביר את האמון בעמידות שלה בסביבות ייצור בלתי צפויות.
המשמעות של Chaos Engineering הינה יותר מאשר בדיקת איכות המוצר, אלא בוחן לכל סביבת הייצור שמאפשר לארגון לבצע shift right שהוא מושג המרחיב את תהליך הבדיקה גם לסביבת הייצור, שזה תרגול חשוב של DevOps.
הטכניקה הזו מהווה דרך עבור בודקים בצוותי DevOps למצוא תחום אחריות ייחודי עבורם.
לפיכך אלה הן היתרונות:
בודקים משתמשים ב-Chaos Engineering כדי לבחון תרחישים של כשלי מערכת בזמן אמת. הדבר מאפשר להם לבדוק את עמידות המערכת בצורה מקיפה יותר, מעבר לבדיקות מסורתיות של פונקציונליות וביצועים. יחד עם זאת קיים חשש בקרב בודקים מנוסים. אחרי הכל, ניסויי כאוס מכוונים לגרום ליישומים להיכשל בסביבת הייצור ולא בסביבת staging כפי שהתרגלו במשך שנים.
2. חשיפה מוקדמת לכשלים פוטנציאליים
Chaos Engineering עוזר לבודקים לזהות בעיות פוטנציאליות באזורים שנוטים לכשל, כמו בעיות ניהול עומסים, תלות ברכיבים שונים, או תגובות המערכת לשגיאות לא צפויות.
Chaos Engineering מאפשר לבודקים לבחון איך המערכת מגיבה למצבי קיצון וכשלים לא מתוכננים. כך מתקבלות תוצאות בדיקה אמינות יותר מאשר בתרחישים סימולטיביים בלבד בסביבות שהן לא ייצור.
בעזרת Chaos Engineering בודקים יכולים לבחון לא רק את המערכת האפליקטיבית אלא גם את התשתית. זה כולל בדיקות תקלות ברכיבי רשת, בסיסי נתונים, או מערכות אחסון, ולוודא שכולם מתפקדים כראוי תחת עומס או כשל.
Chaos Engineering מסייע לבודקים לדמות תרחישי כשל אמיתיים, כך שצוותים יוכלו לתעד וללמוד איך המערכת מתנהגת במצבים כאלה, ולוודא שקיימות מערכות גיבוי והתאוששות יעילות.
כשבודקים משתתפים בניסויי כאוס הם עובדים בצורה יותר קרובה עם אנשי DevOps הדבר מאפשר שיתוף ידע ותהליכי עבודה משותפים, מה שמוביל לשיפור בבדיקות ובאיכות הכללית של המערכת.
על ידי זיהוי ושיפור המערכת תחת מצבי קיצון, בודקים עוזרים להבטיח שהמשתמשים הסופיים יתקלו בפחות תקלות ותקלות פחות חמורות. זה משפר את שביעות רצון הלקוחות ואת יציבות המוצר.
בודקים יכולים לשלב Chaos Engineering כחלק מתהליכי האוטומציה שלהם, וליצור מערך של בדיקות שמדמה כשלי מערכת כחלק רציף מתהליך הבדיקה האוטומטי. למשל להשבית מכונות וירטואליות, לדמות מתקפת מניעת שירות (DDoS) או ליצור בעיות רשת. כך יוודאו שמערכות שנבדקות עומדות בכשלי זמן אמת באופן קבוע.
באמצעות שימוש ב-Chaos Engineering בודקים יכולים לשפר את אמינות המערכות, להבטיח תגובות נכונות למקרי קצה, ולתמוך בתהליך ה-DevOps בצורה מקיפה יותר.
גם אצלנו בחברה התחלנו ליישם את הטכניקה הזו ועל כך אספר במאמר הבא שלי....
שימושים ב-ChatOps ב-DevOps
ChatOps הוא גישה המשתמשת בערוצי תקשורת שונים – כמו מערכות לניהול Tickets וכלים לשיתוף פעולה כמו Microsoft Teams, Slack ו-Twist כדי ליצור מסגרת לסביבת שיתוף פעולה מלוכדת. התיאור הזה אינו עושה חסד עם מערך הטכנולוגיות המיועד לפתרון מהיר של בעיות בסביבת הייצור באמצעות שיתוף פעולה.
נניח שיש תקלה בלתי צפויה בקוד או תקלת ביצועים תשתיתית. התראה נשלחת לצוות תמיכה, שמובילה לפתרון מהיר. אם התקלה מורכבת יותר, היא תצטרך לעבור אסקלציה, אך למי? ל-Devops או למפתח? כאן גישת ״הצוות״ עובדת בצורה הטובה ביותר.
ChatOps היא המפתח לגישת ״הצוות״ הזו. כפי שאמרנו התקלה מוסקלת – לא לאדם בודד, אלא לקבוצה מוגדרת. באופן אידיאלי, אחד מחברי הצוות יודע כיצד לאבחן ולפתור את התקלה, אך לרוב נדרש שיתוף פעולה בין מספר אנשים כדי להבין ולפתור אותה. באמצעות שיתוף הידע על היישום, התשתית והקוד, ניתן להגיע לאבחון מהיר ומדויק (בתקווה) ולפתרון.
בנוסף, ChatOps מאפשר שימוש בבוטים או בכלים אוטומטיים אחרים לעבודה עם שרתים או יישומים מרחוק. בוטים אלה למשל יכולים להפעיל מחדש את השרת, לשנות הגדרות תצורה או לאבחן את התקלה בצורה מעמיקה יותר.
ב-ChatOps השלם גדול מסך חלקיו. אנשים בעלי מיומנויות שונות יכולים לשתף פעולה בזמן אמת כדי לפתור תקלות במהירות.
כלי ChatOps
מוצרים כמו Slack ו-Microsoft Teams מאפשרים למשתמשים ליצור קבוצות ולפתוח ערוצי תקשורת, על מנת להקל על תקשורת קבוצתית מתוכננת.
כלים אלו מאפשרים לצוותים לתקשר במהירות ולהחליף מידע ,תמונות וקבצים.
לניהול תקלות ואסקלציות, יישומים כמו Splunk On-Call ו-PagerDuty מספקים מנגנון ניתוב לניהול תקלות. יישומים אלו קובעים את סדר העדיפויות של סוגי התראות ומוודאים שההתראה מגיעה לאנשים המוסמכים ביותר לפתרון התקלה. כלים אלו משתלבים עם מערכות הודעות מיידיות ומנועי התראות ליצירת גישה אוטומטית לקבלת התראות, ניתובן, תקשורת ופתרון תקלות.
תפקיד הבודקים בעולמות ה-ChatOps.
יופי הגענו לחלק המעניין.
במקרים רבים, לבודקים יש ידע רלוונטי. ייתכן שהתקלה נראתה בעבר במהלך הבדיקות, והם יכולים לחפש במהירות במאגר הבדיקות כדי לקבוע מה היה הפתרון.
בודקים הם תורמים חשובים בגישת ״הצוות״ לפתרון תקלות. הם ממוקדים והמיומנים ביותר בניתוח התנהגות המוצר ובהסקת הגורם השורשי להתנהגות זו. למרות שבודקים לא בהכרח יתקנו את התקלה, הם לרוב הראשונים שמזהים את הפתרון.
בודקים תורמים מניסיונם ביישומים ובפתרון תקלות. הם מצטרפים למפתחים, מומחי רשת, מנהלי מערכות, מומחי אבטחה ואחרים שאחראים להבטיח שהמוצר מפותח, נבדק, נמסר ומתופעל בהתאם לציפיות.
להלן מספר היבטים לשימוש בכלים אלה לטובת בודקים:
דוגמא בחברה אצלנו היא השימוש של Channel ייעודי ב-Slack לטובת תוצאות הרצה של Jobs ב-Jenkins שהם למעשה E2E tests
או למשל התרעה על פתיחת טיקט במערכת ה-Jira כתוצאה מתקלה שהתקבלה במהלך בדיקות אוטומטיות
את המאמר אני מקדיש לאל״מ יצחק בן בשט (בנבה) ז״ל הי״ד שנהרג במלחמת חרבות ברזל.