发布新日志

  • 从问题单去分析测试人员的交付质量

    2008-06-22 16:43:38

    最近的一个项目测试结束后说是提交了7000多个BUG, 估计是包含了无效、重复,还有用户提的。 可想而知是个多么庞大的系统,其实我看我们提的问题单大部分还是业务提交失败的居多一些, 去评价问题单的难易度是很难做到的。

    手工过滤了2000个问题单, 花了两周的时间完成了测试分析报告, 可以说对团队工作的一个自我批判,好的BUG管理工具可以同时做到问题过滤和统计分析功能。

    问题单对测试人员的评估能做到客观公正,但后面的回溯避免要继承才有效。后续待记....

  • 神话

    2008-05-05 00:14:26

    神话什么时候能在软件行业里出现, 一环扣一环的环节总是有链子脱落或者不能环环吻合相扣.

    描述一下我今天的工作, 8小时满满的都在处理电话/邮件/交流/检查/咨询等等.很多人看似小事情的绝非小事情,没有软件工程在里面, 我们谈什么测试呢?

  • 面试

    2007-10-31 02:29:54

         最近又搞了几次面试, 这次是南京的专家来主要负责, 初步感觉到了公司在这方面的一些技巧。 其中也学到了一些本领,  好的面试的确能发现很多问题, 知识基础程度,知识面,反映能力,沟通能力, 协作能力, 等等,继续学习中。

     

  • Oracle的索引类型

    2007-10-31 02:26:03

    找到这个介绍的时候竟然出自zrp

    索引的分类

    逻辑上:
    Single column 单行索引
    Concatenated 多行索引
    Unique 唯一索引
    NonUnique 非唯一索引
    Function-based函数索引
    Domain 域索引


    物理上:
    Partitioned 分区索引
    NonPartitioned 非分区索引
    B-tree:
    Normal 正常型B树
    Rever Key 反转型B树
    Bitmap 位图索引


    索引结构:
    B-tree:
    适合与大量的增、删、改(OLTP);
    不能用包含OR操作符的查询;
    适合高基数的列(唯一值多)
    典型的树状结构;
    每个结点都是数据块;
    大多都是物理上一层、两层或三层不定,逻辑上三层;
    叶子块数据是排序的,从左向右递增;
    在分支块和根块中放的是索引的范围;
    Bitmap:
    适合与决策支持系统;
    做UPDATE代价非常高;
    非常适合OR操作符的查询;
    基数比较少的时候才能建位图索引;
    树型结构:
    索引头
    开始ROWID,结束ROWID(先列出索引的最大范围)
    BITMAP
    每一个BIT对应着一个ROWID,它的值是1还是0,如果是1,表示着BIT对应的ROWID有值;

    B*tree索引的话通常在访问小数据量的情况下比较适用,比如你访问不超过表中数据的5%,当然这只是个相对的比率,适用于一般的情况。bitmap的话在数据仓库中使用较多,用于低基数列,比如性别之类重复值很多的字段,基数越小越好。


  • 冒泡排序 JAVA

    2007-10-31 02:22:33

    package Utils.Sort;

    /**

    *@author Linyco

    *利用冒泡排序法对数组排序,数组中元素必须实现了Comparable接口。

    */

    public class BubbleSort implements SortStrategy

    {

      /**  *对数组obj中的元素以冒泡排序算法进行排序    */

           public void sort(Comparable[] obj)

               if (obj == null)

                     throw new NullPointerException("The argument can not be null!");

                  }

                  Comparable tmp;

                  for (int i = 0 ;i < obj.length ;i++ )

                     //切记,每次都要从第一个开始比。最后的不用再比。

                         for (int j = 0 ;j < obj.length - i - 1 ;j++ )

                         {   //对邻接的元素进行比较,如果后面的小,就交换

                                if (obj[j].compareTo(obj[j + 1]) > 0)

                                tmp = obj[j];

                                       obj[j] = obj[j + 1];

                                       obj[j + 1] = tmp;

                                  }

                  }

    }

  • 冒泡排序C

    2007-10-31 02:19:59

    经典的算法代码, 贴出来。

    最简单的排序方法是冒泡排序方法。这种方法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。显然,处理一遍之后,“最轻”的元素就浮到了最高位置;处理二遍之后,“次轻”的元素就浮到了次高位置。在作第二遍处理时,由于最高位置上的元素已是“最轻”元素,所以不必检查。一般地,第i遍处理时,不必检查第i高位置以上的元素,因为经过前面i-1遍的处理,它们已正确地排好序。这个算法可实现如下。


    Bubble Sort程序: 


    STL C++程序:(VC++6.0通过)
    #include "stdafx.h"
    #include "iostream.h"

    template<class T>
    class doit{
    private:
    int x,y;
    T temp;
    public: 
    doit(T* in,int count)
    {
    for(y=0;y<count-1;y++)
    {
    for(x=1;x<count-y;x++)
    {
    if((*(in+x))>(*(in+x-1)))
    {
    temp=(*(in+x-1));
    (*(in+x-1))=(*(in+x));
    (*(in+x))=temp;
    }
    }
    }
    }
    };

    int main()
    {
    double a[4]={1.1,1.3,1.9,2.2};
    doit<double> d(a,4);
    for(int i=0;i<4;i++)
    {
    cout<<a[i]<<endl;
    }
    return 0;


    C语言程序:(TC 2.0通过) 
    void doit(float* in,int count)
    {
    int x;
    int y;
    float temp;
    for(y=0;y<count-1;y++)
    {
    for(x=1;x<count-y;x++)
    {
    if((*(in+x))>(*(in+x-1)))
    {
    temp=(*(in+x-1));
    (*(in+x-1))=(*(in+x));
    (*(in+x))=temp;
    }
    }
    }
    }

  • Unix操作系统的主要目录说明

    2007-10-29 23:52:12

    Unix操作系统的主要目录说明/bin /usr/bin /usr/local......

         在 UNIX 上一些特殊的目录储存了各种不同需求的档案与作为指令的程式,如
    下所述( 不同的类似操作系统,可能有一些变换,但是以下的是较为通用的) :

    a. /bin 、/usr/bin 、/usr/ucb
         /bin 和 /usr/bin 两个目录主要放的是标准的指令,例如 ls , rm ,
         cat ... 等等,各个系统的 /bin , /usr/bin 下的指令大多都相同,主要
         在避免不同 UNIX 系统之间的差异性。
        
         /usr/ucb 放的是由 U.C. Berkeley 所发展出来的一些应用程式,像 telnet ,
         ftp , rlogin , rsh 等均存放在此。
        
    b. /usr/local/bin
         /usr/local/bin 所存放的指令多为系上所特有的指令,因为大多是由历届中
         心讲师及助教所撰写或 install 的程式和软体,系上大部份 network service
         的执行程式均放在此,如 tin , elm , 以及许多有用的转换程式,像 hz2ps ,
         b2g , g2b 等等。
        
    c. /lib 、/usr/lib
         在此目录之中所存放的是所有程式所需要的程式库。在 UNIX 中,编译程式时
         常需要许多的函数和副程式,而这些函数和副程式多存放在程式库( library )
         写程式时就不用重新撰写这些部份的程式码了。
        
         同时,大部份的 UNIX 执行档在编译完成时将不会将副程式的程式码加到执行
         档中,而是等到执行时才自程式库取出副程式的程式码,这种动作称为动态链
         结( Dynamic link ),可想而知这样的设计可以减少许多的储存空间,而这些
         供动态链结用的程式库亦是存放在 /usr/lib 中,所以这个目录是非常重要的
         目录,如果它的内容有错往往会造成系统完全无法工作。
        
    d. /etc
         /etc 这个目录是存放管理 UNIX 系统用的程式,以及一些系统设定档。
        
    e. /home2/X11R5
         在资工系里头,使用最普遍的图形使用者介面( Graphics User Interface , GUI )
         是由麻省理工学院(MIT)所发展出来的 X window , 目前使用的是 X11R5(Version
         11 Release 5),这一部份的程式,程式库,标头档及其他资源档均放在
         /home2/X11R5 这个目录下。

    f. /usr/man
         在 UNIX 中,提供 man 指令( manual )让使用者在使用时可随时察询一些指令,
         函数,表格的使用法和规格,是一个非常有用的指令,而这些指令的 help 讯息
         就是存放在 /usr/man 下面。

    D. Process
         在 UNIX 中,一个执行中的程式就是一个 Process , 它占有记忆体,是一
         个"活着"的物体。每一个 Process 有一个 Process ID , 你可以用 ps 指令来
         观察目前系统中所有的 processes ,也可以利用 kill 指令送讯号给你自己的
         process ( 为何叫 kill 不叫 send ? 因为通常都是送一个"杀掉"的讯号 )。
  • 挂接文件系统

    2007-10-29 23:49:38

    挂接就是将分离的文件系统附加到文件系统分成结构中。文件系统要附加到某个挂接点,也就是目录。  
    挂接和卸载文件系统发生在系统启动和关闭时。  
    系统启动时,将读取/etc/vfstab文件。这个文件记录系统要挂接的文件系统。因此/etc/vfstab文件中的文件系统将自动挂接。也可以从命令行方式下人工挂接文件系统。  

    不加参数的mount显示系统目前已经挂接的文件系统。  
    # mount  
    / on /dev/dsk/c0t3d0s0 read/write/setuid/largefiles/logging on Mon Nov 18  
    17:58:19 1998  
    /usr on /dev/dsk/c0t3d0s6 read/write/setuid/largefiles/logging on Mon Nov 18  
    17:58:19 1998  
    /proc on /proc read/write/setuid on Mon Nov 18 17:58:19 1998  
    /dev/fd on fd read/write/setuid on Mon Nov 18 17:58:19 1998  
    /var on /dev/dsk/c0t3d0s1 nolargefiles/read/write/setuid on Mon Nov 18 17:58:19  
    1998  
    /opt on /dev/dsk/c0t3d0s5 setuid/read/write/largefiles on Mon Nov 18 17:58:20  
    1998  
    /tmp on swap read/write on Mon Nov 18 17:58:20 1998  
    /pns on dbserver:/export/pse soft/nosuid/remote on Mon Nov 18 19:04:36 1998  

    nolargefiles参数将使文件系统中所有新建的文件小于2G字节。  
    # mount -o nolargefiles /dev/dsk/c0t3d0s7 /export/home  

    使用这个参数可能出现错误,原因是由于文件系统包含了大于2G的文件  

    要挂接在/etc/vfstab中已有的某个文件系统时,只需要用命令  
    # mount /export/home  

    /etc/vfstab文件格式  
    #device device mount FS fsck mount mount  
    #to mount to fsck point type pass at boot ops  
    #/dev/dsk/c1d0s2 /dev/rdsk/c1d0s2 /usr ufs 1 yes -  
    /proc - /proc proc - no -  
    fd - /dev/fd fd - no -  
    swap - /tmp tmpfs - yes -  
    /dev/dsk/c0t3d0s0 /dev/rdsk/c0t3d0s0 / ufs 1 no -  
    /dev/dsk/c0t3d0s6 /dev/rdsk/c0t3d0s6 /usr ufs 1 no -  
    /dev/dsk/c0t3d0s3 /dev/rdsk/c0t3d0s3 /export ufs 5 yes -  
    /dev/dsk/c0t3d0s7 /dev/rdsk/c0t3d0s7 /export/home ufs 5 yes -  
    /dev/dsk/c0t3d0s5 /dev/rdsk/c0t3d0s5 /opt ufs 8 yes -  
    /dev/dsk/c0t3d0s1 - - swap - no -  


    umount卸载文件系统  
    # umount /dev/dsk/c0t3d0s7  
    或  
    # umount /export/home  
    如果文件系统中某个文件正在使用,则不能卸载这个文件系统。  


    总结:如何增加一个新的硬盘
    1. Set up hardware, including setting switches and attaching cables.  
    Follow the instructions included with the new disk. 2. Reboot the system using the command boot -r. This command will restart the system using the reconfigure (-r) option.  
    3. Partition the disk.   
    4. Create the new file systems as required.   
    5. Edit the /etc/vfstab file as required.   
    6. Reboot the system.  


    光驱、软驱的使用  
    Solaris有个服务进程管理光驱和软驱,当光盘或软盘放入机器中,系统会自动的挂接上,挂接的目录是:  
    Media Location  
    CD-ROM           /cdrom/cdrom_name  
    Diskette /floppy/floppy_name  

    如:  
    #cd /cdrom/cdrom0  

    管理进程叫卷管理服务器,其脚本位于/etc/init.d/volmgt。
  • Unix系统下创建文件系统

    2007-10-29 23:46:14

       在Unix系统下创建文件系统,其实类似于Windows下的格式化(Format)。我们看,在任何的操作系统下,对一个磁盘存储器来说(不论是S CSI的还是IDE的)首先第一部就是要分区(Fdisk)。分区为磁盘存储器划分了使用的空间;第二步是格式化,这个过程为磁盘存储器的分区指定了文件格式:在W indows系统下比如:FAT、FAT32、NTFS等。其实,在Windows系统下,这个格式化(Format)的过程实际上就是创建文件系统的过程。类似的,在U nix系统中,分区的操作只是为磁盘存储器划分的物理空间,而并没有指定分区的格式,(比如:NFS、JFS等)所以在Unix系统中,这个过程是由创建文件系统来完成的,它定义了系统分区的格式、节点类型、起始块等等信息。通过以上的分析,可以总结出U nix系统下创建文件系统的基本步骤: 
    1、分区 (相当于Windows系统下的分区) 
    2、创建文件系统 (相当于Windows系统的格式化) 
    3、mount文件系统 
    另外,在Unix系统中,一个分区只能有一个文件系统。 
    根据以上的分析,针对于不同的Unix系统,创建文件系统的基本步骤都是相同的,不同的是实现的命令不同。多多实践就好了,呵呵!但是这个动作往往是系统管理员在安装操作系统的过程中完成的,实践的时候还要注意系统中其他数据的安全。
  • 发现解决问题的死循环

    2007-10-29 23:35:48

     

             很想出去一趟, 很想去看看异乡的风情, 很想去找个蓝天白云的地方。
             今天又处理了一些事情,下午打了几个电话, 没想到说话也满辛苦的。 在朋友的提示下终于明白尤其是working is nerver end, 总是在发现问题解决问题, 所以干脆要去放松自己。 找机会去放松。
             改变自己去享受生活, ^_^, 说的很容易吧。
             跳出死循环, 一切又是新的。
             坚持一些,放弃一些,脑袋松一些,听听周杰伦的菊花台, 学着唱会......
     
  • Crazy

    2007-10-06 06:36:40

         十一假期去参加了5天的crazy english集训营班,一群疯子在卖弄,在喉,在叫。

         总体感觉还不错,但我早已不会再想大学生那样激情荡漾,不会因为几句煽情的言语擦眼泪,疯狂的定义就是为一个目标的执着追求,就是为你的学业(事业)充满激情。的确,兴趣到热爱到为之疯狂,需要的是一种精神,支撑着你。

         学习归来,感触最深的是教师是一个非常重要的角色,“子不学,师之错”古人就这么说过了, 现在又何尝不是这样呢? 老师需要激情,需要责任,需要耐心,需要关怀,去帮助每一个需要帮助的人,在学生的视野里,优秀的教师是伟大的,是能在学生的心里扎根的,他们会带着老师的教诲,激励去前进。 在这里我体会到了。

         集训营里重新学习了音标,发音,学会更加认真的做好一件小事的确可以纠正很多不良的影响。 坚持下去,每天坚持一句话,2008我们会相聚在北京。

         当然还有一些感觉不好的就是课程的费用也一直在疯狂突涨,对于那些尚未工作的学生来说仍然是一笔惊人的数目,有多少双期待的眼神又被迫打击了回来。

         最后的结业节目中有幸show了一下走秀步态,纯属现学现卖,不过总体还找到了一些感觉。

         也有幸进行了自己第一次的英语演讲,虽然自己在下面练习了很多次,但总有失利的时候,很遗憾, 不过我尽力了,为自己高兴。 实力的背后是艰苦的汗水,坚持,再坚持,不过你的步伐慢还是快,只要坚持就一定会到终点。

         待续...

  • 63个国外优秀测试网站地址

    2007-10-01 00:42:04

    63个国外优秀测试网站地址
    http://bdonline.sqe.com/ 一个关于网站测试方面的网页,对这方面感兴趣的人可以参考
    http://citeseer.nj.nec.com/ 一个丰富的电子书库,内容很多,而且提供著作的相关文档参考和下载,是作者非常推荐的一个资料参考网站
    http://groups.yahoo.com/group/LoadRunner 性能测试工具LoadRunner的一个论坛
    http://groups.yahoo.com/grorp/testing-paperannou-nce/messages 提供网站上当前发布的软件测试资料列表
    http://satc.gsfc.nasa.gov/homepage.html 软件保证中心是美国国家航天局(NASA)投资设立的一个软件可靠性和安全性研究中心,研究包括了度量、工具、风险等各个方面
    http://seg.iit.nrc.ca/English/index.html 加拿大的一个研究软件工程质量方面的组织,可以提供研究论文的下载
    http://sepo.nosc.mil/ 内容来自美国SAN DIEGO的软件工程机构(Sofrware Engineering Process Office)主页,包括软件工程知识方面的资料
    http://www.asq.org/ 是世界上最大的一个质量团体组织之一,有着比较丰富的论文资源,不过是收费的
    http://www.automated-testing.com/ 一个自动化软件测试和自然语言处理研究页面,属于个人网页,上面有些资源可供下载
    http://www.benchmarkresources.com/ 提供有关标杆方面的资料,也有一些其它软件测试方面的资料
    http://www.betasoft.com/ 包含一些流行测试工具的介绍、下载和讨论,还提供测试方面的资料
    http://www.brunel.ac.uk/~csstmmh2/vast/home.html VASTT研究组织,主要从事通过切片技术、测试技术和转换技术来验证和分析系统,对这方面技术感兴趣的人是可以在这里参考一些研究的项目及相关的一些主题信息
    http://www.cc.gatech.edu/aristotle/ Aristole研究组织,研究软件系统分析、测试和维护等方面的技术,在测试方面的研究包括了回归测试、测试套最小化、面向对象软件测试等内容,该网站有丰富的论文资源可供下载
    http://www.computer.org/ IEEE是世界上最悠久,也是在最大的计算机社会团体,它的电子图书馆拥有众多计算机方面的论文资料,是研究计算机方面的一个重要资源参考来源
    http://www.cs.colostate.edu/testing/ 可靠性研究网站,有一些可靠性方面的论文资料
    http://www.cs.york.ac.uk/testsig/ 约克大学的测试专业兴趣研究组网页,有比较丰富的资料下载,内容涵盖了测试的多个方面,包括测试自动化、测试数据生成、面向对象软件测试、验证确认过程等
    http://www.csr.ncl.ac.uk/index.html 学校里面的一个软件可靠性研究中心,提供有关软件可靠性研究方面的一些信息和资料,对这方面感兴趣的人可以参考
    http://www.dcs.shef.ac.uk/research/groups/vt/ 学校里的一个验证和测试研究机构,有一些相关项目和论文可供参考
    http://www.esi.es/en/main/ ESI(欧洲软件组织),提供包括CMM评估方面的各种服务
    http://www.europeindia.org/cd02/index.htm 一个可靠性研究网站,有可靠性方面的一些资料提供参考
    http://www.fortest.org.uk/ 一个测试研究网站,研究包括了静态测试技术(如模型检查、理论证明)和动态测试(如测试自动化、特定缺陷的检查、测试有效性分析等)
    http://www.grove.co.uk/ 一个有关软件测试和咨询机构的网站,有一些测试方面的课程和资料供下载
    http://www.hq.nasa.gov/office/codeq/relpract/prcls-23.htm NASA可靠性设计实践资料
    http://www.io.com/~wazmo/ Bret Pettichord的主页,他的一个热点测试页面连接非常有价值,从中可以获得相当大的测试资料,很有价值
    http://www.iso.ch/iso/en/ISOOnline.frontpage 国际标准化组织,提供包括ISO标准系统方面的各类参考资料
    http://www.isse.gmu.edu/faculty/ofut/classes/ 821-ootest/papers.html 提供面向对象和基于构架的测试方面著作下载,对这方面感兴趣的读者可以参考该网站,肯定有价值
    http://www.ivv.nasa.gov/ NASA设立的独立验证和确认机构,该机构提出了软件开发的全面验证和确认,在此可以获得这方面的研究资料
    http://www.kaner.com/ 著名的测试专家Cem Kanner的主页,里面有许多关于测试的专题文章,相信对大家都有用。Cem Kanner关于测试的最著名的书要算Testing Software,这本书已成为一个测试人员的标准参考书
    http://www.library.cmu.edu/Re-search/Engineer- ingAndSciences/CS+ECE/index.html 卡耐基梅陇大学网上图书馆,在这里你可以获得有关计算机方面各类论文资料,内容极其庞大,是研究软件测试不可获取的资料来源之一
    http://www.loadtester.com/ 一个性能测试方面的网站,提供有关性能测试、性能监控等方面的资源,包括论文、论坛以及一些相关链接
    http://www.mareinig.ch/mt/index.html 关于软件工程和应用开发领域的各种免费的实践知识、时事信息和资料文件下载,包括了测试方面的内容
    http://www.mtsu.ceu/-storm/ 软件测试在线资源,包括提供目前有哪些人在研究测试,测试工具列表连接,测试会议,测试新闻和讨论,软件测试文学(包括各种测试杂志,测试报告),各种测试研究组织等内容
    http://www.psqtcomference.com/ 实用软件质量技术和实用软件测试技术国际学术会议宣传网站,每年都会举行两次
    http://www.qacity.com/front.htm 测试工程师资源网站,包含各种测试技术及相关资料下载
    http://www.qaforums.com/ 关于软件质量保证方面的一个论坛,需要注册
    http://www.qaiusa.com/ QAI是一个提供质量保证方面咨询的国际著名机构,提供各种质量和测试方面证书认证
    http://www.qualitytree.com/ 一个测试咨询提供商,有一些测试可供下载,有几篇关于缺陷管理方面的文章值得参考
    http://www.rational.com/ IBM Rational的官方网站,可以在这里寻找测试方面的工具信息。IBM Rational提供测试方面一系列的工具,比较全面
    http://rexblackconsulting.com/Pages/publicat-ions.htm
    Rex Black的个人主页,有一些测试和测试管理方面的资料可供下载
    http://www.riceconsulting.com/ 一个测试咨询提供商,有一些测试资料可供下载,但不多
    http://www.satisfice.com/ 包含James Bach关于软件测试和过程方面的很多论文,尤其在启发式测试策略方面值得参考
    http://www.satisfice.com/seminars.shtml 一个黑盒软件测试方面的研讨会,主要由测试专家Cem Kanar和James Bach组织,有一些值得下载的资料
    http://www.sdmagazine.com/ 软件开发杂志,经常会有一些关于测试方面好的论文资料,同时还包括了项目和过程改进方面的课题,并且定期会有一些关于质量和测试方面的问题讨论
    http://www.sei.cmu.edu/ 著名的软件工程组织,承担美国国防部众多软件工程研究项目,在这里你可以获俄各类关于工程质量和测试方面的资料。该网站提供强有力的搜索功能,可以快速检索到你想要的论文资料,并且可以免费下载
    http://www.soft.com/Institute/HotList/ 提供了网上软件质量热点连接,包括:专业团体组织连接、教育机构连接、商业咨询公司连接、质量相关技术会议连接、各类测试技术专题连接等
    http://www.soft.com/News/QTN-Online/ 质量技术时事,提供有关测试质量方面的一些时事介绍信息,对于关心测试和质量发展的人士来说是很有价值的
    http://www.softwaredioxide.com/ 包括软件工程(CMM,CMMI,项目管理)软件测试等方面的资源
    http://www.softwareqatest.com/ 软件质量/测试资源中心。该中心提供了常见的有关测试方面的FAQ资料,各质量/测试网站介绍,各质量/测试工具介绍,各质量/策划书籍介绍以及与测试相关的工作网站介绍
    http://www.softwaretestinginstitute.com/ 一个软件测试机构,提供软件质量/测试方面的调查分析,测试计划模板,测试WWW的技术,如何获得测试证书的指导,测试方面书籍介绍,并且提供了一个测试论坛
    http://www.sqatester.com/index.htm 一个包含各种测试和质量保证方面的技术网站,提供咨询和培训服务,并有一些测试人员社团组织,特色内容是缺陷处理方面的技术
    http://www.sqe.com/ 一个软件质量工程服务性网站,组织软件测试自动化、STAR-EASE、STARWEST等方面的测试学术会议,并提供一些相关信息资料和课程服务
    http://www.stickyminds.com/ 提供关于软件测试和质量保证方面的当前发展信息资料,论文等资源
    http://www.stqemagazine.com/ 软件策划和质量工程杂志,经常有一些好的论文供下载,不过数量较少,更多地需要通过订购获得,内容还是很有价值的
    http://www.tantara.ab.ca/ 软件质量方面的一个咨询网站,有过程改进方面的一些资料提供
    http://www.tcse.org/ IEEE的一个软件工程技术委员会,提供技术论文下载,并有一个功能强大的分类下载搜索功能,可以搜索到测试类型、测试管理、 测试分析等各方面资料
    http://www.testing.com/ 测试技术专家Brain Marick的主页,包含了Marick 研究的一些资料和论文,该网页提供了测试模式方面的资料,值得研究。总之,如果对测试实践感兴趣,该网站一定不能错过
    http://www.testingcenter.com/ 有一些测试方面的课程体系,有一些价值
    http://www.testingconferences.com/asiastar/home 著名的AsiaStar测试国际学术会议官方网站,感兴趣的人一定不能错过
    http://www.testingstuff.com/ Kerry Zallar的个人主页,提供一些有关培训、工具、会议、论文方面的参考信息
    http://www-sqi.cit.gu.edu.au/ 软件质量机构,有一些技术资料可以供下载,包括软件产品质量模型、再工程、软件质量改进等

    欢迎转载此文,转载时请注明文章来源:文斯测试技术研究中心 http://blog.csdn.net/vincetest


    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1643839

  • [转载]《越狱》中的项目管理之道

    2007-10-01 00:32:59

    《越狱》中的项目管理之道


        因为美剧《越狱》具备了项目所需要的独特性、临时性和明确目标的所有特征,我们完全可以将主人公迈克尔·斯科菲尔德策划的越狱作为一个项目来看待。作为项目经理,迈克尔·斯科菲尔德的学识、冷静、自信和坚定,以及对于越狱这个目标的缜密计划,使得他获得了他人的信赖。而他也利用这样的信任和依赖,巧妙地周旋于各关键人物之间,出色地协调各种资源,从而成功地完成了越狱这一“不可完成的任务”。

        文/司晋琦(盛大网络发展有限公司玄霆研发部主管):越狱并非一个新鲜的题材,记得之前就有《肖申克的救赎》,也是关于越狱的,里面的主角也是智慧型的人物,冷静、坚韧。其实《越狱》所吸引我的,并不是它的题材,也不是演员的演技,而是由于它的剧情内融合了很多项目管理的理念。
     
        《越狱》主要是讲,毕业于名牌大学、有建筑学硕士学位并就职于某知名建筑公司的结构工程师迈克尔·斯科菲尔德,入狱搭救即将被执行死刑的哥哥林肯·布鲁斯(此人被冤枉杀死了副总统的弟弟)。在入狱前,他花了大量的精力,精心地做了前期准备工作,之后按照他所计划的步骤,故意持枪抢劫银行,从而得以进入林肯·布鲁斯所在的福克斯河畔监狱,并在那里组建了越狱团队。

        在越狱的整个过程中,我们可以看到迈克尔·斯科菲尔德近乎完美的计划,对项目过程的执行力,对项目干系人的控制力,以及对于项目风险的把握和及时变更的能力等。从各方面来说,迈克尔·斯科菲尔德是一个成功的项目经理,他的学识、冷静、自信和坚定,以及对于越狱这个目标的缜密计划,使得他获得了他人的信赖。而他也利用这样的信任和依赖,巧妙地周旋于各个干系人之间。最终以他出色的资源协调能力,成功地完成越狱计划。
     
    越狱的四点体会
        越狱具备了项目的特征,有其临时性和明确的目标,并且有十分严格的时间限制(林肯·布鲁斯执行死刑前)。而其运作受制于有限的资源,需要有良好的规划、执行和控制。迈克尔·斯科菲尔德在这个越狱项目中把各种知识、专业技能、工具应用于项目活动中。其给予的项目管理启示也是很有专业价值的。

    第一、前期调研以及项目计划
        任何项目的成功,都离不开初期对于完成项目目标而进行的调研活动,以及根据目标和调研分析而制定的可行性计划。迈克尔·斯科菲尔德在得知林肯·布鲁斯被关到福克斯河畔监狱后,收集了这个监狱以及周边的信息,包括道路交通。然后又拿来了他们公司曾经在福克斯河畔监狱进行改造建设的图纸,自己又利用建筑学等方面的专业知识,巧妙地将图纸和整个计划的一些关键提示设计为文身,并将它文在了身上,完成了对于最重要资源的准备工作。
        除了非人力资源的准备以外,他还对项目干系人进行了分析。
        首先,他需要一个安全防护最薄弱的地方,以便越狱。根据他对建筑图纸的分析,认定医务室将是最容易实施越狱的通道。于是他收集了关于女医生萨拉·唐科里迪的资料,包括她毕业的院校,她的座右铭,以及她曾经获得过的奖励。甚至为了伪装糖尿病来定期接近女医生,他还查了相关医学资料。有了这些信息也为他以后对于女医生实施“美男计”提供了可能性。
        其次,当越狱成功后就必定走向逃亡道路,如何销声匿迹呢?他注意到阿布兹也在福克斯河畔服刑后,找到了他比较关心的关键证人菲巴拉西,这样就可以以此为饵,实施对阿布兹的资源控制,以便于让阿布兹为他服务——提供逃亡的交通工具。
        再次,在走向逃亡路以后,还需要金钱来为他和他哥哥的生活提供保障。于是他注意到了福克斯河畔里的D·B库珀尔,收集了他的相关背景信息,以及他家人的信息,包括名字、居住地,而如果没有这些信息的支持,迈克尔·斯科菲尔德也不可能通过D·B库珀尔对他的试探,以至于最后取得他的信任。要知道D·B库珀尔是个年长而且很有经验的智者,如果他对于迈克尔·斯科菲尔德的计划周密程度,以及可行性程度一无所知的话,最终是不会和他冒险越狱的。 
        最后,他还结识了脱衣舞女郎,帮她拿到了在美国的绿卡,作为交换为他提供信用卡(上面的磁条用来伪造门禁卡)。 
        以上的这些准备,给了他足够的信心迈向福克斯河畔监狱去营救林肯·布鲁斯。对于项目干系人的重视以及分析得当,也让迈克尔·斯科菲尔德的越狱成功有了很大保障。这也让我想起了当时学习项目管理知识体系时的一个反面例子,在千年虫软件更新项目中,管理者一开始就对法律部门这个重要利害关系者的忽略和轻视,造成了大量文档的返工,增加了项目成本和最后完成度的风险。这就是由于在项目的开始阶段没有更加透彻地分析项目干系人,造成了本该事先准备的工作没有做到位,以至于引发了后期的返工。
     
        第二、资源管理 
        很钦佩迈克尔·斯科菲尔德对于各种资源的调配和协调能力,包括人力资源以外的硬件资源,比如他使用的各种工具,计时的手表、长椅上的螺丝钉、为假装糖尿病需要的药丸,等等。每一个工具都可以发挥关键性的作用,环环相扣。
        而对于人力资源方面,也就是项目干系人,他也体现出了非常优秀的协调、沟通以及控制能力。对于干系人女医生萨拉·唐科里迪、黑帮老大阿布兹、超级大盗D·B库珀尔、还有脱衣舞女,这些都是他计划内的。而对于计划外的室友苏克雷、恋童癖“背包”、提供药丸的“便条”、狱长以及看守队长等都属于非计划内的。这也体现了项目执行过程中最大的变量就是“人”,也是决定项目成败的关键。对于这些人,有其各自独特乃至相互冲突的利益需求、性格和背景。但是有一点是共同的,任何一个人都对项目成功有关键性作用。任何一个人、一件事情处理不好,都有可能使越狱功败垂成。但是,对于越狱团队成员无论加入的原因或者动机,他们都有一个共同的目标,就是越狱成功;而这个团队的对立面——狱方干系人的需求会比较多样化,监狱长要利用迈克尔·斯科菲尔德建造送给爱妻的泰姬陵模型,看守队长在盲目自信享受戏弄囚犯以及从他们身上获得利益的乐趣,女狱医在寻找爱人……所有这些需求,迈克尔·斯科菲尔德都能提供。找到共同点后,迈克尔·斯科菲尔德又靠着信任和相互的依存关系游刃于其中。这种信赖以及他对干系人的准确定位,使得他利用项目干系人之间的依存关系,找到了他越狱所需要的种种资源和支持。他向我们演示了如何紧扣需求和利益对项目干系人做出动态的管理。
        干系人对于项目的影响,积极和消极的情况都有可能。积极的干系人通常是项目成功结果中的获益者,而消极的干系人是从项目的成功中,得到消极结果者。忽视干系人的项目经理会对项目的结果造成破坏性的影响。

    第三、风险控制
        在项目执行过程中风险是始终伴随的,有些是可预知并可准备预案的,有些是突发性的,需要临时给予解决方案。
        上面谈到的项目干系人,以及越狱团队的临时扩充,只是越狱过程中他遇到的变化的一部分。在第一次越狱计划失败后,迈克尔·斯科菲尔德又启用了备用方案,这也可以看出迈克尔·斯科菲尔德在项目管理中的风险意识。迈克尔·斯科菲尔德在遭遇质疑的时候经常说:“我已经计算好了任何的可能。”但是意想不到的事还是接二连三地出现,甚至可以令他的越狱计划夭折,几次都身陷绝境,而最终都化险为夷。为什么?除了他一开始的缜密计划外,他冷静机智、处变不惊和自信坚定的心理素质和及时到位的应变,是根本原因。没有一成不变的事物,我们也没有以不变应万变的境界。因此当出现突发事件后最需要的还是面对问题、解决问题,而不是去相互争吵,或去探讨是谁的责任。虽然我们看到的是他一次次遇到各种问题,可每一次变化来临时,包括几次临近绝望时,他最终都能沉静下来,对变化做出冷静的分析,然后进行了计划的变更控制,或者启用预案。最后在服从越狱这一项目目标的前提下做出相应的调整。最主要的,他还往往能变不利为有利,让变化及变化的结果朝有利于越狱的方向发展,甚至成为越狱的有效资源。这也是他越狱的团队逐渐扩大,但依然成功的原因。解决问题依赖的不是“灵感”或者“上帝”,而是自己的知识积累和联想分析能力。
        项目风险源于任何项目中都存在的不确定性。对于已知风险可以采取预案的方式来规避,比如迈克尔·斯科菲尔德的备用方案。但是我们无法对未知风险进行主动管理。其实,我们可以从风险对项目成功造成的威胁或带来的机会的角度来看待风险。风险对项目所造成的威胁只要能与冒此风险所得到的收获相抵,就属于可接受风险。凡能够带来项目成功机会的风险不妨为之一搏,使项目目标从中受益。

    第四、时间管理 
        整个剧情中,迈克尔·斯科菲尔德一次次地进行时间测量,我们可以看到时间在整个越狱过程中的重要性,有时需要精确到秒的地步。狱警要定时巡查,所以每次去探路用的时间必须精确计算。同样给地下管道放水,事先需要计算管道的尺寸,大小和水流量,保证水能够在相对精确的时间放满到合适的位置。越狱过程中每一个环节也需要精确计算,保证没有延迟。第一次越狱虽然没有成功,但为了和林肯·布鲁斯在医务室碰头,也需要精确计算出各自采取行动的时间。而所有这些时间,迈克尔·斯科菲尔德都事先进行了测量或者规划。在真正的计划实施过程中也可以看到时间的紧迫,由于萨拉·唐科里迪的紧张,忘记在放风前将水箱的螺丝拧下,造成项目延期5分钟,以及到后面D·B库珀尔的突然倒下也拖延了一定的时间,其结果就是险些令迈克尔·斯科菲尔德越狱失败。
        从迈克尔·斯科菲尔德的时间管理中我们可以看到,他在执行每一步计划中都是有逻辑、有条理、有序列的,这就是项目时间管理中的活动排序,确定各计划活动之间的依赖关系,并进行活动资源的估算,也就是对完成计划活动所需资源和时间的计算。随后才会有明确的进度表,并且为每一个活动,规定时间节点。以便于对项目执行过程中的时间消耗进行监控,否则迈克尔·斯科菲尔德在苏克雷忘记拧下水箱螺丝后,是无法评估到项目延期5分钟。如果项目经理对于项目的执行进度状况没有一个清醒的量化值时,那么这个项目多数情况下很难保证按时完成。或者可以按时完成,但是会造成资源闲置的浪费,增加项目的成本风险。

        可无论如何他还是成功了,成王败寇,自古真理。很多企业也是这样,当企业成功的时候,回过头来看走过的路,也许很多关键性的决策都是错误的,但是无论如何走过来了,那么,错误的也变成了正确的。比如,如果没有精神病狱友的介入,也许迈克尔·斯科菲尔德被烫伤的“地图”就永远也找不回来了。而没有暴动,也许就没有英雄救美,也无法更深地得到女医生萨拉·唐科里迪的信任。 项目管理是一门艺术,是一门综合了多学科的艺术,是应用领域专业知识、通用管理技能以及沟通能力等相互融合后的综合管理技能。也许在迈克尔·斯科菲尔德的近乎“规范化”项目管理的背后,又打动了中国观众心灵的东西就是人性吧。《越狱》里处处可见人性,监狱长为了将要送给爱妻的泰姬陵给予迈克尔·斯科菲尔德很多的便利;苏克雷为了见狱外女友而忠心地为迈克尔·斯科菲尔德服务,甚至冒险去填补那个可能被发现的洞;D·B库珀尔为了见他女儿最后一面而加入了越狱团队贡献了自己一份力量;阿布兹,一个极难控制的成员,迈克尔·斯科菲尔德抓住他对证人的需求,甚至失去自己的脚趾,最终控制了他,拥有了所有行动的监狱资源……在这个越狱团队内每个人都有人性的弱点,而迈克尔·斯科菲尔德对于这些弱点以及成员需求的掌控十分到位。“若想取之,必先予之!”也许就是他在项目人力资源管理方面的最大亮点,应了那句话:掌握了人性的弱点,管理便无往不胜。

    欢迎转载此文,转载时请注明文章来源:文斯测试技术研究中心 http://blog.csdn.net/vincetest

  • 今天做了一件错事

    2007-09-15 13:02:05

          每做错一件事都给人留下很多经验教训, 我做错事情了, 事情的起因很简单, 不经意间就触动了别人的情绪和利益。 LG说我不懂,涉世太浅,现在没有什么对与错,不要追求那些是与非。 我说我接受不了现在这个乌杂的社会,他问我, 你能怎么样? 我说我逃离, 他说你还有父母和我们,你都丢下吗? 我说可能。

          当哑巴吧, 一切都不知可然。 一个火热的心用冰去冷却。

          也许我错了,开始就错了,用一颗热情的心非得要往那冰冷的地方去撞。那只有自己的心碎。

  • 测试技术有多少含量

    2007-09-09 00:03:29

         虽然我服务的公司对测试工作已经足够重视, 但开发和质量的同事仍然在说测试没什么技术含量。  个人认为不然。

         测试技术列举几个典型的: 测试需求分析设计(对应系统设计专家对口人)、压力测试、自动化测试。每一项都有很多技术在里面, 做精做细都是专家。

         但要想发展测试技术需要有大环境, 人力物力及测试理论的支持, 时间的支持, 如果从领导层面就看轻测试工作, 下面很难扭转局面。

         国内项目产品开发已经开始了几十年, 但测试刚起步, 有谁更多的关注并且投入它?  致使很多专家都弃门而逃,  致使测试的很多工作还都停留在看似简单的操作上。 

         1年半的真正投入测试工作的经验让我觉得其空间还是挺大的, 应该有一天信息行业的测试也崛起站立起来。

  • 测试管理和技术能否分开?

    2007-09-04 00:23:56

       个人认为做技术工作的部门管理和技术仍不能完全分开。 除非你管理的人员足够多, 部门足够大。 对于一个测试小组来说如果要想让小团队的技术水平不断增强。需要的是积极向上的气氛。 是需要领跑者去带领的, 有头的参与于不参与是两种氛围。  参与的程度可以把握。

     

  • 敏捷开发

    2007-08-31 23:26:44

    敏捷开发
      人与人之间的交互是复杂的,并且其效果从来都是难以预期的,但却是工作中最重要的方面。
    -- Tom DeMacro和Timothy Lister

    敏捷软件开发宣言:
    • 个体和交互     胜过 过程和工具
    • 可以工作的软件 胜过 面面俱到的文档
    • 客户合作       胜过 合同谈判
    • 响应变化       胜过 遵循计划
    虽然右项也有价值,但是我们认为左项具有更大的价值。
    • 我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。
    • 即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。
    • 经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。
    • 在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。
    • 围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。
    • 在团队内部,最具有效果并富有效率的传递信息的方法,就是面对面的交谈。
    • 工作的软件是首要的进度度量标准。
    • 敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。
    • 不断地关注优秀的技能和好的设计会增强敏捷能力。
    • 简单是最根本的。
    • 最好的构架、需求和设计出于自组织团队。
    • 每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。
    当软件开发需求的变化而变化时,软件设计会出现坏味道,当软件中出现下面任何一种气味时,表明软件正在腐化。
    • 僵化性: 很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其它改动。
    • 脆弱性: 对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题。
    • 牢固性: 很难解开系统的纠结,使之成为一些可在其他系统中重用的组件。
    • 粘滞性: 做正确的事情比做错误的事情要困难。
    • 不必要的复杂性: 设计中包含有不具任何直接好处的基础结构。
    • 不必要的重复性: 设计中包含有重复的结构,而该重复的结构本可以使用单一的抽象进行统一。
    • 晦涩性: 很难阅读、理解。没有很好地表现出意图。
    敏捷团队依靠变化来获取活力。团队几乎不进行预先设计,因此,不需要一个成熟的初始设计。他们更愿意保持设计尽可能的干净、简单,并使用许多单元测试和验收测试作为支援。这保持了设计的灵活性、易于理解性。团队利用这种灵活性,持续地改进设计,以便于每次迭代结束生成的系统都具有最适合于那次迭代中需求的设计。为了改变上面软件设计中的腐化味,敏捷开发采取了以下面向对象的设计原则来加以避免,这些原则如下:
    • 单一职责原则(SRP)
      就一个类而言,应该仅有一个引起它变化的原因。
    • 开放-封闭原则(OCP)
      软件实体应该是可以扩展的,但是不可修改。
    • Liskov替换原则(LSP)
      子类型必须能够替换掉它们的基类型。
    • 依赖倒置原则(DIP)
      抽象不应该依赖于细节。细节应该依赖于抽象。
    • 接口隔离原则(ISP)
      不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。
    • 重用发布等价原则(REP)
      重用的粒度就是发布的粒度。
    • 共同封闭原则(CCP)
      包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。
    • 共同重用原则(CRP)
      一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。
    • 无环依赖原则(ADP)
      在包的依赖关系图中不允许存在环。
    • 稳定依赖原则(SDP)
      朝着稳定的方向进行依赖。
    • 稳定抽象原则(SAP)
      包的抽象程度应该和其稳定程度一致。
      上述中的包的概念是:包可以用作包容一组类的容器,通过把类组织成包,我们可以在更高层次的抽象上来理解设计,我们也可以通过包来管理软件的开发和发布。目的就是根据一些原则对应用程序中的类进行划分,然后把那些划分后的类分配到包中。

    下面举一个简单的设计问题方面的模式与原则应用的示例:

    问题:
      选择设计运行在简易台灯中的软件,台灯由一个开关和一盏灯组成。你可以询问开关开着还是关着,也可以让灯打开或关闭。

    解决方案一:
      下面图1是一种最简单的解决方案,Switch对象可以轮询真实开关的状态,并且可以发送相应的turnOn和turnOff消息给Light。


    解决方案二:
      上面这个设计违反了两个设计原则:依赖倒置原则(DIP)和开放封闭原则(OCP),DIP原则告诉我们要优先依赖于抽象类,而Switch依赖了具体类Light,对OCP的违反是在任何需要Switch的地方都要带上Light,这样就不能容易扩展Switch去管理除Light外的其他对象。为了解决这个方案,可以采用ABSTRACT SERVER模式,在Switch和Light之间引入一个接口,这样就使得Switch能够控制任何实现了这个接口的东西,这也就满足了DIP和OCP原则。如下面图2所示:



    解决方案三:
      上面图2所示解决方案,违返了单一职责原则(SRP),它把Switch和Light绑定在一起,而它们可能会因为不同的原因而改变。这种问题可以采用ADAPTER模式来解决,适配器从Switchable 派生并委托给Light,问题就被优美的解决了,现在,Switch就可以控制任何能够被打开或者关闭的对象。但是这也需要会出时间和空间上的代价来换取。如下面图3所示:



      敏捷设计是一个过程,不是一个事件。它是一个持续的应用原则、模式以及实践来改进软件的结构和可读性的过程。它致力于保持系统设计在任何时间都尽可能得简单、干净和富有表现力。

    参考文献
    1. 设计模式-可复用面向对象软件的基础 -- 李英军等译
    2. 重构-改善既有代码的设计 -- 侯捷等译
    3. 敏捷软件开发-原则、模式与实现 -- 邓辉译
  • XP极限编程

    2007-08-31 23:22:18

          极限编程Extreme ProgrammingXP)是一门针对业务和软件开发的规则,它的作用在于将两者的力量集中在共同的、可以达到的目标上。它是以符合客户需要的软件为目标而产生的一种方法论,XP使开发者能够更有效的响应客户的需求变化,哪怕是在软件生命周期的后期。它强调,软件开发是人与人合作进行的过程,因此成功的软件开发过程应该充分利用人的优势,而弱化人的缺点,突出了人在软件开发过程中的作用。极端编程属于轻量级的方法,认为文档、架构不如直接编程来的直接。

          XP实际上是一种经历过很多实践考验的一种软件开发的方法,它诞生了大概有5 年,它已经被成功的应用在许多大型的公司,如:Bayeris che Landesbank,Credit Swis s Life,DaimlerChrysler,First Union National Bank Ford Motor Company and UBS.XP 的成功得益于它对客户满意度的特别强调,XP 是以开发符合客户需要的软件为目标而产生的一种方法论,XP 使开发者能够更有效的响应客户的需求变化,哪怕在软件生命周期的后期。

      同时,XP 也很强调团队合作。团队包括:项目经理,客户,开发者。他们团结在一起来保证高质量的软件。XP 其实是一种保证成功的团队开发的简单而有效的方法。

      XP 强调四种价值:交流,简易,回馈,勇气。XP 程序员之间紧密的相互交流,XP 程序员也和客户紧密的交流。他们总是保持他们的设计简单明了。项目一开始,XP 就强调通过对软件的不断测试来获得反馈,程序员尽可能早的把软件交给客户,并实现客户对软件需求提出的变化,有了这些基础,XP 程序员就可以自信的面对需求和软件技术的变化。

      XP 是与众不同的,它有点象快步的舞蹈。XP 开发过程包括许多的小卡片,独立的看,这些小卡片没有什么意义,但是当它们组合在一起,一幅完整的美丽的图片就可以看见,XP方法有别于传统软件开发,它是软件开发的一种新的重要的发展。它改变了我们开发程序的传统思维方式。下面我们将介绍它带给我们那些改变。
     
      XP属于轻量开发方法中较有影响的一种方法。轻量开发方法是相对于传统的重量开发方法而言。简单地理解,“量”的轻重是指用于软件过程管理和控制的、除程序量以外的“文档量”的多少。XP等轻量开发方法认识到,在当前很多情况下,按传统观念建立的大量文档,一方面需要消耗大量开发资源,同时却已失去帮助“预见、管理、决策和控制的依据”的作用。因此必须重新审视开发环节,去除臃肿累赘,轻装上阵。

    一、XP的核心思想

          从长远看,早期发现错误以及降低复杂度可以节约成本。极限编程强调我们将任务/系统细分为可以在较短周期解决的一个个子任务/模块,并且强调测试、代码质量和及早发现问题。通常,通过一个个短小的迭代周期,我们就可以获得一个个阶段性的进展,并且可以及时形成一个版本供用户参考,以便及时对用户可能的需求变更作出响应。

    二、XP的十二种方法

          规划策略(The Planning Game);
          结对编程(Pair programming)
          测试(Testing)
          重构(Refractoring)
          简单设计(Simple Design)
          代码集体所有权(Collective Code Ownership)
          持续集成(Continuous Integration)
          现场客户(On-site Customer)
          小型发布(Small Release)
          每周40小时工作制(40-hour Week)
          编码规范(Code Standards)
          系统隐喻(System Metaphor)

    三、XP的四个核心价值

          极限编程中有四个核心价值是我们在开发中必须注意的:沟通(Communication)、简单(Simplicity)、反馈(Feedback)和勇气(Courage)。

      XP用“沟通、简单、反馈和勇气”来减轻开发压力和包袱;无论是术语命名、专著叙述内容和方式、过程要求,都可以从中感受到轻松愉快和主动奋发的态度和气氛。这是一种帮助理解和更容易激发人的潜力的手段。XP用自己的实践,在一定范围内成功地打破了软件工程“必须重量”才能成功的传统观念。

      XP精神可以启发我们如何学习和对待快速变化、多样的开发技术。成功学习XP的关键,是用“沟通、简单、反馈和勇气”的态度来对待XP;轻松愉快地来感受XP的实践思想;自己认真实践后,通过对真实反馈的分析,来决定XP对自己的价值;有勇气接受它,或改进它。

    四、XP 带给我们的变化

      通过软件工程设计的简单而优美的软件并不比那些设计复杂而难以维护的软件有价值。这是真的吗?XP认为事实并非如此。

      一个典型的项目花在人力上的金钱是花在硬件上的时间的20 倍,这意味着一个项目每年要花200 万美元在程序员身上,而仅仅花10 万美元在电脑设备上。很多聪明的程序员说:“我们如此聪明,发现一种方法可以节省20%的硬件开销”,然后他们使得源程序大而且难懂和难以维护,他们会说:“但是我们节省了20%或者2 万美元每年,很大的节省”。反之,如果我们写我们的程序简单而且容易扩展,我们将至少节省10%的人力开销,一笔更大的节省,这是你客户一定会注意到的一些事情。

      另外一个对客户来说很重要的问题就是程序的BUGS 。XP 不只是强调测试,而且要求正确的测试。测试必须是能自动进行的,以便为程序和客户提供一个安全的环境。在编码的所有阶段,我们不断增加测试用例。当找到bug 时,我们就添加新的测试,一个紧密的安全网就这样产生了。同一个BUG 不出现两次,这些一定会引起用户的注意。你的客户必须注意的另外一件事情:XP 开发者拥抱需求变化。XP 使我们能够接受需求的变化。

      一般情况下,客户只有在系统被开发完成以后能真正去体会它。XP 却不一样,它通过加强客户的反馈来缩短开发的周期,同时获得足够的时间来改变功能和获得用户的认同。在XP 中,你的客户应该明确的知道这一点。

      XP开发过程的大多的革命是在软件开发的方法上,代码质量的重要程度超出人们一般所认为的。仅仅因为我们的客户不能明白我们的源代码并不意味着我们可以不努力去管理代码的质量。

    五、我们什么时候用XP

      XP方法的产生是因为难以管理的需求变化,从一开始你的客户并不是很完全的知道他们要的系统是怎么样的,你可能面对的系统的功能一个月变化多次。在大多数软件开发环境中不断变化的需求是唯一的不变,这个时候应用XP 就可以取得别的方法不可能取得的成功。XP 方法的建立同时也是为了解决软件开发项目中的风险问题。假如你的客户在特定的时间内,需要一个相当难开发的系统,而且对于你的项目组来说,这个系统是一个新的挑战(从来没有做过),那风险就更大了,如果这个系统对于整个软件行业来说都是新的挑战,那么它的风险就更大了,采用XP 将可以减少风险,增加成功的可能。

      XP方法是为小团体开发建立的,在2-10 个人之间。假如你的团体恰好合适,你就不需要用其他的软件工程方法了,就用XP ,但是要注意你不能将XP 方法应用于大团体的开发项目中。我们应该注意,在需求一惯呈动态变化或者高具有高风险的项目中,你就会发现XP 方法在小团体的开发中的作用要远远高于在大团体的开发。

      XP方法需要一个扩展的开发团体,XP 团体不仅仅包括开发者,经理、客户也是其中的一员,所有的工作一环扣一环,问问题,商讨方法和日程,增加功能测试,这些问题的解决不仅仅涉及到软件的开发者。

      另一个需要是可测试性,你必须能增加自动的单元测试和功能测试,然而在你进行这个需求的时候,你会发现有许多的问题很难测试,这需要充分发挥你的测试的经验和智慧,而且你有时还要改变你的设计以便它可以更容易的进行测试。记住:那儿有需求,那儿就应该有测试的方法。

      在XP方法的好处的清单上,最后一条是生产力。在同样的合作环境下,XP 项目都一致的表现出比使用其他方法高的多的生产力。但这从来不是XP 方法学的真正目标。XP 真实追求的目标是:在规定的时间生产出满足客户需要的软件。假如对于你的开发来说,这是很重要的方面,你就可以选择XP 了。

    六、极限编程的有效实践

    1、完整团队

          XP项目的所有参与者(开发人员、客户、测试人员等)一起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的墙壁上随意悬挂着大幅的、显著的图表以及其他一些显示他们进度的东西。

    2、计划游戏

          计划是持续的、循序渐进的。每2周,开发人员就为下2周估算候选特性的成本,而客户则根据成本和商务价值来选择要实现的特性。

    3、客户测试

          作为选择每个所期望的特性的一部分,客户可以根据脚本语言来定义出自动验收测试来表明该特性可以工作。

    4、简单设计

          团队保持设计恰好和当前的系统功能相匹配。它通过了所有的测试,不包含任何重复,表达出了编写者想表达的所有东西,并且包含尽可能少的代码。

    5、结对编程

          所有的产品软件都是由两个程序员、并排坐在一起在同一台机器上构建的。

    6、测试驱动开发

          编写单元测试是一个验证行为,更是一个设计行为。同样,它更是一种编写文档的行为。编写单元测试避免了相当数量的反馈循环,尤其是功功能能验证方面的反馈循环。程序员以非常短的循环周期工作,他们先增加一个失败的测试,然后使之通过。

    7、改进设计

          随时利用重构方法改进已经腐化的代码,保持代码尽可能的干净、具有表达力。

    8、持续集成

          团队总是使系统完整地被集成。一个人拆入(Check in)后,其它所有人责任代码集成。

    9、集体代码所有权

          任何结对的程序员都可以在任何时候改进任何代码。没有程序员对任何一个特定的模块或技术单独负责,每个人都可以参与任何其它方面的开发。

    10、编码标准

          系统中所有的代码看起来就好像是被单独一人编写的。

    11、隐喻

          将整个系统联系在一起的全局视图;它是系统的未来影像,是它使得所有单独模块的位置和外观变得明显直观。如果模块的外观与整个隐喻不符,那么你就知道该模块是错误的。

    12、可持续的速度

          团队只有持久才有获胜的希望。他们以能够长期维持的速度努力工作,他们保存精力,他们把项目看作是马拉松长跑,而不是全速短跑。

  • 合久比分, 分久必合

    2007-08-31 22:28:51

         人生总是聚散离合,合久比分, 分久必合。虽然本人生平很不适应分开的结果,但事实总是摆在面前,让我惆然若失,冰点感受。

         新加入了几个同事, 总之感觉大家还是有活力的, 不是默默沉沉的, 能给大家带来笑声的一个团队。 现在更多的体会就是队伍要看什么人去带, 也才会有什么样的性格。 做IT行业人生的大部分都用在工作上, 快乐工作,快乐生活,比喻的很形象, 那就让我们一起去面对吧, 把自己的开心传递出去, 一接一, 气氛就出来了。 充实而快乐的感觉不是每个人都能拥有的, 有目标有氛围有情趣的人才能积极的感受快乐。

         告诉自己抬头面对,努力承担,希望你们能感受到我的快乐。

     

  • unix命令集

    2007-08-26 10:02:29

    unix命令集

    第一章 目录及文件操作命令

    1.1 ls

    [语法]: ls [-RadCxmlnogrtucpFbqisf1] [目录或文件......]
    [说明]: ls 命令列出指定目录下的文件,缺省目录为当前目录 ./,缺省输出顺序为纵向按字符顺序排列。
    -R 递归地列出每个子目录的内容
    -a 列出所有文件,包括第一个字符为"."的隐藏文件
    -d 若后面参数是目录,则只列出目录名而不列出目录内容,常与-l选项连
    用以显示目录状态。
    -C 输出时多列显示
    -x 横向按字符顺序排列
    -m 输出按流式格式横向排列,文件名之间用逗号(,)分隔
    -l 长列表输出,显示文件详细信息,每行一个文件,从左至右依次是:
    文件存取模式 链接数 文件主 文件组 文件字节数 上次修改时间
    其中文件存取模式用10个字母表示,从左至右的意义如下:
    第一个字母表示文件种类,可以是以下几种情况:
    d 为目录文件
    l 为链接
    b 为块文件
    c 为字符型文件
    p 为命名管道(FIFO)
    - 为普通文件
    后面9个字母分别表示文件主、同组用户、其他用户对文件的权力,用r表示可读,w 表示可写,x 表示可执行。如果是设备文件,则在文件字节数处显示:主设备 从设备。
    -n 与-l选项相同,只是文件主用数字(即UID)显示,文件组用数字
    (即GID)表示
    -o 与-l选项相同,只是不显示文件组
    -g 与-l选项相同,只是不显示文件主
    -r 逆序排列
    -t 按时间顺序排列而非按名字
    -u 显示时间时使用上次访问时间而非上次修改时间
    -c 显示时间时使用上次修改i节点时间而非上次修改时间
    -p 若所列文件是目录文件,则在其后显示斜杠(/)
    -F 在目录文件后加’/’,在可执行文件后加’*’
    -b 文件名中若有非打印字符,则用八进制显示该字符
    -q 文件名中的打印字符用’?’表示
    -i 显示节点号
    -s 显示文件长度时使用块长度而非字节长度
    -f 将后面的参数解释为目录并列出其中的每一项
    -1 每行仅列一项
    [例子]:
    ls 列出当前目录下的文件
    ls -al /bin 以长列表的形式列出目录 /bin 下的所有文件,包括隐藏文件

    1.2 pwd

    [语法]: pwd
    [说明]: 本命令用于显示当前的工作目录
    [例子]:
    pwd 显示出当前的工作目录

    1.3 cd

    [语法]: cd [目录]
    [说明]:本命令用于改变当前的工作目录,无参数时使用环境变量$HOME 作为其参数,$HOME 一般为注册时进入的路径。
    [例子]:
    cd 回到注册进入时的目录
    cd /tmp 进入 /tmp 目录
    cd ../ 进入上级目录

    1.4 mkdir

    [语法]: mkdir [-m 模式] [-p] 目录名
    [说明]: 本命令用于建立目录,目录的存取模式由掩码(umask)决定,要求对其父目录具有写权限,目录的UID和GID为实际UID和GID
    -m 按指定存取模式建立目录
    -p 建立目录时建立其所有不存在的父目录
    [例子]:
    mkdir tmp 在当前目录下建立子目录 tmp
    mkdir -m 777 /tmp/abc 用所有用户可读可写可执行的存取模式
    建立目录 /tmp/aaa ,存取模式参看命令 chmod
    mkdir -p /tmp/a/b/c 建立目录 /tmp/a/b/c ,若不存在目录 /tmp/a
    及/tmp/a/b 则建立之

    1.5 rmdir

    [语法]: rmdir [-p] [-s] 目录名
    [说明]: 本命令用于删除目录
    -p 删除所有已经为空的父目录
    -s 当使用-p 选项时,出现错误不提示
    [例子]:
    rmdir /tmp/abc 删除目录 /tmp/abc
    rmdir -p /tmp/a/b/c 删除目录 /tmp/a/b/c ,若目录 /tmp/a /b
    及/tmp/a 空,则删除

    1.6 cat

    [语法]: cat [-u] [-s] [-v[-t] [-e]] 文件...
    [说明]: 显示和连接一个或多个文件至标准输出
    -u 无缓冲的输出(缺省为有缓冲输出)
    -s 对不存在的文件不作提示
    -v 显示出文件中的非打印字符,控制字符显示成^n ,n为八进制数字,
    其他非打印字符显示成M-x , x 为该字符低7位的8进制数值
    -t 在使用-v 选项时,将制表符(tab) 显示成 ^I,将换页符
    (formfeed)显示成 ^ L
    -e 在使用-v 选项时,在每一行的行尾显示 $
    [例子]:
    cat file 显示文件
    cat -s -v -e file1 file2 file3 逐个显示文件 file1 file2 file3

    1.7 head

    [语法]: head [-n] [文件 ...]
    [说明]: 将文件的头n 行显示输出,缺省值为 10 行,显示多个文件时,在每个文件的前面加上 ==> 文件名 <==
    [例子]:
    head -9999 file1 file2 显示文件 file1 和 file2 的头 9999 行

    1.8 more

    [语法]: more [-cdflrsuw] [- 行数] [+ 行数] [+ / 模式 ] [ 文件 ... ]
    [说明]: 将文件显示在终端上,每次一屏,在左下部显示 --more--,若是从文件读出而非从管道,则在后面显示百分比,表示已显示的部分,按回车键则上滚一行,按空格键则上滚一屏,未显示完时可以使用more 命令中的子命令。
    -c 显示文件之前先清屏
    -d 当输错命令时显示错误信息而不是响铃(bell)
    -f 不折叠显示长的行
    -l 不将分页控制符(CTRL D)当作页结束
    -r 一般情况下,more 不显示控制符,本选项使more 显示控制符,
    例如,将 (CTRL C) 显示成 ^ C
    -s 将多个空行转换成一个空行显示
    -u 禁止产生下划线序列
    -w 一般情况下 more 显示完后立即退出,本选项在显示完后作提
    示,敲任意键后退出
    -n 行数 指定每屏显示的行数
    + 行号 从指定行号开始显示
    +/模式 在文件中搜索指定模式,从模式出现行的上两行开始显示 文件未显示完时,可以使用more 命令中的子命令,命令中除了! 和 / 以外均不回显,也不用敲回车,当命令破坏 more 提示行时,可用退格键恢复提示行。在以下子命令操作中,i 表示数字,缺省值为 1。
    i 空格 上滚一屏多 i 行
    i 回车 上滚 i 行
    i CTRL+D i 缺省时上滚 11 行,否则上滚 i 行
    id i 缺省时上滚 11 行,否则上滚 i 行
    iz i 缺省时上滚一屏,否则定义每屏为 i 行
    is 跳过 i 行后显示一屏
    if 跳过 i 屏后显示一屏
    i CTRL+B 跳回 i 屏后显示一屏
    b 跳回 一屏后显示一屏
    q 或 Q 退出 more
    = 显示当前行号
    v 从当前行开始编辑当前文件编辑器由环境变量
    $EDITOR定义
    h 显示帮助信息
    i / 模式 向前搜索,直至模式的第 i 次出现 , 从该行的上 两行开始显示一屏
    in 向前搜索,直至上一模式的第 i 次出现 , 从该行 的上两行开始显示一屏
    单引号 回到上次搜索的出发点,若无搜索则回到开始位置
    ! 命令 激活一个sh 去执行指定的命令
    i : n 跳到后面第 i 个文件,若不存在则跳到最后一个文件
    :f 显示当前文件名和行号
    :q 或 :Q 退出 more
    . (点) 重复上次命令
    [ 例子]:
    more -c +50 file 清屏后,从第50行开始显示文件 file
    more -s -w file1 file2 file3 显示文件 file1 file2 file3

    1.9 cp

    [语法]: cp [ -p ] [ -r ] 文件 1 [ 文件 2 ...] 目标
    [说明]: 将文件1(文件2 ...)拷贝到目标上,目标不能与文件同名, 若目标是文件名,则拷贝的文件只能有一个,若目标是目录, 则拷贝的文件可以有多个,若目标文件不存在,则建立这个文件,若存在,则覆盖其以前的内容,若目标是目录,则将文件拷贝到这个目录下。
    - i 在覆盖已存在文件时作提示,若回答 y 则覆盖,其他则中止
    - p 不仅拷贝文件内容,还有修改时间,存取模式,存取控制表, 但不拷贝
    UID 及 GID
    - r 若文件名为目录,则拷贝目录下所有文件及子目录和它们的文件,此时
    目标必须为目录
    [例子]:
    cp file1 file2 将文件 file1 拷贝到文件 file2
    cp file1 file2 /tmp 将文件 file1 和文件 file2 拷贝到目录 /tmp 下
    cp -r /tmp /mytmp 将目录 /tmp 下所有文件及其子目录拷贝至目录/mytmp

    1.10 mv

    [语法]: mv [-f] [-i] 文件1 [文件2...] 目标
    [说明]: 将文件移动至目标,若目标是文件名,则相当于文件改名
    - i 在覆盖已存在文件时作提示,若回答 y 则覆盖,其他则中止
    - f 覆盖前不作任何提示
    [例子]:
    mv file1 file2 将文件 file1 改名为 file2
    mv file1 file2 /tmp 将文件 file1 和文件 file2 移动到目录 /tmp 下

    1.11 rm

    [语法]: rm [-f] [-i] 文件...
    或 rm -r [-f] [-i] 目录名... [文件]
    [说明]: 用来删除文件或目录
    - f 删除文件时不作提示
    - r 递归地删除目录及其所有子目录
    - i 删除文件之前先作提示
    [例子]:
    rm file1 删除文件 file1
    rm -i /tmp/* 删除目录 /tmp 下的所有文件
    rm -r /mytmp 递归地删除目录 /mytmp

    1.12 chmod

    [语法]: chmod [-R] 模式 文件...
    或 chmod [ugoa] {+|-|=} [rwxst] 文件...
    [说明]: 改变文件的存取模式,存取模式可表示为数字或符号串,例如:
    chmod nnnn file , n为0-7的数字,意义如下:
    4000 运行时可改变UID
    2000 运行时可改变GID
    1000 置粘着位
    0400 文件主可读
    0200 文件主可写
    0100 文件主可执行
    0040 同组用户可读
    0020 同组用户可写
    0010 同组用户可执行
    0004 其他用户可读
    0002 其他用户可写
    0001 其他用户可执行
    nnnn 就是上列数字相加得到的,例如 chmod 0777 file 是指将文件 file 存取权限置为所有用户可读可写可执行。
    -R 递归地改变所有子目录下所有文件的存取模式
    u 文件主
    g 同组用户
    o 其他用户
    a 所有用户
    + 增加后列权限
    - 取消后列权限
    = 置成后列权限
    r 可读
    w 可写
    x 可执行
    s 运行时可置UID
    t 运行时可置GID
    [例子]:
    chmod 0666 file1 file2 将文件 file1 及 file2 置为所有用户可读可写
    chmod u+x file 对文件 file 增加文件主可执行权限
    chmod o-rwx 对文件file 取消其他用户的所有权限

    1.13 chown

    [语法]: chown [-R] 文件主 文件...
    [说明]: 文件的UID表示文件的文件主,文件主可用数字表示, 也可用一个有效的用户名表示,此命令改变一个文件的UID,仅当此文件的文件主或超级用户可使用。
    -R 递归地改变所有子目录下所有文件的存取模式
    [例子]:
    chown mary file 将文件 file 的文件主改为 mary
    chown 150 file 将文件 file 的UID改为150

    1.14 chgrp

    [语法]: chgrp [-R] 文件组 文件...
    [说明]: 文件的GID表示文件的文件组,文件组可用数字表示, 也可用一个有效的组名表示,此命令改变一个文件的GID,可参看chown。
    -R 递归地改变所有子目录下所有文件的存取模式
    [例子]:
    chgrp group file 将文件 file 的文件组改为 group

    1.15 cmp

    [语法]: cmp [-l] [-s] 文件1 文件2
    [说明]: 比较两个文件,若文件1 为 "-" ,则使用标准输入, 两个文件相同则无提示,不同则显示出现第一个不同时的字符数和行号。
    -l 显示每个不同处的字节数(10进制)和不同的字节(8进制)
    -s 不作任何提示,只返回码
    [例子]:
    cmp file1 file2 比较文件 file1 和 file2
    cmp -l file1 file2 比较文件file1 和 file2 的每处不同

    1.16 diff

    [语法]: diff [-be] 文件1 文件2
    [说明]: 本命令比较两个文本文件,将不同的行列出来
    -b 将一串空格或TAB转换成一个空格或TAB
    -e 生成一个编辑角本,作为ex或ed的输入可将文件1转换成文件2
    [例子]:
    diff file1 file2
    diff -b file1 file2
    diff -e file1 file2 >edscrīpt

    1.17 wc

    [语法]: wc [-lwc] 文件...
    [说明]: 统计文件的行、字、字符数,若无指定文件,则统计标准输入
    -l 只统计行数
    -w 只统计字数
    -c 只统计字符数
    [例子]:
    wc -l file1 file2 统计文件file1和file2 的行数

    1.18 split

    [语法]: split [-n] [ 文件 [名字]]
    [说明]: split 将指定大文件分解为若干个小文件,每个文件长度为n行(n 缺省时为1000),第一个小文件名为指定的名字后跟aa,直至zz,名字缺省值为x,若未指定大文件名,则使用标准输入
    [例子]:
    split -500 largefile little
    将文件largefile 每500行写入一个文件,第一个文件名为littleaa

    1.19 touch

    [语法]: touch [-amc] [mmddhhmm[yy]] 文件...
    [说明]: 将指定文件的访问时间和修改时间改变,若指定文件不存在则创建之,若无指定时间,则使用当前时间,返回值是未成功改变时间的文件个数,包括不存在而又未能创建的文件。
    -a 只改变访问时间
    -m 只改变修改时间
    -c 若文件不存在,不创建它且不作提示
    mmddhhmm[yy] 两位表示 月日时分[年]
    [例子]:
    touch file
    更新文件file的时间
    touch 0701000097 HongKong
    将文件HongKong的时间改为97年7月1日0时0分

    1.20 file

    [语法]: file [-f 文件名文件] 文件...
    [说明]: file 对指定文件进行测试,尽量猜测出文件类型并显示出来
    -f 文件名文件 文件名文件是一个包含了文件名的文本文件, -f 选项测试
    文件名文件中所列出的文件
    [例子]:
    file * 显示当前目录下所有文件的类型

    1.21 pack

    [语法]: pack 文件...
    [说明]: pack 将指定文件转储为压缩格式,文件名后加 ".z ", 文件存取模式,访问时间,修改时间等均不变
    [例子]:
    pack largefile 将largefile 压缩后转储为largefile.z

    1.22 pcat 显示压缩文件

    [语法]: pcat 文件...
    [说明]: pcat 显示输出压缩文件
    [例子]:
    pcat largefile.z 显示压缩前的largefile
    pcat largefile.z > oldfile 显示压缩前的laregfile,并将其重定向到
    文件oldfile中

    1.23 unpack

    [语法]: unpack 文件...
    [说明]: 将压缩后的文件解压后转储为压缩前的格式
    [例子]:
    unpack largefile.z 将压缩文件largefile.z解压后转储为largefile

    1.24 find

    [语法]: find 路径名... 表达式
    [说明]: find 命令递归地遍历指定路径下的每个文件和子目录,看该文件是否能使表达式值为真,以下 n 代表一个十进制整数,+n 代表打印 n , -n 代表小于 n ,下面是合法表达式说明:
    -name 模式 文件名与模式匹配则为真,(\ 为转意符)
    -perm [-]八进制数 文件存取模式与八进制数相同则为真若有- 选项,则文件存
    取模式含有八进制数规定模式即为真
    -size n[c] 文件块长度为 n 则真(一块为512字节),若
    有c 选项,则文件字节长度为 n 则真
    -atime n 若文件的最近访问时间为 n 天前则为真,
    find 命令将改变其访问的目录的访问时间
    -mtime n 若文件的最近修改时间为 n 天前则为真
    -ctime n 若文件状态为 n 天前改变则为真
    -exec 命令 { }\; 若命令返回值为0则真,{ }内为命令参数,
    此命令必须以 \; 为结束
    -ok 命令 { }\; 与 exec 相同,只是在命令执行前先提示,若
    回答 y 则执行命令
    -print 显示输出使表达式为真的文件名
    -newer 文件 若文件的访问时间比newer 指定的文件新则真
    -depth 先下降到搜索目录的子目录,然后才至其自身
    -mount 仅查找包含指定目录的文件系统
    -local 文件在当前文件系统时为真
    -type c 文件类型为 c 则真,c 取值可为 b(块文件) c (字符文件)
    d(目录) l (符号链接) p (命名管道) f (普通文件)
    \( 表达式 \) 表达式为真则真
    -links n 文件链接数为 n 时为真
    -user 用户 当文件属于用户时为真,用户可用数字表示UID
    -nouser 当文件不属于 /etc/passwd 中的一个用户时为真
    -group 文件组 当文件属于文件组时为真,文件组可用数字表示GID
    -nogroup 当文件不属于 /etc/group 中的一个组时为真
    -fstype 类型 当文件所属文件系统类型为指定类型时真
    -inum n 当文件 i 节点号为 n 时为真
    -prune 当目录名与模式匹配时,不再搜索其子目录
    可以用逻辑操作符将简单表达式连接成复杂表达式
    逻辑操作符有 ! 表示非操作, -o 表示或操作,两个表达式并列则表示
    与操作
    [例子]:
    find / -name find* -print
    从根目录开始搜索文件名如 find* 的文件并显示之
    find ./ -exec sleep{1}\; -print
    每秒显示一个当前目录下的文件
    find $HOME \(-name a.out -o -name '*.o' \) -atime +7 -exec rm {} \;
    从$HOME目录开始搜索,删除所有文件名为a.out 或 *.o 且访问时间在7天前的文件

    1.25 grep

    [语法]: grep [选项] 模式 [文件...]
    [说明]: 在指定的文件中搜索模式,并显示所有包含模式的行,模式是一个正规表达式,在使用正规表达式时,最好将其引在单引号(') 中,若指定文件为缺省,则使用标准输入,正规表达式可以是:
    . 匹配任意一个字符
    * 匹配0个或多个*前的字符
    ^ 匹配行开头
    $ 匹配行结尾
    [] 匹配[ ]中的任意一个字符,[]中可用 - 表示范围,
    例如[a-z]表示字母a 至z 中的任意一个
    \ 转意字符
    命令中的选项为:
    -b 显示块号
    -c 仅显示各指定文件中包含模式的总行数
    -i 模式中字母不区分大小写
    -h 不将包含模式的文件名显示在该行上
    -l 仅显示包含模式的文件名
    -n 显示模式所在行的行号
    -s 指定文件若不存在或不可读,不提示错误信息
    -v 显示所有不包含模式的行
    [例子]:
    grep 'good' * 在所有文件中搜索含有字符串 good 的行
    grep '^myline' mytext 在文件mytext中搜索行首出现myline字符串的行

    1.26 vi

    [语法]:vi [-wn] [-R] 文件...
    [说明]: vi 是一个基于行编辑器 ex 上的全屏幕编辑器,可以在vi 中使用 ex,ed的全部命令,vi选项中 -wn 指将编辑窗口大小置为n行,-R 为将编辑的文件置为只读模式, vi 工作模式分为命令模式和输入模式,一般情况下在命令模式下,可敲入vi命令,进入输入模式下时可以编辑要编辑的文本,命令 a A i I o O c C s S R 可进入输入模式,在输入模式下按 ESC 键可退出输入模式,回到命令模式,在命令模式中敲入: 命令,则可进入ex方式,在屏幕底部出现提示符 : ,此时可使用任意ex命令,屏幕底行也用来作/ ? ! 命令的提示行,大多数命令可以在其前面加数字,表示命令执行的重复次数,下面简单介绍一下vi 的命令集,^ 表示(CTRL)键
    ^B 退回前一页,前面加数字表示重复次数,每次换页时保留上一页的两行
    ^D 在命令模式下,表示下滚屏幕的一半,在输入模式下,表示回退至左边的自动缩进处
    ^E 显示屏幕底线之下的一行
    ^F 前进一页,前面加数字表示重复次数,每次换页时保留上一页的两行
    ^G 显示当前文件名,当前行号和文件总行数,并用百分号当前行在整个文件中的位置
    ^H(退格) 在命令模式下,光标左移一格;在输入模式下,删去前面的字符
    ^I(TAB) 在输入模式下,产生一串空格
    ^J(LF) 光标下移一行
    ^L 刷新屏幕,即将屏幕重新显示
    ^M(回车) 在命令模式下,光标移动至下行开头在输入模式下,开辟一新行
    ^N 光标下移一行
    ^P 光标上移一行
    ^Q 在输入模式下,将其后的非打印字符作为正文插入
    ^R 刷新屏幕
    ^U 屏幕上滚一半,前面加数字时表示上滚的行数,此数字对以后的^D ^U 命令有效
    ^V 在输入模式下,将其后的非打印字符作为正文插入
    ^W 在输入模式下,使光标回退一个字
    ^Y 显示屏幕底线之上的一行
    ^Z 暂停编辑,退回上层Shell
    ^[(ESC) 退出输入模式,回到命令模式
    ! 暂时退出编辑,执行Shell命令
    "(双引号) 用于标志有名缓冲区,编号缓冲区1-9用于保存被删去的正文,字母名缓冲区a-z供用户存放自定义的正文
    $ 将光标移动到当前行尾,前加数字则表示前移行数,如2$表示移动到下一行行尾
    % 将光标移动到配对的小括号()或大括号{}上去
    ( 退回句子开头
    ) 前移到句子开头
    - 退到上一行第一个非空格字符
    . 重复上一次改变缓冲区内容的命令
    / 模式 向前搜索模式,将光标移动到模式出现处,模式是一个正规表达式,(参看 grep)
    : 在屏幕底部提示:,其后可使用ex命令
    ? 功能同 / ,但方向是向前查找
    [[ 光标回退至前一节分界处
    \ 转意符
    ]] 光标前移至节分界处
    ^(不是CTRL) 光标移至当前行第一个非空字符上
    ' 连续两个''表示将光标移至其移动前的位置,'后跟字母表示光标字母标记的行首(参看 m 命令)
    A 在行尾插入正文,进入输入模式
    B 光标回退一个字
    C 替换光标后的内容
    D 删除光标后的内容
    E 光标前移到字尾
    F 字符 在当前行向左查找指定字符
    G 光标移动到其前面数字指定的行,若未指定则移动到最后一行
    H 光标移动到屏幕顶行,若前面有数字,则移动到屏幕上该数字 指定的行
    I 在行开头插入正文
    J 连接两行,若前面有数字则连接数字指定的行
    L 光标移动到屏幕底行,若前面有数字,则移动到屏幕底线往上数该数字指定的行
    M 光标移动到屏幕中线
    N 使用模式查找/或?时,重复找下一个匹配的模式,但方向与上次相反,其功能同 n ,但方向相反
    O 在当前行上开辟一新行
    P 将上次被删除的正文插入光标前面,可在其前面加缓冲区编号,编号1-9用于保存被删去的正文,字母名缓冲区a-z供用户存放自定义的正文
    Q 从vi 退出进入ex命令状态
    R 替换字符串
    S 替换整行
    T 字符 向左查找字符
    U 将当前行恢复至第一次修改前的状态
    W 光标移至下一个字首
    X 删除光标前的字符
    Y 将当前行存入无名缓冲区,前面加数字表示存入的行数,也可用有名缓冲区来保存,以后可用命令p或P将其取出
    ZZ 存盘退出vi
    a 光标后插入正文
    b 光标回退至上一个字首
    cw 替换当前字
    c) 替换当前句子
    dw 删除一个字
    dd 删除一行
    e 光标移到下一个字末
    f 字符 在当前行向前查找字符
    h 光标左移一格
    i 在光标前插入正文
    j 光标下移一行
    k 光标上移一行
    l 光标右移一格
    m 字母 用字母标记当前行,以后可用 '字母使光标移动到当前行,(参看'命令)
    n 重复上次 / 或 ? 命令
    o 在当前行下开辟一新行
    p 将用户缓冲区内容放到光标位置(参看P命令)
    r 替换当前字符
    s 用一串字符替换当前字符
    t 字符 光标移动至字符前
    u 取消上次操作
    w 光标移至下一字首
    x 删除当前字符
    yw 将当前字存入无名缓冲区,前面可加"x,表示存入名字为x的有名缓冲区(x为a-z),也可加数字表示存入的字数,以后可用P或p命令取出
    yy 将当前行存入无名缓冲区,用法参看yw
    { 光标移动至前一段开头
    | 光标移至行首,若前面加数字,则移到数字指定行的行首
    } 光标移至下一段开头
    在:提示符下,常用命令如下:
    :w 当前文件存盘
    :w! 强制存盘
    :w 文件 将内容写入指定文件
    :w! 文件 强制写入指定文件
    :x,y w 文件 将 x至 y 行写入指定文件中
    :r 文件 将文件读到光标位置
    :r ! 命令 将系统命令的输出读到光标位置
    :q 退出编辑
    :q! 强制退出
    :x 与命令ZZ相同
    :e 文件名 编辑另一文件
    :e ! 重新编辑文件,放弃任何改变
    :sh 执行sh,结束后回到编辑
    :! 命令 执行命令后回到编辑
    :n 编辑下一文件
    :n 文件表 重新定义待编辑文件表
    :set 设置 vi 的选项,例如 set nu 表示每行前显示行号,在选项前加no则表示清除该选项,例如 set nonu 表示每行前不显示行号,下面是一些常用的选项:
    ai 自动缩进
    aw 编辑下一文件前自动存盘
    ic 查找字符串时不区分大小写
    nu 每行前显示行号
    sm 输入)及}时显示与之配对的( 或 {
    slow 插入时延迟屏幕刷新
    ws 使查找能绕过文件尾从头进行
    wa 写文件之前不作对文件的检查

    第二章 设备管理

    2.1 stty
    [语法]: stty [-a] [-g] [选项]
    [说明]: 本命令设置终端,无参数时报告终端设置,本命令功能十分强大,应谨慎使用,下面仅介绍部分常用功能
    -a 显示当前终端所有设置
    -g 以能作为 stty 命令参数的方式显示终端设置
    以下是终端常用设置,在设置前加-表示清除设置:
    1.控制方式
    ispeed 0 110 300 600 1200 1800 2400 4800 9600 19200 38400
    本命令设置终端输入波特率,若为0则使用缺省波特率。
    例如 stty ispeed 9600
    ospeed 0 110 300 600 1200 1800 2400 4800 9600 19200 38400
    本命令设置终端输出波特率,参看 ispeed。
    2.输入方式
    ingbrk(-ignbrk) 忽略(不忽略)中断(BREAK)
    brkint(-brkint) 设置(清除)信号INTR为中断信号
    inlcr(-inlcr) 将换行转换(不转换)成回车
    icrnl( -icrnl) 将回车转换(不转换)成换行
    igncr(-ignrc) 忽略(不忽略)回车
    iuclc( -iuclc) 将大写字母转换(不转换)成小写字母
    3.输出方式
    olcut(-olcut) 将小写字母转换(不转换)为大写字母
    onlcr(-onlcr) 输出时将换行符转换(不转换)为回车换行
    ocrnl(-ocrnl) 输出时将回车符转换(不转换)为换行符
    4.本地方式
    echo (-echo) 设置(清除)回显
    stwrap(-stwrap) 截断(不截断)大于79个字符的行
    echoctl(-echoctr) 将控制键回显为^

    2.2 tty

    [语法]: tty
    [说明]: 显示出终端的设备名
    [例子]:
    tty

    2.3 lp

    [语法]: lp 文件...
    [说明]: 将文件送打印机打印
    [例子]:
    lp myfile 将文件myfile 送打印机输出

    2.4 lpstat

    [语法]: lpstat [选项] [打印任务号]
    [说明]: 显示打印机状态,选项的意义如下:
    -a [打印机表] 显示打印机表中指定的打印机可否接收打印请求
    -c [打印机类名] 显示打印机种类及在该打印机种类下的成员
    -d 显示系统预设的打印机
    -p [打印机表] 显示打印机表中打印机状态
    -r 显示lp 请求程序表( lp request scheduler)
    -s 打印系统统计表
    -t 打印所有状态信息
    -u [用户] 显示由用户发出的打印请求
    -v [打印机名表] 显示每个打印机名称,是对应于该打印机设备文件的路径名
    [例子]:
    lpstat -t 打印所有状态信息

    2.5 cancel

    [语法]: cancel 打印任务号
    cancel 打印机名
    cancel -u 用户名 [打印机]
    [说明]: 本命令可按打印机名,打印任务,用户来取消打印任务
    [例子]:
    cancel -u mary 取消用户 mary 的所有打印请求

    2.6 enable

    [语法]: enable 打印机表
    [说明]: 本命令可激活一个或多个打印机

    2.7 disable

    [语法]: disable [-cw] 打印机表
    [说明]: 使一个或多个打印机不能打印
    -c 立即取消正在打印的打印请求
    -w 等正在打印的内容打完后,才禁止打印机

    2.8 sync

    [语法]: sync
    [说明]: 将磁盘缓冲区内容写回磁盘
    2.9 mount

    [语法]: mount [-r] 设备 目录
    [说明]: 将设备安装到目录下
    -r 以只读方式安装

    2.10 umount

    [语法]: umount 设备
    [说明]: 将已安装的文件系统卸下

    2.11 tar

    [语法]: tar -c[vwfbL] [设备] [块] 文件...
    tar -r[vwfbL] [设备] [块] 文件...
    tar -t[vfL] [设备] [文件...]
    tar -u[vwfbL] [设备] [块] 文件...
    tar -x[lmovwfL] [设备] [文件...]
    [说明]: 将多个文件归档,命令中各参数的意义为:
    r 附加方式归档
    x 抽取文件
    t 显示文件
    u 附加方式归档,同时删除旧版文件
    c 建立新档案文件
    v 显示所处理的文件名
    w 处理文件前,要求用户确认
    f 文件名 使用指定文件名作为档案文件
    bn 每次读写 n 块,缺省值为1,最大值为20
    m 将新的文件修改时间设为获取时的时间
    o 获取出来的文件以下达tar指令的UID和GID存储
    [例子]:
    tar cvf file.tar *
    tar tvf file.tar

    2.12 df

    [语法]: df [-t] [文件系统]
    [说明]: 显示剩余 i 节点和块数,使用 -t 选项,还显示总块数和 i 节点数
    [例子]: df -t

    2.13 du

    [语法]: du [-ars] [目录]
    [说明]: 显示磁盘空间专用情况
    -r 提供无法打开的文件信息
    -s 仅显示指定目录所占空间的总和
    -a 显示文件大小及目录总空间,其后可根文件名作参数

    第三章 进程管理

    3.1 sleep

    [语法]: sleep 时间
    [说明]: 挂起参数指定的秒数

    3.2 ps

    [语法]: ps [ -efl] [ -t 终端表] [ -u 用户表] [ -g 组表]
    [说明]: 显示出有关进程的状态
    -e 显示出现在正在运行的所有进程
    -f 显示所有信息
    -l 产生一个长列表
    -t 显示指定终端进程
    -u 显示指定用户进程
    -g 显示指定组进程

    3.3 at

    [语法]: at [-f 命令文件] [-m] [-q 队列] -t 时间
    [说明]: at命令由cron管理,在未来一个指定的时间内执行一组命令,命令可以从指定文件读入,也可从键盘读入,从键盘读入时以EOF结束,(通常为CTRL D)
    -f 从指定命令文件中读入命令
    -m 命令执行完后给用户发邮件
    -q 将命令放入指定队列
    -t 指定时间 指定的时间格式为 [[CC]YY]MMDDhhmm[.ss],CC表示
    年的前两位,YY表示年的后两位,MM表示月,DD表示日,hh表
    示时,mm表示分,ss表示秒

    3.4 kill

    [语法]: kill -信号 进程号
    [说明]: kill 将信号传递给指定进程,信号意义如下:
    1 暂停(hangup)
    2 中断(interrupt)
    3 退出(quit)
    4 非法指令(illeqgal instruction)
    5 跟踪中断(trace trap)
    6 Abort
    7 EMT 指令(Emulation trap)
    8 浮点格式异常(floating point exception)
    9 kill(不可忽略)
    10 通道错误(bus error)
    11 不合法内存段
    12 错误的系统调用参数
    13 写入不可读的连通管道
    14 alarm clock
    15 软件结束信号
    16 用户定义信号一
    17 用户定义信号二
    [例子]:
    kill -9 444 杀死进程号为 444 的进程

    第四章 系统管理和用户管理

    4.1 who

    [语法]: who
    who am i
    [说明]: 列出现在系统中的用户,who am i 显示自己

    4.2 whodo

    [语法]: whodo [-h] [-l] [用户]
    [说明]: 显示系统中用户及进程,若指定用户,则只列出该用户的信息
    -h 不显示头部信息
    -l 长列表格式输出

    4.3 passwd

    [语法]: passwd [用户]
    [说明]: 修改密码,指定用户则修改指定用户密码

    4.4 logname

    [语法]: logname
    [说明]: 取得当前用户注册名

    4.5 su

    [语法]: su [- ] [用户名]
    [说明]: su 命令使当前用户成为指定用户,若无指定,则成为超级用户,但必须输入该用户的密码,-选项表示用该用户的注册环境成为该用户

    4.6 time

    [语法]: time 命令
    [说明]: 执行命令,并在执行完后显示其运行的时间

    4.7 date

    [语法]: date
    date mmddhhmm[yy]
    [说明]: date 无参数时用于显示系统时间,修改时间时参数形式为
    月日时分[年]

    4.8 shutdown

    [语法]: shutdown [-y] [-gn] [-in]

    [说明]: UNIX 系统必须先关闭系统,再关电源
    -y 对提示的所有问题都回答 y
    -gn 给其他用户n 秒的时间退出,缺省值为60秒
    -in 系统退到第n种方式,方式如下:
    0 关机
    1 单用户模式
    2 多用户模式
    3 网络下的多用户模式
    6 关机并重新启动

    4.9 fsck

    [语法]: fsck [-y]
    [说明]: 本命令用于检查和修复文件系统,当文件系统出现混乱时,可使用本命令,-y选项表示对所有提问都回答YES

    第五章 通信和邮件

    5.1 wall

    [语法]: wall
    [说明]: 向所有用户广播通知信息,常用于警告所有用户

    5.2 mesg

    [语法]: mesg [-n] [-y]
    [说明]: mesg 用 -n 参数则禁止其他用户用 write 发消息,用 -y 参数则允许接收消息,若无参数则报告现在的状况

    5.3 write

    [语法]: write 用户 终端
    [说明]: write 与指定的终端上的用户直接对话,直到接收到文件结束符
    [例子]:
    write mary console

    5.4 mailx

    [语法]: mailx [选项] [名字]
    [说明]: 本命令用于发送和接收邮件,名字是收信人的用户名,本命令有许多内部命令,选项说明如下:
    -e 检查是否有邮件,若有则返回0
    -f 文件名 从文件中读取邮件而非从邮箱中
    -H 只显示信件标题
    -s 标题 设定标题为指定标题
    [命令说明]
    . 当前信件
    n 第 n 封信
    ^ 第一封未被处理的信
    $ 最后一封信
    * 所有的信
    n-m 第n 封至第m封信
    用户 由指定用户发出的信
    / 字符串 标题中包含字符串的信
    :c 满足指定类型c的信,类型可为
    d 已删除的信
    n 信传送的信
    o 旧信件
    r 已读过的信
    u 未读过的信
    p 一次显示多封信
    t 显示某封信的前若干行
    si 显示信件字符数
    h 显示信件标题
    d 删除信件
    u 恢复信件
    s [信件表] 文件名
    将信件存入指定文件中
    q 退出
    r 回信
    ~e 编辑信件
    ~r 文件 从文件中读取信件
    [例子]:
    mailx mary < myletter

    第六章 Shell 编程

    shell 不但是 Unix 的用户交互界面,还是一门程序设计语言,系统注册进入时就会执行一个shell命令文件 .profile ,下面对shell中的常用命令作简单介绍。
    $n shell 程序命令行中的第n 个参数,n为0-9,当n 为0时表示命令名
    $# 命令行中参数的个数
    $$ 本shell 命令的进程号
    $! 最后一个后台进程的代号
    $* 所有命令行参数
    $@ 与$*相似,但其值不同
    $HOME 注册时进入的目录
    $PATH 命令的搜索目录
    $PS1 系统第一个提示符,一般为$
    $PS2 系统第二个提示符,一般为>
    shift [n] 将命令行参数往左移一位,但$0不变
    变量名=字符串 将字符串赋予变量名,以后可用$变量名引用该变量
    export 变量名表 将变量名表所列变量传递给子进程
    read 变量名表 从标准输入读字符串,传给指定变量
    echo 变量名表 将变量名表指定的变量显示到标准输出
    set 显示设置变量
    env 显示目前所有变量
    if 条件执行,语法是: if 条件
      then 指令
      fi
    case 分支执行,语法是: case 字符串变量 in
         值1) 指令...
         值2) 指令...
         ...
         esac
    while 条件为真时循环,语法是:
    while 条件
    do
    指令...
    done
    until 条件为假时循环,语法是:
    until 条件
    do
    指令...
    done
    for 变量在表中时循环,语法是:
    for 变量名 in 字组表
    do
    指令...
    done
    break 从循环中退出,语法:
    break n
    n 表示跳出循环的层数
    continue 继续循环,语法:
    continue n
    n 表示退到包含continue 语句的第n 层继续循环
    exit 退出shell
    func shell内部可定义函数,语法: func 函数名()
      {
       指令...
      }
    expr 将其后的串解释为表达式并计算其值,运算符前后需有空格
    trap 捕获信号,语法 trap n ,捕获信号 n (信号说明参见kill)
    test 条件测试,语法 test [选项] 参数
    选项 -f 文件 若文件存在且可读则真
    -w 文件 若文件存在且可写则真
    -x 文件 若文件存在且可执行则真
    -f 文件 若文件存在且为普通文件则真
    -d 文件 若文件存在且为目录文件则真
    -p 文件 若文件存在且为fifo文件则真
    -s 文件 若文件存在且不空则真
    -z 串 若串长度为0则真
    -n 串 若串长度不为0则真
    串 若串不是空串则真
    串1=串2 若串1等于串2则真
    串1!=串2 若串1不等于串2则真
    n1 -eq n2 若n1与n2数值相当则真
    n1 -ne n2 若n1与n2数值不相当则真
    n1 -lt n2 若n1小于n2则真
    n1 -le n2 若n1小于等于n2则真
    n1 -gt n2 若n1大于n2则真
    n1 -ge n2 若n1大于等于n2则真
    可用 与 -a 或 -o 非 ! 将条件表达式连接起来

    第七章 数学计算命令

    [语法]: bc [-c] [-l] [文件...]
    [说明]: bc是一个交互式的高精度计算工具,采用类似于C语言的语法,能够从指定文件指定文件中读出命令执行,然后再进入交互式执行,事实上,bc是dc的预编译器,它自动激活dc,将语句经预编译后传递给dc,退出bc的命令是quit,bc中的ibase,obase,scale分别表示输入基数,输出基数,小数点右边的位数。
    -c bc 只编译,而不将编译结果送dc,将其送到标准输出上
    -l 预定义一个数学函数库,可在bc中使用以下函数
    s(x) sine
    c(x) cosine
    e(x) exponential
    l(x) log
    a(x) arctangent
    j(n,x) Bessel
    [例子]:
    bc -l 进入bc
    scale=10 将小数位定为10位
    e(1) 计算e的小数点后10位
    quit 退出bc

    附录 UNIX 常用命令简单说明

    UNIX 命令大多数可用联机帮助手册 man 获得帮助,下面是常用命令及简单说明,可供用户快速查找使用。

    命令 功能简述

    acctcom 等于进程记帐文件
    accton 启动或中止记帐进程
    adb 汇编语言调试工具
    admin 创建和管理SCCS文件
    ar 档案文件和库文件管理程序
    as 汇编器
    asa 回车控制
    at 在指定时间执行程序
    awk 模式搜索和处理语言
    banner 制作标题
    basename 生成文件基本名(无前。后缀)
    batch 命令的延迟执行
    bc 计算器
    bdiff 大型文件比较
    bfs 大文件搜索
    break 退出循环
    cal 打印日历表
    calendar 打印日历表
    cancel 取消打印任务
    case 分支语句
    cb C语言整理程序
    cd 改变当前目录
    cc C语言编译器
    cdc SCCS实用程序
    cflow 生成C语言流程图
    checkeq 数学公式排版命令
    chgrp 改变文件组
    chmod 改变文件存取模式
    chown 改变文件主
    chroot 改变根目录
    cksum 显示校验和
    clri 清除指定的I节点
    cmp 文件比较
    col 过滤反向换行
    comb SCCS实用程序
    comm 显示两个排序文件的公共行
    command 执行简单命令
    continue 进入下一循环
    cp 复制文件
    cpio 复制文件档案
    cpp C语言预处理程序
    crash 检查系统内存映象
    create 建立临时文件
    cref 生成交叉引用表
    cron 在指定时间执行一组命令
    crontab 为命令cron 准备crontab文件
    crypt 加密/解密
    csplit 将一个文件分解
    ct 远程终端注册
    ctags 创建供vi使用的标识符
    cu 呼叫另一UNIX系统
    cut 断开一文件中所选择的字段
    cxref 生成C程序交叉访问表
    date 打印和设置时间
    dc 桌面计算器
    dd 转换和复制文件
    delta SCCS实用程序
    deroff 去掉排版格式
    devnm 标识设备名
    df 显示可用磁盘空间
    diff 显示两个文件的差异
    diff3 显示三个文件的差异
    dircmp 目录比较
    dis 反汇编程序
    du 显示对磁盘的占用情况
    dump 对指定文件备份
    echo 回显指定参数
    ed 行编辑器
    edit 文本编辑器
    egrep 在文件中查找指定模式
    env 设置命令执行环境
    eqn 数学公式排版命令
    eval 执行指定命令
    ex 行编辑器
    exec 执行指定命令
    exit 进程中止
    expand 使表格占满行宽
    export 将变量传递给子程序
    expr 计算表达式值
    factor 因式分解
    false 返回FALSE
    fgrep 在文件中查找指定模式
    file 确定文件类型
    find 查找符号条件的文件
    fmt 安排简单的文本格式
    fold 折行
    for 循环语句
    fsck 文件系统检查和修复
    fsdb 文件系统调试程序
    fumount 强制性拆协指定资源
    function 函数说明
    fuser 列出使用文件的进程
    fwtmp 产生记帐记录
    get SCCS实用程序
    getconf 查找配置参数
    getopt 获得命令中的选择项
    getopts 获得命令中的选择项
    getty 设置终端类型、模式、行律等
    grep 在文件中查找指定模式
    head 打印文件的头若干行
    hexdump 按十六进制转储文件
    id 显示用户号
    if 条件语句
    init UNIX 初启进程
    install 安装一个文件到文件系统
    ipcrm 删除IPC队列
    ipcs 显示IPC状态
    join 连接两个文件(关系操作〕
    kill 中止指定进程
    killall 中止所有活动进程
    labelit 给文件系统提供标号
    ld 目标文件链接编辑器
    lex 词法分析程序
    line 读一行
    link 连接文件
    lint C程序检查程序
    ln 链接文件
    local 建立局部变量
    logger 显示注册信息
    login 注册
    logname 获取注册名
    look 在排序文件中查找某行
    lorder 查找目标库的次序关系
    lp 打印文件
    lpr 打印文件
    lpstat 显示打印队列状态
    ls 目录列表
    mail 发送或接收电子邮件
    mailx 发送、接收或处理电子邮件
    make 执行有选择的编译
    makekey 生成加密码
    man 显示命令用法
    mesg 接收或取消对话方式
    mkdir 建立目录
    mkfifo 建立FIFO文件
    mkfs 建立文件系统
    mknod 建立文件系统的I节点
    mount 安装文件系统
    mv 移动文件
    mvdir 移动目录
    ncheck 按节点号生成节点名清单
    neqn 数学公式排版命令
    newgrp 把用户加入到新组
    news 打印消息
    nice 改变命令执行优先级
    nl 给文件加行号
    nm 显示目标文件符号表
    nohup 忽略挂起或退出执行命令
    nroff 文本文件排版
    od 按八进制转储文件
    pack 压缩文件
    passwd 改变口令
    paste 文件合并
    pax 可移植档案管理程序
    pcat 显示压缩格式文件
    pg 分屏显示
    pr 按打印格式显示文件
    pstat 报告系统信息
    pwck 口令文件校验程序
    pwd 显示当前工作目录
    quot 检查文件系统所有权
    ratfor 转换成标准FORTRANC程序
    read 从标准输入读一行
    readonly 标记变量为只读
    red 文本编辑器
    regcmp 正规表达式编辑
    restor 文件系统恢复程序
    restore 文件系统恢复程序
    return 返回语句
    rev 颠倒文件中每行字符次序
    rm 删除文件
    rmdel SCCS使用程序
    rmdir 删除目录
    rsh(net) 远程SHELL
    rsh(sec) 受限SHELL
    runacct 运行日常记帐程序
    sact SCCS实用程序
    sag 打印系统活动图
    sar 报告系统活动
    sccsdiff SCCS实用程序
    sdb 符号调试器
    sdiff 并列显示两个文件的差别
    sed 流编辑器
    sendto 发送邮件
    set 设置选项或参数
    setmnt 建立文件系统安装表
    sh SHELL解释器
    shift 命令行参数移位
    shl SHELL层(layer)管理程序
    shutdown 关机
    size 显示目标文件长度
    sleep 挂起进程一段时间
    sort 文件排序和合并
    spell 拼写错误检查程序
    spellin 拼写错误检查
    spellout 拼写错误检查
    spline 按平滑曲线输出数据
    split 分解一个文件
    strings 在目标文件中寻找可打印字符
    strip 删除符号表
    stty 设置终端模式
    su 改变用户
    sum 显示文件校验和及块数
    sync 更新磁盘
    tabs 设置制表符
    tbl 表格排版
    tee 在管道上建立多通路
    tic 终端数据库编译程序
    time 打印执行命令所花时间
    tiemx 报告命令所花时间及活动
    touch 更新文件时间
    tput 恢复终端或查询数据库
    tr 转换字符
    trap 捕获信号
    troff 文本文件排版
    true 返回TRUE
    tsort 拓扑排序
    tty 显示终端设备名
    umask 设置文件掩码
    umount 拆卸文件系统
    uname 显示系统名
    unget SCCS实用程序
    uniq 删除文件中重复行
    units 度量单位转换
    unlink 删除文件
    unpack 将压缩文件还原
    until 循环语句
    update 更新磁盘
    val SCCS实用程序
    vc SCCS实用程序
    vi 全屏幕编辑器
    volcopy 文件系统的文字拷贝
    wait 等待所有字进程结束
    while 循环语句
    who 显示谁在使用系统
    whodo 显示哪些用户在做什么
    write 和另一用户直接对话
    xargs 建立参数表并执行命令
    yacc 语法分析程序生成器

301/212>
Open Toolbar