唯你测吧欢迎来自五湖四海的朋友!!! 希望大家为唯你测吧更添一道色彩!!! 欢迎大家加入Q群:34973397 欢迎大家访问测试中国网站:www.testingcn.com

发布新日志

  • 如何看懂ping命令(转载)

    2008-05-26 11:25:04


      
    Ping是用来进行网络连接测试的一个程序,其对应的文件名为“Ping.exe”(在Windows XP系统下该文件存在于

             C:\Windows\System32文件夹下)。该工具的最简单的用法是: “Ping   XXX.XXX.XXX.XXX”(XXX.XXX.XXX.XXX为欲测试的IP地址),根据不同的测试目的可以带上不同的参数。

             很多朋友未必熟悉其运行结果的意义,下面简要介绍一下成功结果和失败结果的意思。

                 一、“Ping”成功的结果分析

                 例如输入“Ping 61.139.2.69”,显示如下信息:
            
             Pinging 61.139.2.69 with 32 bytes of data:         

             Reply from 61.139.2.69: bytes=32 time=49ms TTL=250

             Reply from 61.139.2.69: bytes=32 time=54ms TTL=250

             Reply from 61.139.2.69: bytes=32 time=54ms TTL=250

             Reply from 61.139.2.69: bytes=32 time=54ms TTL=250

             Ping statistics for 61.139.2.69:
             Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

             Approximate round trip times in milli-seconds:

              Minimum = 43ms, Maximum = 44ms, Average = 43ms

            
         

             上述结果的意思为:Ping命令用32字节(这是Windows默认发送的数据包大小,如要改变,则应该在后面加上 “-L 数据包大小”,如“Ping 61.139.2.69 -l 5000”表示要测试的数据包大小为5000字节)的数据包来测试能否连接到IP地址为“61.139.2.69”的主机;下面的四行“Reply from”表示本地主机已收到从被测试的机器上返回的信息——返回32个字节用了49或54毫秒,TTL为250。

             友情提示:TTL((Time to   Live)的意思是存在时间值,通过该值可以算出数据包经过了多少个路由器,方法是:用255减去返回的TTL值.,例如本例中返回250,则应该用255来减去250,得到5。

             再下面的“Ping statistics”则表示发送了(sent)4个数据包(这是系统的缺省值,如要指定发送数据包的次数,则在后面加上“-n 次数”,如“Ping 61.139.2.69 –n 20”表示传送20次;如果希望一直Ping下去,则要在后面加上参数“-t”,此时要中断则需要按Ctrl+C),收到了(Receieved)4个, 共丢失了(Lost)0个(即没有丢失),发送时间最小为_毫秒,最大_毫秒,平均时间为_毫秒。

             二、Ping助你分析网络

             1.测试本机网卡是否工作正常

             输入“Ping 127.0.0.1”应该可以出现类似于上例的提示,如果出现的是四行“Request timeout”的提示,则说明网卡工作不正常,或者是本机的网络设置有问题。

             2.检验网关配置

             用Ping域外主机IP的方法可以检验网关的配置是否正确,通过查看从网络内主机向域外主机发送IP包能否送出来判断结果。如出现4行“Request timeout”的提示说明网关设置有错,网关配置正确则会返回传输时间和TTL等信息。

             如果上网浏览网页总是收到“找不到该页”或者“该页无法显示”等提示信息,一般应检查DNS是否有问题,一则可以测试DNS服务器是否能够“Ping”通,另外还要测试DNS设置是否有错误。

             3.测试DNS服务器是否能够Ping通

             在命令行窗口中输入“Ping DNS服务器IP地址”,如果成功表明DNS服务器工作正常。例如“Ping 61.139.2.69”(这是笔者所在地的一台DNS服务器的地址)如果返回测试时间和TTL值等信息就表明正常,如果出现“Request timeout”错误,那很明显在浏览器中输入域名将不能访问网站。

             4.测试DNS服务器配置是否正确

             我们可以用Ping任一域名的方法来查看DNS服务器配置是否正确,如果可以将该域名解析成一个IP地址并返回测试信息说明配置无误,如出现“unknown Host Name”的提示,则说明DNS配置出错。

             友情提示:①返回这个信息也可能是对方的主机有问题。②另一种检验方法是:直接在浏览器地址栏中输入网站服务器的IP地址,若可以连接说明网络通畅,但输入域名时不能连接就证明是DNS服务器设置不对或者是服务器出了问题。

             5.测试某主机域名所对应的IP

             在收发电子邮件时一般会先解析域名为IP然后再连接,如果想加快收发速度,可以先将邮件服务器的域名转换为IP然后保存在本机上,例如:要测试 21cn.com的邮件发送服务器的IP,则输入“Ping smtp.21cn.com”,会得到其IP地址为“202.104.32.230”,将此地址填写到邮件客户端软件的服务器设置中,如在Foxmail 中,则在账户属性中的邮件服务器中填入。

             三、看懂出错提示信息

             (1)No

             Answer:这种故障表明本机有一条通向中心主机的路由,但没有收到发给该中心主机的任何信息。原因可能是:中心主机没有工作、本机或中心主机网络配置不正确、本地或中心的路由器没有工作、通信线路有故障、中心主机存在路由选择问题,等等。

             (2)Request Timed

             Out:超时错误,被测试的机器不能正常连接,原因可能是该主机此时未连接(如已关机)、或到路由器的连接有问题、或路由器不能通过,或对方主机使用了防火墙软件禁止进行Ping测试等等。

             (3)Unknown Host Name:无法解析主机名字,可能是DNS设置不对,或者对方主机不存在。
  • 正确使用内存(转载)

    2007-05-07 14:41:37

    对于初学者来说,内存是个神秘的空间。程序的绝大部分错误,也是在于内存的使用不当造成的,而且这些错误有些都是隐藏很深的。所以,如何掌握内存的使用,通晓系统对内存的管理手段,将是软件成功的一个非常关键的因素。
           首先我们要了解内存的分配方式。一般来说,内存的分配方式有三种:
    1.从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
    2.在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
    3.从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。
           以上三种分配方式,我们要注意内存生命期的问题:
    1.静态分配的区域的生命期是整个软件运行期,就是说从软件运行开始到软件终止退出。只有软件终止运行后,这块内存才会被系统回收
    2.在栈中分配的空间的生命期与这个变量所在的函数和类相关。如果是函数中定义的局部变量,那么它的生命期就是函数被调用时,如果函数运行结束,那么这块内存就会被回收。如果是类中的成员变量,则它的生命期与类实例的生命期相同
    3.在堆上分配的内存,生命期是从调用new或者malloc开始,到调用delete或者free结束。如果不掉用delete或者free。则这块空间必须到软件运行结束后才能被系统回收。
    下面我们再看看,在使用内存的过程中,我们经常发生一些什么样的错误。以及我们应该采取哪些对策。
    发生内存错误是件非常麻烦的事情。编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到。而这些错误大多没有明显的症状,时隐时现,增加了改错的难度。有时用户怒气冲冲地把你找来,程序却没有发生任何问题,你一走,错误又发作了。
    常见的内存错误及其对策如下:
    1 内存分配未成功,却使用了它。
    编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。常用解决办法是,在使用内存之前检查指针是否为NULL。如果指针p是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。如果是用malloc或new来申请内存,应该用if(p==NULL) 或if(p!=NULL)进行防错处理。
    2 内存分配虽然成功,但是尚未初始化就引用它。
    犯这种错误主要有两个起因:一是没有初始化的观念;二是误以为内存的缺省初值全为零,导致引用初值错误(例如数组)。
    内存的缺省初值究竟是什么并没有统一的标准,尽管有些时候为零值,我们宁可信其无不可信其有。所以无论用何种方式创建数组,都别忘了赋初值,即便是赋零值也不可省略,不要嫌麻烦。
    3 内存分配成功并且已经初始化,但操作越过了内存的边界。
    例如在使用数组时经常发生下标“多1”或者“少1”的操作。特别是在for循环语句中,循环次数很容易搞错,导致数组操作越界。
    4 忘记了释放内存,造成内存泄露。
    含有这种错误的函数每被调用一次就丢失一块内存。刚开始时系统的内存充足,你看不到错误。终有一次程序突然死掉,系统出现提示:内存耗尽。
    动态内存的申请与释放必须配对,程序中malloc与free的使用次数一定要相同,否则肯定有错误(new/delete同理)。
    5 释放了内存却继续使用它。
    有三种情况:
    1)程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内存,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面。
    2)函数的return语句写错了,注意不要返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。
    3)使用free或delete释放了内存后,没有将指针设置为NULL。导致产生“野指针”。
    综上所述,我们应该注意:
    1.用malloc或new申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值为NULL的内存。
    2.不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。
    3.避免数组或指针的下标越界,特别要当心发生“多1”或者“少1”操作。
    4.动态内存的申请与释放必须配对,防止内存泄漏。
    5.用free或delete释放了内存之后,立即将指针设置为NULL,防止产生“野指针”
    下面举几个经典的错误例子,大家不要犯同样的错误:
    1. 返回栈内存指针
    char *GetString(void)
    {
    char a[]="hello world";
    char *p =a;
    return p;
    }
    char* pGet = GetString();
    这段程序编译时没有错误,运行也没有错误,但是你却无法使得返回的pGet指针指向的数据是你想要的“hello world”,因为指针p的生命期是函数GetString内,运行完函数GetString后,p分配的栈空间马上被系统回收了。虽然pGet指向了p当初分配的内存地址,但是那块地址已经没有内容了。
    2.这是一个出现频率非常高的错误
    char* pChar = new char;
    ……
    int a ;
    pChar = &a;
    ……
    delete pChar;
    当然这是一个例子,具体的程序各有不同。
    这段程序有两个问题。一是pChar = &a;将导致pChar原先分配的空间无法再被获取,就象我们的丢失了朋友的电话号码一样,无法再联系这个朋友了。这就造成了内存泄漏。如果内存泄漏多了,可能导致系统的崩溃,因为可用的资源将越来越少,直到枯竭为止。第二个问题是delete pChar将导致异常发生,因为这时的pChar已经不是指向动态分配的内存了,而是指向了a分配的栈空间,而栈空间是不能使用delete来回收的,因此将导致内存异常。
  • RUP大讲堂

    2007-03-29 10:00:27

    http://live.csdn.net/Issue81/livePlay.aspx

    讲的很不错,就是在精彩的时候给断了

    有兴趣的可以去看一下!

  • 八皇后问题的高效解法-递归版

    2007-03-28 17:36:10

    //8 Queen 递归算法
    //如果有一个Q 为 chess[i]=j;
    //则不安全的地方是 k行 j位置,j+k-i位置,j-k+i位置

    class Queen8{


    static final int QueenMax = 8;
    static int ōktimes = 0;
    static int chess[] = new int[QueenMax];//每一个Queen的放置位置


    public static void main(String args[]){
    for (int i=0;i<QueenMax;i++)chess[i]=-1;
    placequeen(0);
    System.out.println("\n\n\n八皇后共有"+oktimes+"个解法 made by yifi 2003");
    }


    public static void placequeen(int num){ //num 为现在要放置的行数
    int i=0;
    boolean qsave[] = new boolean[QueenMax];
    for(;i<QueenMax;i++) qsave[i]=true;

    //下面先把安全位数组完成
    i=0;//i 是现在要检查的数组值
    while (i<num){
    qsave[chess[i]]=false;
    int k=num-i;
    if ( (chess[i]+k >= 0) && (chess[i]+k < QueenMax) ) qsave[chess[i]+k]=false;
    if ( (chess[i]-k >= 0) && (chess[i]-k < QueenMax) ) qsave[chess[i]-k]=false;
    i++;
    }
    //下面历遍安全位
    for(i=0;i<QueenMax;i++){
    if (qsave[i]==false)continue;
    if (num<QueenMax-1){
    chess[num]=i;
    placequeen(num+1);
    }
    else{ //num is last one
    chess[num]=i;
    oktimes++;
    System.out.println("这是第"+oktimes+"个解法 如下:");
    System.out.println("第n行: 1 2 3 4 5 6 7 8");

    for (i=0;i<QueenMax;i++){
    String row="第"+(i+1)+"行: ";
    if (chess[i]==0);
    else
    for(int j=0;j<chess[i];j++) row+="--";
    row+="++";
    int j = chess[i];
    while(j<QueenMax-1){row+="--";j++;}
    System.out.println(row);
    }
    }
    }
    //历遍完成就停止
    }
    }

  • 认真把好七道关 保证Web数据库安全

    2007-03-27 17:47:53

    关于网络数据库里一些商业数据被盗窃后公布于网上;公司商业网站的产品价格数据又被恶意修改……类似这样的案例,在网上搜索了一下,实在不少。其原因只有一个,就是来自网络上对Web数据库攻击。那么,在Web环境下的数据库是否能有足够的安全为企业服务呢?答案是肯定的。

      Web数据库是基于Internet/Intranet的应用系统,由于互连网开放性和通信协议的安全缺陷,以及在网络环境中数据存储和对其访问与处理的分布性特点,网上传输的数据容易受到破坏、窃取、篡改、转移和丢失。这些危害通常是对网络的攻击引起的。

      到现在,针对Web数据库的应用级入侵已经变得越来越猖獗,如SQL注入、跨站点脚本攻击和未经授权的用户访问等。

      所有这些入侵都有可能绕过前台安全系统并对数据库系统攻击。如何保证Web数据库的安全性已成为新的课题。

      第一关、对用户安全管理

      Web数据库是个极为复杂的系统,因此很难进行正确的配置和安全维护,当然,必须首先要保证的就是数据库用户的权限的安全性。

      当用户通过Web方式要对数据库中的对象(表、视图、触发器、存储过程等)进行操作时,必须通过数据库访问的身份认证。多数数据库系统还有众所周知的默认账号和密码,可支持对数据库资源的各级访问。因此,很多重要的数据库系统很可能受到威协。

      用户存取权限是指不同的用户对于不同的数据对象有不同的操作权限。存取权限由两个要素组成:数据对象和操作类型。定义一个用户的存取权限就是要定义这个用户可以在哪些数据对象上进行哪些类型的操作。

      权限分系统权限和对象权限两种。系统权限由DBA授予某些数据库用户,只有得到系统权限,才能成为数据库用户。对象权限是授予数据库用户对某些数据对象进行某些操作的权限,它既可由DBA授权,也可由数据对象的创建者授予。

      第二关、定义视图

      为不同的用户定义不同的视图,可以限制用户的访问范围。通过视图机制把需要保密的数据对无权存取这些数据的用户隐藏起来,可以对数据库提供一定程度的安全保护。实际应用中常将视图机制与授权机制结合起来使用,首先用视图机制屏蔽一部分保密数据,然后在视图上进一步进行授权。

      第三关、数据加密

      数据安全隐患无处不在。一些机密数据库、商业数据等必须防止它人非法访问、修改、拷贝。如何保证数据安全?数据加密是应用最广、成本最低廉而相对最可靠的方法。数据加密是保护数据在存储和传递过程中不被窃取或修改的有效手段。

      数据加密系统包括对系统的不同部分要选择何种加密算法、需要多高的安全级别、各算法之间如何协作等因素。在系统的不同部分要综合考虑执行效率与安全性之间的平衡。因为一般来讲安全性总是以牺牲系统效率为代价的。

      如果要在Internet上的两个客户端传递安全数据,这就要求客户端之间可以彼此判断对方的身份,传递的数据必须加密,当数据在传输中被更改时可以被发觉。

      第四关、事务管理和故障恢复

      事务管理和故障恢复主要是对付系统内发生的自然因素故障,保证数据和事务的一致性和完整性。

      故障恢复的主要措施是进行日志记录和数据复制。在网络数据库系统中,分布事务首先要分解为多个子事务到各个站点上去执行,各个服务器之间还必须采取合理的算法进行分布式并发控制和提交,以保证事务的完整性。

      事务运行的每一步结果都记录在系统日志文件中,并且对重要数据进行复制,发生故障时根据日志文件利用数据副本准确地完成事务的恢复。

      第五关、数据库备份与恢复

      计算机同其他设备一样,都可能发生故障。计算机故障的原因多种多样,包括磁盘故障、电源故障、软件故障、灾害故障以及人为破坏等。一旦发生这种情况,就可能造成数据库的数据丢失。

      因此数据库系统必须采取必要的措施,以保证发生故障时,可以恢复数据库。数据库管理系统的备份和恢复机制就是保证在数据库系统出故障时,能够将数据库系统还原到正常状态。

      加强数据备份非常重要,数据库拥有很多关键的数据,这些数据一旦遭到破坏后果不堪设想,而这往往是入侵者真正关心的东西。不少管理员在这点上作得并不好,不是备份不完全,就是备份不及时。

      数据备份需要仔细计划,制定出一个策略测试后再去实施,备份计划也需要不断地调整。

      第六关、审计追踪机制

      审计追踪机制是指系统设置相应的日志记录,特别是对数据更新、删除、修改的记录,以便日后查证。日志记录的内容可以包括操作人员的名称、使用的密码、用户的IP地址、登录时间、操作内容等。若发现系统的数据遭到破坏,可以根据日志记录追究责任,或者从日志记录中判断密码是否被盗,以便修改密码,重新分配权限,确保系统的安全。

      第七关、重点在服务器

      Web数据库的三层体系结构中,数据存放在数据库服务器中,大部分的事务处理及商业逻辑处理在应用服务器中进行,由应用服务器提出对数据库的操作请求。

      理论上,既可以通过Web页面调用业务处理程序来访问数据库,也可以绕过业务处理程序,使用一些数据库客户端工具直接登录数据库服务器,存取操作其中的数据。所以,数据库服务器的安全设置至关重要。

      用IDS(入侵检测系统)保卫数据库安全逐步普及,这种安全技术将传统的网络和操作系统级入侵探测系统(IDS)概念应用于数据库。应用IDS提供主动的、针对SQL的保护和监视,可以保护预先包装或自行开发的Web应用。

  • CMM?与CMMI?的比较

    2007-03-22 15:17:57

     

                                                                         (FROM:中国软件网)

    本文总结了从传统软件管理技术过渡到现代软件管理技术的一些思想。我特别要认可软件工程学院SEI在其新方法CMMI®(能力成熟度模型集成)中的改进,并促进开发公司正确地应用这个方法。虽然我一直支持原来的能力成熟度模型(CMM®)的精神,但实际它经常被错误地理解和应用。从我25年来和许多进行过程改进的世界领先的软件开发组织的合作经验看,我相信大多数应用CMM的组织还局限于默认的瀑布模式思想上。我不认为错在模式本身,因为我知道CMM®语境里的一些过程改进是基于一种现代的、叠代的开发方法。不过,我这种启示性的理解并非规范。

    CMM®
    综述
    基于组织对关键过程域的支持,CMM®定义了软件过程成熟度的五个级别。级别1(初始级)描述了不成熟,或者说是未定义的过程的组织。级别2(可重复级),级别3(已定义级),级别4(已管理级)和级别5(优化级)分别描述了软件过程成熟度级别递增的组织。和这些级别相关的KPA是:
    级别2:需求管理,软件项目计划,软件项目跟踪和监控,软件子合同管理,软件质量保证,软件配置管理。
    级别3:组织级过程焦点,组织级过程定义,培训大纲,集成软件管理,软件产品工程,组间协调,同行评审。
    级别4:定量过程管理,软件质量管理
    级别5:缺陷预防,技术更新管理,过程更改管理
    多数组织的基本目标是达到成熟度3级。评估组织当前的成熟度级别的手段之一是软件能力评估(SCE)。SCE通过评估软件过程(一般以方针陈述的形式)和项目实践来确定该组织是否言行一致。组织的过程体现了"如实记录所做的工作",项目实施(对该过程的特定剪裁和解释)应该证明"说到做到"

    CMMI®
    综述
    软件成熟度模型(CMM® v1.0)最早是软件工程学院开发的,并特别提出软件过程成熟度。1990年,该模型首次发布,在许多领域被成功地采纳和使用。其他学科的CMM也相继开发,例如系统工程、人员、集成产品开发、软件采购等等。
    CMMI®
    被看做是把各种CMM集成为一个系列的模型中。CMMI®的基础源模型包括:软件CMM ®2.0版(草稿C, EIA-731系统工程,以及IPD CMM® (IPD) 0.98a版。CMMI®也描述了5个不同的成熟度级别。
    1.
    级别1(初始级)代表了以不可预测结果为特征的过程成熟度。过程包括了一些特别的方法、符号、工作和反应管理,成功主要取决于团队的技能。
    2.
    级别2(已管理级)代表了以可重复项目执行为特征的过程成熟度。组织使用基本纪律进行需求管理、项目计划、项目监督和控制、供应商协议管理、产品和过程质量保证、配置管理、以及度量和分析。对于级别2而言,主要的过程焦点在于项目级的活动和实践。

    3.
    级别3(严格定义级)代表了以组织内改进项目执行为特征的过程成熟度。
    强调级别2的关键过程域的前后一致的、项目级的纪律,以建立组织级的活动和实践。附加的组织级过程域包括:
    需求开发:多利益相关者的需求发展。
    技术方案:展开的设计和质量工程。
    产品集成:持续集成、接口控制、变更控制。
    验证:保证产品正确建立的评估技术。
    确认:保证建立正确的产品的评估技术。
    风险管理:检测、优先级,相关问题和意外的解决方案。
    组织级培训:建立机制,培养更多熟练人员。
    组织级过程焦点:为项目过程定义建立组织级框架。
    决策分析和方案:系统的可选的评估。
    组织级过程定义:把过程看做组织的持久的发展的资产。
    集成项目管理:在项目内统一各个组和利益相关者。

    4.
    级别4(定量管理级)代表了以改进组织性能为特征的过程成熟度。3级项目的历史结果可用来交替使用,在业务表现的竞争尺度(成本、质量、时间)方面的结果是可预测的。级别4附加的过程域包括:
    组织级过程执行:为过程执行设定规范和基准。
    定量的项目管理:以统计质量控制方法为基础实施项目。
    5.
    级别5(优化级)代表了以可快速进行重新配置的组织性能,和定量的、持续的过程改进为特征的过程成熟度。附加的级别5过程域包括:

    因果分析和解决方案:主动避免错误和强化最佳实践。
    组织级改革和实施:建立一个能够有机地适应和改进的学习组织。

    CMM®
    过时了吗?
    一些CMM实践的问题也是传统瀑布方法和过度基于过程的管理的症状。CMM的基于活动的度量方法和瀑布过程的有次序的、基于活动的管理规范有非常密切的联系(即:先是需求活动,然后是设计活动,编码活动,单位测试活动,集成活动,以及系统接收测试)。这大概可以解释为什么许多组织对CMM®的认识停留在瀑布思想上。
    另外,叠代开发技术、软件产业最佳实践、和经济动机推动组织采用基于结果的方法:开发业务案例、构想和原型方案;细化后纳入基线结构、可用发布,最后定为现场版本的发布。虽然CMMI®保留了基于活动的方法,它的确集成了软件产业内很多现代的最好的实践,因此它很大程度上淡化了和瀑布思想的联系。
    分析CMM® CMMI®分别和瀑布模型以及叠代开发之间有什么联系,方法之一就是看每个模型的KPA是否为这两种不同的开发方法激发了合理的软件管理原理。首先,让我们来定义那些软件管理原理。过去10年间,我编译了两套原理:一套用于传统的瀑布方法,另一套用于现代的叠代方法。得承认的是,这"十大原理"没有科学基础,并且只提供了符合它们各自的管理方法的成功模版的粗略的描述。但是它们的确为我的观点提供了一个合适的框架:CMM®和瀑布思想相联系,而CMMI®和叠代思想联系得更紧密。
    1.
    设计之前冻结需求。这是需求第一过程的本质:项目组努力提供一个准确的需求定义,然后严格按照需求实施。需求变更会严重破坏编码和测试阶段,因此,项目组在其他设计和开发活动中投入主要力量之前,必需完整地、明确地指定需求。
    2.
    详细设计评审前避免编码。编码变更会严重破坏编码和测试阶段,在开始编码前,如果还有很多变更阻力,项目组必需保证整个设计是成熟和完整的。
    3.
    是使用更高指令编程语言。更高指令编程语言避免了一系列主要的错误根源(通过先进的数据录入、接口分离以及打包和编程结构),并允许软件方案可以使用更少的人工合成码进行编程。
    4.
    集成前要结束单元测试。虽然设计是自上向下的,测试过程是自下向上的:在交付进行集成测试之前,最小的单元先进行全面测试。这样的次序限制是为了在集成前多发现一些单元级别上的缺陷,否则它们将造成更多的问题和返工。
    5.
    维护所有产品可跟踪性。为了保证在每个阶段维护项目的完整性和一致性,要跟踪需求产品以及设计和测试产品。当提出变更或开发一线人员识别变更时,这提供了变更对评审的实际影响和潜在影响的完整视图。
    6.
    文档化并维护设计。没有文档化的设计就不是设计了。在以后的阶段,由于代码成为主要的工程产品,必须更新设计产品以保证一致性,并为变更决策提供基础。
    7.
    由一个独立小组评估质量。项目组应指定一个独立小组负责保证产品和过程的全面质量一致性,以维护一个有别于分析人员、设计人员和检测人员的独立的报告渠道。
    8.
    全面检查。通过检查详细设计和代码来发现错误,比通过测试发现错误要好得多。要确保检查覆盖所有需求、设计、代码和测试产品。
    9.
    在项目早期进行全面的精确的计划。对于识别关键路径、管理风险以及评估程序变更来说,一个完整的、精确的、细化的计划是必要的,它应该安排整个进度的详细活动和产品。
    10.
    严格控制源代码基线。一旦产品进入编码阶段,就必须用严格的配置管理维护测试过程的正式发布的基线控制,并把产品转换成适合发布的零缺陷状态。

  • web基础理论

    2007-03-12 10:25:36

    1. http协议

    除了TCP/IP协议,http可以说是最重要,且使用最多的网络协议了。本节简要介绍一下http协议的工作原理。

    假设现在有一个html文件:http.html, 存放在Web服务器上,其URLwww.myweb.com/http.html ,文件内容为:
    HTML 代码:
    <html>
    <head>
    <title>http.html</title>
    </head>
    <body>
    hello, http
    </body>
    </html>

    现在,一个用户通过IE访问该地址,IE首先将此地址的域名通过DNS转换为一个IP地址,然后通过一个Web服务器开放的端口(默认为80,不为80需在域名后加上“:端口号,例如www.myweb.com:81)与其连接, 然后传送一个类似这样的http请求(使用flashget等下载软件下载文件时,在详细信息里也可以看到类似的信息):

    GET /http.html HTTP/1.1
    Host: www.myweb.com
    Accept: */*
    User-Agent: Mozilla/4.0 (compatible; MSIE.6.0; Windows NT 5.1)
    Pragma: no-cache
    Cache-Control: no-cache
    Connection: close
    [空行]

    请求的第一行为请求内容, 表示通过GET方法向服务器请求资源,/http.html为请求资源名称,HTTP/1.1 表示使用http协议,版本1.1。然后接下来的几行称为请求信息的标头(header),其中描述了请求的一些其他信息,比如客户端浏览器标识等。最后一个空行表示请求结束。

    Web服务器接收到该请求时,服务器检查所请求的资源是否有效,且是否有相应的权限。如果没有问题,则服务器会传回类似如下的http响应信息:

    HTTP/1.1 200 OK
    Server: Microsoft-IIS/5.0
    Date: Thursday, March 31, 2005 17:15:23 GMT
    Content-Type: text/html
    Content-Length: 88
    [空行]
    <html>
    <head>
    <title>http.html</title>
    </head>
    <body>
    hello, http
    </body>
    </html>

    其中第一行的“200”是一个状态码,表示服务器成功完成该请求,如果不成功会返回其他状态码。Content-Type表示返回的数据类型,Content-Length表示返回的数据长度。空行表示标头结束,下面则是浏览器根据请求返回的数据内容,这里是http.html的文件内容,浏览器解析html源代码,将Web页面呈现给用户,到这里就完成了一次成功的http通信。

    以上内容是Web通信的基础,就和Windows消息机制一样,你可能不会用到它,但是你必须了解它,你得知道那些高级的东西隐藏了哪些低级的内容,这样对你理解和使用那些高级的东西都有非常大的帮助:)

    2. html form

    前面的http.html文件是一个最简单的静态html页面,但作为一个Web程序,它实在是太简陋了,它不接受用户输入,永远显示一样的内容。我们需要能够根据用户输入来返回相应的数据。

    看下面的html代码:
    <html>
    <head>
    <title>form.html</title>
    </head>
    <body>
        <form method=”get”>
              <input type=”text” name=”p” />
              <input type=”submit” value=”submit” />
        </form>
    </body>
    </html>

    观察这段代码,其中有一个html form,其内容包括在<form></form>之间, 其中有一个提交按钮(<input type=”submit” value=”submit” />),当用户点击该按钮时,浏览器将html form中的所有输入提交给Web服务器,form标签的method属性指定了提交的方式,这里为get,这个get对应http请求中的GET请求方法,form中的输入均以查询字符串的方式附加在URL, 在文本框里输入一个字符串,比如“form”,然后观察浏览器的地址栏,会变成类似 http://www.myweb.com/form.html?p=form ,这是因为浏览器发出了这样的GET请求:

    GET /form.html?p=form HTTP/1.1
    ...
    ...
    [空行]

    假如<form>标签的method属性为”post”,即令浏览器使用post方法发送该请求,当使用post方法时,用户的输入并不是通过URL来传输的,而是浏览器将内容放在POST请求的标头之后发送给Web服务器的:
    POST /form.html HTTP/1.1
    ...
    ...
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 6
    [空行]
    p=form

    浏览器将用户输入使用GET或者POST方法发送给Web服务器,这个过程称为回发(Postback)”。这个概念相当重要,在Web应用程序中经常涉及到回发。

     

  • 10位程序员眼中的2007:寻找软件开发利器

    2007-01-05 11:09:06

      软件开发生命周期包括需求分析、设计、开发、测试、交付部署等各个阶段,以及贯穿在整个开发过程的软件开发项目管理环节,2006年,在每一个阶段都出现了令人眼花缭乱的技术与应用,同时这些技术还将进一步影响2007年的发展,令人充满期待。

      软件开发生命周期包括需求分析、设计、开发、测试、交付部署等各个阶段,以及贯穿在整个开发过程的软件开发项目管理环节,2006年,在每一个阶段都出现了令人眼花缭乱的技术与应用,同时这些技术还将进一步影响2007年的发展,令人充满期待。

      建模和开发工具平台

      UML在版本升级到2.0以后,原来的UML工具的大哥大Rational从风行到被收购,现在几乎没有了声音。

       建模工具没有太显著的变化,倒是开发工具出现了从原来的百花齐放到现在只有少数巨头竞争的局面。其中最耀眼的当属诞生于IBM,后在开源社区得到快速发 展的Eclipse,目前它已进入嵌入式开发领域。另一个就是微软携其强大财力与人力打造的VSTS开发工具平台,它将成为可以贯穿整个软件开发生命周期 和扮演不同的角色的平台,在最近也有不俗表现。此外还有Sun的NetBean IDE开发工具和BEA的WorkShop开发工具等。

      这些开发工具平台都可以进入整个软件开发生命周期,并且可以在其上进行各种不同应用的开发,说白了就是兼容性足够强。

      开发与应用

       不论使用何种工具,真正最活跃的仍然是应用与开发。JavaEE5的发布,EJB3.0标准的落地,标注取代部署描述符,实体即是POJO等,也许这些 改变对Java进行轻量级应用开发的复杂性会有所改变。在软件开发界最流行的框架,包括Struts、Spring、Hibernate等,这些分布在 Web容器和EJB容器中的各种应用框架变得让人眼花缭乱,要选择最适合自己的看来越来越困难了。由于JavaEE5的发布,著名的JBoss应用服务器 的结构也发生了较大的变化。微软.NET的2.0平台和下一代操作系统Window Vista桌面版发布,同时提供给广大用户的WinFX平台,不仅给开发者而且给用户带来了挑战。

      由Ruby和Retail的联姻,AJAX的新瓶装旧洒,再加上Web2.0应用概念上的炒作,脚本语言、Web开发与应用在今年着时火了一把,因此今年搭上顺风车的PHP也要求能够同Java应用交互,克服语言与平台的障碍。

       桌面与企业服务器的开发应用也有相当发展,中间件市场、数据库、ERP等各种应用随着SOA得到市场的认可,各种技术与应用以及SOA的产品也逐渐多了 起来。随着3G时代的到来,智能手机占有率的提升,手机平台的开发市场正进一步;不仅是手机,数字电视、各种电器和消费类电子产品的智能化发展也促使嵌入 式领域的开发发生了很大变化,如:IP机顶盒、基于GPS全球定位系统的设备、工业自动化和医疗设备等,商业平台与开源Liunx平台共存。

      开源、互联网及其他

       开源软件逐渐挺进企业主流应用,不仅是Linux,还有Boss中间件、Mysql数据库、EnterpriseDB数据库等,而且还有各种应用软件, 包括:Open office办公套件、Firefox浏览器、ERP、CRM等等。开源力量的加入也使得非常多的应用进入到微软平台上,在微软的.Net平台上也出现了 大量的开源应用软件。

      互联网最大的应用与技术就是搜索、软件服务化(Software as a Service)。不管是通用搜索还是行业垂直搜索,不管是互联网搜索还是企业搜索,都已经不仅针对文本而且开始向音视频搜索发展了。

      最后不要忘了,由于人们对应用要求的提高,测试在这几年显得越来越重要了,测试工具与测试理论都有很大发展,这一点也值得关注。(文/邓健)

      手机软件开发将与PC趋同

      王权平

      资深程序员,供职于威盛电子(中国)有限公司,从事GSM/GPRS芯片组的开发,主要工作包括协议软件设计、开发与测试,以及智能手机平台通信中间件的设计与开发。

       2006年出现了很多叫好也叫座的手机产品,这些成功手机的背后,都明显地揭示出了手机软件开发技术的若干发展趋势。2007年手机软件技术将继续迅速 发展,无论单处理器平台或是双处理器平台,网络应用和多媒体应用都将是主要的开发方向,而C++和Java将是首选的开发语言。

      未来, 传统的单处理器手机平台仍将在低价手机和特色手机市场上保持不可替代的优势。其软件通常都由芯片厂商和手机设计公司来提供,除了J2ME平台外,缺乏开放 和标准的API是其固有的缺陷。因此几乎没有来自第三方的原生的面向其处理器和编译平台优化的软件,用户自行扩展的能力较差。展望未来,除了集成更多的应 用软件(如电子邮件、电子书和多媒体播放程序等)外,单处理器平台上的软件开发工作主要集中在新硬件模块的驱动程序以及图形用户界面的创新和提高上。就开 发语言而言,C和C++仍然是首选;在底层通信软件尤其是协议栈的实现上,C语言仍将继续居统治地位;当然在驱动程序中,汇编语言也是不可或缺的。单处理 器平台上第三方开发人员的开发空间在于J2ME平台,但是各个解决方案对Java语言支撑能力的差异,使得Java程序很难达到真正的与平台无关。不过, 随着硬件能力的与提高和Java虚拟机的改善,特别是硬件级Java加速和ARM平台Java优化指令等特性的引入,可以预料J2ME将会成为单处理解决 方案的基础软件平台。

      双处理器平台由运行通信协议的基带处理器和运行用户界面程序的应用处理器组成,是智能手机的基础平台。未来智能手 机平台的软件开发中,中间件和应用程序都有很大的发展空间和需求。中间件主要包括图形库和通信库两部分。图形库重点在于提供更加华丽和友善的用户界面,增 强用户的操作体验,据称WinCE6.0即将提供Vista风格的界面;3D加速将是继2D加速后的第二个亮点;另外,图形库也将重点支持硬件级的多媒体 加速技术,从而支持包括移动音频和视频,特别是手机电视的应用。通信库部分将重点在统一的框架内整合各种广域、局域乃至个域通信技术。应用程序部分,网络 应用将会是2007年的发展重点。就开发技术而言,J2ME在智能手机上的性能优于单处理平台,因此笔者看好基于J2ME平台的手机游戏和网络应用;而基 于C++的网络编程和多媒体编程仍将继续是Symbian平台、WinCE平台,以及Linux上Qt平台的的主要开发领域;另外PC平台上的基础软件组 件,如数据库技术等,将逐渐移植到手机平台上,提供其嵌入式的版本,以适应手机平台的硬件和软件限制。但是由于三大平台存在的巨大差异,软件的可移植性将 成为一个重要的问题。

      核心观点

      随着中间件的加强,手机应用软件开发将逐渐与PC趋同,将出现大量的个人软件开发者和第三方软件开发商,手机软件产业势必会有很大的发展。

      注重测试需求 做好流程建设

      戴金龙

      注册PMP,GB/GJB/ISO/CMMI内审员。原嫦娥工程地面应用系统质量组专家。历任某外企测试技术经理、项目经理及运营经理。对当代软件测试理论及工程实践有较好的领悟。

       当前,测试作为一项职业吸引了越来越多的优秀人才;测试作为控制软件质量的有效手段,融入到了越来越多企业高层的管理理念中;测试作为一门学科,获得了 前所未有的壮大。但在测试技术蓬勃发展的另一方面,测试行业也在迅速地积累着各种问题,在接下来的一年里某些隐藏的问题可能会表现得很显著。

       第一个问题是如何让测试更有效地锲入到不规范的软件开发过程中。提出这个问题恐怕会有不少人大吃一惊:这类企业为什么不先规范软件的开发过程呢?这是不 是一个伪问题?其实,目前有不少软件企业都处在这种状态。但这些企业的管理层并不承认自己的开发过程不规范,反而认为这是一种灵活的、有个人特色的高效管 理。这样的氛围造成软件质量低下自是意料中的事情。

      即使企业管理层了解到测试是解决质量问题的有效途径,实施软件测试也是需要代价的。 目前的测试学科所提供的技术、流程、管理及方法论都是假设是在良好的(至少规范的)开发过程、管理氛围及测试环境中实施的,并没有提供在不规范软件开发过 程中做测试的解决方案,这样就出现了所谓“理论”与“实践”的偏差。解决的办法有两个:一种是变革企业文化,规范开发过程,建立测试所需的相关环境,从而 实施规范、严格、有序的软件测试;另一种就是拓展测试理论,针对不规范开发过程的特点,找到弥补、折衷的解决办法。根据笔者对国内软件企业的了解,后者将 是今后一段时间国内软件企业关注的热点话题。

      第二个问题是如何清晰地定义软件测试需求,使测试工作目标明确、有的放矢。这个问题是以前 的测试学科没有回答清楚的,非常需要深入研究,它将会是今后若干年的研究热点。可能有读者会感到费解:测试需求不就是软件需求吗?其实不然。软件需求用于 指导后续设计的展开。而测试需求则是直接源自于客户的质量要求。测试需求的源头非常繁杂,如何删繁就简,拿捏得当,目前没有现成的方法,仍需要做大量理论 研究和实践探索。

      第三个问题是如何规范软件测试流程以持续提高测试团队的绩效。这个问题目前已有一些答案。如“制定测试计划-设计测试 -执行测试-测试分析与总结”等等。从执行的角度而言,这类粗略的阶段划分或许已经够用,没有进一步研究的必要。但对于控制测试过程而言,对于测试服务型 企业通过CMMI认证而言,尤其是对于改进软件测试过程而言,几乎是没有帮助的。

      核心观点

      在测试技术蓬勃发展的另一方面,测试行业也在迅速地积累着各种问题。

      软件工程为软件工业化铺路

      王刚

      智冠咨询(Crown Consulting)高级合伙人、首席咨询师。先后负责多个大型软件开发项目,涉及电子政务、企业信息化、门户网站等领域,并在项目中大量尝试开源产品。

      从前与中国软件领域相关联的总是一个个令我们这些后辈所敬仰的孤胆英雄,而此时我们已经清晰地认识到属于英雄的软件时代已经结束,只有工业化的生产才能带来中国软件的发展。

      UML

       尽管,只有面向对象的设计方法、使用了UML进行表达才是先进的软件开发方法,这是无需证明的错误命题。但是我们不得不承认,从私有的无序的表达上升到 工业的标准,UML凝聚了软件工业的实践,2005年,UML 2.0标准被OMG组织批准通过,2006年开始被主流厂商所接受,UML 2.0所带来的不只是表现的巨大丰富,而更多的是给予面向模型(MDA)开发以有力的工具。

      软件生命周期管理套件

       Rational套件曾是开发者UML工具的不二选择,遗憾的是,随着IBM对Rational日深的影响,我们所能看到的是庞杂的生产线和对摩尔定律的 不断验证,但对于中小厂商却变得越来越遥不可及。本应该趁虚而入的Borland,更是让人感觉遗憾,卸下IDE包袱的Borland,没有在2006年 发出太多的声音,收购完善了它的生产线,但是溃败的惯性能否停止我们还不得而知。告别了Delphi的我们,不想再告别Together。

       传统厂商的消沉与失误给予新进入者以机会,微软的Visual Team凭借着与IDE工具、Office办公套件的天然联系,逐渐成为.Net平台开发者的首选生命周期管理工具。以NoMagic为代表的中小厂商, 凭借对标准的及时跟进、丰富的软件接口而被普通开发者所接受,它们目前专注于生命周期的某一领域,成为巨头的挑战者。

      核心观点

      只有工业化的生产才能带来中国软件的发展。

      网络安全软件开发趋势

      李洋

      中国科学院计算技术研究所博士,资深程序员。从事计算机网络信息安全领域的研发工作,曾参与“国家自然科学基金”、“国家863重大专项”、“国家242信息安全计划”、“国家973计划”等多项国家重点项目、信息安全系统和企业信息系统的研发工作。

       从当前国际上安全产品的研发情况来看,以防火墙和IDS为主导,以密码技术为基础的产品已经取得了飞速的发展,并在实际应用中发挥了很大的效应,使得网 络安全产品的研究及应用工作不断向前推进。2007年,对于网络安全软件开发人员来说,如下几项新的技术值得大家期待:

      1.基于开源软件的开发技术

      以Linux为代表的开源软件及其开发模式已经深入人心。网络安全软件中最为著名的就是轻量级的入侵检测系统Snort,它已成为众多安全厂商和科研院校研发的重要参照物。纵观网络安全软件的发展趋势,以优秀的开源软件为基础进行研发已成为网络安全界的首选技术途径。

      2.嵌入式安全开发技术

      随着移动计算和无线网络的普及,以及普适计算概念的提出和应用,移动、无线和无处不在的计算已成为新世纪IT的绝对热点。这些需求都要求在上述条件下进行信息处理和计算,因而以J2ME为代表的嵌入式开发技术也成为很大看点。

       尤为值得关注的是,人们在获得上述便利的同时,也在经受着自己的隐密数据随时有可能被窃取和破坏的威胁。那么,如何在当前的嵌入式技术当中综合采用密码 理论、PKI基础架构以及其他信息安全技术来提高嵌入式系统的安全性,为未来轻量级的嵌入式计算保驾护航,也必将成为网络安全工作者和软件开发人员关注的 一个热点问题。

      3.高性能计算服务开发技术

      网络带宽的日益增长和单机处理能力已经极不对称。诸如早期的防火墙、IDS等都已经不能满足现实的需求。

       因此,采用并行处理技术以及研究和开发高性能网络协议处理技术来缓解上述问题带来的压力是不错的选择。并且,随着64位计算的到来,如何在该硬件平台上 进行并行开发、编译等,都是网络安全软件研发人员期待和需要解决的问题。值得期待的是,当今的UTM(统一威胁管理)技术试图在上述各方面取得突破,建立 一套高性能、高可靠、完善的网络威胁防范机制,我们拭目以待。

      4.可信编程技术

      对于安全要求较高的场合,可信计算平 台能够为用户提供更加有效的安全防护。而据统计,在网络安全领域,80%以上的网络威胁和漏洞来源于系统自身的Bug,而这些Bug则来源于设计思路以及 程序实现。那么,在积极防御外来攻击的同时,提高网络安全软件研发人员自身编程的可靠性,软件开发平台在软件编程中可能出现漏洞(比如最常见的缓冲区溢出 等)的地方进行提醒和标注,就可以极大地减少程序实现的硬伤。我们不妨借用可信计算的名号称其为可信编程技术,相信也将是软件研发人员关心的技术,不但可 以提高软件可靠性,更能避免用于查找大量重复出现的系统Bug所需的人力和物力。

      核心观点

      基于开源软件的开发技术、嵌入式安全开发技术、高性能计算服务开发技术、可信编程技术将是未来网络安全软件开发的四大趋势。

      降低开发复杂性

      程勇

      Java开放源码软件咨询顾问,Huihoo.org开源软件社区共同创始人,北京中流科技有限公司CTO。

       Java技术的发展已经走过11个年头,在企业级应用开发领域占领主导地位的JavaEE技术也伴随着Java自身的演变,在2006年发生了许多新的 变迁。 随着系统开发复杂度的上升,需要一种更好的解决方案来分解系统的复杂,并简化应用开发的过程。基于众多的因素,选择企业应用开发的架构平台时都需要考虑很 多约束,它必须最小化对应用开发本身的影响。因此,一个好的技术平台和应用框架应该具备如下特性:提供应用开发的一致性;提供高端和低端特性;提供管理逐 步增长的应用系统的具体方法;为高级开发人员提供指导;能够使不同框架的特性和优点集成到一起进行工作;能够快速进行应用开发,保证产品按市场的需求发 布;能够降低项目开发的风险,提升企业的投资回报。

      由此,我们不难发现,现在大量涌现的新技术体系和框架,都是在朝着简化应用开发的方向而努力,这些技术包括:

      ● AJAX AJAX并非一种编程语言,它是使用XHTML或HTML,Javascrīpt以及XML来建立互动网络应用程序的一种模式。

      ● 脚本语言 Ruby的发展,使得在Java 语言中使用动态机制成为可能,使用Ruby的动态机制,用户能够改变脚本类的定义。这些Ruby对象允许直接使用方法管理它的状态和行为。

      ● 应用框架 以Spring为代表JavaEE应用框架是在JavaEE技术体系之上快速构建应用的支撑平台,应用框架通过整合的技术架构,将众多的优秀开源框架融合在一起,为应用开发提供了一个完整的技术解决方案。

      ● JavaEE 5.0 JavaEE 5.0 是新一代的Java EE技术规范,其中包括JSF、EJB 3.0等十多项全新的技术体系。它的多项新特性为JavaEE应用开发带来了更多的便利。

      核心观点

      选择企业应用开发的架构平台时都需要考虑很多约束,它必须最小化对应用开发本身的影响。

      工作流: 国内国际两极分化

      胡长城

      网名“银狐999”,就职于TIBCO。国内J2EE开源应用的支持者,有过6年的J2EE应用和产品开发及架构经验,是huihoo开源组织的成员。

      与众多新技术相比,工作流的知名度也许会小一些,但工作流也一直处于不断创新之中。所不同的是,在这个领域新技术的应用是被隐藏在应用理念和架构体系之下的。对于工作流的发展趋势,这里分开两条线来阐述。

       第一条线就是单纯从工作流技术应用的发展趋势来探索。在这方面国际上应用水平已经远超越国内,这就是这两年的龙卷风—— BPM(Business Process Management)。很多国际化的大企业已经把BPM定位于一种解决方案。在这一整套解决方案中,工作流技术已经成为流程的服务,围绕这个服务,有各 种模块和应用相辅助。BPM解决方案俨然成为一种参考架构: 一方面是以SOA为主导的技术架构,另一方面则包含了一整套的服务。

      实际 上,BPM的发展是很多年的流程和工作流发展的必然结果。在这个领域的供应商有的由早期的工作流厂商发展而来,如Staffware公司(现已经被 Tibco收购); 有的由早期的EAI提供商发展而来,如Tibco; 有的由应用服务器提供商发展而来,如BEA等。在它们的BPM蓝图中有很多相似之处,比如以BPEL规范阐述Business Process。

       第二条线从国内工作流应用和技术趋势来分析。这两年已经有部分国内企业采用EAI或BPM技术进行系统整合方面的应用,但大规模地采用BPM解决方案还 是很少,不过这是一个趋势。国内目前工作流技术的应用还主要以“办公或业务流程的人工信息化处理”为主,毕竟国内企业和政府的一个很大特征是“以人为 主”,而不是“以制度化为主”。在一些集团性的企业和跨省市集中管理性的系统中,分布式流程应用逐渐显现出来。而伴随着国内几年来工作流市场的积淀,早期 的一些工作流厂商在寻求“流程分析和监控”方面的突破,而这方面的客户需求也日渐多起来。但短时间内,很难由国内工作流厂商自己取得一些突破,发展起 BPM产品。

      上述这两条发展线也代表了两极分化。但第一条战线的BPM 解决方案肯定是未来大规模应用的趋势,虽然短时间内对国内工作流应用市场冲击很小,但是政府和国内软件厂商却不应该小觑这个发展趋势。

      核心观点

      国际大厂商对工作流的研究重点是把它作为BPM的一部分,为流程服务,而国内还主要以“办公或业务流程的人工信息化处理”为主,短时间内,国内还很难有所突破,推出自己的BPM产品。

      Java走上开源之路

      孟冬冬

      中科软科技股份有限公司金融保险部系统分析师、软件架构师。9年软件设计开发和6年项目管理经验,精通基于J2EE架构的企业应用系统开发技术。先后在普天、中软等多家软件公司任系统分析员、软件架构师及项目经理。

       2006年11月13日,Sun公司宣布将Java转为开源。预计到2007年3月份,除了一部分所有权不属于Sun的源代码之外,几乎全部Java技 术的源代码都将按照GNU GPL自由软件许可授权协议公开。Java在和.net经历了两年的竞争后已显疲态,相比5岁的.net以及新生的动态语言Ruby,11岁的Java已 略显复杂臃肿,甚至在网上还有“Java将死”的论调。Sun选择在此时将Java开源,不管是否是Sun迫不得已、在日薄西山前的最后博弈,但影响之深 远却绝对不可小视。它引发的“蝴蝶效应”无疑会使Java技术的生命力更强,走得更远,更可赢得在开发语言竞争中起决定作用的更多程序员的芳心,相信未来 Java领域将出现更多令人惊奇的开源产品。

      另外Sun还赶在圣诞节前发布了JDK的6.0 Release版本。对JDK而言,“成败皆在应用服务器厂商”。市场占用率最大的应用服务器Weblogic8、WebSphere5成就了1.4,但 也限制了JDK5的普及。在JDK5还没有用热时,JDK6就来了。不过,这倒也是好事,可以直接跳过JDK 5去研究JDK6的应用了。

      JDK6对笔者的最大吸引力是它在JVM性能上的提升和对XML和Web服务的支持。性能方面,无论是运行时分析功能还是用户对性能情况的反馈,尤其是在Swing方面,JDK6对JIT都有了卓有成效的提升。

       一直以来,相对于微软的.net,Java对Web Services的支持复杂得难以接受,也因此产生了优秀的Axis和XFire框架。而在JDK6下,Java程序员也能享受到这种待遇了,不用针对 Web服务另外加入额外的工具,不使用任何框架也能写出Web Services程序了。JDK6中固化了XML、Web Services的标准,如StAX、JAXB2、JSR181等。JDK 6在语法方面没有太大改变,最明显的就是添加了对脚本语言的支持,如Javascrīpt、Ruby、PHP。JDK6 中实现了JSR 223,提供了让脚本语言来访问Java 内部的方法。它可以在运行的时候找到脚本引擎,然后调用这个引擎去执行脚本,这个脚本API 允许程序员为脚本语言提供Java 支持。

      另外在JDK6中内置实现了JDBC4支持的Derby数据库,为测试和小型系统的发布提供 了便利条件。最后,JDK 6 中对内存泄漏增强了分析以及诊断能力,当遇到Java.lang.OutOfMemory 异常的时候,可以得到一个完整的堆栈信息,并且当堆已满时,会产生一个日志文件来记录这个致命错误。

      如果说谈到JDK 6更多的是对未来的一种希望的话,Java full-stack(Java full-stack,意指集成了全部所需功能的Java快速开发框架)则是一种已经可以见到的东西。

       很长时间以来,作为一个Java程序员,幸福的是从表现层到持久层都有众多的框架可供选择,痛苦的是在这些框架中挑选出适合自己的框架,而且还要付出将 不同层次的框架粘合在一起的设计成本和时间,而架构的稳定性和实用性则往往取决于架构师的设计理念和经验。Ruby on Rails的流行再一次证明了在软件开发领域“简约至上”的真理,它使得诸多Java开发人员把目光放到了“提供最方便好用的Java full-stack框架”上面,因此Java开源社区如雨后春笋般地出现了一批又一批的full-stack框架,如Appfuse、 SpringSide、JBoss Seam、RIFE、Grails、Trails、Rife等。Java领域也从此开始走向full-stack的快 速开发道路。笔者就非常喜欢国外的JBoss Seam和国内的SpringSide。

      核心观点

      Sun选择在2006年岁末将Java开源,不管是不是Sun的最后博弈,其影响绝对不可估量。从此以后,全世界所有的开发人员都可以对Java源代码进行修改、优化、除错,同时Java也将变为一种真正免费的技术。

      网络技术融入软件平台

      智雨青

      北京理工大学计算机硕士,8年的电信行业软件开发经历,曾在亿阳信通、北京朗新科技公司供职,中国联通第一版CRM的主要设计与开发者,参与联通多个省级OSS/BSS系统的研发与实施。

       2006年年初有专家曾经说过,今年软件发展技术很有可能进入到一个无热点时代。的确,我们非常熟悉的网络应用技术、搜索技术、应用行业软件技术等等, 已经发展到一个非常成熟的阶段,每一次升级能带给我们的惊喜越来越少。不过,2006年虽没大的“翻天覆地”,却仍涌现出了不少亮点,而这些亮点极有可能 会决定今后两三年的应用潮流。

      1. Web2.0

      Web2.0是2003年之后互联网的热门概念之一。 Web2.0技术主要包括: 博客、RSS、百科全书(Wiki)、网摘 、社会网络(SNS)、P2P、即时信息(IM)等。由于这些技术有不同程度的网络营销价值,因此Web2.0在网络营销中的应用已经成为热门领域。尽管 对于究竟什么是Web 2.0还有很多的讨论,但有一点可以肯定,Web2.0是以人为核心线索的网。提供更方便用户“织网”的工具,鼓励提供内容;根据用户在互联网上留下的痕 迹,组织浏览的线索,提供相关的服务,给用户创造新的价值,给整个互联网带来新的价值,才是Web2.0商业之道。

      2. 嵌入式移动开发技术

       嵌入式开发技术的发展推动了嵌入式操作系统跨越式发展,也成为现代及未来移动技术发展的重要保障,以微软Windows CE系列、PalmSource公司PalmOS、Nokia公司Symbian等为代表的嵌入式操作系统已在各种移动设备上大量应用。尤为值得一提的是 作为行业领先者的微软2006年5月发布了Windows CE 6,凭借重新设计的操作系统(OS)内核架构以及增强的并发处理能力和新集成的工具集,提供了一个更加集成化的嵌入式开发环境,允许开发者将大量更为复杂 的应用集成到比以往更加智能的设备中,从而提供高性能的多媒体、Web服务和无线网络连接应用。

      3. 中间件技术

      随 着Internet的快速发展,中间件的定义正在走出其狭义空间,逐步形成更为广义的内涵。其发展主要呈现出两方面的技术趋势: 一方面,支撑软件越来越多地向运行层渗透,提供更强的对系统实现的支持;另一方面,中间件也开始考虑对高层设计和运行部署等开发工作的支持。而这两个技术 趋势从本质上说正是源于软件体系结构和软件构件等技术的发展和应用。从广义的角度看,中间件代表了处于系统软件和应用软件之间的中间层次的软件,其主要目 的是对应用软件的开发和运行提供更为直接和高效的支撑。中间件技术已成为软件技术的研究热点。

      4. 即时通信技术

      现 在即时通信市场不再只有一种声音,腾讯、微软、IBM、Avaya、Skype、中国移动纷纷将触角伸向了这块市场,诱惑这些大佬们的是即时通信市场的爆 发式增长和随之而来的丰厚利润。而移动即时通信作为一项数据业务更是被视为未来3G时代的一大“金矿”。待3G牌照发放,捆绑于移动即时通信之上的包括彩 信、彩铃、图片、博客、手机电视等应用都会得到充分发掘。

      5. 下一代搜索技术

      搜索引擎发展到今天已经增添了很多新 的特征,其特色主要体现在“概念集群”和“动态分类”,它通过分析网页之间的关联,建立一种类似人的思维的更智能化的概念分类方式,通过模仿人的思维模 式,对要查找的概念进行关键字联想和分类。除了概念集群和动态分类,新一代搜索引擎还更多地体现在个性化方面,这在以前的搜索里是很难做到的。概念集群又 分为大众化概念集群和个性化概念集群,通过搜索记录,下一代搜索技术能够帮助每个人建立自己个性化的搜索功能,而且信息是可以分享的。

      核心观点

      基于新一代网络技术的各种应用的融合是大势所趋,网络新技术与软件新技术的相互促进将为人类创造一个更为灿烂的IT世界。

      互联网将更社区化

      康威

      新华社高级工程师,Lotus技术专家。曾任后勤指挥学院教员,获全军科技进步二等奖一次、三等奖四次,2002年7月转业到新华社技术局,是新华社多媒体数据库系统核心成员。

      互联网的飞速发展成就了搜索引擎今天的地位,同时也推动了网络视频的发展,而Web 2.0又推动了全民的参与性、主动性和互动性,密切了人与人之间的联系,由此形成了线上与线下互动的各种模式,反过来又推动了互联网的壮大。

      1. 互联网搜索

      2006年的中国互联网搜索依然是百度、Google双头垄断,百度的势头略有提升,垂直搜索成为耀眼的明星,移动搜索也有了一定的发展。未来搜索引擎将会更精准化、智能化、人性化、垂直化和社区化,会以更快的速度为计算机和其他智能终端用户服务。

       笔者认为,2007年的中国搜索市场将是一个分水岭,其竞争将达到前所从未有的规模,雅虎、搜狐磨刀霍霍,微软卧薪尝胆,不过双头垄断局面不会改变,走 向国际化的百度依然会是龙头老大,而能满足大家特定需求、具有差异化特征的垂直搜索和生活搜索是未来的市场增长点,其搜索商业模式也会更加丰富。2007 年,搜索行业的发展必将进一步促进互联网商业模式的创新以及相关技术的提高,成为互联网发展的重要支柱。

      2. P2P流媒体

       P2P流媒体行业一直都被认为是下一个可能产生井喷效应的互联网领域。P2P体现了真正的“互联网精神”——我为人人,人人为我,但市场是理智而残酷 的,在短暂的狂欢过后,P2P流媒体行业所面临的问题与挑战也逐步显露,商业模式不清晰、盗版泛滥、国家政策不明朗等问题不得不令人深思。

       网络视频是中国未来几年的热点,目前只有两个方向可以赚大钱: 流媒体巨头与内容大鳄的联姻和微视频,依靠盗版的视频直播与共享只可能是小富即安。只有少数几家有资金、有技术、有影响的流媒体厂商(包括门户网站)才能 获得内容大鳄的青睐,留给众多中小型流媒体厂商的只能是微视频。

      微视频是指短则30秒,长则不超过20分钟,内容广泛,视频形态多样, 涵盖小电影、纪录短片、DV短片、视频剪辑、广告片段等,可通过PC、手机、DV、DC、MP4等多种视频终端摄录或播放的视频短片的统称。短、快、精、 大众参与性、随时随地是微视频的最大特点。微视频规避了版权的威胁,降低了带宽的成本,易形成社区,具有一定的赢利模式,随着网络融合的加快,3G和宽带 的发展,只要走专业化、特色化、差异化道路,一定大有“钱”途。

      3. 互联网社区化

      互联网社区化有三种形式: 情感的归属与宣泄,人们可以不受空间限制地自由沟通、发表见解、结交朋友、宣泄情感; 线上与线下的互动,互联网使得人们能够以最快捷的方式广结交天下朋友,很多社区型网站都定期举行各种线下活动; 智慧和经验的共享,充分体现了P2P精神,人们信息需求的满足,需要越来越多地依靠其他用户的力量来满足,社区化的搜索是最好的例子。

       社区化的搜索能更好地满足用户的需求,也可以更好地发挥用户的价值。首先他们会享受其他用户贡献的智慧,同时他们在自己使用的过程中几乎不会察觉到在给整 个互联网做出贡献。2006年7月13日正式推出以“搜索+博客”为理念的产品——百度空间,这是百度继贴吧、知道、百科后推出的第四个社区类产品,具备 个人空间、个人门户等基本特征。这一产品的推出,不仅进一步深化了百度的社区化搜索服务,并凭借其在中国互联网的巨大影响力,进一步推动了中国互联网社区 化发展的进程。

      核心观点

      未来的互联网将更能体现P2P精神,将更视频化和社区化(当然文字仍会像传统报纸一样不可替代),同时,在互联网的进化过程中,搜索技术将会改变人们的生活习惯。

      应用推动软件技术创新

      张涛

      郑州航空工业管理学院毕业,一直从事计算机应用软件的分析、设计、开发以及项目的实施,主持开发的软件包括河南省县级供电企业营销MIS、河南省在建水利工程移民资金辅助管理系统。

       今天的企业信息化面临着更加具体的问题,比如终端数据如何快速采集传输; 缺乏软件应用标准,行业应用深度不够; 系统间交互性差、各自为战,资源共享程度不高; 系统具有一定规模后,维护、升级困难。由于企业在这些方面的需求非常迫切,未来各个软硬件厂商必定在这方面有所作为,基于此,笔者以为2007年以下这些 技术将会有比较大的突破。

      1. 数据采集自动化、便捷化

      随着MCU(多点控制单元)应用范围的不断扩大,以往的各类 硬件终端,比如电力、燃气、水等终端数据采集或检测设备,已经逐步从简单的计数、指示功能,向智能数据采集终端转变,而且传统装置经过简单的改造,也可实 现终端数据的采集和存储,这不仅让人从数据采集的工作中解放出来,更可以通过相对廉价的手段解决采用人工采集数据所带来的一些问题。

      正 是基于这种前提,微软Office办公套件的新成员InfoPath让我们眼前一亮,借助它可以快速、方便地设计出具有超强表现力的电子凭单,以满足信息 采集、企业内部和企业之间的信息传递。更令人称道的是,它不仅可以使用传统的数据库作为数据源,更可以使用XML作为数据的存储格式,让不同系统之间的数 据交互更加畅通有效。

      2. 软件插件化、框架化

      大凡用过Eclipse的程序员都会被它的灵活和开放性所打动,而目 前部分行业欠缺软件应用标准就是摆在开发商面前的诸多问题之一。类似权限管理、自定义查询、自定义报表、组织业务功能等应用系统必备的功能,完全可以通过 抽象形成框架,提高代码重用度和稳定性。同时,采用软件框架进行系统的开发,不仅可以让系统分析和设计人员把主要精力放到业务模型的建立上,缩短项目周 期,更可以让系统用户和开发商体会到系统稳定、维护方便、升级简单的方便。

      在此必须要提的是Java,如果说Java的诞生是为了网 络,那么可以说它已经不辱使命,而且在推动着网络技术的发展,开源性使得它的追随者们努力工作,Struts、Spring等优秀的、基于框架的作品纷至 沓来,逐步让我们脱离繁杂的技术旋涡,把时间和精力投入到业务分析领域,使软件的插件化、框架化不再是海市蜃楼。

      3. SOA

       近几年SOA(Service-Oriented Architecture,面向服务架构)概念的提出,使得用户和软件开发商对系统建设有了新的认识。笔者认为SOA不仅是架构模型,更是一种应用思想的 体现。对于软件功能粒度的划分、软件功能的部署、系统驱动模式等都会由于SOA而产生较大的影响。

      企业通过应用SOA,不仅可以在成本 没有太大增幅的条件下,让用户使用已经成熟的组件增强B2B的有效性,还可以让开发商最大限度地复用代码,把软件产品变成真正的服务。此外,SOA的实施 更可以加速行业标准的制订和执行,因为只有大家遵循同样的标准和接口,才可能营造出业务共享和跨系统业务交互的良好氛围。

      4. 虚拟软件

       有时一些系统尤其是比较老的,对OS或DBMS有特定要求的系统,或系统在兼容性方面与新版本有差距,这时虚拟机就是最好的选择,不仅可以节省用户的硬 件资源减少维护和管理成本,更可以让原有应用正常运行,为应用系统的升级换代赢得时间。与VMWore相比,微软的Virtual PC也在紧追不舍,笔者认为尽管较VMWare还有一定距离,但是无论产品孰优孰劣,最终受益的还是用户。

      核心观点

      行业特点决定行业应用,行业应用需要软件相关技术手段提供支持,而行业应用又会引发技术的创新。

Open Toolbar