CINXE.COM

Software Engineering - Wikibooks, open books for an open world

<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Software Engineering - Wikibooks, open books for an open world</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )enwikibooksmwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat": "dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"8bd62973-7931-4127-a4f7-e8d8727e0db6","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Software_Engineering","wgTitle":"Software Engineering","wgCurRevisionId":4385215,"wgRevisionId":4385215,"wgArticleId":32294,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Books to be broken into subpages","Subject:Software engineering","Subject:Software engineering/all books","Subject:Computer science/all books","Subject:Computing/all books","Subject:Books by subject/all books","Subject:Systems engineering/all books","Subject:Engineering/all books","Book:Wikibooks Stacks/Books","Shelf:Software engineering/all books","Shelf:Computer science/all books","Department:Computing/all books","Department:Engineering/all books", "Shelf:Systems engineering/all books","Alphabetical/S","Freshly started books","Books by completion status/all books","Book:Software Engineering","Shelf:Software engineering"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Software_Engineering","wgRelevantArticleId":32294,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikibooks","wgCiteReferencePreviewsActive":true,"wgFlaggedRevsParams":{"tags":{"value":{"levels":3}}},"wgStableRevisionId":4385215,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":20000,"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true, "wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q80993","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"wgSiteNoticeId":"2.24"};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","ext.flaggedRevs.basic":"ready","mediawiki.codex.messagebox.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready","ext.dismissableSiteNotice.styles":"ready"};RLPAGEMODULES=["site","mediawiki.page.ready","mediawiki.toc","skins.vector.js", "ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.flaggedRevs.advanced","ext.gadget.wikidialog","ext.gadget.commons-file","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","wikibase.client.vector-2022","ext.checkUser.clientHints","wikibase.sidebar.tracking","ext.dismissableSiteNotice"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=ext.dismissableSiteNotice.styles%7Cext.flaggedRevs.basic%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediaBadges%7Cext.wikimediamessages.styles%7Cmediawiki.codex.messagebox.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&amp;only=styles&amp;skin=vector-2022"> <script async="" src="/w/load.php?lang=en&amp;modules=startup&amp;only=scripts&amp;raw=1&amp;skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=site.styles&amp;only=styles&amp;skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.5"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Software Engineering - Wikibooks, open books for an open world"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//en.m.wikibooks.org/wiki/Software_Engineering"> <link rel="alternate" type="application/x-wiki" title="Edit" href="/w/index.php?title=Software_Engineering&amp;action=edit"> <link rel="icon" href="/static/favicon/wikibooks.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikibooks (en)"> <link rel="EditURI" type="application/rsd+xml" href="//en.wikibooks.org/w/api.php?action=rsd"> <link rel="canonical" href="https://en.wikibooks.org/wiki/Software_Engineering"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en"> <link rel="alternate" type="application/atom+xml" title="Wikibooks Atom feed" href="/w/index.php?title=Special:RecentChanges&amp;feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-Software_Engineering rootpage-Software_Engineering skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage" class="mw-list-item"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main Page</span></a></li><li id="n-help" class="mw-list-item"><a href="/wiki/Help:Contents" title="Find help on how to use and edit Wikibooks"><span>Help</span></a></li><li id="n-Browse" class="mw-list-item"><a href="/wiki/Wikibooks:Card_Catalog_Office" title="Check out what Wikibooks has to offer"><span>Browse</span></a></li><li id="n-Cookbook" class="mw-list-item"><a href="/wiki/Cookbook:Table_of_Contents" title="Learn recipes from around the world"><span>Cookbook</span></a></li><li id="n-Wikijunior" class="mw-list-item"><a href="/wiki/Wikijunior" title="Books for children"><span>Wikijunior</span></a></li><li id="n-Featured-books" class="mw-list-item"><a href="/wiki/Wikibooks:Featured_books" title="The best of Wikibooks"><span>Featured books</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes in the wiki [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-randomrootpage" class="mw-list-item"><a href="/wiki/Special:RandomInCategory/Book:Wikibooks_Stacks/Books"><span>Random book</span></a></li><li id="n-Using-Wikibooks" class="mw-list-item"><a href="/wiki/Using_Wikibooks"><span>Using Wikibooks</span></a></li> </ul> </div> </div> <div id="p-community" class="vector-menu mw-portlet mw-portlet-community" > <div class="vector-menu-heading"> Community </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-Reading-room-forum" class="mw-list-item"><a href="/wiki/Wikibooks:Reading_room"><span>Reading room forum</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikibooks:Community_Portal" title="Find your way around the Wikibooks community"><span>Community portal</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Wikibooks:Reading_room/Bulletin_Board" title="Important community news"><span>Bulletin Board</span></a></li><li id="n-maintenance" class="mw-list-item"><a href="/wiki/Wikibooks:Maintenance" title="Frequent tasks that you can help with"><span>Help out!</span></a></li><li id="n-Policies-and-guidelines" class="mw-list-item"><a href="/wiki/Wikibooks:Policies_and_guidelines" title="Pages detailing important rules and procedures"><span>Policies and guidelines</span></a></li><li id="n-contact" class="mw-list-item"><a href="/wiki/Wikibooks:Contact_us" title="Alternative methods of communication"><span>Contact us</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Main_Page" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikibooks.svg" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikibooks" src="/static/images/mobile/copyright/wikibooks-wordmark-vi.svg" style="width: 7.5em; height: 0.9375em;"> <img class="mw-logo-tagline" alt="The Free Textbook Project" src="/static/images/mobile/copyright/wikibooks-tagline-en.svg" width="120" height="10" style="width: 7.5em; height: 0.625em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search Wikibooks [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search Wikibooks" aria-label="Search Wikibooks" autocapitalize="sentences" title="Search Wikibooks [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page&#039;s font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=C13_en.wikibooks.org&amp;uselang=en" class=""><span>Donations</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&amp;returnto=Software+Engineering" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&amp;returnto=Software+Engineering" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="More options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=C13_en.wikibooks.org&amp;uselang=en"><span>Donations</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&amp;returnto=Software+Engineering" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&amp;returnto=Software+Engineering" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Discussion for this IP address</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><div id="mw-dismissablenotice-anonplace"></div><script>(function(){var node=document.getElementById("mw-dismissablenotice-anonplace");if(node){node.outerHTML="\u003Cdiv class=\"mw-dismissable-notice\"\u003E\u003Cdiv class=\"mw-dismissable-notice-close\"\u003E[\u003Ca tabindex=\"0\" role=\"button\"\u003Edismiss\u003C/a\u003E]\u003C/div\u003E\u003Cdiv class=\"mw-dismissable-notice-body\"\u003E\u003C!-- CentralNotice --\u003E\u003Cdiv id=\"localNotice\" data-nosnippet=\"\"\u003E\u003Cdiv class=\"anonnotice\" lang=\"en\" dir=\"ltr\"\u003E\u003Cdiv style=\"width: fit-content; padding: 5px; border: 3px solid gray; background-color: #fafafa; text-align: center; margin: auto;\"\u003E\n\u003Cp\u003E\u003Cspan typeof=\"mw:File\"\u003E\u003Ca href=\"/wiki/File:OOjs_UI_icon_robot.svg\" class=\"mw-file-description\"\u003E\u003Cimg src=\"//upload.wikimedia.org/wikipedia/commons/thumb/7/71/OOjs_UI_icon_robot.svg/40px-OOjs_UI_icon_robot.svg.png\" decoding=\"async\" width=\"40\" height=\"40\" class=\"mw-file-element\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/7/71/OOjs_UI_icon_robot.svg/60px-OOjs_UI_icon_robot.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/7/71/OOjs_UI_icon_robot.svg/80px-OOjs_UI_icon_robot.svg.png 2x\" data-file-width=\"20\" data-file-height=\"20\" /\u003E\u003C/a\u003E\u003C/span\u003E The Wikibooks community is developing a policy on the use of generative AI. Please review the \u003Ca href=\"/wiki/Wikibooks:Artificial_Intelligence\" title=\"Wikibooks:Artificial Intelligence\"\u003Edraft policy\u003C/a\u003E and provide feedback on \u003Ca href=\"/wiki/Wikibooks_talk:Artificial_Intelligence\" title=\"Wikibooks talk:Artificial Intelligence\"\u003Eits talk page\u003C/a\u003E.\n\u003C/p\u003E\n\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E";}}());</script></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">Beginning</div> </a> </li> <li id="toc-The_Basics" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#The_Basics"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>The Basics</span> </div> </a> <button aria-controls="toc-The_Basics-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle The Basics subsection</span> </button> <ul id="toc-The_Basics-sublist" class="vector-toc-list"> <li id="toc-What_is_software_engineering?" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#What_is_software_engineering?"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.1</span> <span>What is software engineering?</span> </div> </a> <ul id="toc-What_is_software_engineering?-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-The_content_of_the_field" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#The_content_of_the_field"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>The content of the field</span> </div> </a> <button aria-controls="toc-The_content_of_the_field-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle The content of the field subsection</span> </button> <ul id="toc-The_content_of_the_field-sublist" class="vector-toc-list"> <li id="toc-Vision_and_Scope" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Vision_and_Scope"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.1</span> <span>Vision and Scope</span> </div> </a> <ul id="toc-Vision_and_Scope-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Requirements_Analysis" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Requirements_Analysis"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.2</span> <span>Requirements Analysis</span> </div> </a> <ul id="toc-Requirements_Analysis-sublist" class="vector-toc-list"> <li id="toc-Analyst_Role" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Analyst_Role"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.2.1</span> <span>Analyst Role</span> </div> </a> <ul id="toc-Analyst_Role-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Communication_Techniques" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Communication_Techniques"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3</span> <span>Communication Techniques</span> </div> </a> <ul id="toc-Communication_Techniques-sublist" class="vector-toc-list"> <li id="toc-Case_Study" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Case_Study"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3.1</span> <span>Case Study</span> </div> </a> <ul id="toc-Case_Study-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Suggestions" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Suggestions"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3.2</span> <span>Suggestions</span> </div> </a> <ul id="toc-Suggestions-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Use_Cases" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Use_Cases"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4</span> <span>Use Cases</span> </div> </a> <ul id="toc-Use_Cases-sublist" class="vector-toc-list"> <li id="toc-Granularity" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Granularity"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4.1</span> <span>Granularity</span> </div> </a> <ul id="toc-Granularity-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Formality_of_Use_Cases" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Formality_of_Use_Cases"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4.2</span> <span>Formality of Use Cases</span> </div> </a> <ul id="toc-Formality_of_Use_Cases-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Specification" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Specification"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.5</span> <span>Specification</span> </div> </a> <ul id="toc-Specification-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Requirements_Management" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Requirements_Management"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.6</span> <span>Requirements Management</span> </div> </a> <ul id="toc-Requirements_Management-sublist" class="vector-toc-list"> <li id="toc-Rejecting_Requirements" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Rejecting_Requirements"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.6.1</span> <span>Rejecting Requirements</span> </div> </a> <ul id="toc-Rejecting_Requirements-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Change_Control" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Change_Control"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.6.2</span> <span>Change Control</span> </div> </a> <ul id="toc-Change_Control-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Design_and_Architecture" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Design_and_Architecture"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.7</span> <span>Design and Architecture</span> </div> </a> <ul id="toc-Design_and_Architecture-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Coding" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Coding"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.8</span> <span>Coding</span> </div> </a> <ul id="toc-Coding-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Testing" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Testing"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.9</span> <span>Testing</span> </div> </a> <ul id="toc-Testing-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Documentation" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Documentation"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.10</span> <span>Documentation</span> </div> </a> <ul id="toc-Documentation-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Maintenance" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Maintenance"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.11</span> <span>Maintenance</span> </div> </a> <ul id="toc-Maintenance-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Applied_Software_Engineering" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Applied_Software_Engineering"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Applied Software Engineering</span> </div> </a> <button aria-controls="toc-Applied_Software_Engineering-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Applied Software Engineering subsection</span> </button> <ul id="toc-Applied_Software_Engineering-sublist" class="vector-toc-list"> <li id="toc-SE_on_Application_software" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#SE_on_Application_software"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1</span> <span>SE on Application software</span> </div> </a> <ul id="toc-SE_on_Application_software-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-SE_on_Server_Software" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#SE_on_Server_Software"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.2</span> <span>SE on Server Software</span> </div> </a> <ul id="toc-SE_on_Server_Software-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-SE_on_Simulations" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#SE_on_Simulations"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.3</span> <span>SE on Simulations</span> </div> </a> <ul id="toc-SE_on_Simulations-sublist" class="vector-toc-list"> <li id="toc-Scientific_and_engineering_simulations" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Scientific_and_engineering_simulations"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.3.1</span> <span>Scientific and engineering simulations</span> </div> </a> <ul id="toc-Scientific_and_engineering_simulations-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Games" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Games"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.3.2</span> <span>Games</span> </div> </a> <ul id="toc-Games-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-SE_on_Embedded_software" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#SE_on_Embedded_software"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.4</span> <span>SE on Embedded software</span> </div> </a> <ul id="toc-SE_on_Embedded_software-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Software Engineering</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Go to an article in another language. Available in 4 languages" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-4" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">4 languages</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikibooks.org/wiki/Softwaretechnik" title="Softwaretechnik – German" lang="de" hreflang="de" data-title="Softwaretechnik" data-language-autonym="Deutsch" data-language-local-name="German" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikibooks.org/wiki/Ingenier%C3%ADa_de_software" title="Ingeniería de software – Spanish" lang="es" hreflang="es" data-title="Ingeniería de software" data-language-autonym="Español" data-language-local-name="Spanish" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikibooks.org/wiki/Engenharia_de_Software" title="Engenharia de Software – Portuguese" lang="pt" hreflang="pt" data-title="Engenharia de Software" data-language-autonym="Português" data-language-local-name="Portuguese" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikibooks.org/wiki/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B" title="软件工程 – Chinese" lang="zh" hreflang="zh" data-title="软件工程" data-language-autonym="中文" data-language-local-name="Chinese" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q80993#sitelinks-wikibooks" title="Edit interlanguage links" class="wbc-editpage">Edit links</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Software_Engineering" title="View the content page [c]" accesskey="c"><span>Book</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Talk:Software_Engineering" rel="discussion" title="Discussion about the content page [t]" accesskey="t"><span>Discussion</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Software_Engineering"><span>Read</span></a></li><li id="ca-ve-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit" title="Edit this page [v]" accesskey="v"><span>Edit</span></a></li><li id="ca-edit" class="collapsible vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Software_Engineering&amp;action=edit" title="Edit the source code of this page [e]" accesskey="e"><span>Edit source</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Software_Engineering&amp;action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Software_Engineering"><span>Read</span></a></li><li id="ca-more-ve-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit" title="Edit this page [v]" accesskey="v"><span>Edit</span></a></li><li id="ca-more-edit" class="collapsible vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Software_Engineering&amp;action=edit" title="Edit the source code of this page [e]" accesskey="e"><span>Edit source</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Software_Engineering&amp;action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/Software_Engineering" title="A list of all wiki pages that link here [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/Software_Engineering" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="//commons.wikimedia.org/wiki/Special:UploadWizard?uselang=en" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Software_Engineering&amp;oldid=4385215" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Software_Engineering&amp;action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&amp;page=Software_Engineering&amp;id=4385215&amp;wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&amp;url=https%3A%2F%2Fen.wikibooks.org%2Fwiki%2FSoftware_Engineering"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&amp;url=https%3A%2F%2Fen.wikibooks.org%2Fwiki%2FSoftware_Engineering"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-sister_projects" class="vector-menu mw-portlet mw-portlet-sister_projects" > <div class="vector-menu-heading"> Sister projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-Wikipedia" class="mw-list-item"><a href="https://en.wikipedia.org/wiki/Main_Page"><span>Wikipedia</span></a></li><li id="n-Wikiversity" class="mw-list-item"><a href="https://en.wikiversity.org/wiki/Wikiversity:Main_Page"><span>Wikiversity</span></a></li><li id="n-Wiktionary" class="mw-list-item"><a href="https://en.wiktionary.org/wiki/Wiktionary:Main_Page"><span>Wiktionary</span></a></li><li id="n-Wikiquote" class="mw-list-item"><a href="https://en.wikiquote.org/wiki/Main_Page"><span>Wikiquote</span></a></li><li id="n-Wikisource" class="mw-list-item"><a href="https://en.wikisource.org/wiki/Main_Page"><span>Wikisource</span></a></li><li id="n-Wikinews" class="mw-list-item"><a href="https://en.wikinews.org/wiki/Main_Page"><span>Wikinews</span></a></li><li id="n-Wikivoyage" class="mw-list-item"><a href="https://en.wikivoyage.org/wiki/Main_Page"><span>Wikivoyage</span></a></li><li id="n-Commons" class="mw-list-item"><a href="https://commons.wikimedia.org/wiki/Main_Page"><span>Commons</span></a></li><li id="n-Wikidata" class="mw-list-item"><a href="https://www.wikidata.org/wiki/Wikidata:Main_Page"><span>Wikidata</span></a></li><li id="n-MediaWiki" class="mw-list-item"><a href="https://www.mediawiki.org/wiki/Main_Page"><span>MediaWiki</span></a></li><li id="n-Meta-Wiki" class="mw-list-item"><a href="https://meta.wikimedia.org/wiki/Main_Page"><span>Meta-Wiki</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-create_a_book" class="mw-list-item"><a href="/w/index.php?title=Special:Book&amp;bookcmd=book_creator&amp;referer=Software+Engineering"><span>Create a collection</span></a></li><li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&amp;page=Software_Engineering&amp;action=show-download-screen"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Software_Engineering&amp;printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> In other projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="wb-otherproject-link wb-otherproject-commons mw-list-item"><a href="https://commons.wikimedia.org/wiki/Category:Software_engineering" hreflang="en"><span>Wikimedia Commons</span></a></li><li class="wb-otherproject-link wb-otherproject-wikipedia mw-list-item"><a href="https://en.wikipedia.org/wiki/Software_engineering" hreflang="en"><span>Wikipedia</span></a></li><li class="wb-otherproject-link wb-otherproject-wikiquote mw-list-item"><a href="https://en.wikiquote.org/wiki/Software_engineering" hreflang="en"><span>Wikiquote</span></a></li><li class="wb-otherproject-link wb-otherproject-wikiversity mw-list-item"><a href="https://en.wikiversity.org/wiki/Software_engineering" hreflang="en"><span>Wikiversity</span></a></li><li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q80993" title="Link to connected data repository item [g]" accesskey="g"><span>Wikidata item</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> <div id="mw-indicator-status-icon" class="mw-indicator"><div class="mw-parser-output"><span typeof="mw:File"><a href="/wiki/Help:Development_stages" title="0% developed"><img alt="0% developed" src="//upload.wikimedia.org/wikipedia/commons/thumb/6/60/00_percent.svg/24px-00_percent.svg.png" decoding="async" width="24" height="24" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/6/60/00_percent.svg/36px-00_percent.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/60/00_percent.svg/48px-00_percent.svg.png 2x" data-file-width="9" data-file-height="9" /></a></span></div></div> </div> <div id="siteSub" class="noprint">From Wikibooks, open books for an open world</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><table class="metadata plainlinks ambox ambox-move" style=""> <tbody><tr> <td class="mbox-image"><div style="width: 52px;"> <span typeof="mw:File"><span><img src="//upload.wikimedia.org/wikipedia/commons/thumb/a/a7/Split-arrows.svg/40px-Split-arrows.svg.png" decoding="async" width="40" height="13" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/a/a7/Split-arrows.svg/60px-Split-arrows.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/a/a7/Split-arrows.svg/80px-Split-arrows.svg.png 2x" data-file-width="60" data-file-height="20" /></span></span></div></td> <td class="mbox-text" style=""> <b>A Wikibookian believes this page should be split into smaller pages with a narrower subtopic.</b><br /> <p>You can help by splitting this big page into smaller ones. Please make sure to follow the <a href="/wiki/Wikibooks:NP" class="mw-redirect" title="Wikibooks:NP">naming policy</a>. Dividing books into smaller sections can provide more focus and allow each one to do one thing well, which benefits everyone.<br /> </p> <small>You can ask for help in dividing this book in the <a href="/wiki/Wikibooks:Reading_room/Assistance" title="Wikibooks:Reading room/Assistance">assistance reading room</a>.</small> </td> </tr> </tbody></table> <p><i>Overlaps the other book: <a href="/wiki/Introduction_to_Software_Engineering" title="Introduction to Software Engineering">Introduction to Software Engineering</a></i> </p><p><i>The idea of this book is to couple together the different projects on the different subjects of software engineering. Currently the only book linked is <a href="/wiki/Computer_Programming" title="Computer Programming">Computer Programming</a>. Other subjects should be added over time.</i> </p><p>As written in the <a href="/wiki/Computer_Programming" title="Computer Programming">Computer Programming</a> book, coding is only a small part of software engineering. This book is intended as an introduction to the realm of software engineering. </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading1"><h1 id="The_Basics">The Basics</h1><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=1" title="Edit section: The Basics" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=1" title="Edit section&#039;s source code: The Basics"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading2"><h2 id="What_is_software_engineering?"><span id="What_is_software_engineering.3F"></span>What is software engineering?</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=2" title="Edit section: What is software engineering?" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=2" title="Edit section&#039;s source code: What is software engineering?"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A systematic approach to the analysis, design, implementation and maintenance of software. </p><p>Software engineering is the engineering discipline through which software is developed. Commonly the process involves finding out what the client wants, composing this in a list of requirements, designing an architecture capable of supporting all of the requirements, designing, coding, testing and integrating the separate parts, testing the whole, deploying and maintaining the software. Programming is only a small part of software engineering. </p><p>The discipline is still in its infancy (early stage of growth/development) as an engineering discipline. We haven't had enough experience, nor gathered enough empirical data to systematically understand and predict the life-cycle of a software project. </p><p>The Software Engineering Body of Knowledge (<a rel="nofollow" class="external text" href="http://www.swebok.org/">SWEBOK</a>) divides software engineering into 10 knowledge areas: </p> <ol><li>Software requirements</li> <li>Software design</li> <li><a href="/wiki/Computer_Programming" title="Computer Programming">Software construction</a></li> <li>Software testing</li> <li>Software maintenance</li> <li>Software configuration management</li> <li>Software engineering management</li> <li>Software engineering process</li> <li>Software engineering tools and methods</li> <li>Software quality</li></ol> <div class="mw-heading mw-heading1"><h1 id="The_content_of_the_field">The content of the field</h1><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=3" title="Edit section: The content of the field" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=3" title="Edit section&#039;s source code: The content of the field"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><i>Note: the following summaries are originally from Wikipedia. These are here only temporarily. The titles aren't final, nothing on this page is final yet (or even near final).</i> </p> <div class="mw-heading mw-heading2"><h2 id="Vision_and_Scope">Vision and Scope</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=4" title="Edit section: Vision and Scope" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=4" title="Edit section&#039;s source code: Vision and Scope"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The practice of software engineering in the corporate or industrial sector, starts with the business and ends with the business. Although computers, programming languages, and creative problem solving are what fill the engineer with interest in the field, without servicing and enabling the user, the exercise would be pointless. Thus the first stage in any software engineering process, is the <a href="/w/index.php?title=Software_Engineering/Vision_and_Scope&amp;action=edit&amp;redlink=1" class="new" title="Software Engineering/Vision and Scope (does not exist)">Vision and Scope</a> document, or some equivalent meeting. </p><p>A vision of the system to be built is described by the user or <a href="/w/index.php?title=Software_Engineering/Product_Champion&amp;action=edit&amp;redlink=1" class="new" title="Software Engineering/Product Champion (does not exist)">Product Champion</a>. The business context that it will service is described. The key stakeholders are enumerated including their interests, risks, etc. The success conditions are listed, so that it is understood what will be completed and how to measure success. </p><p>Business opportunities are discussed, to justify why the project should be invested with the blood, sweat, and tears of programmers, testers, project managers, and program managers. The Scope of the project is made clear and if it is to be in phases, the scope of each phase at a high level is laid out. The priorities of the project are recorded. </p><p>With an understanding of the business' vision, the engineers begin to ask questions. </p> <div class="mw-heading mw-heading2"><h2 id="Requirements_Analysis">Requirements Analysis</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=5" title="Edit section: Requirements Analysis" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=5" title="Edit section&#039;s source code: Requirements Analysis"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Extracting requirements of a desired software product is the first task in creating it. This process is called requirements elicitation. While customers probably believe they know what the software should do, it may require skill and experience in software engineering to recognize incomplete, ambiguous or contradictory requirements. </p><p>Compounding this problem is the absence of formal abstractions. A civil, mechanical engineer has a plan, elevation, sections to refer to and these make good sense to both the author and reader of these abstractions. However, while (E-R) or object diagrams, process flow diagrams, data flow diagrams are abstractions that have been used and built on, many of these are not universally used or practiced. </p><p>Besides, considerable effort goes into repairing and enhancing existing systems. Engineering required here is a mix of reverse and forward engineering in the sense that requirements definitions refer to a set of circumstances that already exist and these circumstances have to be stated in unambiguous terms as well. </p><p>Perhaps, lack of universally accepted abstractions make life difficult for software engineers and some people have even argued that software production process is closer to art rather than engineering! </p><p>Of late, people have started using prototypes in various degrees of working. Screen shots and report layouts are non working prototypes and form the basic level of prototyping and increasing sophistication is built in wherever possible. Making prototypes is always more time consuming than not making one. Thus, this practice is not always utilised. </p> <div class="mw-heading mw-heading3"><h3 id="Analyst_Role">Analyst Role</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=6" title="Edit section: Analyst Role" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=6" title="Edit section&#039;s source code: Analyst Role"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The role of analyst can be fulfilled typically by three types of people. A technical project manager, a software engineer, or a dedicated analyst. In some organizations it is unthinkable to engineers that they would serve the analyst role, as they are "technical" and would consider dealing directly with the customer unthinkable. This is purely a cultural stance that varies between companies and organizations. It is also quite common for software engineers to work closely with the business people and customers associated with a project, and this programmer/analyst role can be quite beneficial to the projects success rate. </p><p>As you are gathering requirements, you can subject them to analysis. Does the requirement in question conflict with others? What is its priority? Where did it come from? Does it need further clarification? </p><p>Analysis is the ability to draw inferences from requirements and represent them in a structured way. Structures themselves may vary based on what is being analysed. It is very tough to draw boundaries between analysis and requirements gathering as they both use the same abstractions many a time. </p><p>One could argue that analysis yields data storage structures and workflow structures etc. However, one would think that these are not the only outputs from analysis. </p> <div class="mw-heading mw-heading2"><h2 id="Communication_Techniques">Communication Techniques</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=7" title="Edit section: Communication Techniques" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=7" title="Edit section&#039;s source code: Communication Techniques"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The common technique that means the software requirement analysis begins with communication between two or more parties. Review of a software requirement specification is conducted by both software developer and customer. Because the specification forms the foundation for design and subsequent software engineering activities, extreme care should be taken in conducting the review. The review is first conducted at a macroscopic level. At this level, the reviewers attempt to ensure that the specification is complete, consistent and accurate. Once the review is complete a software requirement specification is signed off, “by both customers and developer”. </p> <div class="mw-heading mw-heading3"><h3 id="Case_Study">Case Study</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=8" title="Edit section: Case Study" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=8" title="Edit section&#039;s source code: Case Study"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>While requirement analysis phase some problems are come. The problems are identified and defined and listed here. • The problem occurs that did exist in smaller systems, which leads to a redefining of priority of the activities that go into developing software. • In the beginning of the requirements phase, the needs of clients are in the minds of various people in the client organization. • The major role of the problem statement is that the customer has a problem that may be responsible to a computer-based solution. A developer responds to the customer’s request for help. Here the one more problem is the path from communication to understanding is often full of difficulties. </p> <div class="mw-heading mw-heading3"><h3 id="Suggestions">Suggestions</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=9" title="Edit section: Suggestions" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=9" title="Edit section&#039;s source code: Suggestions"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The above case study/problem determined while requirement analyzing phase in "system engineering". This page can be improved soon. --<a href="/w/index.php?title=User:Ananthakumar_Selvaraj&amp;action=edit&amp;redlink=1" class="new" title="User:Ananthakumar Selvaraj (does not exist)">Ananthakumar Selvaraj</a> (<a href="/wiki/User_talk:Ananthakumar_Selvaraj" title="User talk:Ananthakumar Selvaraj">discuss</a> • <a href="/wiki/Special:Contributions/Ananthakumar_Selvaraj" title="Special:Contributions/Ananthakumar Selvaraj">contribs</a>) 13:02, 18 March 2013 (UTC) </p> <div class="mw-heading mw-heading2"><h2 id="Use_Cases">Use Cases</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=10" title="Edit section: Use Cases" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=10" title="Edit section&#039;s source code: Use Cases"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Once the vision and scope of a engineering project has been established the requirements gather process begins. One tool for communicating between the customer, analyst, developers, and testers is a set of Use Cases. A Use Case typically has a name, a short description, and then a number set of steps which a user would go through to accomplish a task. Use cases are sometimes grouped together in a UML or other format of diagram depicting users, the system, external entity and specific use cases. </p> <div class="mw-heading mw-heading3"><h3 id="Granularity">Granularity</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=11" title="Edit section: Granularity" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=11" title="Edit section&#039;s source code: Granularity"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Use Cases are typically coarse-grained and don't dive into every detail and functional requirement of the system. A business person or software engineer should be able to read through all of the use cases and get an idea of the entire scope of what the project will deliver. </p> <div class="mw-heading mw-heading3"><h3 id="Formality_of_Use_Cases">Formality of Use Cases</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=12" title="Edit section: Formality of Use Cases" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=12" title="Edit section&#039;s source code: Formality of Use Cases"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Agile driven projects may skip these cases, or at least only record the attributes discussed above. Plan driven methodologies may give additional attributes to Use Cases such as alternative paths after covering the main steps, trace requirements covered by the use case back to their source, and have an error handling section for each use case. </p><p>THE STAGES OF ANALYSIS </p><p>Analysis is typically accomplished in two stages. The first stage, Business Analysis includes an in-depth examination of the customer's present set of business or manufacturing processes and procedures with an eye toward how they might be improved by automation. The second stage, Systems Analysis consists of an examination of the proposed improvements and a recommendation on what computer environment and software technology is best suited to accomplish those improvements. </p><p>BUSINESS ANALYSIS STAGE </p><p>From the Business Analyst's in-depth understanding of the customer's present environment, he or she creates a set of "business use-cases", which are short descriptions of the role that each of the business's "actors" perform within each process or procedure. For instance, the waiter in a restaurant might have a use case as follows: " A. Actor approaches customer table, introduces self and recites a description of the day's specials. B. Actor presents a beverage menu and inquires if customer would like to order a beverage. C. If yes, actor writes each customer's order on a drink tag and proceeds to bar area. D. Actor presents the tag to bar-keep and makes a mental note to check back within a customary time to see if the drink order is complete. E. If no, Actor presents a dinner menu and helps customers to make selections. As each new party of customers is seated, actor repeats procedure, beginning from step A." With a set of raw use-cases like the proceeding, the business analyst can, with the customer's collaboration, examine how each use-case might be automated and can thereby define an official system requirement which becomes one of maybe hundreds of requirements that define the future software application. As might be surmised, the effective Business Analyst must not only have extensive experience with and knowledge of the business world, but must also have expertise in the potentialities offered by modern software systems and how those systems map to the reality of the business world. </p><p>SYSTEMS ANALYSIS STAGE </p><p>The second stage of the analysis process, Systems Analysis begins from the foundation laid by the business analyst. From the set of business use cases and their resultant software requirements, the Systems Analyst makes recommendations as to the most suitable software technology to accomplish those requirements. In some cases, the hardware environment limits choices of software technologies. For instance, in the restaurant scenario, above. The customer might be adamant about providing the waiter with a handheld device to replace the drink tag and to make the trip to the bar unnecessary before the drink order is ready to serve. In such a case, the systems analyst might be constrained to using only those operating systems and APIs that are supported on the preferred handheld device. </p><p>Once the programming and run-time environment is decided, then the systems analyst can begin turning the business use-cases and requirements into a set of "system use-cases," which are descriptions of how the actors will interact with the proposed system. Those system use-cases, taken together now comprise the actual blueprint that will be used by software architects to begin laying out the classes or other software modules that will define a road map for the software coding and development process which follows. </p> <div class="mw-heading mw-heading2"><h2 id="Specification">Specification</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=13" title="Edit section: Specification" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=13" title="Edit section&#039;s source code: Specification"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Specification is the task of precisely describing the software to be written, in a mathematically rigorous way. In reality, most successful specifications are written to understand and fine-tune applications that were already well-developed. Specifications are the most important for external interfaces that must remain stable. </p> <div class="mw-heading mw-heading2"><h2 id="Requirements_Management">Requirements Management</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=14" title="Edit section: Requirements Management" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=14" title="Edit section&#039;s source code: Requirements Management"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Once you have gathered requirements, captured them into a specification, and the customer agrees with it, it is possible to take a snapshot or baseline of the project requirements. This allows one to manage existing requirements and process new incoming ones. The specification is placed under configuration management, such as a tool like CVS so that the requirements can be versioned and tracked. </p> <div class="mw-heading mw-heading3"><h3 id="Rejecting_Requirements">Rejecting Requirements</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=15" title="Edit section: Rejecting Requirements" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=15" title="Edit section&#039;s source code: Rejecting Requirements"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>It is important to reject requirements that </p> <ul><li>Don't fit within the project scope</li> <li>Cannot show a positive return on investment</li> <li>Won't make the system competitive</li> <li>Aren't technically feasible</li></ul> <p>A requirement rejected doesn't have to be further analyzed, implemented, documented, or tested. Every requirement costs the company and must be thought through. </p> <div class="mw-heading mw-heading3"><h3 id="Change_Control">Change Control</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=16" title="Edit section: Change Control" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=16" title="Edit section&#039;s source code: Change Control"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Regardless of whether your methodology is agile or plan driven, you should create some form of change control to process new requirements. Failure to do so may lead to project failure due to scope creep, project overruns, poor quality, or high costs. Change control can be as simple as a development manager reviewing specification, to an elaborate tool supported process with forms and a board of people with change control authority. </p><p>Lack of communication about changes to a specification can lead to costly wasted work by developers, testers, or analysts. The time it takes to change one requirement in a specification, may cost 100 times the person hours to realize the decision. </p> <div class="mw-heading mw-heading2"><h2 id="Design_and_Architecture">Design and Architecture</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=17" title="Edit section: Design and Architecture" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=17" title="Edit section&#039;s source code: Design and Architecture"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Design and architecture are the activities involved in specifying how the software will actually work. This phase frequently described as being divided into two main phases, which might be described as "business design" and "technical design". Business design generally specifies the "why" of the system, indicating how data will be used and how it will flow. Technical design generally specifies the "how" of the system, or how its components will be arranged, what their features will be, and what kind of hardware the system will require. These two phases can often be conducted roughly simultaneously, with business design usually starting first and technical design ending last. </p><p>Of all of the phases, the design phase can often consume the most time, and many engineers consider it the most important. A poor design can cause the failure of a project, even after considerable resources are spent during the construction phase of the project building it. It is important for the design and architecture of the system to be complete enough that it can be validated and then used to develop the system. </p> <div class="mw-heading mw-heading2"><h2 id="Coding">Coding</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=18" title="Edit section: Coding" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=18" title="Edit section&#039;s source code: Coding"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Reducing a design to code may be the most obvious part of the software engineering process, but it is not necessarily the largest portion. In fact, many software engineers only work on the analysis and design process, then the coding work is handed off to computer programmers to implement. This trend is increasing in many companies, where software engineers are hired domestically and the implementation is out-sourced to a country where programming labor is less expensive. In spite of this trend, many software engineers still go through the entire process and do coding as well as design. </p><p><a href="/wiki/Computer_Programming" title="Computer Programming">Coding Wikibook</a> </p> <div class="mw-heading mw-heading2"><h2 id="Testing">Testing</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=19" title="Edit section: Testing" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=19" title="Edit section&#039;s source code: Testing"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The purpose of testing is not only to prove that the code performs in accordance with the design specifications, but to prove that it does not fail when subjected to undefined inputs. </p><p>There are several types of testing. <b>Unit testing</b> tests one module of code for correct inputs, outputs, and functionality. <b>System testing</b> tests all the modules of a software system together. <b>User acceptance testing</b> is a form of systems testing to see if not only the system works, but it meets the requirements of the business user. <b>Regression testing</b> is testing performed after a system change to make sure that all system features are still present after the change. </p><p>To perform systems and verifications testing, <b>Use cases</b> are developed. These cases describe a user action or a specific feature of the system. These cases are very useful during the construction phase of the system, and are usually specified as a deliverable of the design phase. The use cases are generally gathered into <i>test scripts</i> which describe testing activities in a reproducible way. These scripts may be executed manually by testers, or they may be executed by automated testing software. </p><p>Generally speaking, it is an accepted industry practice for system testing and validation to be performed by a separate person, team, or department, or in some cases, by an outside entity. Testing is considered a specialized skill, with a skill set that is very different from system development. It also is generally considered a bad practice for software developers to test their own systems, since they can form habits that do not exercise the system thoroughly, and because they can frequently test around system failures. </p><p>There are different kinds of testing such as white box testing or black box testing. </p> <div class="mw-heading mw-heading2"><h2 id="Documentation">Documentation</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=20" title="Edit section: Documentation" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=20" title="Edit section&#039;s source code: Documentation"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>An important (and often overlooked) task is documenting the internal design and external functionality of software for the purpose of future maintenance and enhancement. </p><p><a href="https://en.wikipedia.org/wiki/Software_documentation" class="extiw" title="w:Software documentation">Software documentation</a> is important. Without documentation, software can be unusable, because the end user does not know how to operate a program. Without documentation, an application can be incorrectly installed on a server, causing components to fail. Documentation is most important for external interfaces. </p><p>There are several means by which software can be documented, including flowcharts, deployment guides, user's manuals, and maintenance manuals. </p><p>Development team members may write their own documentation, or a professional technical writer may write or edit the documents for readability and style. </p><p>It's important to note that testing is or should be done during or at the end of every stage. If this is not done, inputs into the next stage can not be very complete. Documentation may also be sketchy or none existent. </p> <div class="mw-heading mw-heading2"><h2 id="Maintenance">Maintenance</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=21" title="Edit section: Maintenance" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=21" title="Edit section&#039;s source code: Maintenance"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Maintaining and enhancing software to cope with newly discovered problems or new requirements can take far more time than the initial development of the software. Not only may it be necessary to add code that does not fit the original design but just determining how software works at some point after it is completed may require significant effort by a software engineer. About 2/3 of all software engineering work is maintenance, but this statistic can be misleading. A small part of that is fixing bugs. Most maintenance is extending systems to do new things, which in many ways can be considered new work. Similarly, about 2/3 of all civil engineering, architecture, and construction work is maintenance in a similar way. </p> <div class="mw-heading mw-heading1"><h1 id="Applied_Software_Engineering">Applied Software Engineering</h1><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=22" title="Edit section: Applied Software Engineering" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=22" title="Edit section&#039;s source code: Applied Software Engineering"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The process of software engineering differs between different software types. Building a word processor has different requirements and design methods than building a 3D first person shooter. These sections cover the differences and unique properties of the different software types. </p> <div class="mw-heading mw-heading2"><h2 id="SE_on_Application_software">SE on Application software</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=23" title="Edit section: SE on Application software" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=23" title="Edit section&#039;s source code: SE on Application software"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading2"><h2 id="SE_on_Server_Software">SE on Server Software</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=24" title="Edit section: SE on Server Software" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=24" title="Edit section&#039;s source code: SE on Server Software"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Software engineering for server software is more complex then development for the desktop computers. A server is more complex, has more requirements and features than an ordinary, consumer system. Server software can have client-server as well as central architecture. Development and testing of server software is also different from the development and testing of the desktop software. Not every programming language is suitable for implementation of server software. In conclusion, SE on server software requires special methods and processes to successfully complete. </p><p>The main reason server software is more complex is that communication between 2 computers -- the server and the client -- is inherently more complex and prone to failure than communication between parts of a program running on a single computer. </p> <div class="mw-heading mw-heading2"><h2 id="SE_on_Simulations">SE on Simulations</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=25" title="Edit section: SE on Simulations" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=25" title="Edit section&#039;s source code: SE on Simulations"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading3"><h3 id="Scientific_and_engineering_simulations">Scientific and engineering simulations</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=26" title="Edit section: Scientific and engineering simulations" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=26" title="Edit section&#039;s source code: Scientific and engineering simulations"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading3"><h3 id="Games">Games</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=27" title="Edit section: Games" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=27" title="Edit section&#039;s source code: Games"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Designing software for gaming simulations can be quite challenging, since it requires a diverse background in software. For example, a game designer might have to write software that simulates physics as well as software that renders 3-dimensional images. However, many software engineers in the gaming industry are able to use 3rd party engines that make their job much easier. Nonetheless, they must follow the software engineering process closely, since small issues in the software can make the product fail in the consumer market. Writing software for games is a high-risk industry and only a small percentage of games are financially successful. </p> <div class="mw-heading mw-heading2"><h2 id="SE_on_Embedded_software">SE on Embedded software</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Software_Engineering&amp;veaction=edit&amp;section=28" title="Edit section: SE on Embedded software" class="mw-editsection-visualeditor"><span>edit</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Software_Engineering&amp;action=edit&amp;section=28" title="Edit section&#039;s source code: SE on Embedded software"><span>edit source</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Software engineers that work with embedded computer systems need more knowledge of hardware than most software engineers, since embedded systems typically introduce more constraints on memory availability and processing power than, say, gaming PCs. Designing software for embedded systems can indeed be challenging, since most embedded processors cannot handle the overhead produced by compiling high-level languages. This often forces software engineers to implement embedded software, at least partially, in assembly. </p></div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://en.wikibooks.org/w/index.php?title=Software_Engineering&amp;oldid=4385215">https://en.wikibooks.org/w/index.php?title=Software_Engineering&amp;oldid=4385215</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Special:Categories" title="Special:Categories">Categories</a>: <ul><li><a href="/wiki/Category:Book:Software_Engineering" title="Category:Book:Software Engineering">Book:Software Engineering</a></li><li><a href="/wiki/Category:Shelf:Software_engineering" title="Category:Shelf:Software engineering">Shelf:Software engineering</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Hidden categories: <ul><li><a href="/wiki/Category:Books_to_be_broken_into_subpages" title="Category:Books to be broken into subpages">Books to be broken into subpages</a></li><li><a href="/wiki/Category:Subject:Software_engineering" title="Category:Subject:Software engineering">Subject:Software engineering</a></li><li><a href="/wiki/Category:Subject:Software_engineering/all_books" title="Category:Subject:Software engineering/all books">Subject:Software engineering/all books</a></li><li><a href="/wiki/Category:Subject:Computer_science/all_books" title="Category:Subject:Computer science/all books">Subject:Computer science/all books</a></li><li><a href="/wiki/Category:Subject:Computing/all_books" title="Category:Subject:Computing/all books">Subject:Computing/all books</a></li><li><a href="/wiki/Category:Subject:Books_by_subject/all_books" title="Category:Subject:Books by subject/all books">Subject:Books by subject/all books</a></li><li><a href="/wiki/Category:Subject:Systems_engineering/all_books" title="Category:Subject:Systems engineering/all books">Subject:Systems engineering/all books</a></li><li><a href="/wiki/Category:Subject:Engineering/all_books" title="Category:Subject:Engineering/all books">Subject:Engineering/all books</a></li><li><a href="/wiki/Category:Book:Wikibooks_Stacks/Books" title="Category:Book:Wikibooks Stacks/Books">Book:Wikibooks Stacks/Books</a></li><li><a href="/wiki/Category:Shelf:Software_engineering/all_books" title="Category:Shelf:Software engineering/all books">Shelf:Software engineering/all books</a></li><li><a href="/wiki/Category:Shelf:Computer_science/all_books" title="Category:Shelf:Computer science/all books">Shelf:Computer science/all books</a></li><li><a href="/wiki/Category:Department:Computing/all_books" title="Category:Department:Computing/all books">Department:Computing/all books</a></li><li><a href="/wiki/Category:Department:Engineering/all_books" title="Category:Department:Engineering/all books">Department:Engineering/all books</a></li><li><a href="/wiki/Category:Shelf:Systems_engineering/all_books" title="Category:Shelf:Systems engineering/all books">Shelf:Systems engineering/all books</a></li><li><a href="/wiki/Category:Alphabetical/S" title="Category:Alphabetical/S">Alphabetical/S</a></li><li><a href="/wiki/Category:Freshly_started_books" title="Category:Freshly started books">Freshly started books</a></li><li><a href="/wiki/Category:Books_by_completion_status/all_books" title="Category:Books by completion status/all books">Books by completion status/all books</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 1 April 2024, at 13:32.</li> <li id="footer-info-copyright">Text is available under the <a rel="nofollow" class="external text" href="//creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike License</a>; additional terms may apply. By using this site, you agree to the <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use">Terms of Use</a> and <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy Policy.</a></li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Wikibooks:Welcome">About Wikibooks</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikibooks:General_disclaimer">Disclaimers</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/en.wikibooks.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//en.m.wikibooks.org/w/index.php?title=Software_Engineering&amp;mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-6df7948d6c-4x9f2","wgBackendResponseTime":161,"wgPageParseReport":{"limitreport":{"cputime":"0.189","walltime":"0.348","ppvisitednodes":{"value":1972,"limit":1000000},"postexpandincludesize":{"value":24853,"limit":2097152},"templateargumentsize":{"value":5911,"limit":2097152},"expansiondepth":{"value":30,"limit":100},"expensivefunctioncount":{"value":0,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":0,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 313.750 1 -total"," 87.83% 275.556 1 Template:Shelves"," 35.46% 111.248 1 Template:Subjects/leaf"," 34.59% 108.514 1 Template:Subjects/0"," 20.96% 65.750 4 Template:Subjects/1"," 18.16% 56.979 14 Template:Parsable"," 17.06% 53.533 1 Template:Shelf:Map"," 14.62% 45.882 15 Template:Evalx"," 13.63% 42.765 4 Template:Subjects/2"," 13.16% 41.303 7 Template:Subjects/allbooks"]},"scribunto":{"limitreport-timeusage":{"value":"0.126","limit":"10.000"},"limitreport-memusage":{"value":1610036,"limit":52428800}},"cachereport":{"origin":"mw-web.eqiad.main-5dc468848-xkjqr","timestamp":"20241123211559","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Software Engineering","url":"https:\/\/en.wikibooks.org\/wiki\/Software_Engineering","sameAs":"http:\/\/www.wikidata.org\/entity\/Q80993","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q80993","author":{"@type":"Organization","name":"Contributors to Wikimedia projects"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2005-07-01T08:23:57Z","headline":"application on systematic approaches to developing software"}</script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10