מה היא ספסיפיקציה של תוכנה

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

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

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

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

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

מה שקיבלנו למעלה, זה תאור כללי של מערכת. עכשיו נרד לפרטים:

הקלט של המשתמש צריך להיות כזה:

  • שם פרטי – תומך בכל תווי ה Unicode – אינו יכול להיות ריק, אורך עד 255 תווים. במידה וריק יש לדווח על כך שגיאה ולא לקבל את הקלט
  • שם משפחה – תומך בכל תווי ה Unicode – אינו יכול להיות ריק אורך עד 255 תווים. במידה וריק, יש לדווח על כך שגיאה ולא לקבל את הקלט
  • שם משתמש – עד 10 תווים שיכולים להיות תווי אלפא בית אנגלי באותיות גדולות וקטנות ומספרים שם משתמש ריק אינו מתקבל בתור קלט תקין
  • סיסמה – לפחות 6 תווים ולא יותר מ50 תווים – יכול לקבל את כל תווי ה ASCII מ32 ועד 128. סיסמה ריקה אינה תקינה
  • סיסמה חוזרת – זהה לסיסמה הרגילה, ותפקידה לוודא שהסיסמה שהוזנה מקודם נכונה. סיסמה לא זהה תגרור הודעת שגיאה ולא יוזן הקלט מהמשתמש עד לתיקון הסיסמה
  • דואר אלקטרוני – שדה שיכול להיות ריק. עד 1024 תווים.  במידה והוא לא ריק, יש לעבוד גם עם השדה הבא שמוגדר: במידה והמבנה של הדואר האלקטרוני לא חוקי (לפי הגדרות התקן), יש להודיע על כך ולא לקבל את הקלט עד שזה מתוקן
  • דואר אלקטרוני חוזר – בודק תקינות של הזנת דואר אלקטרוני. הבדיקה צריכה להיות רק אם השדה של הדואר האלקטרוני מלא

מבנה מסד הנתונים:

טבלת משתמשים:

  • מפתח ייחודי מספרי בסדר עולה צריך לעבוד לפחות מאה אלף רשומות להתחלה
  • שם משתמש – מכיל אורך 10 תווים לא ריק
  • סיסמה – מכיל אורך 50 תווים לא ריק

טבלת פרטים אישיים:

  • מפתח ייחודי מספרי בסדר עולה, צריך לעבוד עם לפחות 10,000 רשומות להתחלה
  • משתמש – מצביע לרשומה של טבלת משתמשים שפרטי ההתחברות של אותו משתמש נשמרים – צריך להיות מוגדר באותה צורה שהמפתח של אותה טבלה נשמר לא יכול להיות ריק
  • שם פרטי – תומך ב Unicode – אורך 255 תווים לא יכול להיות ריק
  • שם משפחה – תומך ב Unicode – אורך 255 תווים לא יכול להיות ריק
  • דואר אלקטרוני – אורך 1024 תווים, יכול להיות ריק

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

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

2 מחשבות על “מה היא ספסיפיקציה של תוכנה

  1. astupidog

    ספסיפיקציה == אפיון

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

כתיבת תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s