תרחיש שימוש

בהנדסת תוכנה ובהנדסת מערכות, תרחיש שימוש (באנגלית: Use Case) היא טכניקה לאיסוף וניתוח הדרישות הפונקציונליות של מערכות ושל מערכות-של-מערכות. תרחיש שימוש מורכב מרצף אירועים אחד או יותר, המתאר כיצד המערכת מתקשרת עם משתמשים (הקרויים "שחקנים") כדי להשיג יעד עסקי או פונקציה מסוימת. השחקנים בתרחיש שימוש יכולים להיות משתמשי קצה או מערכות אחרות. בפיתוח תוכנה זריז, מקובל לכנות את רצפי האירועים בתרחיש "סיפורים". לרוב, תרחישי שימוש נכתבים בשפה פשוטה המובנת למשתמש הקצה או למומחה היישום, ולא בניב טכני. במקרים רבים תרחיש השימוש נכתב במשותף על ידי מנתחי המערכת ומשתמשי-קצה. נהוג לכתוב את התרחיש כמסמך ברור וקל להבנה בעיצוב פשוט, אף שבשנים האחרונות גובר השימוש בכלים ייעודיים המסייעים בכתיבת התרחישים. בהנדסת מערכות, תרחישי שימוש משמשים לתיאור כללי יותר של הדרישות, ולרוב מתארים משימות או יעדים של בעלי עניין. לעיתים הדרישות המפורטות נאספות בתרשימי דרישות של SysML או באמצעים דומים. מקורם של תרחישי השימוש בעבודתו החלוצית של איוואר יאקובסון, שבשנת 1986 הגדיר לראשונה את טכניקת המידול החזותי לתיאור תרחישי שימוש. בהמשך, הרחיב יאקובסון רעיונות אלה כחלק מעבודתו על שפת המידול המאוחדת (UML) ו-RUP. עם השנים תרמו רבים נוספים לשיפור הטכניקות של יאקובסון, ובפרט קוּרט ביטנר, אליסטר קוֹבֶּרן וגונאר אוברגארד. מתחילת שנות ה-90 ואילך, הפכו תרחישי השימוש לאחת הטכניקות המקובלות ביותר לאיסוף דרישות פונקציונליות בענף הנדסת התוכנה. השימוש בתרחישים אלה נפוץ במיוחד בקרב העוסקים בפיתוח מונחה עצמים אך אינו מוגבל לתחום זה, שכן תרחישי שימוש אינם מונחי-עצמים במהותם. בדיסציפלינת הנדסת התוכנה אין תבנית תקנית לתיעוד תרחישי שימוש מפורטים, ולמעשה מקובלות בענף מספר תבניות מתחרות. עם זאת, נכון לסוף המאה העשרים יש בענף הסכמה באשר לסעיפים העיקריים שיש לכלול בתרחיש שימוש. נוסף על כך, מקובל שיש לבחור בתבנית המתאימה לסוג הפרויקט, ולאכוף את השימוש בה באותו הפרויקט. הסעיפים הבאים מקובלים: זיהוי ושם תרחיש השימוש זיהוי האיטרציה תקציר תנאי התחלה אירועים מזניקים מסלול עיקרי מסלולים חלופיים תנאי סיום כללים עסקיים הערות הכותב ותאריך בתבניות שונות יש לעיתים סעיפים נוספים כגון שחקנים, חריגים, המלצות וכדומה. ייתכנו גם סעיפים הקשורים לתעשייה מסוימת. שם תרחיש השימוש הוא המזהה הייחודי של התרחיש במקבץ. על השם להיכתב בצורה של פועל-שם-עצם (לדוגמה, משוך כסף, העבר מסר) ולתאר יעד שניתן להשלים אותו (לדוגמה, רשום משתמש עדיף על רישום משתמשים). שם קצר בן שתיים עד שלוש מילים הוא המיטבי. שמות ארוכים יותר כדאי לקצר, ולרוב ניתן לעשות זאת בקלות. השימוש בשמות הנגזרים מיעדיו של השחקן הראשי בתרחיש מסייע להבטיח שהתרחיש יישאר מונחה-משתמש. סעיף זה משמש להצגת תמצית התרחיש. בשלבים מוקדמים של הפיתוח, אפשר לרוב להסתפק בסעיף זה. התקציר מספק תיאור קצר וזריז של התרחיש, ונועד לחסוך לקורא את הצורך לקרוא את התוכן המלא של תרחיש השימוש. כפי ששמו רומז, על התקציר להיות קצר ותמציתי, ולפרט הן את היעד העיקרי של התרחיש והן את השחקן הראשי בו. סעיף זה משמש להצהרה על תנאים החייבים להיות נכונים כשמשתמש מתחיל את תרחיש השימוש. עם זאת, תנאי ההתחלה אינם בהכרח האירועים המזניקים את תרחיש השימוש. אם אחד או יותר מתנאי התחלה אינו מתמלא, התנהגותו של התרחיש נחשבת כלא מוגדרת. סעיף זה מתאר את האירועים או תנאי ההתחלה הגורמים להפעלת תרחיש השימוש. אירועים אלה עשויים להיות חיצוניים, תלויי-זמן או פנימיים. סעיף זה נדרש כמינימום בכל תרחיש שימוש והוא משמש לתיאור הרצף העיקרי או הטיפוסי של האירועים בתרחיש השימוש. לרוב, רצף זה מתואר כרשימה ממוספרת של צעדים. לדוגמה: המערכת מבקשת מהמשתמש להזדהות. המשתמש מזין את שם המשתמש והסיסמה שלו. המערכת בודקת את המידע שהוזן ומכניסה את המשתמש למערכת. תרחיש שימוש יכול להכיל גם מסלולים משניים או רצפי אירועים חלופיים למסלול העיקרי. בסעיף זה מקובל גם לתאר חריגות ולתאר את מהלך העניינים כאשר דברים אינם מסתדרים כהלכה. זיהוי ושם התרחיש - דוגמה 1, משוך כסף. זיהוי האיטרציה - מסלול עיקרי יפותח כחלק ממהדורה 1 של התוכנה. תקציר - תרחיש שימוש זה מאפשר ללקוח הבנק המצויד באמצעי זיהוי למשוך כסף מכספומט. תנאי התחלה המערכת מקוונת. יש לפחות סכום מינימלי בקופת המכונה. מסלול עיקרי 1. המשתמש מזדהה למערכת באמצעות אמצעי הזיהוי. 2. המערכת מציגה תפריט אפשרויות מותאם-אישית. 3. המשתמש בוחר "משיכת מזומן" מהתפריט ומזין את הסכום שברצונו למשוך. 4. המערכת רושמת את הפעולה. 5. המערכת סופרת את הסכום באופן ממוכן. וכולי... מסלולים חלופיים הסכום המבוקש גדול יותר מסך הכסף בקופה. 1. המערכת מודיעה למשתמש ומבטלת את הפעולה. 2. המערכת מציגה את התפריט הראשי. וכולי...