简介:程序开发工具

概述

程序开发需要一系列工具,这些工具可能功能重合,也可能互相包含。但是总的来说,需要完成下面一些功能:

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++为实现对象,而当前它已支持包括ActionScriptAdaD语言FortranGLSLHaskellJava字节码、Objective-CSwiftPythonRubyRustScala以及C#等语言。

自动化构建工具

自动化构建(Build automation)指自动创建软件组建的一组进程,包括将计算机源代码编译二进制码、将二进制码包装软件包以及运行自动化测试

自动化构建工具(Build automation utilities)允许自动化简单且重复的任务,这些工具会通过以正确的、特定的顺序执行任务并运行每个任务来计算如何达到目标。其又可分为任务导向工具与产品导向工具:任务导向工具用以描述网络在特定集合任务方面的依赖性;产品导向工具则根据其生成的的产品来描述事物。

make兼容

这类构建工具都使用Makefile作为描述语言。

l make类Unix OS中的make,通过读取makefile文件来实现软件的自动化构建。

l GNU makeGNU make或者gmakeLinuxOS X上make的标准实现。相较于原始的make,GNU make提供了一些额外的函数和功能。

l nmake:nmake是Windows下的make实现,是Visual Studio的一部分,Visual Studio随附的命令行build工具(现已被MSBuild代替)。

CMake

CMake是个一个开源跨平台自动化建构系统,用来管理软件建置的程序,并不相依于某特定编译器。并可支持多层目录、多个应用程序与多个库。 它用配置文件控制建构过程(build process)的方式和Unixmake相似,只是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#RubyScala和其他语言编写的项目。

Gradle

Gradle是一个基于Apache AntApache Maven概念的项目自动化建构工具。它使用一种基于Groovy领域特定语言(DSL)来声明项目设置,而不是传统的XML

当前其支持的语言限于JavaGroovyScala,计划未来将支持更多的语言。

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的的文字与代码编辑器,支持macOSWindowsLinux操作系统,支持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是苹果公司向开发人员提供的集成开发环境,用于开发macOSiOSWatchOStvOS的应用程序。

l VSCodeVisual 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所能支持调试的编程语言有CC++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年后,TeamWareBitKeeper、和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“>分布式版本控制软件,它曾是一款专有软件,现已开源,其主要竞争对手是GitMercurial。BitMover公司总裁曾设计TeamWare

BitKeeper的许多概念取自TeamWare。它的主要卖点是“分布式”版本控制工具,不同于中心式的CVSSVN

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,一个开放源代码版本控制系统,相较于RCSCVS,它采用了分支管理系统,它的设计目标就是取代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最初的开发动力来自于BitKeeperMonotone。git最初只是作为一个可以被其他前端(比如Cogito或Stgit)包装的后端而开发的,但后来git内核已经成熟到可以独立地用作版本控制。很多著名的软件都使用git进行版本控制,其中包括Linux内核X.Org服务器OLPC内核等项目的开发流程。

Mercurial

Mercurial跨平台分布式版本控制软件,主要由Python语言实现,但也包含用C语言实现的二进制比较工具。Mercurial一开始的主要运行平台是Linux,现在Mercurial已经移植到WindowsMac 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设计工具有MotifwxWidgetsDreamWeaver等。

此外很多IDE也自带GUI设计工具,比如EclipseIntelliJ IDEAVisual StudioQt Creator、Android Studio等等。

IDE

集成开发环境(Integrated Development Environment)是以上种种工具的组合,它至少包括源码编辑器自动化构建工具,通常还包括调试器,有些还包括编译器/解释器(有些使用独立的编译器)、各种静态程序分析工具、各种动态程序分析工具。有的时候还包括版本控制工具GUI设计工具。这些模块可能是被调用的独立的工具,也可能是嵌在IDE里的功能模块。

虽然有些IDE支持多种编程语言,但通常来说,IDE是针对特定语言打造的。

Eclipse

Eclipse是著名的跨平台开源集成开发环境(IDE)。最初主要用来Java语言开发,当前亦有人通过插件使其作为C++PythonPHP等其他语言的开发工具。

