A programming tool or software development tool is a
computer program
A computer program is a sequence or set of instructions in a programming language for a computer to execute. Computer programs are one component of software, which also includes documentation and other intangible components.
A computer progra ...
that
software developer
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 inv ...
s use to create, debug, maintain, or otherwise support other programs and applications. The term usually refers to relatively simple programs, that can be combined to accomplish a task, much as one might use multiple hands to fix a physical object. The most basic tools are a
source code editor
A source-code editor is a text editor program designed specifically for editing source code of computer programs. It may be a standalone application or it may be built into an integrated development environment (IDE) or web browser. Source-code ed ...
and a
compiler
In computing, a compiler is a computer program that translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primarily used for programs that ...
or
interpreter, which are used ubiquitously and continuously. Other tools are used more or less depending on the language, development methodology, and individual engineer, often used for a discrete task, like a debugger or profiler. Tools may be discrete programs, executed separately – often from the
command line
A command-line interpreter or command-line processor uses a command-line interface (CLI) to receive commands from a user in the form of lines of text. This provides a means of setting parameters for the environment, invoking executables and pro ...
– or may be parts of a single large program, called an
integrated development environment
An integrated development environment (IDE) is a software application that provides comprehensive facilities to computer programmers for software development. An IDE normally consists of at least a source code editor, build automation tools a ...
(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 full-blown database is usually thought of as an application or software in its own right. For many years, computer-assisted software engineering (CASE) tools were sought after. Successful tools have proven elusive. In 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 program's binary representation a programmer will write a program in a
programming language
A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language.
The description of a programming l ...
like C, Java or Python. Programming tools like
assemblers,
compiler
In computing, a compiler is a computer program that translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primarily used for programs that ...
s and
linkers translate a program from a human write-able 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 behavior.
These programs perform many well defined and repetitive tasks that would nonetheless be time-consuming and error-prone 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 high-level programming languages also make it harder to understand the connection between the source code written by a programmer and the actual program's behaviour. In order to find
bugs
Bugs may refer to:
* Plural of bug
Arts, entertainment and media Fictional characters
* Bugs Bunny, a character
* Bugs Meany, a character in the ''Encyclopedia Brown'' books
Films
* ''Bugs'' (2003 film), a science-fiction-horror film
* ''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
A debugger or debugging tool is a computer program used to test and debug other programs (the "target" program). The main use of a debugger is to run the target program under controlled conditions that permit the programmer to track its execut ...
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
Build automation involves scripting or automating the process of compiling computer source code into binary code. Below is a list of notable tools associated with automating build processes.
Make-based
* GNU make, a make implementation with a ...
*
Call graph
A call graph (also known as a call multigraph) is a control-flow graph, which represents calling relationships between subroutines in a computer program. Each node represents a procedure and each edge ''(f, g)'' indicates that procedure ''f'' call ...
*
Code coverage
In computer science, test coverage is a percentage measure of the degree to which the source code of a program is executed when a particular test suite is run. A program with high test coverage has more of its source code executed during testing ...
:
Code coverage#Software code coverage tools.
*
Code review:
List of tools for code review
This is a list of collaborative code review software that supports the software development
Software development is the process of conceiving, specifying, designing, programming, documenting, testing, and bug fixing involved in creating an ...
*Code sharing sites:
Freshmeat
Freecode, formerly Freshmeat, is a website owned by BIZX, Inc., hosting mainly open-source software for programmers and developers. Among other things, the site also hosted user reviews and discussions. While a majority of the software covered i ...
,
Krugle Krugle delivers continuously updated, federated access to all of the code and technical information in the enterprise. Krugle search helps an organization pinpoint critical code patterns and application issues - immediately and at massive scale.
K ...
,
SourceForge
SourceForge is a web service that offers software consumers a centralized online location to control and manage open-source software projects and research business software. It provides source code repository hosting, bug tracking, mirrori ...
,
GitHub
GitHub, Inc. () is an Internet hosting service for software development and version control using Git. It provides the distributed version control of Git plus access control, bug tracking, software feature requests, task management, co ...
. See also
Code search engines.
*
Compilation and
linking tools:
GNU toolchain
The GNU toolchain is a broad collection of programming tools produced by the GNU Project. These tools form a toolchain (a suite of tools used in a serial manner) used for developing software applications and operating systems.
The GNU toolchain ...
,
gcc,
Microsoft Visual Studio
Visual Studio is an integrated development environment (IDE) from Microsoft. It is used to develop computer programs including web site, websites, web apps, web services and mobile apps. Visual Studio uses Microsoft software development platfor ...
,
CodeWarrior,
Xcode,
ICC
*
Debugger
A debugger or debugging tool is a computer program used to test and debug other programs (the "target" program). The main use of a debugger is to run the target program under controlled conditions that permit the programmer to track its execut ...
s:
Debugger#List of debuggers. See also
Debugging
In computer programming and software development, debugging is the process of finding and resolving ''bugs'' (defects or problems that prevent correct operation) within computer programs, software, or systems.
Debugging tactics can involve in ...
.
*
Disassembler
A disassembler is a computer program that translates machine language into assembly language—the inverse operation to that of an assembler. A disassembler differs from a decompiler, which targets a high-level language rather than an assembl ...
s: Generally
reverse-engineering tools.
*
Documentation generators:
Comparison of documentation generators
The following tables compare general and technical information for a number of documentation generators. Please see the individual products' articles for further information. Unless otherwise specified in footnotes, comparisons are based on the ...
, help2man,
Plain Old Documentation
Plain Old Documentation (pod) is a lightweight markup language used to document the Perl programming language as well as Perl modules and programs.
Design
Pod is designed to be a simple, clean language with just enough syntax to be useful. It pu ...
,
asciidoc
AsciiDoc is a human-readable document format, semantically equivalent to DocBook XML, but using plain-text mark-up conventions. AsciiDoc documents can be created using any text editor and read “as-is”, or rendered to HTML or any other f ...
*
Formal methods
In computer science, formal methods are mathematically rigorous techniques for the specification, development, and verification of software and hardware systems. The use of formal methods for software and hardware design is motivated by the exp ...
: 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 leak
In computer science, a memory leak is a type of resource leak that occurs when a computer program incorrectly manages memory allocations in a way that memory which is no longer needed is not released. A memory leak may also happen when an object ...
s and other problems. They are also useful to optimize efficiency of memory usage. Examples:
dmalloc,
Electric Fence
An electric fence is a barrier that uses electric shocks to deter people or animals from crossing a boundary. The voltage of the shock may have effects ranging from discomfort to death. Most electric fences are used for agricultural fencing ...
,
Insure++,
Valgrind
*
Parser generators
In computer science, a compiler-compiler or compiler generator is a programming tool that creates a parser, interpreter, or compiler from some form of formal description of a programming language and machine.
The most common type of compiler ...
:
Parsing#Parser development software
*
Performance analysis or profiling:
List of performance analysis tools
*
Revision control
In software engineering, version control (also known as revision control, source control, or source code management) is a class of systems responsible for managing changes to computer programs, documents, large web sites, or other collections o ...
:
List of revision control software,
Comparison of revision control software
In software development, version control is a class of systems responsible for managing changes to computer programs or other collections of information such that revisions have a logical and consistent organization. The following tables includ ...
*
Scripting language
A scripting language or script language is a programming language that is used to manipulate, customize, and automate the facilities of an existing system. Scripting languages are usually interpreted at runtime rather than compiled.
A scripti ...
s:
PHP
PHP is a General-purpose programming language, general-purpose scripting language geared toward web development. It was originally created by Danish-Canadian programmer Rasmus Lerdorf in 1993 and released in 1995. The PHP reference implementati ...
,
Awk,
Perl
Perl is a family of two High-level programming language, high-level, General-purpose programming language, general-purpose, Interpreter (computing), interpreted, dynamic programming languages. "Perl" refers to Perl 5, but from 2000 to 2019 it ...
,
Python,
REXX
Rexx (Restructured Extended Executor) is a programming language that can be interpreted or compiled. It was developed at IBM by Mike Cowlishaw. It is a structured, high-level programming language designed for ease of learning and reading. ...
,
Ruby
A ruby is a pinkish red to blood-red colored gemstone, a variety of the mineral corundum (aluminium oxide). Ruby is one of the most popular traditional jewelry gems and is very durable. Other varieties of gem-quality corundum are called sapp ...
,
Shell,
Tcl
*Search:
grep
grep is a command-line utility for searching plain-text data sets for lines that match a regular expression. Its name comes from the ed command ''g/re/p'' (''globally search for a regular expression and print matching lines''), which has the sa ...
,
find
*Source code Clones/Duplications Finding:
Duplicate code#Tools
*
Source code editor
A source-code editor is a text editor program designed specifically for editing source code of computer programs. It may be a standalone application or it may be built into an integrated development environment (IDE) or web browser. Source-code ed ...
**
Text editor
A text editor is a type of computer program that edits plain text. Such programs are sometimes known as "notepad" software (e.g. Windows Notepad). Text editors are provided with operating systems and software development packages, and can be u ...
s:
List of text editors
The following is a list of notable text editors.
Graphical and text user interface
The following editors can either be used with a graphical user interface or a text user interface.
Graphical user interface
Text user interface
Sys ...
,
Comparison of text editors
This article provides basic comparisons for notable text editors. More feature details for text editors are available from the '' Category of text editor features'' and from the individual products' articles. This article may not be up-to-date or n ...
*
Source code formatting:
indent,
pretty-printers,
beautifiers,
minifiers
*
Source code generation tools:
Automatic programming#Implementations
*
Static code analysis
In computer science, static program analysis (or static analysis) is the analysis of computer programs performed without executing them, in contrast with dynamic program analysis, which is performed on programs during their execution.
The term ...
:
lint
Lint may refer to:
* Fibrous coat of thick hairs covering the seeds of the cotton plant
* Lint (material), an accumulation of fluffy fibers that collect on fabric
Places
* Lint, Belgium, a municipality located in Antwerp, Belgium
* Linț, a vill ...
,
List of tools for static code analysis
*Unit testing:
List of unit testing frameworks
IDEs
Integrated development environment
An integrated development environment (IDE) is a software application that provides comprehensive facilities to computer programmers for software development. An IDE normally consists of at least a source code editor, build automation tools a ...
s 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 enterprise-level applications.
Different aspects of IDEs for specific programming languages can be found in this
comparison of integrated development environments
The following tables list notable software packages that are nominal IDEs; standalone tools such as source code editors and GUI builders are not included. These IDEs are listed in alphabetical order of the supported language.
ActionScript
...
.
See also
*
Computer aided software engineering tools
*
Computer science
Computer science is the study of computation, automation, and information. Computer science spans theoretical disciplines (such as algorithms, theory of computation, information theory, and automation) to practical disciplines (includin ...
*
Configuration System
*
Scripting language
A scripting language or script language is a programming language that is used to manipulate, customize, and automate the facilities of an existing system. Scripting languages are usually interpreted at runtime rather than compiled.
A scripti ...
*
Software development kit
A software development kit (SDK) is a collection of software development tools in one installable package. They facilitate the creation of applications by having a compiler, debugger and sometimes a software framework. They are normally specific ...
*
Software engineering
Software engineering is a systematic engineering approach to software development.
A software engineer is a person who applies the principles of software engineering to design, develop, maintain, test, and evaluate computer software. The term ' ...
and
list of software engineering topics
*
Software systems
*
Toolkits for User Innovation
*
Developer experience
References
Software Development Tools for Petascale Computing Workshop 2007*
External links
{{Software engineering
*