ארכיון

ארכיון לקטגוריה ‘טכנולוגיה’

כלי כלי …

21 אפריל, 2010 אין תגובות

היעילות והרמה של קבוצת הפיתוח בנויות על האנשים המרכיבים אותה ועל הכלים בהם הם משתמשים. אילו כלים חשוב שיהיו בקבוצת הפיתוח ומה הקריטריונים לבחירתם?

הכלי הראשוני והחשוב ביותר הוא הכלי המהווה את סביבת העבודה של המפתחים. סביבת עבודה זו יכולה להיות מבוססת מיקרוסופט, ואז הכלי העיקרי שיהיה בשימוש הוא ה Visual Studio . אם הסביבה והמערכת מבוססות java , אזי יהיו כלים כמו Eclipse , IntelliJ Idea , סביבת העבודה של Sun ועוד… ההבדל העיקרי בין הסביבות הינו שיטת העבודה וממשק המשתמש.

בשנים האחרונות אני נמצא יותר בסביבות של מיקרוסופט, ושם לכאורה הבחירה פשוטה יותר… כי פשוט אין בחירה. 

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

כלי נוסף, חשוב לא פחות, הינו כלי לניהול הגרסאות. אחד הדברים החשובים יותר בבחירת כלי זה הוא היכולת שלו להיות אינטגרטיבי לסביבת העבודה, תוך הפרעות מינימליות בזרם העבודה. חשוב שהכלי יעבוד בשבילנו, ולא אנחנו בשבילו.

הכלי השלישי, שגם חשיבותו לא מוטלת בספק הוא כלי למעקב וניהול תקלות.

כלים מסוג זה יכולים לעמוד גם בפני עצמן ואינם חייבים להיות אינטגרטיביים לסביבת העבודה. המטרות העיקריות של כלים אלו הן הקניית היכולת לפתוח תקלות ולנהל את כל מחזור החיים שלהן עד לפתרון התקלה. כאן ישנה התחכמות מסויימת… פתרון התקלה הוא מושג שאינו ברור מאליו.

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

אנו רואים שאם רוצים כלי לניהול תקלות, הוא כלי חוצה ארגון, ולעיתים אף יוצא אל מחוץ לגבולות הארגון. אנו צריכים לחשוב היכן אנו רוצים לשים את הגבול של כלי ניהול התקלות שלנו. לכלי זה ישנם משתמשים רבים, והוא יכול להוות ציר מרכזי ביכולת שלנו לנהל ביעילות את צוותי הפיתוח שלנו.

כלי נוסף, שנדיר יותר למצוא בצוותי פיתוח הוא כלי לניהול משימות. האם תכנית העבודה שלנו מבוססת על כלי שיתופי, הנותן לנו אפשרות להבין מה מצב הקבוצה שלנו? מה משך הזמן שכל אחד מהקבוצה מקדיש לעדכון המשימות שלו? האם הכלי הזה אינטגרטיבי לסביבת העבודה שלנו? האם אנו יכולים לדעת מה הקוד שנכתב בעקבות משימה מסויימת? האם הכלי יודע לנהל מחזורי חיים של משימות מסוגים שונים ? משימות תשתית, משימות פנימיות, משימות תלויות לקוח ? לצערי, עדיין לא מצאתי כלי אינטגרטיבי שלם שיענה על כל הדרישות באופן יעיל out of the box, אולם ישנם כלים שניתנים לקונפיגורציה על מנת שיתאימו לדרישות השונות.

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

כלים נוספים שניתן למנות הם כלים לבניית התקנות, כלי הפצת תוכנה, כלי הפצת עדכונים, וכלים נוספים לכתיבת קוד יעיל יותר, כלי עזר למפתחים ועוד ועוד ועוד…

 

הכלים הקיימים היום בשוק נותנים מענה כמעט לכל הצרכים של קבוצת הפיתוח, והשאלה שצריכה להישאל, האם אנו רוצים להתמקד בשיטה של best of breed – שבה אנו נבחר את הכלי הטוב ביותר לכל סוג של משימה, או להתמקד בשיטה של סוויטת כלים – מערכת שלמה מחברה אחת שבה יש את רב הכלים שאנו צריכים.

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

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

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

 

