programming tool 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 a programming tool or software development tool is a computer program that software developers use to create debug maintain or otherwise support other programs and applications the term usually refers to relatively simple programs that can be combined together to accomplish a task much as one might use multiple hand tools to fix a physical object the most basic tools are a source code editor and a compiler or interpreter which are used ubiquitously and continuously other tools are used more or less depending on the language development methodology and individual engineer and are often used for a discrete task like a debugger or profiler tools may be discrete programs executed separately often from the command line or may be parts of a single large program called an integrated development environment ide in many cases particularly for simpler use simple ad hoc techniques are used instead of a tool such as print debugging instead of using a debugger manual timing of overall program or section of code instead of a profiler or tracking bugs in a text file or spreadsheet instead of a bug tracking system the distinction between tools and applications is murky for example developers use simple databases such as a file containing a list of important values all the time as tools however a fullblown database is usually thought of as an application or software in its own right for many years computerassisted software engineering case tools were sought after successful tools have proven elusivein one sense case tools emphasized design and architecture support such as for uml but the most successful of these tools are ides uses of programming tools translating from human to computer language modern computers are very complex and in order to productively program them various abstractions are needed for example rather than writing down a programs binary representation a programmer will write a program in a programming language like c java or python programming tools like assemblers compilers and linkers translate a program from a human writeable and readable source language into the bits and bytes that can be executed by a computer interpreters interpret the program on the fly to produce the desired behaviour these programs perform many well defined and repetitive tasks that would nonetheless be time consuming and errorprone when performed by a human like laying out parts of a program in memory and fixing up the references between parts of a program as a linker does optimizing compilers on the other hand can perform complex transformations on the source code in order to improve the execution speed or other characteristics of a program this allows a programmer to focus more on higher level conceptual aspects of a program without worrying about the details of the machine it is running on making program information available for humans because of the high complexity of software it is not possible to understand most programs at a single glance even for the most experienced software developer the abstractions provided by highlevel programming languages also make it harder to understand the connection between the source code written by a programmer and the actual programs behaviour in order to find bugs in programs and to prevent creating new bugs when extending a program a software developer uses some programming tools to visualize all kinds of information about programs for example a debugger allows a programmer to extract information about a running program in terms of the source language used to program it the debugger can compute the value of a variable in the source program from the state of the concrete machine by using information stored by the compiler memory debuggers can directly point out questionable or outright wrong memory accesses of running programs which may otherwise remain undetected and are a common source of program failures list of tools software tools come in many forms binary compatibility analysis tools bug databases comparison of issue tracking systems including bug tracking systems build tools build automation list of build automation software call graph code coverage code coveragesoftware code coverage tools code review list of tools for code review code sharing sites freshmeat krugle sourceforge github see also code search engines compilation and linking tools gnu toolchain gcc microsoft visual studio codewarrior xcode icc debuggers debuggerlist of debuggers see also debugging disassemblers generally reverseengineering tools documentation generators comparison of documentation generators help2man plain old documentation asciidoc formal methods mathematical techniques for specification development and verification gui interface generators library interface generators swig integration tools memory debuggers are frequently used in programming languages such as c and c that allow manual memory management and thus the possibility of memory leaks and other problems they are also useful to optimize efficiency of memory usage examples dmalloc electric fence insure valgrind parser generators parsingparser development software performance analysis or profiling list of performance analysis tool revision control list of revision control software comparison of revision control software scripting languages php awk perl python rexx ruby shell tcl search grep find source code clonesduplications finding duplicate codetools source code editor text editors list of text editors comparison of text editors source code formatting indent source code generation tools automatic programmingimplementations static code analysis lint list of tools for static code analysis unit testing list of unit testing frameworks ides integrated development environments combine the features of many tools into one package they for example make it easier to do specific tasks such as searching for content only in files in a particular project ides may for example be used for development of enterpriselevel applications different aspects of ides for specific programming languages can be found in this comparison of integrated development environments computer aided software engineering tools computer science configuration system scripting language software development kit software engineering and list of software engineering topics software systems toolkits for user innovation mwparseroutput refbeginfontsize90marginbottom05emmwparseroutput refbeginhangingindentsulliststyletypenonemarginleft0mwparseroutput refbeginhangingindentsullimwparseroutput refbeginhangingindentsdlddmarginleft0paddingleft32emtextindent32emliststylenonemwparseroutput refbegin100fontsize100 software development tools for petascale computing workshop 2007 kernighan brian w plauger p j 1976 software tools addisonwesley p352 isbn020103669xmwparseroutput citecitationfontstyleinheritmwparseroutput qquotesmwparseroutput codecs1codecolorinheritbackgroundinheritborderinheritpaddinginheritmwparseroutput cs1lockfree abackgroundurluploadwikimediaorgwikipediacommonsthumb665lockgreensvg9pxlockgreensvgpngnorepeatbackgroundpositionright 1em centermwparseroutput cs1locklimited amwparseroutput cs1lockregistration abackgroundurluploadwikimediaorgwikipediacommonsthumbdd6lockgrayalt2svg9pxlockgrayalt2svgpngnorepeatbackgroundpositionright 1em centermwparseroutput cs1locksubscription abackgroundurluploadwikimediaorgwikipediacommonsthumbaaalockredalt2svg9pxlockredalt2svgpngnorepeatbackgroundpositionright 1em centermwparseroutput cs1subscriptionmwparseroutput cs1registrationcolor555mwparseroutput cs1subscription spanmwparseroutput cs1registration spanborderbottom1px dottedcursorhelpmwparseroutput cs1hiddenerrordisplaynonefontsize100mwparseroutput cs1visibleerrorfontsize100mwparseroutput cs1subscriptionmwparseroutput cs1registrationmwparseroutput cs1formatfontsize95mwparseroutput cs1kernleftmwparseroutput cs1kernwlleftpaddingleft02emmwparseroutput cs1kernrightmwparseroutput cs1kernwlrightpaddingright02em media related to programming tools at wikimedia commons authority control gnd 41165263 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 