יום שישי, אפריל 02, 2010

שיטת האפסנאי לכתיבת קוד

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

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

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

במהלך העבודה אתם רואים את האפסנאי כותב כל פעולה ביומן , הסיבה פשוטה אם הוא לא יתעד את פעולותו אנו מגיעים למצב שמחסן כזה או אחר ריק ואז אתה מגיע לקבל ציוד ומגלה שלמרות שאתה מצפה להגיע למחסן שמכיל את כל הציוד שאתה צריך המחסן ריק. טוב סליחה יש בו ארגז עץ גדול שמכיל דברים שאתה לא צריך. גם אנו ננסה את לשמור על הטכניקה הזאת - כמהנדסים אנו לומדים תמיד להסתקל על המצב הגרוע ביותר קודם כל, ורק אחר כך לבדוק מצב ביינים והמצב הטוב ביותר. על כן אנו חייבים לדאוג לתיעוד (כנראה שהתרגלתי יותר מדי לטופסולוגיה) כל פעולה מתעודת (וזה מקום לפוסט אחר על טכניקות תיעוד). כל עוד העבודה מתבצעת לא בתוך תוכנה סגורה אין לנו בעייה לדוגמא קריאות לsyslog על שגיאות או אזהרות וכן הלאה , הבעיה עולה כאשר מדובר במערכות סגורות לדוגמה כאשר אנו מנסים להגן על הקוד שלנו ומשתמשים בpacker כלשהוא , ב VM או רצים בתוך בסיס נתונים (ויאמר לזכותם של אורקל שבסיס הנתונים שלהם מתנהג כמו מערכת הפעלה מלאה) הבעיה שאנו לא יכולים לדאוג שהתיעוד יתבצע באמצעות syslog (וכך אנו מורידים את הIO ליחס יחסית נמוך) אנו נאלץ להוסיף עוד הרבה פעולות לבסיס הנתונים ואני נגרום לו לעבוד קשה הרבה יותר. מכיוון שניסיוני בסיסי נתונים לא טבלאים נמוך איני יכול להביע דעה על הפתרונות אולם עד כמה שאני יודע אין פתרון גנרי להוצאת התיעוד מחוץ לבסיס הנתונים (אם יש פתרון ספציפי לMicrosoft sql server 2XXX זה לא אומר שזה גנרי).

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

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

יש עוד דברים רבים אבל על אלו ה10 האגורות שלי לנושא (ביטלו כבר את ה5 אז אי אפשר לההשתמש בזה יותר).

תגובה 1:

  1. בוריס, במקרה של תקלה או בעיה fail fast.
    מה הכוונה ?
    הכל בסדר עד שיש בעיה ואז תיכשל מייד (אל תחכה הלאה).

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


    קיצרתי לך את כל הפוסט בערך :)

    השבמחק