סביבות 2

6 אפריל, 2010 אין תגובות
בפוסט קודם כתבתי על שלוש הסביבות העיקריות שיש בארגון המפתח תוכנה. עכשיו ארצה להתמקד בסביבות הביניים ותפקידיהן.
כאשר מסיימים לפתח גרסה מסויימת של תוכנה, התוכנה עובדת על מחשבי הפיתוח. כעת צריך לבדוק אותה בסביבה נייטרלית, ללא כלי פיתוח מיוחדים. לשם כך יש את סביבת ה QA יגידו חלקכם. נכון, אולם יש לזכור, כי בזמן שאנו מפתחים גרסה מסויימת, בסביבת ה QA בודקים גרסה מוקדמת יותר, אולי אפילו בודקים מערכת אחרת. אחת המטרות שלנו היא העברת הגרסה ל QA במינימום זמן ובמינימום טעויות, על מנת לא להשבית את עבודתם.
לשם כך יש את סביבת ה Dev Integration (אינטגרציית הפיתוח). לפני שמועברת הגרסה ל QA היא תותקן , על כל רכיביה בסביבת ה  Dev Integration. באופן זה ניתן יהיה לזהות תקלות מיידיות שמונעות מהגרסה להבדק, ויש לתקנן באופן מיידי. בדרך כלל תקלות שיתגלו בסביבה זו יהיו ברמת הקשרים בין הרכיבים השונים של התוכנה, בין מודולים שונים, אי התאמות בבסיסי הנתונים או ברכיבי התקשורת השונים וקבצים שלא הועברו באופן תקין בתהליך ההתקנה.
לאחר שהמערכת עוברת בדיקת שפיות (שלה אקדיש פוסט נפרד) המערכת מועברת לסביבת ה QA , שם היא נבדקת לפי תרחישי בדיקה מסודרים ומתועדים (שגם לנושא זה יוקדש פוסט…).
לאחר שצוותי ה QA מאשרים את המערכת, ובכפוף ללוחות זמנים, המערכת מועברת  לסביבת ה Prod Integration (ישנם ארגונים בהם תיקרא הסביבה Staging). סביבה זו כוללת את מרכיבי החומרה והתוכנה כפי שהם קיימים בסביבת הייצור. כמו כן סביבה זו כוללת קונפיגורציה קרובה ככל האפשר למערכת הייצור, ואם ניתן אף נתוני ייצור אמיתיים. חשיבותה של סביבה זו נעוצה בעצם העובדה שכאן המערכת נבדקת בסביבה הקרובה ביותר לסביבה האמיתית בה היא תופעל. הן מבחינת החומרה, פריסת המחשבים, רכיבי תקשורת שונים ונתונים אמיתיים. הסביבה הזו נועדה לכמה מטרות – הראשונה היא בדיקת הנכונות של התוכנה מול נתונים אמיתיים (בעיקר במערכות שזו לא הפעם הראשונה בה הן מותקנות). תקלות כאן יגלו בעיות של הסבת נתונים, של הנחות פיתוח מוטעות, של תקלות אפשריות בתקשורת, של שינויי קונפיגורציה שלא אפשריים במערכת חיה. המטרה השניה היא בחינת תהליך ההתקנה. האחראים על התקנת התוכנה "מתאמנים" בסביבה זו על התקנה נכונה של התוכנה ובניית תרחישי מקרים ותגובות אפשריים בתהליכי ההתקנה. יש לזכור כי בסופו של התהליך, המערכת תותקן בסביבת הייצור, והמטרה העליונה בהתקנה זו היא לא לגרום נזק. לא להגיע למצב בו הארגון ו/או לקוחותיו מושבתים מעבודה עקב התקנת גרסה מוטעית ולכן סביבת ה Prod Integration היא הסביבה האחרונה בה "מותר" לטעות.

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

