# Ferramenta de programação

Ferramenta de programação ou software é um programa ou aplicativo que um programador utiliza para criar, depurar, manter, ou realizar algum outro tipo de apoio para a criação de outros programas e aplicativos. O termo geralmente se refere a programas relativamente simples que podem ser combinados para realizar uma tarefa, tanto quanto se poderia utilizar múltiplas ferramentas para criar ou consertar objetos físicos.

## História

A história das ferramentas de software começou com os primeiros computadores, no início dos anos 1950 que usavam "linkers", "loaders", e "programas de controle". Estes programas se tornaram famosos com o Unix no início dos anos 1970 com ferramentas como grep, awk e make que foram criadas para serem usadas combinadas com símbolo canalização(|). O termo "software" veio do livro de mesmo nome, Brian Kernighan e P. J. Plauger.
As ferramentas de programação foram originalmente simples e pequenas. Como algumas ferramentas foram mantidas, elas foram integradas em aplicativos mais poderosos Ambiente de desenvolvimento integrado(IDEs). Estes ambientes consolidaram todas as funcionalidades em um único lugar, por vezes com uma crescente simplicidade e produtividade, outras vezes sacrificando flexibilidade e extensibilidade. O trabalho dos IDEs é rotineiramente contrastou com as abordagens alternativas, como o uso de ferramentas Unix do editores de texto como Vi Vim e Emacs.
A distinção entre ferramentas e aplicações é obscuro. Por exemplo, desenvolvedores utilizam bases simples (como um arquivo contendo uma lista de valores) o tempo todo, como ferramentas. Contudo, uma base de dados completa normalmente é estruturada como um aplicativo proprietário.
Durante muitos anos, as ferramentas CASE foram muito procuradas. Quando atingir sucesso com as ferramentas têm-se mostrado difícil. Em certo sentido, enfatizou projeto feito com ferramentas CASE e arquitetura apoio, tais como a UML. Mas o maior sucesso destas ferramentas são as IDEs.
A habilidade de usar uma variedade de ferramentas produtiva é uma característica de um hábil engenheiro de software.

## Lista de ferramentas

Ferramentas de Software podem ser divididos em categorias distintas:
* Sistema de controle de versão: Bazaar, Bitkeeper, Bonsai, ClearCase, Concurrent Versions System, Git, GNU arch, Mercurial, Monotone, PVCS, RCS, SCM, SCCS, SourceSafe, SVN, LibreSource Synchronizer
* Geradores de Interface: Swig
* Ferramenta de Build: Make, Automake, Apache Ant, SCons, Rake, Flowtracer, Apache Maven
* Compiladores e ferramentas de linkagem: Conjunto de ferramentas GNU, gcc, Microsoft Visual Studio, CodeWarrior, Xcode, ICC
* Analise de código estático: lint, Splint, PMD, Findbugs
* Busca: grep, find
* Editores de texto: emacs, vi
* Linguagem de computador interpretada (Scripts) : Awk, Perl, Python, REXX, Ruby, Shell de sistema operacional, Tcl
* Análise sintática: Lex, Yacc, Parsec
* Sistema de busca de Bug: gnats, Bugzilla, Trac, Atlassian Jira, LibreSource
* Depuradores: gdb, GNU Binutils, valgrind
* Depuradores de Vazamento de memória: dmalloc, Electric Fence, duma, Insure++
* Uso de Memória: Aard
* Code coverage: GCT, CCover
* buscadores de Clones/Duplicações de codigo fonte: CCFinderX
* Refactoring Browser
* Code Sharing Sites: Freshmeat, Krugle, Sourceforge, ByteMyCode, UCodit
* Ferramentas de Geração de código fonte
* Geração de Documentação: Doxygen, help2man, POD, Javadoc, Pydoc/Epydoc
Depuradores ou ferramentas de debugging também são usadas no processo de depuração de código, e também pode ser usadas para criar código que sejam mais compatíveis com as normas e a portábilidade que se não fossem utilizados.
Detecção de Vazamento de memória: Na linguagem de programação C por exemplo, Vazamento de memória são facilmente detectadas como - software chamadas depurador de memória são frequentemente utilizado para encontrar falhas de memória permitindo que o programador encontre esses problemas com muito mais eficiência do que com apenas a inspecção.

## IDEs

Ambiente de desenvolvimento integrado (Integrated Development Environment) combinam os recursos de várias ferramentas em um pacote completo. Eles normalmente são mais simples e tornaram mais fácil para fazer tarefas simples, como a busca de conteúdo apenas em arquivos de um determinado projeto.
IDEs são frequentemente utilizadas para o desenvolvimento de aplicativos de nível corporativo.
Alguns exemplos de IDEs são:
* Delphi
* C++ Builder
* Microsoft Visual Studio
* Xcode
* Eclipse
* NetBeans
* IntelliJ IDEA
* WinDev