פיתוח תוכנה זריז או אג'ילי (באנגלית: Agile Software Development) היא גישה בהנדסת תוכנה המניחה שפיתוח תוכנה הוא ביסודו בעיה אמפירית, ולא ניתן לפתור אותה בשיטות המתבססות על חיזוי או תכנון. באנגלית, המונח Agile פירושו "זריז, קל רגליים, נע במהירות ובחן". הגישה קובעת שפיתוח תוכנה הוא פיתוח מוצר חדש[1] ומתייחסת אליו כמשחק של שיתוף פעולה מוכוון־מטרה[2]. הגישה הזריזה לפיתוח תוכנה מניחה שלא ניתן להגדיר במלואה תוכנה מסוימת קודם לפיתוחה בפועל, ומתמקדת במקום זאת בשיפור יכולתו של הצוות לספק תוצרים במהירות ולהגיב לדרישות העולות תוך כדי הפיתוח.
הגישה הזריזה לפיתוח תוכנה היא הרחבה של הגישה האיטרטיבית, והיא שמה דגש רב על יכולת התגובה לשינוי, יעילות ואיכות. מתודולוגיות החברות במשפחה זו שמות דגש רב על סביבת עבודה מתאימה, זרימת מידע אוסמוטית בין חברי הצוות, ותקורה פורמלית־טקסית נמוכה. עקרונות היסוד של משפחה זו נקבעו במשותף על ידי רבים מהמובילים בחקר וביישום מערכות תוכנה, ופורסמו ברבים במנשר לפיתוח תוכנה זריז.
פרסום המנשר, החתום על ידי חבורה מכובדת כל כך של עוסקים בתחום הנדסת התוכנה, היה נקודת מפנה ביחס הענף למתודולוגיות הפיתוח הזריזות, ואחריו חל גידול משמעותי בשימוש בהן.
המנשר לפיתוח תוכנה זריז
המנשר לפיתוח תוכנה זריז מצהיר כך:
"אנו חושפים דרכים טובות יותר לפיתוח תוכנה
תוך עבודה ועזרה לאחרים.
אלו הם ערכינו ועקרונותינו.
אנו מעדיפים:
אנשים ויחסי גומלין על פני תהליכים וכלים תוכנה עובדת על פני תיעוד מפורט שיתוף פעולה עם הלקוחות על פני משא ומתן חוזי תגובה לשינויים על פני מעקב אחרי התוכנית
כלומר, בעוד שיש ערך לפריטים בצד שמאל, אנחנו מעריכים יותר את הפריטים בצד ימין."
— אתר אג'יל מניפסטו
עקרונות המנשר
ראש סדר העדיפויות הוא לספק מוקדם ובאופן רציף ככל האפשר תוכנה בעלת ערך ללקוח.
מצפים בברכה לשינויים בדרישות התוכנה, אפילו בשלב מתקדם של הפיתוח. תהליכים מהירים ברי-שינוי מאפשרים יתרון משמעותי בתחרות על הלקוח.
אספקה של תוכנה עובדת באופן תדיר, ממספר שבועות עד למספר חודשים, עם שאיפה לסולם זמנים קצר.
אנשי פיתוח והמשתמש העסקי חייבים לעבוד ביחד באופן יום יומי לאורך הפרויקט.
בנה פרויקטים על בסיס יחידים בעלי מוטיבציה. תן להם את סביבת העבודה, ענה על צורכיהם וסמוך עליהם שהעבודה תיעשה.
הדרך האפקטיבית והמספקת ביותר לשיתוף מידע בקבוצת הפיתוח היא שיחה פנים אל פנים.
תוכנה עובדת היא יחידת המידה העיקרית להתקדמות אמיתית בפיתוח.
תהליכים "קלי תנועה" מקדמים פיתוח בר-קיימא (sustainable development, כלומר תהליך שאינו פוגע בעתיד על מנת ליהנות ממנו בהווה).
המשקיעים, המפתחים והמשתמשים צריכים לשמור על קצב קבוע לאורך זמן.
יש לספק תשומת לב מתמשכת למצוינות טכנולוגית ועיצוב (Design) טוב שמגביר את "קלות התנועה".
פשטות - היא חיונית (האומנות למקסם את כמות העבודה שלא תעשה).
הארכיטקטורה, העיצוב והדרישות חייבות להתבצע בתוך "קבוצות עצמאיות" (כמו עוצבה בצבא שמנהלת את עצמה ובעלת כל המשאבים לפעילותה).
בזמנים רגועים, על הצוות להגות ולחשוב איך להפוך להיות יותר אפקטיבי, ואז לשנות את התנהגותו בהתאם.
כלים ומתודולוגיות
סביב הגישה הזריזה פותחו מגוון רב של כלים, מושגים ומתודולוגיות המאפשרים
פיתוח בצוותים משולבים - פיתוח זריז מבוסס על צוותי פיתוח שאינם מאורגנים סביב טכנולוגיות (למשל הפרדה בין בסיס נתונים לממשק) אלא סביב פיצ'רים. באופן זה ניתן לייצר מוצרים שלמים יותר בקבועי זמן מהירים יותר.
אינטגרציה מתמשכת - אתגר האינטגרציה במערכות גדולות הופך להיות נדבך מרכזי בפיתוח. הגישה של אינטגרציה מתמשכת טוענת כי בכל שלב הפיתוח נידרש לאינטגרציה בתוך המערכת השלמה.
מושגים מרכזיים:
חתירה ל"מוצר מינימלי חיוני" (MVP - minimal viable product) והתפתחות על בסיס פידבק ממשי מנקודה זו.
ספרינט - סבב פיתוח מואץ הממוקד ביעדים ברורים ותחום לזמן קצר.
איטרציה - הפיתוח הזריז הוא איטרטיבי, הוא מתקדם מסבב (איטרציה) לסבב.
באקלוג (Backlog) - רשימה של צרכים שהמוצר נדרש למלא, המנוסחת בשפת המשתמש, והמהווה תשתית ולעיתים תוכנית לפיתוח.
כלים אג'יליים לניהול משימות - בשנים האחרונים נוצרו תוכנות רבות שמסייעות לנהל משימות ופרויקטים לצוותים אג'יליים, בשונה מהמקובל לפיתוח במודל מפל המים (Waterfall).
לקריאה נוספת
Highsmith, Jim (2004), Agile Project Management. Addison-Wesley Professional
Schwaber, Ken (2004), Agile Project Management with Scrum. Microsoft Press
Larman, Craig (2003), Agile and Iterative Development: A Manager's Guide. Addison-Wesley Professional
Cockburn, Alistair (2001), Agile Software Development. Addison-Wesley Professional
Beck, Kent (2000), Extreme Programming Explained: Embrace Change. Addison-Wesley Professional
McCarthy, Jim (1995), Dynamics of Software Development. Microsoft Press