סביבות … יש הרבה מהן …

5 אפריל, 2010 אין תגובות
מהן סביבות המערכת ? כשאני משתמש במילה סביבות, אני מתכוון לכל אותן סביבות בהן מותקנת המערכת המפותחת.
שלוש הסביבות העיקריות שעליהן מדובר הן:

  • סביבת הפיתוח : בסביבה זו עובדים המפתחים. בה הם מקודדים את קוד התוכנה והסביבה כוללת את כל התוכנות והמערכות התומכות בפיתוח – כלי פיתוח למיניהם , כלי debugging , כלי בקרת תצורה , כלי בניית תוצרים (build) ועוד כלים מכלים שונים, המיועדים לצוותי הפיתוח. סביבה זו מאופיינת ביציבות נמוכה, ולא תמיד ניתן להריץ את כל רכיבי המערכת בו זמנית. בנוסף לפיתוח, בסביבה זו מתנהלות גם בדיקות היחידה (Unit Testing) – בדיקות שנעשות ע"י המפתחים לקוד שנכתב ע"י כל אחד מהם בנפרד ובנוסף, אינטגרציות מקומיות לסינכרון הרכיבים השונים של המערת המפותחת.
  • סביבת הבדיקות ובקרת האיכות : בסביבה זו נמצאים מחשבים ללא כלי פיתוח, עליהם התוכנה המפותחת מותקנת על מנת לעבור בדיקות. סביבה זו מתאפיינת ביציבות גבוהה יותר יחסית לסביבות הפיתוח, ושינויי התוכנה בה מבוקרים באופן של העברת גרסאות מסודרת ושל paches למקרים בהם נדרש תיקון מיידי (למשל כאשר יש תקלה שמשביתה את צוותי הבדיקות). 
  • סביבת הייצור : עבור כל חברה שמפתחת תוכנה סביבת הייצור היא אחרת. לעיתים היא פנים ארגונית, במקרה של פיתוח תוכנה באופן עצמי ע"י גוף המיחשוב של החברה. לעיתים היא חוץ ארגונית, אבל נשלטת ע"י הארגון – במקרים בהם הארגון מוכר שירותים מעל הרשת (בין אם כשירותי ענן או כאתר אינטרנט) ולעיתים היא נמצאת אצל לקוחות החברה, במקרים בהם נמכרת התוכנה ללקוח ומותקנת בסביבת העבודה של הלקוח עצמו. סביבה זו מאופיינת ביציבות רבה, שינויי התוכנה בה מעטים יחסית ומבוקרים ע"י הפצה מסודרת ומתואמת של מערכת התוכנה. במקרים נדירים, יועברו תיקוני תוכנה כ patches לסביבה זו וזה יקרה במקרים של תקלות עוצרות שלא נתגלו בתהליכי הבדיקות ובקרת האיכות של התוכנה. תיקונים בסביבה זו יקרים מאוד, מחייבים התייחסות ארגונית ותהליכית ספציפית ע"י הגוף המפתח, ויכולים לפגוע בהוצאת גרסאות עתידיות של התוכנה.
ככל שמתקדמים בהפצת התוכנה לסביבות העליונות יותר (סביבת הפיתוח היא הסביבה הנמוכה ביותר), עלות תיקוני התקלות עולה, ולכן יש צורך בסביבות ביניים להפצה על מנת שניתן יהיה לנטר תקלות בשלב מוקדם יותר. סביבות אלו כוללות בין השאר את סביבת האינטגרציה, סביבת קדם היצור, סביבת בדיקות משתמשים, סביבת הדרכות ולעיתים סביבות נוספות. הבנה של הצרכים בסביבות המערכת השונות, ובניית סביבות ממוחשבות התומכות באופן מיטבי בדרישות הינה אבן יסוד בעבודתה של יחידת פיתוח. על תהליכי ההפצה ובניית סביבות ממוחשבות התומכות באופן מיטבי בעבודת הארגון – בפוסטים נפרדים.
קטגוריות:טכנולוגיה תגיות: