概述
程序开发需要一系列工具,这些工具可能功能重合,也可能互相包含。但是总的来说,需要完成下面一些功能:
l 编辑
l 编译
l 自动化构建
l 调试
l 版本管理
l 性能分析
l 静态代码分析
l 测试
编译器
编译器有一系列的功能,包括预处理、编译、汇编、链接等。
GCC
原为GNU C Compiler的缩写,后改为GNU Compiler Collection。是一套编程语言编译器,是GNU工具链(toolchain)的主要组成部分。
GNU工具链除了GCC之外还包括make、GDB、binutils、M4等工具,其中Binutils(二进制工具链)包括as(汇编器)、ld(链接器)、ar(静态库打包)、nm(显示符号列表)、objcopy(复制目标文件)、objdump(反汇编及显示二进制文件信息)、strip(移除符号)等等。
LLVM
LLVM是一个自由软件项目,它是一种编译器基础设施,以C++写成。它是为了任意一种编程语言而写成的程序,利用虚拟技术创造出编译时期、链接时期、运行时期以及“闲置时期”的最优化。它最早以C/C++为实现对象,而当前它已支持包括ActionScript、Ada、D语言、Fortran、GLSL、Haskell、Java字节码、Objective-C、Swift、Python、Ruby、Rust、Scala以及C#等语言。
自动化构建工具
自动化构建(Build automation)指自动创建软件组建的一组进程,包括将计算机源代码编译成二进制码、将二进制码包装成软件包以及运行自动化测试。
自动化构建工具(Build automation utilities)允许自动化简单且重复的任务,这些工具会通过以正确的、特定的顺序执行任务并运行每个任务来计算如何达到目标。其又可分为任务导向工具与产品导向工具:任务导向工具用以描述网络在特定集合任务方面的依赖性;产品导向工具则根据其生成的的产品来描述事物。
make兼容
这类构建工具都使用Makefile作为描述语言。
l make:类Unix OS中的make,通过读取makefile文件来实现软件的自动化构建。
l GNU make:GNU make或者gmake是Linux和OS X上make的标准实现。相较于原始的make,GNU make提供了一些额外的函数和功能。
l nmake:nmake是Windows下的make实现,是Visual Studio的一部分,Visual Studio随附的命令行build工具(现已被MSBuild代替)。
CMake
CMake是个一个开源的跨平台自动化建构系统,用来管理软件建置的程序,并不相依于某特定编译器。并可支持多层目录、多个应用程序与多个库。 它用配置文件控制建构过程(build process)的方式和Unix的make相似,只是CMake的配置文件取名为CMakeLists.txt。
CMake并不直接建构出最终的软件,而是产生标准的建构档(如Unix的Makefile或Windows Visual C++的projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是CMake和其他类似系统的区别之处。
Ant
Ant是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。由Apache软件基金会所提供。默认情况下,它的buildfile名为build.xml。每一个buildfile含有一个<project>和至少一个预设的<target>,这些targets包含许多task elements。每一个task element有一个用来被参考的id,此id必须是唯一的。
Maven
Maven是一个软件(特别是Java软件)项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven也可被用于构建和管理各种项目,例如C#,Ruby,Scala和其他语言编写的项目。
Gradle
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的领域特定语言(DSL)来声明项目设置,而不是传统的XML。
当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。
VCBuild/MSBuild
MicroSoft Build Engine,通常叫做MSBuild,是来自于微软的开源的自动化构建工具集。是Visual Studio IDE的一部分(用于替代nmake)。虽然是VS的一部分,MSBuild也可以独立运作。
MSBuild就是原来的VCBuild,两者有一些不同,例如VCBuild所使用的项目文件扩展名为vcproj,而MSBuild的则为vcxproj,在此不一一例举。
MSBuild的功能包括对源代码及托管代码(managed code,微软的术语,类似于Java字节码的中间代码)的编译、打包、测试、部署。
源码编辑器
源码编辑器本质上就是文本编辑器,有一些为编码而特有的功能,比如语法高亮、自动缩进、自动补全、括号配对、代码折叠、代码跳转等等。以下是一些源码编辑器:
l Atom:由GitHub开发的自由、开放源代码、基于Electron的的文字与代码编辑器,支持macOS、Windows和Linux操作系统,支持Node.js所写的插件,并内置由Github提供的href=”https://zh.wikipedia.org/wiki/Git“>Git版本控制系统。
l Sublime Text:跨平台的专有源码编辑器,原生支持许多编程语言和Markup语言。支持的平台包括Windows、OS X、Linux。
l Source Insight:Source Dynamics公司推出的代码编辑器。销售者认为它不仅仅用于代码编辑,也可以用于对大型项目的代码进行分析和理解。仅支持Windows。
l Notepad++:Windows下的自由软件,文本和源码编辑器。
l Emacs:一个跨平台的文本编辑器家族。
l Vi/Vim:类Unix操作系统下的字符界面文本编辑器,可使用各种语法高亮插件进行代码编辑。
l gedit:GNOME桌面环境下的兼容UTF-8的文本编辑器,有语法高亮。
l xcode(OS X):Xcode是苹果公司向开发人员提供的集成开发环境,用于开发macOS、iOS、WatchOS和tvOS的应用程序。
l VSCode:Visual Studio Code是一个由微软开发的,跨平台、开放源代码、基于Electron的的代码编辑器,它支持测试,并内置了Git 版本控制功能,同时也具有开发环境功能。
调试器
调试器(Debugger)指一种用于调试其它程序的计算机程序及工具。能够让代码在指令模拟器(ISS)中可以检查运行状况以及选择性地运行,以便排错、调试。
当程序死机时,如果调试工具是属于来源阶段调试工具(source-level debugger)或象征阶段调试工具(symbolic debugger),调试工具即可以显示出错误所在位置的源代码,并使其于集成开发环境里也能看见。要是属于低级调试工具(low-level debugger)或机器语言调试工具(machine-language debugger)的话,它将能显示的是一行一行的反汇编码。
典型的调试工具通常能够在程序运行时拥有以下这些功能,例如单步运行(single-stepping)、利用中断点(breakpoint)使程序遇到各种种类的事件(event)时停止(breaking)(一般用于使程序停止在想要检查的状态)、以及追踪某些变量的变化。有些调试工具也有能力在想要调试的程序在运行状态时,去改变它的状态,而不仅仅只是用来观察而己。
l GDB:GNU Debugger,是GNU软件系统中的标准调试器,如今许多的类UNIX OS上都可以使用GDB,而现有GDB所能支持调试的编程语言有C、C++、Pascal以及FORTRAN。
l WinDbg:是Microsoft Windows上的多用途调试器,可从微软网站上免费下载安装使用。可用于调试用户态下的应用程序、驱动程序,以及核心态下的操作系统自身。该软件是GUI界面,但与更为著名但功能稍弱的Visual Studio Debugger几乎完全不同。
l Visual Studio Debugger:是Visual Studio随附的调试器,继承了很多CodeView(Visual C++随附的独立调试器)的特点和功能。
l SoftICE:一个工作在Windows核心模式下的调试器。常用于软件的逆向工程,例如破解软件的保护,或寻找软件的注册码。
版本控制工具
版本控制(Revision control)被用来追踪、维护源码、文件以及配置文件等等的改动,并且提供控制这些改动控制权的程序。
版本控制工具可以分成中央式和分布式两种,传统上版本控制系统都是采用中央式系统:所有版本控制的工作在一个服务器进行,由中央权威管理访问权限“锁上”文件库中的文件,一次只让一个开发者工作。
2000年后,TeamWare、BitKeeper、和GNU开始用分布式系统:开发者直接在各自的本地文件库工作,并容许多个开发者同时更动同一文件,而各个文件库有另一个合并各个改变的功能。这个方式让开发者能不靠网络也能继续工作,也让开发者有充分的版本控制能力,而不需经中央权威许可。分布式系统仍然可以有文件上锁功能。
分布式系统Linux内核的发明人Linus Torvalds就是分布式版本控制系统的支持者,他开发了当前被开源社群广泛使用的分布式版本控制系统Git。
版本控制工具很喜欢用三个字母的缩写,且大都是C、V、S、R、N
BitKeeper
BitKeeper是一套BitMover公司开发的href=”https://zh.wikipedia.org/wiki/%E5%88%86%E5%B8%83%E5%BC%8F%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6“>分布式版本控制软件,它曾是一款专有软件,现已开源,其主要竞争对手是Git和Mercurial。BitMover公司总裁曾设计TeamWare。
BitKeeper的许多概念取自TeamWare。它的主要卖点是“分布式”版本控制工具,不同于中心式的CVS或SVN。
CVS(停更)
CVS(Concurrent Version System)是一款较早期的开源的中央式版本控制软件,最后一次稳定版本2008年发布,现已被SVN、Git等逐渐取代。
很多著名开源项目都曾以CVS作为版本管理系统,比如Gnome、KDE、Gimp、Wine等。
VSS(停更)
Microsoft Visual SourceSafe是美国微软公司出品的版本控制系统,简称VSS。VSS的最后一个稳定版本发布于2005年。
软件支持Windows系统所支持的所有文件格式,兼容Check out-Modify-Check in(独占工作模式)与Copy-Modify-Merge(并行工作模式)。VSS通常与微软公司的Visual Studio产品同时发布,并且高度集成。
Perforce
指Perforce公司发布的中央式版本控制工具Helix Core,之前叫Helix。被设计用于大尺度的代码开发环境。
ClearCase
Rational公司推出的一系列软件开发工具组合,其中包括中央式的版本控制功能。
RCS(停更)
Revision Control System,简称RCS,是最早的版本控制工具SCCS的替代,初始开发于1982年,最后一个稳定版本发布于2015年。
SVN
Apache Subversion,简称SVN,一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS转移到Subversion。
Git
是一个开源的href=”https://zh.wikipedia.org/wiki/%E5%88%86%E6%95%A3%E5%BC%8F%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6“>分布式版本控制软件,最初由Linus Torvalds创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。
git最初的开发动力来自于BitKeeper和Monotone。git最初只是作为一个可以被其他前端(比如Cogito或Stgit)包装的后端而开发的,但后来git内核已经成熟到可以独立地用作版本控制。很多著名的软件都使用git进行版本控制,其中包括Linux内核、X.Org服务器和OLPC内核等项目的开发流程。
Mercurial
Mercurial是跨平台的分布式版本控制软件,主要由Python语言实现,但也包含用C语言实现的二进制比较工具。Mercurial一开始的主要运行平台是Linux,现在Mercurial已经移植到Windows、Mac OS X和大多数的类Unix系统中。Mercurial主要由命令行程序组成,现在也有了图形用户界面。
Mercurial的主要设计目标包括高性能、可扩展性、分散性、完全分布式合作开发、能同时高效地处理纯文本和二进制文件,以及分支和合并功能,以此同时保持系统的简洁性。Mercurial也包括一个集成的Web界面。
静态程序分析工具
静态程序分析(Static program analysis)是指在不运行计算机程序的条件下,进行程序分析的方法。大部分的静态程序分析的对象是针对源代码,也有些静态程序分析的对象是目标代码。
静态程序分析一词多半是指配合静态程序分析工具进行的分析,人工进行的分析一般称为程序理解(Program comprehension)或代码审查(code review)。
静态程序分析工具列表:https://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
动态程序分析工具
动态程序分析(Dynamic program analysis)是在程序执行的时候进行的分析。动态分析为了更加有效,目标程序必须测试足够多的输入来观察程序的行为。
代码覆盖
代码覆盖(Code coverage)是软件测试中的一种度量,描述程式中源代码被测试的比例和程度,所得比例称为代码覆盖率。
Gcov是一个GNU的代码覆盖测试工具。
内存错误检查
内存错误检查(Memory error detection)用于检查各种和内存相关的错误,比如越界、内存泄露等。著名的内存错误检查工具有:
l AddressSanitizer
l BoundsChecker
l Dmalloc
l Purify
l Valgrind
性能分析工具
性能分析(Performance analysis,Profiling)用于衡量软件的时间/空间复杂度,函数的调用频率和耗时,某个特定指令的使用等。最终的目的是对程序做优化。
性能分析工具列表:https://en.wikipedia.org/wiki/List_of_performance_analysis_tools
GUI 设计工具
GUI设计工具(GUI Builder、GUI Designer),用于简化GUI界面设计的工具,通过WYSIWYG(所见即所得)的拖拽方式实现界面的设计。
较知名的GUI设计工具有Motif、wxWidgets、DreamWeaver等。
此外很多IDE也自带GUI设计工具,比如Eclipse、IntelliJ IDEA、Visual Studio、Qt Creator、Android Studio等等。
IDE
集成开发环境(Integrated Development Environment)是以上种种工具的组合,它至少包括源码编辑器、自动化构建工具,通常还包括调试器,有些还包括编译器/解释器(有些使用独立的编译器)、各种静态程序分析工具、各种动态程序分析工具。有的时候还包括版本控制工具和GUI设计工具。这些模块可能是被调用的独立的工具,也可能是嵌在IDE里的功能模块。
虽然有些IDE支持多种编程语言,但通常来说,IDE是针对特定语言打造的。
Eclipse
Eclipse是著名的跨平台开源集成开发环境(IDE)。最初主要用来Java语言开发,当前亦有人通过插件使其作为C++、Python、PHP等其他语言的开发工具。
Eclipse的本身只是一个框架平台,但是众多插件的支持,使得Eclipse拥有较佳的灵活性,所以许多软件开发商以Eclipse为框架开发自己的IDE。
IntelliJ IDEA
IntelliJ IDEA是一种商业化销售的Java集成开发环境软件,由JetBrains软件公司(前称为IntelliJ)发展,提供Apache 2.0开放式授权的社区版本以及专有软件的商业版本,开发者可选择其所需来下载使用。
CLion
CLion是JetBrains公司开发的跨平台(Windows、Linux、MacOS)的C/C++ IDE 开发工具,支持C++11 、C++14、libc++以及Boost。使用CMake作为构建工具,支持GCC、Clang作为编译器,以及GDB、LLDB和Google Test作为调试工具。
CLion也可以通过插件支持其他语言:Kotlin、Python、Rust、Swift等。
PyCharm
PyCharm是一个用于计算机编程的集成开发环境(IDE),主要用于Python语言开发,由捷克公司JetBrains开发,提供代码分析、图形化调试器,集成测试器、集成版本控制系统,并支持使用Django进行网页开发。
PyCharm是一个跨平台开发环境,拥有Microsoft Windows、macOS和Linux版本。社区版在Apache许可证下发布,另外还有专业版在专用许可证下发布,其拥有许多额外功能。
WebStorm
WebStorm是一个JetBrains开发的跨平台的IDE,主要用于Web、JavaScript和TypeScript的开发。JetBrains的很多其他IDE可以通过插件支持WebStorm的功能。
Android Studio
Android Studio是一个为Android平台开发程序的集成开发环境。2013年5月16日在Google I/O上发布,可供开发者免费使用。
Android Studio基于JetBrains IntelliJ IDEA,为Android开发特殊定制,并在Windows、OS X和Linux平台上均可运行。
Visual Studio
Microsoft Visual Studio(简称VS或MSVS)是微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Phone、Windows CE、.NET Framework、.NET Compact Framework和Microsoft Silverlight。
而Visual Studio .NET是用于快速生成企业级http://ASP.NET Web应用程序和高性能桌面应用程序的工具。Visual Studio包含基于组件的开发工具(如Visual C#、Visual J#、Visual Basic和Visual C++),以及许多用于简化基于小组的解决方案的设计、开发和部署的其他技术。
Cloud9 IDE(在线)
Cloud9 IDE是一个在线集成开发环境,从2.0版到3.0版都是以开放性源代码的形式发布的。它支持多种编程语言,主要包括C,C++,PHP,Ruby,Perl,Python,JavaScript在 Node.js和Go两种平台上的应用。 它几乎是用JavaScript编写成的,并使用Node.js作为后台服务器。编辑器组件使用Ace(editor)。
Cloud9于2016年7月被亚马逊收购。截至2018年3月,在Cloud9原有网站上注册的账户有的还在使用,但新注册的账户可能不会通过审核,这是因为Cloud9现在是亚马逊网络服务器(AWS)的一部分,因此,新用户必须拥有一个AWS的帐户才能使用Cloud9的服务。
Jupyter Notebook
Jupyter项目旨在“为数十种编程语言的交互式计算开发开源软件,开放标准和服务”。 2014年从IPython中衍生出来,Jupyter项目支持几十种语言的执行环境。Jupyter项目的名称是对Jupyter支持的三种核心编程语言的引用,这三种语言是Julia、Python和R。
Jupyter项目开发并支持交互式计算产品Jupyter Notebook、JupyterHub和JupyterLab(Jupyter Notebook的下一代版本)。
Jupyter Notebook(前身是IPython Notebook)是一个基于Web的交互式计算环境,用于创建Jupyter Notebook文档。Notebook一词可以通俗地引用许多不同的实体,主要是Jupyter Web应用程序、Jupyter Python Web服务器或Jupyter文档格式(取决于上下文)。Jupyter Notebook文档是一个JSON文档,遵循版本化模式,包含一个有序的输入/输出单元格列表,这些单元格可以包含代码、文本(使用Markdown语言)、数学、图表和富媒体,通常以“.ipynb”结尾扩展。