
|
הפעם ברצוני לגעת בנושא החשוב של ניהול בקרת איכות (QA) בארגון מו"פ והאתגרים הכרוכים בכך. נתחיל בבדיחה קלילה (ונא לא לקחת אישית): איש בדיקות קורא בתנ"ך שאלוהים מגן על הטפשים ומחליט לבדוק את זה באופן אמפירי. הוא קופץ מהחלון ושובר רגל. בעודו שוכב על האדמה נאנק מכאבים הוא חושב בשמחה: "אף פעם לא חשבתי את עצמי כטיפש אבל לא ידעתי עד כמה אני חכם!"... מסקנה – בדיקות זה עניין כואב והגדרת איכות זה עניין מאד סובייקטיבי J
אני רוצה להביא כעת מספר ציטוטים כחומר ראשוני למחשבה:
Software has gotten so complicated that it's become mathematically impossible to test every permutation when a product is finished The only way to get a clean product out the door these days is to push quality assurance upstream, to make sure everyone in the company feels responsible for quality Microrim president David Hull.A A defect that costs $1 to fix on the programmer’s desktop costs $100 to fix once it is incorporated into a complete program and many thousands of dollars if it is identified only after the software Building a Better Bug Trap – The Economist June 2003
האם גם אתם מרגישים שבמירוץ להגדלת המוצר והפיצ'רים, האיכות נשארת קצת יתומה מאחור? האם אתם מחפשים דרכים יצירתיות להגדיל איכות בלי להכפיל את כמות הבודקים ואת כמות המעבדות? אתם לא לבד... ולא – זאת לא בעייה קלה.
למנכ"ל טיפוסי של חברה קשה להשלים עם עצם קיומם של אנשי בדיקות. מנהלי מו"פ לא מעטים נתקעים במקום הזה שהופך לנקודת חיכוך מתמדת. הסיבה להתנגדות זו היא פשוטה למדי ולא נעים להודות, גם הגיונית. מנכ"ל מודד ונמדד לפי תוצאת שורה תחתונה – הכנסות מינוס הוצאות תפעוליות. מהנדס פיתוח חדש מגדיל ישירות את היצע החברה ופוטנציאל המכירות ולכן אמור לשפר את השורה התחתונה למרות עלותו. איש בדיקות לעומת זאת גורע מרווחיות החברה כי הוא לא "מייצר". מש"ל...
האם זה ניתוח מדויק? לא לגמרי, אבל יש בו גרעין אמת... בואו ננסה לשים מספר הצהרות על שולחן הניתוחים: · איכות היא עניין מערכתי וחוצה גבולות – היא מתחילה באיכות הדרישות, ממשיכה לאיכות תכנון הקוד, איכות הקוד עצמו, איכות התהליכים וכו' – נסיון לחפש נקודת עוגן אחת או דיסיפלינה אחת האחראית באופן בלעדי "לאיכות" תידון לכישלון מוחלט. · באגים ותוכנה ימשיכו כנראה להיות קשורים בקשרי משפחה מדרגה גבוהה (עם מקדם אהבה גבוה). האתגר הוא בניפוי מוקדם של באגים פשוטים כך שאנשי הבדיקות יתמקדו במציאת הבעיות המערכתיות בעיקר – מקום בו הם מביאים את התועלת ואת כישוריהם היחודיים למקסימום. · תהליך מציאת הבאגים ווידוא איכות הגירסה הוא תהליך ארוך וסיזיפי. האתגר הוא פישוט התהליך, קיצורו, הפיכתו ליותר מדויק וניתן לחזרה בלי שגיאות, והקטנת כמות המשאבים בביצועו למינימום עכשיו ננסה להכניס קמת טרמינולוגיה וסדר לתוך באלאגן מושגי האיכות הרווחים Quality Control– אוסף פעילויות שמטרתם להעריך את איכות המוצר. תהליך בדיקת המערכת במטרה למצוא באגים (כולל התהליכים הרלוונטיים כמו כתיבת תכנית בדיקות)
Quality Assurance – אוסף פעילויות שמטרתם לוודא שתהליך הפיתוח ו/או תחזוקת המוצר טובים דיים כדי להגיע בסוף הדרך למוצר איכותי
QA מול Testing – מאמר מבוא טוב ששווה מאד קריאה אפשר למצוא ב- http://www.cmcrossroads.com/index2.php?option=com_content&do_pdf=1&id=6782 השורה התחתונה מהמאמר שחשוב מאד להבין היא שרוב הארגונים לא באמת עושים QA למרות שברובם יש קבוצת QA... אני מקווה שהמאמר לעיל נותן טעם לטענה מדוע QA כל כך חשוב ויכול לחסוך זמן ועלויות לארגון ולמה הוא חוצה גבולות דיסיפלינות בארגון פיתוח. אז בפעם הבאה שהתשובה שאתם מקבלים לשאלה "מה היא מטרת QA “ היא - "למצוא כמה שיותר באגים", אני מציע לחשוב על זה שוב. משהו בחשיבה צר... נסו להבין היכן הבאגים נולדים (רמז: תהליכים) ולא איך לחפש אותם בסוף הדרך.
אוקי – אז איך כל הארגון כולו יכול להיות שותף יותר טוב בשיפור האיכות בשלבים מוקדמים? הינה מספר נקודות לבחינה:
· Unit Testing – האם ארגון הפיתוח משתמש בכלי זה בצורה אפקטיבית? האם יש הסכמה לגבי גבולות הגזרה בין unit ל-functional testing? לינק למאמר: http://www.mobilein.com/WhitePaperonUnitTesting.pdf · Code Reviews ו-Code Inspections: לינק לאוסף מאמרים בנושא: http://www.smartbearsoftware.com/about-docs.php · האם הארגון מגדיר ומשתמש במטריקות (metrics) למדידת מטרות ושיפורים? מטריקות הן כלי חשוב אך יכולות להפוך לחרב פיפיות בשימוש לא נכון (ולעודד כתוצאה מכך התנהגויות לא רצויות). דוגמא לכך היא מדידת פרודקטיביות של איש בדיקות לפי כמות הבאגים שהוא מוצא ביחידת זמן או מדידת איש פיתוח לפי כמות הקוד שמיוצרת ליחידת זמן (רמז: התחילו למדוד כמות קוד שנמחקת, זהו מדד יותר טוב). מאמר טוב בנושא נמצא ב- http://www.hyperion.com/leaders/insights/organization_culture/metrics.cfm · איכות ה-review של מסמכים בין דיסיפלינות שונות בשלבים התחלתיים של הפיתוח (design review, test plan review, requirements review) · איכות תהליך איסוף הדרישות למוצר ואימותם זכרו את העיקרון הפשוט – ככל שבעיות איכות ימצאו בשלב מוקדם יותר, עלויות התיקון ירדו באופן אקספוננציאלי (זה זמן טוב להסתכל שוב בציטוטים שהבאתי לעיל). עיקרון זה נקרא גם: Pushing quality upstream (דחיפת איכות במעלה הזרם)... האמת ששמעתי מושג זה בפעם הראשונה במהלך עבודתי במיקרוסופט ארה"ב ותמיד הנחתי שזה קשור איכשהו לעולם דגי הסלמון בצפון מערב היבשת שחותרים בעוז במעלה הזרמים בעונת הרבייה (אבל אם מישהו יודע מה הסיפור האמיתי אשמח לשמוע J).
הנושא האחרון שאגע בו בפוסט זה הוא לגבי מהות העבודה של איש QA בארגון פיתוח. ארגונים רבים מבדילים בין איש ה-QA שמטרתו תכנון וביצוע בדיקות מוצר מתוך הבנה עמוקה של "מה המוצר עושה" ו-"מה יחסי הגומלין שלו עם הסביבה העסקית שבה הוא פועל" ומהנדס הבדיקות (test engineer) שמטרתו להביא כלים ותפיסה הנדסית לעולם הבדיקות (במקרים מסויימים תוך התפשרות על ההבנה העיסקית שהוא מביא איתו). במיקרוסופט נושא הנדסת הבדיקות מפותח מאד. אני ממליץ לקרוא את הבלוג הבא לקבל רושם ראשוני: http://blogs.msdn.com/jobsblog/archive/2004/05/27/143419.aspx
אז איזה סוג אנשי בדיקות אני צריך בארגון ה-מו"פ שלי? התשובה הקצרה – גם וגם! · הבנה עסקית היא קריטית בארגון הבדיקות כי בסופו של יום ארגון זה אמור לתת את התשובה לשאלה הבאה: "האם המוצר נכתב ועובד בהתאם לספסיפיקציות העסקיות והאם הוא משרת את צרכי הלקוח?" · הזנחת כלים הנדסיים בתכנון וביצוע הבדיקות יגרום להכפלות משאבים. בדיקת הגרסה תתארך מאד בשל אופי הבדיקות הידניות מה שיפגע ביעדי החברה כולה. יכולת החזרה על בדיקות בצורה מדויקת נפגעת אם הן מבוצעות בצורה ידנית בלבד. לבסוף כלים הנדסיים משפרים את יכולת המעקב והחיזוי בשלב האחרון של פיתוח המוצר – stabilization period. · שילוב חכם של שתי סוגי הדיסיפלינות מעודד QA אמיתי כיוון שהוא מאפשר להתמקד בתהליכים ואיכות המוצר בתרחישי האמת ולהפוך את המשימות "הסיזיפיות " (הקמת מעבדות, הרצת בדיקות, זיהוי כשלונות, ניטור, ואפילו פתיחת באגים) לממוחשבות תוך חסכון ניכר בכוח אדם. · הפרדה בין הקבוצה המפתחת בדיקות אוטומטיות לבין קבוצה האחראית על מעבדות והרצת הבדיקות מאפשרת יעילות ומיקוד. מהנדס בדיקות שצריך גם לפתח וגם להריץ הוא לא יעיל (וחמור מכך – מתוסכל) · קיצוניות יכולה להיות מסוכנת כאן. המטרה להפוך את כל ארגון הבדיקות לממוחשב ושימת דגש רק על הנדסה מרחיקה את תשומת הלב מההבנה העסקית של המוצר והלקוחות ולכן השילוב הוא חשוב. יש להבחין בין בדיקות הרגרסיה ו-"בדיקות העשן" (שצריכות להיות אוטומטיות ככל הניתן ומורצות לעיתים תכופות) לבדיקות מסוג exploratory testing שמטרתן לשוטט בצורה מובנה במוצר ולחפש בעיות בדרך עבודתו כלי עזר בהנדסת בדיקות (רשימה חלקית):· Code coverage analysis · Model based testing · Functional and UI test automation (e.g. QTP) · Test case manager (e.g. TestDirector) · Load test (e.g. LoadRunner, WebLoad) · Static analysis (e.g. Microsoft PreFast) · Fault injection
אתם מוזמנים להצטרף לקהילת המו"פ הראשונה בישראל: randd.cafe.themarker.com
|
דניאל דיין d
בתגובה על על עתיד תחום פיתוח התוכנה. האם אנחנו על סף שינוי גדול? חלק ראשון
תגובות (7)
נא להתחבר כדי להגיב
התחברות או הרשמה
/null/text_64k_1#
אני יוצא חוצץ כנגד חלק מהדיסיפלינות וחלק מההגדרות שנוסחו בכתבה:
תפקיד בקרת האיכות אינו למבדוק את הפיתוח כי אם לבדוק את המוצר. גוף בקרת האיכות אינו נכלל ועדיף שכך תחת סמנכ"ל המו'פ. כי אם אמור להיות ועדיף שכך תחת תפעול, פיתוח עיסקי או כל גורם אחר, או במיקרים רבים עדיף שאהיה גוף בילתי תלוי המישרין לגורם מסוים בחברות. העצמאות של מנהל בקרת האיכות היא המרכיב החשוב ביותר ביכולתו להצליח בתפקידו. לא יעלה על הדעת שסמנכ"ל / מנהל הפיתוח יגדירו למנהל בקרת האיכות את תהליכי הבדיקות או את לוח הזמנים לבדיקות או את הקיף הבדיקות. על מנת לעשות סדר, גוף הפיתוח (ואל תפגעו מתכנתים יקרים) תפקידו לתת מענה ייצורי לפיתוח מוצר על פי דרישות ברורת של גורם מקצועי- מהנדס מערכת/מנהל מוצר. כל שורת קוד בפיתוח המוצר צריכה לקבל אישור של גורם חוץ פיתוחי (אני מתכוון לתהליך Code Review( שמבוצע בין מתכנתים שבו יד לוצת יש והתהליך אינו ממצא את עצמו. ולא!!! יבוצע תיקון בבג ללא הגדרות מפורטות של מהות הבג ושל מקום ביצוע התיקון. מתכנת לא אמור לתת תיקון או הצעה לתיקון כי אם אך ורק לבצע אותו על פי הגדרות של גורם מקצועי.
מחלקת בקרת האיכות אינה רק פקטור בבדיקות תוכנה, אלה ובעיקר אסור!!! לה להתעסק בבדיקות התוכנה. אם על מחלקת הפיתוח לתת מענה לאיכות התוכנה אזי על המפתח לדאוג כי הקוד היוצא ממנו הוא איכותי. גם אם בתהליך האינטגרציה שאמור להיות מבוצע בחלקו על ידי גורם במחלקת הפיתוח וזאת על מנת לוודא כי המוצר שיוצא מהפיתוח הוא איכותי במידת ההגיון, הסבירות למינימום תקלות. אין זה מתפקידי הפיתוח לבדוק את המוצר הכולל / הסופי. כי אם אלה הם תפקידי בקרת האיכות בכלים שונים ובתהליכים השונים שמוכרים להם.
אריאל: שורש כל הרע נעוץ באותו בלבול וחוסר יכולתם של מהנדסים ומנהלים להבחין בין qa ו-qc, וחוסר הבנתה של הנהלה בחשיבות QA. בדכ זה קורה בהנהלות של אירגונים בהם המנכ"ל חסר ראיית מאקרו והוא מנהל של מיקרו, ואינו מסוגל "להתרומם" לרמת התהליך!
רן - אתה דן בתעשיה אחרת של מכשור רפואי שבה הרגולציה דורשת שיטה וקיום מערכת QA (שכוללת בתוכה QC) לפי דרישות GMP ותקינה מאוד מפורטות לנושא. בפיתוח תוכנה הנושא עדיין בחיתוליו....
תודה רן על המחמאה. לגבי הערתך בדבר מעורבות אנשי אוטומציה (test engineering) בביצוע בדיקות, אני יכול רק לחלוק את נסיוני כמנהל ארגון test במיקרוסופט בעברי הלא רחוק.
* מעורבות של כל מהנדס אוטומציה בהבנת המוצר ואיך לקוח הקצה ישתמש בו היא חשובה מאד. ארגון test engineering שהופך לארגון פיתוח טהור מחטיא את מטרתו. אחת הסכנות במצב כזה מנסיוני הוא שהארגון מנסה להמציא ולפתח כלי בדיקות כלליים במקום להתמקד בשימוש בכלי הנדסה לבדוק את המוצר הספציפי טוב יותר
* ארגון בדיקות שכולו הופך לארגון הנדסה מסתכן ב-"blind spots" - הבאת אנשים עם נסיון כמשתמשים מתחום הבעיה העסקית לקבוצת הבדיקות עושה פלאים לאיכות הבדיקות ומאפשרת למנף כישורים שונים בקבוצה כדי לתת מענה חזק גם לבדיקות הפונקציונליות וגם לבדיקות ה- system
* מנסיוני מהנדסים העסוקים בהרצת בדיקות רוטיניות יהפכו למתוסכלים מהר ויחפשו לעבור למשרות פיתוח. שים לב שאני לא מתכוון כאן ליצירת test plan שכולם שותפים לו וכן לא ל- exploratory testing באיזור שעליו מופקד מהנדס הבדיקות. אני מדבר על אחריות המהנדסים להריץ את הבדיקות האוטומטיות שלהם וכן בדיקות ידניות על בסיס חוזר תכוף כבדיקות רגרסיה. הפתרון שיישמתי כפי שהזכרתי בפוסט הוא הפרדה לארגון מעבדות והרצה וארגון בדיקות. מטרתי היא ליצור למהנדס הבדיקות סביבה שתוכל לאפשר לו לעבוד במהירות ויעילות בפיתוח tests ואוטומציה חדשה, בלי לפגר מאחור אחרי עמיתו בקבוצת הפיתוח. איפשור סביבה זו אף חשוב יותר כשעובדים agile. אפרט על כך יותר באחד הפוסטים הקרובים בקהילת ה-מו"פ.
שמחתי מאוד לראות סמנכ"ל מו"פ דן ברצינות ובמקצועיות בחשיבות ניהול האיכות. בארגונים רבים קיימת אמנם התפיסה שלפיה השקעה באיכות היא "עונש" הפוגע בשורה התחתונה.
בניה נכונה של תהליכי איכות בחברה כך שישרתו בצורה אפקטיבית את מטרותיה העסקיות היא אתגר לא פשוט. אישית, עם מטען של שנים רבות בניהול פיתוח תוכנה, התבקשתי לנהל את נושא האיכות (והתפעול) בחברה, שהמוצר שלה הוא מערכת רפואית משולבת חומרה ותוכנה ברמת מורכבות גבוהה. בחברה שעוסקת במערכות המבצעות ניתוחים בבני אדם, האיכות הכוללת (פיתוח, ייצור, שירות) מקבלת משנה תוקף הן מבחינת המוצר והן מבחינת עמידה בדרישות רגולציה, ונמצאת במוקד הענין של ההנהלה לעיתים מזומנות.
בנושא השילוב של פיתוח אוטומציה בבדיקות וביצוע בדיקות אני חולק על הנאמר. מניסיוננו, כאשר המהנדס האחראי על האוטומציה מעורב גם בבנית וביצוע בדיקות בחלק מזמנו, יכולתו להבין את הנדרש ולהציע פתרונות יעילים משתפרת והתוצאה הסופית טובה יותר.
אשמח לשמוע מנסיונם של אחרים הן בנושא זה והן לגבי אפקטיביות המעורבות של אנשי איכות בשלבי הגדרת המוצר ותכנונו.
אחלה תגובות גיל ואביחי. שתי הערות קצרות:
1) גיל, אתהנוגע בעקיפין בנושא נוסף שבכוונתי להתייחס אליו בקרוב - agile programming. הרעיון של פירוק מוצר בפיתוח למודולים קטנים ופיתוחם המקביל בצוותים קטנים על מנת להשיג agility והורדת הסיבוכיות (interfaces מוגדרים, unit tests) הוא שימושי מאד ולמעשה אני יכול לספר לך שמיקרוסופט מיישמת עקרונות אילו בהרבה מקבוצות המוצר.
2) אביחי, מסכים עם אבחנותיך הנוספות לגבי QA. מתנצל על כל בלבול שנוצר... מקור מרכזי לבלבול שכנראה לא יפתר בקרוב הוא בטרמינולוגיה ולכן הסברתי את ההבדל בין QA ל-QC. כל עוד נמשיך לקרוא לאנשי בדיקות "איש QA" אנו מנציחים את הבלבול... אפשר לשקול פתיחת תנועת מחאה חדשה לתיקון העיוות! :-)
אתה מנסה להבחין בין ה- QA וה-QC אבל חוזר ומבלבל בינהם. מטרת ה- QA- כפי שציינת היא לטפל בתהליך ולא בתוצר הסופי (שעל בדיקותיו אחראים אנשי ה- qc שכולם מתבלבלים וקוראים להם qa).
כמו בכל דבר גם פה שולט הכלל "תתכנן נכון, תנהל נכון, תעשה נכון, זה יצא נכון ואיך שרצית". על זה בדיוק אמונים אנשי ה-QA. להטמיע (לא לפקח) על תהליכי, כך שיקיימו את המשוואה שרשמתי.
אם תהליכי הניהול אצלך נכונים, ואיכות היא פרמטר מרכזי בתהליך, (לא רק בלה..בלה...), תוכל לצמצם לאין שיעור את התשומות בבדיקות סופיות (QC). שהרי תכננת תהליך נכון, ניהלת אותו נכון עשית אותו נכון ←אז יצא מה שרצית ....( נכון שבתחילה נדרשות בדיקות אימות סופיות...אבל בייצור הסידרתי ניתן לצמצם אותן למינימום עי מדגם מתאים)
שיטה מצויינת להשקיע הרבה כסף ולא בהכרח לקבל תוצאות. אני אישית אחרי מעל 20 שנה בניהול חברות תוכנה וניהול פיתוח דווקא מאמין שהשיטה היא להקטין את הסיבוכיות של פיתוח התוכנה כתנאי בל יעבור להשגת איכות ללא תשומות ענק ב QA.
די אם נשווה את מערכת ההפעלה יוניקס ונגזרותיה השונות לחלונות למיניהם. ההבדל האמיתי אינו בשיטת הביצוע או באיכות התוכניתנים (יתכן אפילו שאנשי מיקרוסופט "אובייקטיבית" טובים יותר). ההבדל היחיד הוא שיוניקס הינו אוסף של תוכניות יחסית קטנות שמשולבות על בסיס ממשקים פשוטים. כל תוכנית קטנה, נתנת לביצוע ע"י צוות מצומצם של 3-4 אנשים ואז יש מעט ישיבות, מעט מאוד שיטות בדיקה ברמות שונות והרבה פחות באגים.
בכל חברה ניתן לראות כי את המוצרים המועילים ביותר כתבו לא צוותי הענק, אלא צוותים קטנים ולפעמים אדם אחד. החוכמה היא להגדיר משימות כדי שיתאימו למודל עבודה כזה ואז יש צורך בהרבה פחות אנשי QA ועדיין התוכנה טובה בהרבה.