软件项目管理软件项目的管理是软件开发过程中很重要的一项工作。好的管理方法是一个软件项目成功的前提,而使用好软件管理工具能让软件项目开发事半功倍。开源软件项目的开放特性导致开发一个软件项目的人员可能分散在不同的地理位置,如Linux内核开发人员分布在全球数十个国家。开源软件项目开发中的交流与合作难度比任何一种商业软件都要高,因此需要管理软件项目的软件帮助开发人员完成协作和交流的问题。本章介绍在开源软件项目常用的管理技术,主要内容如下:软件版本的概念如何控制软件版本开发文档管理Bug缺陷跟踪系统12.1源代码管理源代码是一个软件最重要的部分,软件的二进制程序都是从源代码编译生成的。学过计算机编程的读者在学习过程中都编辑过一些源代码,可以完成一些简单的功能,但是在学习编程过程中可能很少会体会到对源代码的管理问题。对于一个软件来说,无论从源代码的数量还是软件的功能,都远比一个小程序复杂。软件开发式多人合作的过程,对软件开发过程管理就很必要了。12.1.1什么是软件的版本软件开发过程中通常会把完成某个功能的代码打包,用数字和字母的组合为软件的源代码或者二进制文件命名,表示完成一个阶段的工作,这种软件阶段性的名字称作软件版本。软件的版本不是随意命名的,有一定规律,不同的软件开发组织都有自己的软件命名方法。本节介绍几种常见的名规则。1.GNU软件版本命名规则2.常见的软件版本命名含义12.1.2版本控制的概念随着软件开发过程中不断的修改错误和发布新的功能,软件的版本随之增多。此外,发布给用户的版本与开发的版本往往不是一致的,12.1节讲到的多是发布给用户的版本,在开发过程中很可能会有许多的“中间版本”。版本控制的目的就是解决软件开发过程中的版本问题。在开发过程中常会遇到同一文件多人修改,或者多人修改代码后同时提交的问题。版本控制的一个重要功能是记录每个版本信息,在发生错误时能回退到某个指定的版本。试想一下,如果每个人都在修改自己的文件,当提交的时候发现问题,这个时候如果不能回退到之前某个可用的版本,工作可能就前功尽弃。软件版本控制还需要提供代码比对功能,帮助用户比较不同版本之间的差异。12.2版本控制系统Subversion在开源软件领域,有许多的版本控制软件。早期的版本控制软件有大名鼎鼎的CVS,现在应用最广泛的软件版本控制软件是Subversion版本管理系统。此外,Linux内核开发团队使用了自己开发的GIT版本管理系统,也是一个不错的选择。Subversion最大的特点是使用简单。Subversion继承了CVS仓库的概念,但是做了很多的改进,支持Unicode编码,并且提供了许多功能。本节介绍Subversion的安装配置和使用方法。12.2.1在Linux系统使用Subversion服务端本节介绍在UbuntuLinux8.04版本上安装Subversion。UbuntuLinux使用apt管理软件包,安装Subversion的过程非常简单。安装配置过程如下:12.2.2在Windows系统使用TortoiseSVN客户端Windows提供相良好的图形界面,嵌入式开发中,通常把客户端工具安装在Windows系统,如编辑工具、代码管理工具等;而把编译环境等放在一个Linux系统。这样充分利用了两个系统的优势。在Windows系统下有许多开源的Subversion客户端。TortoiseSVN是目前使用最广泛的Subversion客户端,该客户端界面简洁、功能丰富,并且比较稳定。软件安装配置过程如下:12.3开发文档管理——常见的开发文档随着技术的进步,小作坊式的软件开发年代已经过去。目前的软件开发能力在不断提升,用户对软件的功能和性能要求也越来越高,软件开发质量受到关注。在软件开发过程中,各种数据和代码的管理需要经过统筹安排和管理,出现了各种软件开发文档,用于控制软件开发过程。软件开发文档是与开发阶段对应的。一般来说,每个阶段至少产生一种文档。软件开发文档描述了在软件开发各阶段中不同的任务。不同组织和公司有不同的开发文档和规范,使用不同的开发模型产生的文档内容也不相同。软件开发文档指导不同阶段相关人员的工作,不同阶段的人员也产生某个阶段的最终文档。如需求设计文档指导项目经理做软件的框架设计,产生概要设计文档;程序员使用概要设计文档了解软件某部分的功能,然后做具体的细化设计详细设计文档。按照软件开发的阶段,通常会生成以下钢治牡担12.3.1可行性研究报告软件项目的可行性研究报告需要列举出需要的技术、人员、资金、时间周期以及法律等方面的因素,最终目的是论证一个软件项目是否可以开发。可行性研究报告通常由软件团队的高层,或者是软件项目发起人、投资人等参加。可行性研究报告中还应当对于现有的资源给出几种不同的解决方案供讨论使用。软件可行性研究报告的结果直接决定了一个软件项目是否启动。12.3.2项目开发计划项目开发计划的目的是使用文件形式,把开发过程中各工作的负责人、开发进度以及需要的经费预算、所需的软件和硬件等都描述出来。后续的工作根据项目开发文档安排调配资源。项目开发文档是整个开发项目的资源描述文档,在编写的时候要从开发组织的实际情况出发,合理安排资源12.3.3软件需求说明书软件需求说明书是软件开发组织于用户之间的接口文档,是整个软件开发的基础。软件需求说明书是软件供求双方对软件功能的一个具体描述文档,通常由软件开发组织编写。该文档包括了软件的开发任务、功能约定、开发周期等,用户根据软件开发组织的需求设计提出自己的意见,修改12.3.4概要设计概要设计文档说明了整个程序设计的框架和工作流程,是详细设计文档的基础。概要设计描述整个系统的处理流程、模块划分、接口设计以及出错处理等内容。概要设计的好坏决定了软件的优劣,通常是项目经理设计该文档,并且经过讨论后形成最终文档。12.3.5详细设计详细设计是一个软件模块或者流程的具体描述文档。详细设计文档包括具体程序的功能描述、性能要求、输入输出格式、算法、存储分配等内容。对于简单的软件可以不做详细设计,在代码中做相应详细的注释即可。对应大型的软件,至少要在关键流程做详细设计,并且尽量保证详细设计文档与代码的对应关系便于维护管理。详细设计文档一般由程序员编写。12.3.6用户手册前面介绍的几种文档都是软件开发组织使用的,文档结构规范、内容使用术语较多,便于开发组织内部交流。用户手册编写的目的是要使用非术语描述软件系统具有的功能和使用方法。用户在阅读使用手册后可以了解软件的功能和用途,并且通过说明书可以操作软件。用户说明书通常包括软件的功能、运行环境、操作方法以及示例、常见出错问题及解答。用户手册要保证内容简洁,易于用户理解。12.3.7其他文档在软件开发过程中还会产生其他一些文档,常见的有测试计划、测试报告、开发进度表和项目总结报告等。其中,测试是比较重要的部分,一个软件的优劣测试起到很大作用。测试是与开发并进的,包括单元测试、集成测试、功能测试和完整性测试等。测试的目的是发现软件中的缺陷,帮助改进软件的健壮性。12.3节详细介绍软件缺陷管理。12.4使用trac管理软件开发文档trac是一个开源的项目管理软件,集成了Wiki(可译为百科全书)功能用于文档管理。该工具能与Subversion很好的结合,方便用户从文档中参考程序代码。Wiki是互联网上的一种新型应用方式,功能类似于百科全书。Wiki提供一种在线编辑的方式,任何用户都可以编辑文档内容,Wiki可以把经过编辑和修改的内容合并成最终可阅读的文档。12.4.1安装tractrac是一组Python语言编写的脚本,运行在Apache服务器上,后台使用SQL数据库。安装trac需要安装Apache服务器、MySQL数据库和Python语言解析器。提示:12.3.2节在安装Bugzilla软件的时候也用到了Apache服务器。Apache服务器是目前互联网上应用最广泛的HTTP服务器,提供Web页面服务。Python是一种面向对象的脚本语言。安装Apache服务器和Python语言解析器非常简单,使用apt软件包管理工具安装过程如下:$sudoapt-getinstallapache2python12.4.2配置Trac基本设置Trac安装完毕后,开始配置Trac。(1)首先进入Apache的工作目录,建立trac的工作目录。(2)修改好trac工作目录属性后,开始设置trac的工作脚本:(3)改命令的作用是以工具,为trac目录设置初始的工作脚本。键入命令后回车,出现一个文本的设置向导:12.4.3配置trac全局脚本Trac安装完毕后,接下来配置Trac的全局脚本。(1)进入Apache的cgi-bin目录,设置cgi-bin目录的所有者,然后建立到trac安装目录的连接。(2)配置好脚本后,把Trac加入到Apache的默认站点。编辑/etc/apache2/sites-available/default文件。(3)接下来配置trac的密码文件:12.4.4设置trac的Web界面设置用户名和密码结束后,需要安装Trac的Web界面。trac使用组件完成各种功能,trac的组件被打包成egg文件格式,在安装egg文件之前需要安装python-setuptools。12.4.4设置trac的Web界面12.4.4设置trac的Web界面12.5Bug跟踪系统软件开发过程中关键的问题是处理开发过程中出现的各种缺陷,也称作Bug。软件质量的高低很大程度上由Bug多少决定。Bug不仅影响软件的质量,而且直接决定了用户对软件的体验。对于嵌入式系统,一个很小的Bug可能导致很严重的后果。实际上,每个软件组织在开发过程中都对Bug管理投入很多,但是许多软件由于Bug太多无法维护最终导致失败。因此在开发过程中,对Bug管理要有足够重视。12.5.1Bug管理的概念和作用Bug在英文中有“臭虫,虫子”的意思。软件开发领域习惯把程序中的错误比作“臭虫”,使用“Bug”一词表示软件中的缺陷、错误。软件开发过程中Bug一词应用范围非常广,从功能上的错误到死机、机器重启、程序访问异常等致命错误都称之为Bug。没有不存在Bug的软件,但是一个优秀的软件应该保证Bug的数量降低到最少。软件中产生Bug的原因非常多,有的是由于程序员疏忽造成的,有的是逻辑上出了问题,有的甚至是在设计的时候留下的缺陷。一般来说,越是明显的Bug,修改难度越低;越是不容易产生的Bug,越有可能包含深层次的原因,反而不易调试和跟踪。12.5.2使用Bugzilla跟踪BugBugzilla是一个开源的Bug管理系统,它提供了许多专业的Bug管理系统具备的功能。Bugzilla提供了Bug报告、查询、记录产生等功能。Bugzilla主要特点如下:使用Web界面,无需安装客户端,方便使用提供邮件自动通知功能支持任意数量和类型的附件自定义丰富的字段类型,便于描述Bug使用MySQL数据库,方便数据迁移12.5.2使用Bugzilla跟踪Bug12.6小结本节介绍了软件开发过程中的管理技术,包括代码的版本控制、文档管理和Bug管理。这三部分内容从不同角度对软件质量进行管理和控制,是软件开发过程中不可缺少的辅助手段。对于没有使用过版本控制和Bug管理系统的人来说,这些东西不仅是一个熟练的过程,更重要的是建立软件管理的意识,需要一个适应的过程。建议初学者在设计开发一个软件程序的时候养成书写文档和代码注释的好习惯。第13章讲解ARM体系结构。