הנדסת תוכנה היא ענף הנדסי העוסק בפיתוח תוכנה. היא מיישמת גישה שיטתית, מבוקרת ומדידה לכל מחזור החיים של התוכנה. מחזור החיים כולל איסוף דרישות, תכנון, בנייה, בדיקות, תחזוקה, ניהול תצורה ובקרת איכות.
המונח נטבע בשנת 1968 בכנס של ועדת המדע של נאט"ו. מאז הוא התפתח לפרקטיקות ולשיטות רבות. קיימת מחלוקת לגבי משמעות המונח והיקפו.
גם המונח "מהנדס תוכנה" נתון במחלוקת. יש מי שרואה בו תפקיד מהנדסי מלא, ויש מי שמייחס לו משמעות מקצועית שונה.
קיים ויכוח אם נחשב התחום להנדסה, מדע או אמנות. חלק מהבעיות נובעות מגילו הצעיר וחוסר גיבוש מתודולוגיות אחידות.
תהליכים ומתודולוגיות הם אוסף עקרונות, שיטות וכלים לפיתוח תוכנה. יש מגוון מתודולוגיות מקובלות בתעשייה. כל מתודולוגיה מדגישה היבט אחר, כמו ניהול פרויקט, ארכיטקטורה, תכנון או בדיקות.
Agile היא משפחה של מתודולוגיות זריזות. זריזות (Agile) מדגישה עבודת צוות, שינויים מהירים ומשלוח תכנים בתדירות גבוהה. שיטות אלה מתאימות לצוותים קטנים ולפרויקטים שמשתנים במהירות.
דרישות תוכנה הן הגדרת מה שמערכת צריכה לעשות. הן משמשות להבנה משותפת בין הלקוחות והבודקים. יש להבחין בין דרישות פונקציונליות לדרישות לא-פונקציונליות.
ארכיטקטורת תוכנה היא תכנון מופשט של מבנה המערכת. הארכיטקטורה מייצגת מרכיבים, יחסים ביניהם וחוקים לפעולה. היא מתמקדת גם בהיבטים לא-פונקציונליים, כמו ממשקים, אמינות וזמינות.
בניית תוכנה (Build) היא תהליך ההפיכה של קוד מקור לקבצים הניתנים להרצה. שלבים מרכזיים כוללים הידור וקישור.
בדיקות מבקשות להעריך את איכות התוכנה ולהתאים אותה לדרישות. יש בדיקות שמסתכלות רק על הפלט (קופסה שחורה), ובדיקות שבוחנות גם את הקוד הפנימי (קופסה לבנה). יש מודלים שמתאימים סוגים שונים של בדיקות לתוצרי הפיתוח.
תחזוקת תוכנה היא השלב שבו משפרים, מתקן ופותחים גרסאות חדשות לאחר הפצה. זהו לעיתים השלב הארוך והיקר ביותר במחזור החיים.
אלגוריתמיקה עוסקת בתכנון פתרונות חישוביים באמצעות אלגוריתמים ומבני נתונים. אלגוריתם הוא סדר של צעדים לפתרון בעיה. התחום מתמקד גם בניתוח היעילות של פתרונות.
עיצוב ותכנות הם הלב של הפרקטיקה. הם כוללים בחירה במבני נתונים, אלגוריתמים, שפות כלים ותבניות עיצוב. אין פתרון יחיד נכון; מנוסים משתמשים בעקרונות וכללי אצבע.
בדיקות בוחנות נכונות ותפקוד. אימות (verification) משתמש בשיטות פורמליות להוכיח תכונות מסוימות של התוכנה. בדיקוּת מתארת כמה קל לבדוק את המערכת בסביבה מבוקרת.
ניהול פרויקטים מתרכז בתכנון ובקרה של משאבים, לוח זמנים, תקציב ושביעות רצון הלקוח. ניהול תצורה עוסק בשליטה בגרסאות, קבצים ושינויים בקוד ובמסמכים.
תהליך הבנייה והכלים הנלווים הפכו לחלק חיוני בפיתוח מודרני. תיעוד מסביר כיצד להפעיל ולתחזק את התוכנה.
היסטוריה וקשרים: התחום הוגדר בסוף שנות ה-60 בעקבות "משבר התוכנה". ב-1999 הושלמה גרסה ראשונה של גוף ידע מקצועי, ובאותה שנה הוענק פרס טיורינג לפרד ברוקס על תרומות בולטות. מסלולי בוגר רשמיים בהנדסת תוכנה החלו בשנות ה-90, אך רבים במקצוע הוכשרו במדעי המחשב.
הנדסת תוכנה עוסקת בכתיבה ובתכנון של תוכניות למחשב. תוכנה היא מה שרץ על מחשב.
שם התחום הוצג בכנס של נאט"ו ב־1968. מאז למדנים ומהנדסים פיתחו דרכים לעשות את זה טוב יותר.
עובדים על דרישות, תכנון, כתיבת קוד, בדיקות ותחזוקה. דרישות הן מה שהלקוח רוצה.
ארכיטקטורה היא תכנון כללי של התוכנית. היא מראה איך החלקים עובדים יחד.
בניית תוכנה הופכת את הקוד לקובץ שרץ על מחשב. בדיקות בודקות שהכל עובד כמו שצריך.
לאחר שהתוכנה יוצאת החוצה, עובדים משפרים אותה ותוקנים בעיות. זאת העבודה שיכולה לקחת הרבה זמן.
שיטות זריזות (Agile) אומרות לעבוד בצוותים קטנים ולשנות מהר לפי הצורך.
אלגוריתם הוא סדר של צעדים לפתרון בעיה. מפתחים בוחרים אלגוריתמים כדי שהתוכנה תפתור בעיות במהירות.
היסטוריה קצרה: התחום צמחה אחרי "משבר התוכנה" בסוף שנות ה־60. בשנות ה־90 התחילו תכניות אקדמיות רשמיות.
תגובות גולשים