software engineering software development core activities processes requirements design engineering construction testing debugging deployment maintenance paradigms and models agile cleanroom incremental prototyping spiral v model waterfall methodologies and frameworks asd devops dad dsdm fdd iid kanban lean sd less mdd msf psp rad rup safe scrum semat tsp up xp supporting disciplines configuration management documentation software quality assurance sqa project management user experience practices atdd bdd cco ci cd ddd pp standup tdd tools compiler debugger profiler gui designer modeling ide build automation release automation infrastructure as code testing standards and bodies of knowledge babok cmmi ieee standards iso 9001 isoiec standards pmbok swebok itil glossaries artificial intelligence computer science electrical and electronics engineering vte software engineering is the application of engineering to the development of software in a systematic method definitions notable definitions of software engineering include the systematic application of scientific and technological knowledge methods and experience to the design implementation testing and documentation of softwarethe bureau of labor statisticsieee systems and software engineering vocabulary the application of a systematic disciplined quantifiable approach to the development operation and maintenance of softwareieee standard glossary of software engineering terminology an engineering discipline that is concerned with all aspects of software productionian sommerville the establishment and use of sound engineering principles in order to economically obtain software that is reliable and works efficiently on real machinesfritz bauer the term has also been used less formally as the informal contemporary term for the broad range of activities that were formerly called computer programming and systems analysis as the broad term for all aspects of the practice of computer programming as opposed to the theory of computer programming which is called computer science as the term embodying the advocacy of a specific approach to computer programming one that urges that it be treated as an engineering discipline rather than an art or a craft and advocates the codification of recommended practices history history of software engineering when the first digital computers appeared in the early 1940s the instructions to make them operate were wired into the machine practitioners quickly realized that this design was not flexible and came up with the stored program architecture or von neumann architecture thus the division between hardware and software began with abstraction being used to deal with the complexity of computing programming languages started to appear in the early 1950s to help programmers deal with the everincreasing complexity of software systems the origins of the term software engineering have been attributed to various sources the term software engineering appeared in a list of services offered by companies in the june 1965 issue of computers and automation and was used more formally in the august 1966 issue of communications of the acm volume 9 number 8 letter to the acm membership by the acm president anthony a oettinger in 1984 the software engineering institute sei was established as a federally funded research and development center headquartered on the campus of carnegie mellon university in pittsburgh pennsylvania united states watts humphrey founded the sei software process program aimed at understanding and managing the software engineering process the process maturity levels introduced would become the capability maturity model integration for developmentcmmidev which has defined how the us government evaluates the abilities of a software development team modern generally accepted bestpractices for software engineering have been collected by the isoiec jtc 1sc 7 subcommittee and published as the software engineering body of knowledge swebok subdisciplines software engineering can be divided into subdisciplines some of them are software requirements or requirements engineering the elicitation analysis specification and validation of requirements for software software design the process of defining the architecture components interfaces and other characteristics of a system or component it is also defined as the result of that process software construction the detailed creation of working meaningful software through a combination of programming aka coding verification unit testing integration testing and debugging software testing an empirical technical investigation conducted to provide stakeholders with information about the quality of the product or service under test software maintenance the totality of activities required to provide costeffective support to software software configuration management the identification of the configuration of a system at distinct points in time for the purpose of systematically controlling changes to the configuration and maintaining the integrity and traceability of the configuration throughout the system life cycle modern processes use software versioning software engineering management the application of management activitiesplanning coordinating measuring monitoring controlling and reportingto ensure that the development and maintenance of software is systematic disciplined and quantified software development process the definition implementation assessment measurement management change and improvement of the software life cycle process itself software engineering models and methods impose structure on software engineering with the goal of making that activity systematic repeatable and ultimately more successoriented software quality software engineering professional practice is concerned with the knowledge skills and attitudes that software engineers must possess to practice software engineering in a professional responsible and ethical manner software engineering economics is about making decisions related to software engineering in a business context computing foundations mathematical foundations engineering foundations education knowledge of computer programming is a prerequisite for becoming a software engineer in 2004 the ieee computer society produced the swebok which has been published as isoiec technical report 19792004 describing the body of knowledge that they recommend to be mastered by a graduate software engineer with four years of experience many software engineers enter the profession by obtaining a university degree or training at a vocational school one standard international curriculum for undergraduate software engineering degrees was defined by the joint task force on computing curricula of the ieee computer society and the association for computing machinery and updated in 2014 in addition to university education many companies sponsor internships for students wishing to pursue careers in information technology these internships can introduce the student to interesting realworld tasks that typical software engineers encounter every day similar experience can be gained through military service in software engineering profession software engineer and software engineering professionalism legal requirements for the licensing or certification of professional software engineers vary around the world in the uk there is no licensing or legal requirement to assume or use the job title software engineer in some areas of canada such as alberta british columbia ontario and quebec software engineers can hold the professional engineer peng designation andor the information systems professional isp designation in europe software engineers can obtain the european engineer eur ing professional title the united states since 2013 has offered an ncees professional engineer exam for software engineering thereby allowing software engineers to be licensed and recognized mandatory licensing is currently still largely debated and perceived as controversial in some parts of the us such as texas the use of the term engineer is regulated by law and reserved only for use by individuals who have a professional engineer license the ieee computer society and the acm the two main usbased professional organizations of software engineering publish guides to the profession of software engineering the ieees guide to the software engineering body of knowledge 2004 version or swebok defines the field and describes the knowledge the ieee expects a practicing software engineer to have the most current swebok v3 is an updated version and was released in 2014 employment the u s bureau of labor statistics counted 1256200 software developers engineers holding jobs in the us in 2016 many software engineers work as employees or contractors software engineers work with businesses government agencies civilian or military and nonprofit organizations some software engineers work for themselves as freelancers some organizations have specialists to perform each of the tasks in the software development process other organizations require software engineers to do many or all of them in large projects people may specialize in only one role in small projects people may fill several or all roles at the same time specializations include in industry analysts architects developers testers technical support middleware analysts managers and in academia educators researchers most software engineers and programmers work 40 hours a week but about 15 percent of software engineers and 11 percent of programmers worked more than 50 hours a week in 2008 potential injuries in these occupations are possible because like other workers who spend long periods sitting in front of a computer terminal typing at a keyboard engineers and programmers are susceptible to eyestrain back discomfort and hand and wrist problems such as carpal tunnel syndrome certification the software engineering institute offers certifications on specific topics like security process improvement and software architecture these certification programs are tailored to the institutions that would employ people who use these technologies broader certification of general software engineering skills is available through various professional societies as of 2006 in the uk the british computer society has developed a legally recognized professional certification called chartered it professional citp available to fully qualified members mbcs software engineers may be eligible for membership of the institution of engineering and technology and so qualify for chartered engineer status in canada the canadian information processing society has developed a legally recognized professional certification called information systems professional isp the peo does not recognize any online or distance education however and does not consider computer science programs to be equivalent to software engineering programs despite the tremendous overlap between the two this has sparked controversy and a certification war it has also held the number of peng holders for the profession exceptionally low the vast majority of working professionals in the field hold a degree in cs not se given the difficult certification path for holders of nonse degrees most never bother to pursue the license impact of globalization the initial impact of outsourcing and the relatively lower cost of international human resources in developing third world countries led to a massive migration of software development activities from corporations in north america and europe to india and later china russia and other developing countries this approach had some flaws mainly the distance timezone difference that prevented human interaction between clients and developers and the massive job transfer this had a negative impact on many aspects of the software engineering profession for example some students in the developed world avoid education related to software engineering because of the fear of offshore outsourcing importing software products or services from other countries and of being displaced by foreign visa workers when north americans are leaving work asians are just arriving to work when asians are leaving work europeans are arriving to work this provides a continuous ability to have human oversight on businesscritical processes 24 hours per day without paying overtime compensation or disrupting a key human resource sleep patterns while global outsourcing has several advantages global and generally distributed development can run into serious difficulties resulting from the distance between developers this is due to the key elements of this type of distance that have been identified as geographical temporal cultural and communication that includes the use of different languages and dialects of english in different locations research has been carried out in the area of global software development over the last 15 years and an extensive body of relevant work published that highlights the benefits and problems associated with the complex activity as with other aspects of software engineering research is ongoing in this and related areas related fields software engineering is a direct subfield of engineering and has an overlap with computer science and management science it is also considered a part of overall systems engineering computer science in general software engineering focuses more on techniques for the application of software development in industry controversy criticism software engineering sees its practitioners as individuals who follow welldefined engineering approaches to problemsolving these approaches are specified in various software engineering books and research papers always with the connotations of predictability precision mitigated risk and professionalism this perspective has led to calls for licensing certification and codified bodies of knowledge as mechanisms for spreading the engineering knowledge and maturing the field software craftsmanship has been proposed by a body of software developers as an alternative that emphasizes the coding skills and accountability of the software developers themselves without professionalism or any prescribed curriculum leading to adhoc problemsolving craftmanship without engineering lack of predictability precision missing risk mitigation methods are informal and poorly defined the software craftsmanship manifesto extends the agile software manifesto and draws a metaphor between modern software development and the apprenticeship model of medieval europe software engineering extends engineering and draws on the engineering model ie engineering process engineering project management engineering requirements engineering design engineering construction and engineering validation the concept is so new that it is rarely understood and it is widely misinterpreted including in software engineering textbooks papers and among the communities of programmers and crafters one of the core issues in software engineering is that its approaches are not empirical enough because a realworld validation of approaches is usually absent or very limited and hence software engineering is often misinterpreted as feasible only in a theoretical environment edsger dijkstra the founder of many of the concepts used within software development today rejected the idea of software engineering up until his death in 2002 arguing that those terms were poor analogies for what he called the radical novelty of computer science mwparseroutput templatequoteoverflowhiddenmargin1em 0padding0 40pxmwparseroutput templatequote templatequotecitelineheight15emtextalignleftpaddingleft16emmargintop0 a number of these phenomena have been bundled under the name software engineering as economics is known as the miserable science software engineering should be known as the doomed discipline doomed because it cannot even approach its goal since its goal is selfcontradictory software engineering of course presents itself as another worthy cause but that is eyewash if you carefully read its literature and analyse what its devotees actually do you will discover that software engineering has accepted as its charter how to program if you cannot software portal software testing portal outline of software engineering bachelor of science in information technology bachelor of software engineering list of software engineering conferences list of software engineering publications software craftsmanship software engineering institute notes abran alain moore james w bourque pierre dupuis robert tripp leonard l 2004 guide to the software engineering body of knowledge ieee isbn0769523307 sommerville ian 2008 software engineering 7 ed pearson education isbn9788177585308 retrieved 10 january 2013 pressman roger s 2009 software engineering a practitioners approach 7th ed boston mass mcgrawhill isbn9780073375977 sommerville ian 2010 software engineering 9th ed harlow england pearson education isbn9780137035151 jalote pankaj 2005 an integrated approach to software engineering 3rd ed springer isbn038720881x bruegge bernd dutoit allen 2009 objectoriented software engineering using uml patterns and java 3rd ed prentice hall isbn9780136061250 wikimedia commons has media related to software engineering guide to the software engineering body of knowledge the open systems engineering and software development life cycle framework opensdlcorg the integrated creative commons sdlc software engineering institute carnegie mellon vtesoftware engineeringfields computer programming requirements engineering software deployment software design software maintenance software testing systems analysis formal methods concepts data modeling enterprise architecture functional specification modeling language orthogonality programming paradigm software software archaeology software architecture software configuration management software development methodology software development process software quality software quality assurance software verification and validation structured analysis orientations agile aspectoriented object orientation ontology service orientation sdlc modelsdevelopmental agile eup executable uml incremental model iterative model prototype model rad up scrum spiral model vmodel waterfall model xp other spice cmmi data model er model function model information model metamodeling object model systems model view model languages idef uml usl sysml softwareengineers victor basili kent beck grady booch fred brooks barry boehm peter chen danese cooper ward cunningham tom demarco edsger w dijkstra delores m etter martin fowler adele goldstine margaret hamilton c a r hoare lois haibt mary jean harrold grace hopper watts humphrey michael a jackson ivar jacobson alan kay nancy leveson stephen j mellor bertrand meyer david parnas trygve reenskaug winston w royce james rumbaugh mary shaw peri tarr elaine weyuker niklaus wirth edward yourdon related fields computer science computer engineering project management risk management systems engineering category commons vtesystems engineeringsubfields aerospace engineering biological systems engineering configuration management earth systems engineering and management electrical engineering enterprise systems engineering performance engineering reliability engineering safety engineering processes requirements engineering functional specification system integration verification and validation design review concepts business process system system lifecycle vmodel systems development life cycle tools decisionmaking function modelling idef optimization quality function deployment system dynamics systems modeling language systems analysis systems modeling work breakdown structure people james s albus ruzena bajcsy benjamin s blanchard wernher von braun kathleen carley harold chestnut wolt fabrycky barbara grosz arthur david hall iii derek hitchins robert e machol radhika nagpal simon ramo joseph francis shea katia sycara manuela m veloso john n warfield related fields control engineering computer engineering industrial engineering operations research project management quality management risk management software engineering category vteengineeringcivil architectural construction environmental earthquake geotechnical hydraulic mining structural transportation mechanical acoustical aerospace automotive marine mechatronics railway thermal electrical computer control electromechanics electronics microwaves power radio frequency telecommunications chemical biochemical biological molecular petroleum process reaction thermodynamics transport phenomena interdisciplinary audio biomedical ceramics engineering mathematics engineering mechanics engineering physics engineering science fire industrial information materials science metallurgy military nanotechnology nuclear optical photonics privacy robotics security systems glossaries engineering aerospace engineering civil engineering electrical and electronics engineering mechanical engineering structural engineering list of engineering branches categoryengineering engineering portal vtemajor fields of computer sciencenote this template roughly follows the 2012 acm computing classification systemhardware printed circuit board peripheral integrated circuit very large scale integration systems on chip socs energy consumption green computing electronic design automation hardware acceleration computer systemsorganization computer architecture embedded system realtime computing dependability networks network architecture network protocol network components network scheduler network performance evaluation network service software organization interpreter middleware virtual machine operating system software quality software notationsand tools programming paradigm programming language compiler domainspecific language modeling language software framework integrated development environment software configuration management software library software repository software development software development process requirements analysis software design software construction software deployment software maintenance programming team opensource model theory of computation model of computation formal language automata theory computational complexity theory logic semantics algorithms algorithm design analysis of algorithms algorithmic efficiency randomized algorithm computational geometry mathematicsof computing discrete mathematics probability statistics mathematical software information theory mathematical analysis numerical analysis informationsystems database management system information storage systems enterprise information system social information systems geographic information system decision support system process control system multimedia information system data mining digital library computing platform digital marketing world wide web information retrieval security cryptography formal methods security services intrusion detection system hardware security network security information security application security humancomputerinteraction interaction design social computing ubiquitous computing visualization accessibility concurrency concurrent computing parallel computing distributed computing multithreading multiprocessing artificialintelligence natural language processing knowledge representation and reasoning computer vision automated planning and scheduling search methodology control method philosophy of artificial intelligence distributed artificial intelligence machine learning supervised learning unsupervised learning reinforcement learning multitask learning crossvalidation graphics animation rendering image manipulation graphics processing unit mixed reality virtual reality image compression solid modeling appliedcomputing ecommerce enterprise software computational mathematics computational physics computational chemistry computational biology computational social science computational engineering computational healthcare digital art electronic publishing cyberwarfare electronic voting video games word processing operations research educational technology document management book category portal wikiproject commons authority control bne xx541523 bnf cb11966616k data gnd 41165214 lccn sh87007398 ndl 01014113 