software development for other uses see software development disambiguation 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 development is the process of conceiving specifying designing programming documenting testing and bug fixing involved in creating and maintaining applications frameworks or other software components software development is a process of writing and maintaining the source code but in a broader sense it includes all that is involved between the conception of the desired software through to the final manifestation of the software sometimes in a planned and structured process software can be developed for a variety of purposes the three most common being to meet specific needs of a specific clientbusiness the case with custom software to meet a perceived need of some set of potential users the case with commercial and open source software or for personal use eg a scientist may write software to automate a mundane task embedded software development that is the development of embedded software such as used for controlling consumer products requires the development process to be integrated with the development of the controlled physical product system software underlies applications and the programming process itself and is often developed separately the need for better quality control of the software development process has given rise to the discipline of software engineering which aims to apply the systematic approach exemplified in the engineering paradigm to the process of software development there are many approaches to software project management known as software development life cycle models methodologies processes or models the waterfall model is a traditional version contrasted with the more recent innovation of agile software development methodologies a software development process also known as a software development methodology model or life cycle is a framework that is used to structure plan and control the process of developing information systems a wide variety of such frameworks has evolved over the years each with its own recognized strengths and weaknesses there are several different approaches to software development some take a more structured engineeringbased approach to developing business solutions whereas others may take a more incremental approach where software evolves as it is developed piecebypiece one system development methodology is not necessarily suitable for use by all projects each of the available methodologies is best suited to specific kinds of projects based on various technical organizational project and team considerations most methodologies share some combination of the following stages of software development analyzing the problem market research gathering requirements for the proposed business solution devising a plan or design for the softwarebased solution implementation coding of the software testing the software deployment maintenance and bug fixing these stages are often referred to collectively as the software development lifecycle or sdlc different approaches to software development may carry out these stages in different orders or devote more or less time to different stages the level of detail of the documentation produced at each stage of software development may also vary these stages may also be carried out in turn a waterfall based approach or they may be repeated over various cycles or iterations a more extreme approach the more extreme approach usually involves less time spent on planning and documentation and more time spent on coding and development of automated tests more extreme approaches also promote continuous testing throughout the development lifecycle as well as having a working or bugfree product at all times more structured or waterfall based approaches attempt to assess the majority of risks and develop a detailed plan for the software before implementation coding begins and avoid significant design changes and recoding in later stages of the software development lifecycle planning there are significant advantages and disadvantages to the various methodologies and the best approach to solving a problem using software will often depend on the type of problem if the problem is well understood and a solution can be effectively planned out ahead of time the more waterfall based approach may work the best if on the other hand the problem is unique at least to the development team and the structure of the software solution cannot be easily envisioned then a more extreme incremental approach may work best software development activities identification of need the sources of ideas for software products are plentiful these ideas can come from market research including the demographics of potential new customers existing customers sales prospects who rejected the product other internal software development staff or a creative third party ideas for software products are usually first evaluated by marketing personnel for economic feasibility for fit with existing channels distribution for possible effects on existing product lines required features and for fit with the companys marketing objectives in a marketing evaluation phase the cost and time assumptions become evaluated a decision is reached early in the first phase as to whether based on the more detailed information generated by the marketing and development staff the project should be pursued further in the book great software debates alan m davis states in the chapter requirements subchapter the missing piece of software development students of engineering learn engineering and are rarely exposed to finance or marketing students of marketing learn marketing and are rarely exposed to finance or engineering most of us become specialists in just one area to complicate matters few of us meet interdisciplinary people in the workforce so there are few roles to mimic yet software product planning is critical to the development success and absolutely requires knowledge of multiple disciplines because software development may involve compromising or going beyond what is required by the client a software development project may stray into less technical concerns such as human resources risk management intellectual property budgeting crisis management etc these processes may also cause the role of business development to overlap with software development planning planning is an objective of each and every activity where we want to discover things that belong to the project an important task in creating a software program is extracting the requirements or requirements analysis customers typically have an abstract idea of what they want as an end result but do not know what software should do skilled and experienced software engineers recognize incomplete ambiguous or even contradictory requirements at this point frequently demonstrating live code may help reduce the risk that the requirements are incorrect although much effort is put in the requirements phase to ensure that requirements are complete and consistent rarely that is the case leaving the software design phase as the most influential one when it comes to minimizing the effects of new or changing requirements requirements volatility is challenging because they impact future or already going development efforts once the general requirements are gathered from the client an analysis of the scope of the development should be determined and clearly stated this is often called a scope document designing software design and systems design once the requirements are established the design of the software can be established in a software design document this involves a preliminary or highlevel design of the main modules with an overall picture such as a block diagram of how the parts fit together the language operating system and hardware components should all be known at this time then a detailed or lowlevel design is created perhaps with prototyping as proofofconcept or to firm up requirements implementation testing and documenting implementation is the part of the process where software engineers actually program the code for the project software testing is an integral and important phase of the software development process this part of the process ensures that defects are recognized as soon as possible in some processes generally known as testdriven development tests may be developed just before implementation and serve as a guide for the implementations correctness documenting the internal design of software for the purpose of future maintenance and enhancement is done throughout development this may also include the writing of an api be it external or internal the software engineering process chosen by the developing team will determine how much internal documentation if any is necessary plandriven models eg waterfall generally produce more documentation than agile models deployment and maintenance deployment starts directly after the code is appropriately tested approved for release and sold or otherwise distributed into a production environment this may involve installation customization such as by setting parameters to the customers values testing and possibly an extended period of evaluation software training and support is important as software is only effective if it is used correctly maintaining and enhancing software to cope with newly discovered faults or requirements can take substantial time and effort as missed requirements may force redesign of the software subtopics view model the teaf matrix of views and perspectives a view model is a framework that provides the viewpoints on the system and its environment to be used in the software development process it is a graphical representation of the underlying semantics of a view the purpose of viewpoints and views is to enable human engineers to comprehend very complex systems and to organize the elements of the problem and the solution around domains of expertise in the engineering of physically intensive systems viewpoints often correspond to capabilities and responsibilities within the engineering organization most complex system specifications are so extensive that no one individual can fully comprehend all aspects of the specifications furthermore we all have different interests in a given system and different reasons for examining the systems specifications a business executive will ask different questions of a system makeup than would a system implementer the concept of viewpoints framework therefore is to provide separate viewpoints into the specification of a given complex system these viewpoints each satisfy an audience with interest in some set of aspects of the system associated with each viewpoint is a viewpoint language that optimizes the vocabulary and presentation for the audience of that viewpoint business process and data modelling graphical representation of the current state of information provides a very effective means for presenting information to both users and system developers example of the interaction between business process and data models a business model illustrates the functions associated with the business process being modeled and the organizations that perform these functions by depicting activities and information flows a foundation is created to visualize define understand and validate the nature of a process a data model provides the details of information to be stored and is of primary use when the final product is the generation of computer software code for an application or the preparation of a functional specification to aid a computer software makeorbuy decision see the figure on the right for an example of the interaction between business process and data models usually a model is created after conducting an interview referred to as business analysis the interview consists of a facilitator asking a series of questions designed to extract required information that describes a process the interviewer is called a facilitator to emphasize that it is the participants who provide the information the facilitator should have some knowledge of the process of interest but this is not as important as having a structured methodology by which the questions are asked of the process expert the methodology is important because usually a team of facilitators is collecting information across the facility and the results of the information from all the interviewers must fit together once completed the models are developed as defining either the current state of the process in which case the final product is called the asis snapshot model or a collection of ideas of what the process should contain resulting in a whatcanbe model generation of process and data models can be used to determine if the existing processes and information systems are sound and only need minor modifications or enhancements or if reengineering is required as a corrective action the creation of business models is more than a way to view or automate your information process analysis can be used to fundamentally reshape the way your business or organization conducts its operations computeraided software engineering computeraided software engineering case in the field software engineering is the scientific application of a set of software tools and methods to the development of software which results in highquality defectfree and maintainable software products two key ideas of computeraided software system engineering case are foster computer assistance in software development and software maintenance processes and an engineering approach to software development and maintenance typical case tools exist for configuration management data modeling model transformation refactoring source code generation integrated development environment anjuta a c and c ide for the gnome environment an integrated development environment ide also known as integrated design environment or integrated debugging environment is a software application that provides comprehensive facilities to computer programmers for software development an ide normally consists of a source code editor compiler or interpreter build automation tools and debugger usually ides are designed to maximize programmer productivity by providing tightknit components with similar user interfaces typically an ide is dedicated to a specific programming language so as to provide a feature set which most closely matches the programming paradigms of the language modeling language a modeling language is any artificial language that can be used to express information or knowledge or systems in a structure that is defined by a consistent set of rules the rules are used for interpretation of the meaning of components in the structure a modeling language can be graphical or textual graphical modeling languages use a diagram techniques with named symbols that represent concepts and lines that connect the symbols and that represent relationships and various other graphical annotation to represent constraints textual modeling languages typically use standardised keywords accompanied by parameters to make computerinterpretable expressions examples of graphical modelling languages in the field of software engineering are business process modeling notation bpmn and the xml form bpml is an example of a process modeling language express and expressg iso 1030311 is an international standard generalpurpose data modeling language extended enterprise modeling language eeml is commonly used for business process modeling across layers flowchart is a schematic representation of an algorithm or a stepwise process fundamental modeling concepts fmc modeling language for softwareintensive systems idef is a family of modeling languages the most notable of which include idef0 for functional modeling idef1x for information modeling and idef5 for modeling ontologies lepus3 is an objectoriented visual design description language and a formal specification language that is suitable primarily for modelling large objectoriented java c c programs and design patterns specification and description languagesdl is a specification language targeted at the unambiguous specification and description of the behaviour of reactive and distributed systems unified modeling language uml is a generalpurpose modeling language that is an industry standard for specifying softwareintensive systems uml 20 the current version supports thirteen different diagram techniques and has widespread tool support not all modeling languages are executable and for those that are using them doesnt necessarily mean that programmers are no longer needed on the contrary executable modeling languages are intended to amplify the productivity of skilled programmers so that they can address more difficult problems such as parallel computing and distributed systems programming paradigm a programming paradigm is a fundamental style of computer programming which is not generally dictated by the project management methodology such as waterfall or agile paradigms differ in the concepts and abstractions used to represent the elements of a program such as objects functions variables constraints and the steps that comprise a computation such as assignations evaluation continuations data flows sometimes the concepts asserted by the paradigm are utilized cooperatively in highlevel system architecture design in other cases the programming paradigms scope is limited to the internal structure of a particular program or module a programming language can support multiple paradigms for example programs written in c or object pascal can be purely procedural or purely objectoriented or contain elements of both paradigms software designers and programmers decide how to use those paradigm elements in objectoriented programming programmers can think of a program as a collection of interacting objects while in functional programming a program can be thought of as a sequence of stateless function evaluations when programming computers or systems with many processors processoriented programming allows programmers to think about applications as sets of concurrent processes acting upon logically shared data structures just as different groups in software engineering advocate different methodologies different programming languages advocate different programming paradigms some languages are designed to support one paradigm smalltalk supports objectoriented programming haskell supports functional programming while other programming languages support multiple paradigms such as object pascal c c visual basic common lisp scheme python ruby and oz many programming paradigms are as well known for what methods they forbid as for what they enable for instance pure functional programming forbids using sideeffects structured programming forbids using goto statements partly for this reason new paradigms are often regarded as doctrinaire or overly rigid by those accustomed to earlier styles avoiding certain methods can make it easier to prove theorems about a programs correctness or simply to understand its behavior examples of highlevel paradigms include aspectoriented software development domainspecific modeling modeldriven engineering objectoriented programming methodologies grady boochs objectoriented design ood also known as objectoriented analysis and design ooad the booch model includes six diagrams class object state transition interaction module and process searchbased software engineering serviceoriented modeling structured programming topdown and bottomup design topdown programming evolved in the 1970s by ibm researcher harlan mills and niklaus wirth in developed structured programming reuse of solutions this section may need to be rewritten entirely to comply with wikipedias quality standards you can help the discussion page may contain suggestions may 2016 a software framework is a reusable design or implementation for a software system or subsystem existing components componentbased software engineering can be reused assembled together to create a larger application api application programming interface web service establish a set of subroutine definitions protocols and tools for building application software which can be utilized in future builds open source documentations via libraries such as github provide free code for software developers to reuse and implement into new applications or designs continuous integration custom software devops functional specification programming productivity software blueprint software design software development effort estimation software development process software project management specification and description language user experience software industry roles and industry bachelor of science in information technology computer programmer consulting software engineer offshore software development software developer software engineer software publisher specific applications video game development web application development web engineering mobile application development wikimedia commons has media related to software development kit edward 1992 software testing in the real world addisonwesley professional isbn0201877562 mccarthy jim 1995 dynamics of software development microsoft press isbn1556158238 conde dan 2002 software product management managing software development from idea to product to marketing to sales aspatore books isbn1587622025 davis a m 2005 just enough requirements management where software development meets marketing dorset house publishing company incorporated isbn0932633641 hasted edward 2005 software that sells a practical guide to developing and marketing your software project wiley publishing isbn0764597833 hohmann luke 2003 beyond software architecture creating and sustaining winning solutions addisonwesley professional isbn0201775948 john w horch 2005 two orientations on how to work with objects in ieee software vol 12 no 2 pp117118 mar 1995 rittinghouse john 2003 managing software deliverables a software development management methodology digital press isbn155558313x wiegers karl e 2005 more about software requirements thorny issues and practical advice microsoft press isbn0735622671 wysocki robert k 2006 effective software project management wiley isbn0764596365 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 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 xx732797 ndl 00679589 