2011-10-03

איכות תוכנה - היכן מתחילים? (1)

פוסט זה הוא ראשון בשרשרת פוסטים על איכות תוכנה.

הקדמה

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

יום אחד נופל האסימון. לא שהיא חדשה, היא תמיד הייתה שם, אבל יש רגע שזה קורה. האיכות בק-ר-ש-י-ם.
  •     כמעט חצי מהזמן הפיתוח ברוטו הולך לתיקוני באגים, ותיקון באגים שנוצרו בזמן תיקון הבאגים.
  •     ישנם "מקומות קדושים" בקוד שבהם לא נוגעים, ואם ממש חייבים אז זה תוך כדי תפילה.
  •      "אי אפשר" או הערכת זמן פיתוח ארוכה בצורה מגוחכת הופכים לתשובה תדירה יותר ויותר לשאלה: "כמה זמן יקח לפתח X?".
אני אציין כאן שיש הבדל בין מערכות on-premise (שמתקינים אצל לקוח) ומערכות on-demand (שירות). מערכת האילוצים בפרוייקט on-demand מוביל לאיכות מובנה מוקדמת יותר. סיבה טובה להעדיף פיתוח on-demand, אפשר לומר.

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

[הסיפור יכול לתאר לפחות שתי חברות שהכרתי ואני מניח שבהתאמה כזו או אחרת יכול להתאים לחברה שלכם (בשלב מסוים בחייה)]

מה עכשיו? להיכן ממשיכים הלאה?
נתקלתי בדילמה דומה לאחרונה, עם קבוצת ראשי צוותים שהחליטו שהגיע הזמן לקחת דברים לידיים. הכיוון הראשוני שלהם היה ללכת לכיוון unit-tests ו TDD. כיוון ראוי בהחלט.

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


הנושא היה יכול להיסגר אלמלא מנהלי הקבוצות של הארגון עצרו, העלו מחסומים ושאלות: תוך כמה זמן נראה תוצאות? האם משתמש הקצה ירגיש בשיפור האיכות? - כי זה מה שמטריד אותנו כרגע. כמה זמן אתם הולכים להשקיע? ... כ"כ הרבה?? אולי אפשר לשפר את הארכיטקטורה הבעייתית בכזו השקעה - לטפל בבעיה מהשורש? מה זה הרי יעזור שיהיו tests ויהיה refactoring וכמה פונקציות יהיו כתובות יפה יותר?! אנחנו צריכים למכור!


עכשיו התחילה הדילמה האמיתית: לפתוח בצעד מסובך של הטמעת Unit-Tests בחברה עם תמיכה רופפת של ההנהלה? מהם סיכויי ההצלחה?


Seeing what's next


בראיה ביקורתית לאחור ניתן לזהות שתי נושאים לשיפור, מנקודה זו:
  • יעדי האיכות כפי ההוגדרו בפועל לא תאמו לצורכיהם של המנהלים.
  • איך נבחרו דווקא Unit Tests ככלי העבודה המעודף? האם זה הכלי היעיל והנכון לחברה? ליעדים? לאנשים? למצב?
הבהרה: אני באופו אישי אוהב מאוד unit-tests ומאמין, לאחר שעבדתי תקופה ב TDD, שזוהי אחת מההתפתחויות המרשימות בעולם התוכנה בשנים האחרונות. 
לאחר שראיתי את התנגדות המנהלים, ורק אז, התחלתי לשאול את עצמי שאלות: unit tests אינו כלי יעיל לשיפור (EQ (external Quality. מה כן? מה יכול לעבוד במסגרת הנתונה ולהתאים למפתחים ולמנהלים כדי כן לנצל את המומנטום ולשפר את האיכות אבל בצורה שתהיה פחות התנגדות?

בפוסטים הבאים ארצה להמשיך ולדבר על:
  • איכות פנימית (IQ) ואיכות חיצונית (EQ), מה ההבדל ולמה בעצם שווה לשלם עליהם? (חוץ מהעובדה החשובה שמתכנתים טובים ומקצועיים (כמונו) אוהבים אותם)
  • כלי העבודה - ברגע שהחלטנו שאיכות חשובה, אילו כלי עבודה מעשיים עומדים לרשותנו בביצוע העבודה?
כיצד להניע תהליכים וכיצד התפתחה הפרשה הם שני דיונים מעניינים אחרים שאולי אשמור לעתיד.




5 תגובות:

  1. שלום

    קראתי את הפוסטים על איכות תוכנה.

    מעניין !!

    השבמחק
  2. תודה אלדד.

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

    :)

    השבמחק
  3. שלום ליאור,

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

    אשמח לדעת קצת יותר על on-premise לעומת on-demand, אם יתחשק לך לכתוב משהו בנושא.

    השבמחק
  4. אני שמח שנהנת, גם אני צחקתי שכתבתי...

    לגבי on-demand ו on-premise, זה בתוכנית. יגיע בקרוב (יש המון חומר בנושא)

    השבמחק
  5. הנה פוסט על on-demand מול on-premise

    http://www.softwarearchiblog.com/2011/11/cloud-computing.html

    השבמחק