Eclipse的本身只是一个框架平台,但是众多插件的支持,使得Eclipse拥有较佳的灵活性,所以许多软件开发商以Eclipse为框架开发自己的IDE。

IntelliJ IDEA

IntelliJ IDEA是一种商业化销售的Java集成开发环境软件,由JetBrains软件公司(前称为IntelliJ)发展,提供Apache 2.0开放式授权的社区版本以及专有软件的商业版本,开发者可选择其所需来下载使用。

CLion

CLion是JetBrains公司开发的跨平台(Windows、Linux、MacOS)的C/C++ IDE 开发工具,支持C++11C++14libc++以及Boost。使用CMake作为构建工具,支持GCCClang作为编译器,以及GDBLLDBGoogle Test作为调试工具。

CLion也可以通过插件支持其他语言:Kotlin、Python、Rust、Swift等。

PyCharm

PyCharm是一个用于计算机编程的集成开发环境(IDE),主要用于Python语言开发,由捷克公司JetBrains开发,提供代码分析、图形化调试器,集成测试器、集成版本控制系统,并支持使用Django进行网页开发。

PyCharm是一个跨平台开发环境,拥有Microsoft WindowsmacOSLinux版本。社区版在Apache许可证下发布,另外还有专业版在专用许可证下发布,其拥有许多额外功能。

WebStorm

WebStorm是一个JetBrains开发的跨平台的IDE,主要用于WebJavaScriptTypeScript的开发。JetBrains的很多其他IDE可以通过插件支持WebStorm的功能。

Android Studio

Android Studio是一个为Android平台开发程序的集成开发环境。2013年5月16日在Google I/O上发布,可供开发者免费使用。

Android Studio基于JetBrains IntelliJ IDEA,为Android开发特殊定制,并在WindowsOS XLinux平台上均可运行。

Visual Studio

Microsoft Visual Studio(简称VSMSVS)是微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft WindowsWindows PhoneWindows CE.NET Framework.NET Compact FrameworkMicrosoft Silverlight

Visual Studio .NET是用于快速生成企业级http://ASP.NET Web应用程序和高性能桌面应用程序的工具。Visual Studio包含基于组件的开发工具(如Visual C#Visual J#Visual BasicVisual C++),以及许多用于简化基于小组的解决方案的设计、开发和部署的其他技术。

Cloud9 IDE(在线)

Cloud9 IDE是一个在线集成开发环境,从2.0版到3.0版都是以开放性源代码的形式发布的。它支持多种编程语言,主要包括CC++PHPRubyPerlPythonJavaScriptNode.jsGo两种平台上的应用。 它几乎是用JavaScript编写成的,并使用Node.js作为后台服务器。编辑器组件使用Ace(editor)

Cloud9于2016年7月被亚马逊收购。截至2018年3月,在Cloud9原有网站上注册的账户有的还在使用,但新注册的账户可能不会通过审核,这是因为Cloud9现在是亚马逊网络服务器(AWS)的一部分,因此,新用户必须拥有一个AWS的帐户才能使用Cloud9的服务。

Jupyter Notebook

Jupyter项目旨在“为数十种编程语言的交互式计算开发开源软件,开放标准和服务”。 2014年从IPython中衍生出来,Jupyter项目支持几十种语言的执行环境。Jupyter项目的名称是对Jupyter支持的三种核心编程语言的引用,这三种语言是JuliaPythonR

Jupyter项目开发并支持交互式计算产品Jupyter NotebookJupyterHubJupyterLab(Jupyter Notebook的下一代版本)。

Jupyter Notebook(前身是IPython Notebook)是一个基于Web的交互式计算环境,用于创建Jupyter Notebook文档。Notebook一词可以通俗地引用许多不同的实体,主要是Jupyter Web应用程序、Jupyter Python Web服务器或Jupyter文档格式(取决于上下文)。Jupyter Notebook文档是一个JSON文档,遵循版本化模式,包含一个有序的输入/输出单元格列表,这些单元格可以包含代码、文本(使用Markdown语言)、数学、图表和富媒体,通常以“.ipynb”结尾扩展。

    原文作者:Jun Zheng
    原文地址: https://zhuanlan.zhihu.com/p/56025815
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