发布新日志

  • 如何组织评审会议(转)

    2009-07-21 13:35:26

       同行评审对于软件企业来说是很有效的一种方式,无论是国外还是国内企业越来越认识到了同行评审的重要性,但是在实施的过程中效果不是很理想,常常会出现 走形式,使评审会议变成了讨论会议,对具体的问题争论不休,经常跑题,使评审的效果大大的降低。我在实施的过程中根据同行评审的要求,总结出来以下经验供 大家参考,同行评审的目的是及早高效的发现并消除开发过程中出现的缺陷。很多公司也制定了相应的评审流程,项目开始的时候也做了评审计划,但是在具体的实 践中把握不好一些细节的东西,这些主要的问题大多数发生在评审会议的组织上,而这些细小的环节才是评审是否成果的关键。只有评审会议比较完满了,其他修改 Bug、消除缺陷都比较容易完成。我在这里主要讲一下评审会议的组织,至于评审计划、评审执行过程的数据采集、测量等环节不再详述。
    评审会议流程一般采取以下几个步骤:评审会议的准备、评审会议的召开、评审会议的跟踪三大环节。
    一、 评审会议的准备
    会议的发起人召集会议,发出评审通知(评审内容、会议时间、会议地点、参加人员等),并且将相关待评审的相关资料也发送给参加会议的评委;主要的目的有两 个:第一、让参加会议的人员对会议的内容有一定的了解,在会议前做好准备,避免盲目的参加会议而浪费自己和其他人的时间;第二、如果该评委在会议时间有其 他紧急的事情,可以及早反馈给会议召集人,必便召集人重新确定评委或者评审会议改期召开。
    二、 评审会议的召开
    一般情况下,确定一个会议主持人;其主要的职责是控制会议的进度、时间、协调会议中出现的偏差。
    对于待评审的工作产品由其生产者采用“走读”的形式进行讲解,在讲解的过程中回答评委提出的问题。
    会议记录人主要是记录会议中发现的所有问题,方便会后的修改完善。
    SQA人员参加会议主要的关注点在于对照SQA的检查表Checklist检查评审的流程是否符合规范。
    三、 评审会议的跟踪
    将记录的问题汇总到《评审记录表》,由项目组进行修改、完善;SQA监督所有问题是否封闭。
    附录:
    (1) 列举重要工作产品评审的重点:
    A 计划的评审
    主要是关注的核心在于估计是否准确;人员安排是否合理;以上两个方面如果合理,项目的进度就不会出很大的问题。
    B 需求的评审
    主要关注需求来源、需求的准确性、需求的完整性,避免产生二义性;最好让测试人员和客户参加,以便让各角色达成共识。
    C 总体设计的评审
    在总体设计评审中,最好将已经评审通过的需求文档从配置管理库中提出,对照总体设计是否和需求一致;另外,技术领域专家参加评审还要关注于设计的合理性、可实现性以及完整性。
    D 代码评审
    由项目组内进行代码审核,主要关注代码的格式、整体逻辑、变量的命名、程序注释等表面的属性;至于运行质量应当放在单元测试中解决。
    E 管理性的评审
    管理性的评审一般放在里程碑、项目结束后进行。准备的资料包括前期工作的总结,是否按照计划执行、出现的问题的数目、解决了多少、未解决的问题、是否对后期有影响等。
    (2) 评审中应当把握的几个原则:
    A 评审工作产品,而不是评审生产者
    评审涉及到别人和自我。如果进行的恰当,可以使所有参与者体会到温暖的成就感。如果不恰当,则可能陷入审问的气氛之中。应当温和的指出错误,会议的气氛应 当是轻松和建设性的;不要试图贬低或者羞愧别人。主持人应当加以引导,以保证会议始终处于恰当的气氛和态度中,如果失去控制应立即休会。
    B 制定日程,并且遵守日程
    各中会议都有一个主要的缺点:放任自流。评审会议必须保证不要离题和按照计划进行。主持人要有维持会议的程序的责任,有人在转移话题的时候应当提醒。
    C 限制争论和辩驳
    评委提出问题时,未必所有人都能认同该问题的严重性或者能马上打成一直的意见。不要花费时间争论这一问题,应当记录在案,留会后讨论。
    D 对各个问题发表见解,但是不要试图解决所有记录的问题
    评审会议不是解决问题的会议。问题的解决由生产者自己或者其他人的帮助下完成。问题的解决方案应当在会后进行。
    E 作书面笔记
    有时候让记录员在黑板上作笔记是个好主意,在记录的时候,评委可以推敲措词,确定问题的优先次序。
    F 限制参与人数,并且坚持事先做准备
    俩个人的脑袋好过一个,但是14个脑袋未必就好过4个。将评审涉及的人员数量保证保持在最小的值上。所有参与会议的人员要事先作好准备。
    G 为每个可能要评审的工作产品建立一个检查表
    检查表能帮助评审主持人组织会议,并帮助每个与会人员将注意力集中在重要问题上。
    H 为评审分配资源和时间
    评审要占项目组的资源和时间。所以,评审会议一定要作为软件工作活动的任务加以调度。可以在综合计划中考虑进去。
    I 对所有的评审者进行有意义的培训
    为了提高效率,所有参与评审会议的人都应当接受正式的培训。
    J 会议时间的控制
    为了提高效率,每次评审会议只评审一个工作产品,并且时间最长不能超过2个小时。所以要求,在评审准备时候各位评委事先作好准备。
  • 几种测试工作量的估算方法

    2009-07-21 12:59:24

       在测试项目管理中或编写测试计划时,经常需要对某个测试工作进行工作量的预算,很多时候都是凭个人的工作经验进行估算的,如能结合一些常规的估算方法,有助于估算的精确度。

      以下是网上找到的一些常规的估算测试工作量的方法:

        1. Ad-hoc方法

        这种方法下的测试工作量不基于任何确定的期限。工作一直继续直到达到一些由管理或市场人员预先定下的时间表。或者,一直到用完了预算的经费。

      这种情况普遍存在于非常不成熟的组织,并且时常有100%的错误差数。

      2.开发时间的百分比法Percentage of development time。

        这个方法的基本前提是测试工作量依赖于开发时间/开发工作量。首先,开发工作量使用例如LOC或FP方法被估算出来,然后使用一些探索性的方法来限制测试的工作量。  这种方法变化比较大而且通常基于以前的经验。

      通常预留项目的总花费时间的35%给测试。? 5-7%给组件和集成测试? 18-20%给系统测试? 10%给接收测试(或回归测试等)

      3.类比法(经验值法或历史数据法)

      根据以前或相似项目(主要在项目性质,领域,规模上有相似)所积累的经验或历史数据来估算工作量。类比法估计结果的精确 度取决于历史项目数据的完整性和准确度,因此,用好类比法的前提条件之一是组织建立起较好的项目后评价与分析机制,对历史项目的数据分析是可信赖的。需要 收集以下相关的历史数据:? 在设计和实现阶段花费的时间? 测试工作的规模,例如用户需求的数量,页面数,功能点? 数据样式,例如实体,字段的数量? 屏幕或字段数量? 测试对象的规模,例如KLOC

        4.WBS(work breakdown structure)估算法

        将项目或产品分解为具体的工作,然后分别对各个工作进行时间估算,最终求和得出项目或产品的测试工作量/时间。

      5.Delphi

        Delphi法是最流行的专家评估技术,在没有历史数据的情况下,这种方式可以减轻估算的偏差。Delphi法鼓励参加者就问题相互讨论。这个技术,要求有多种相关经验人的参与,互相说服对方……

      Delphi法的步骤是:1、协调人向各专家提供项目规格和估计表格;2、协调人召集小组会各专家讨论与规模相关的因素;3、各专家匿名填写迭 代表格;4、协调人整理出一个估计总结,以迭代表的形式返回专家;5、协调人召集小组会,讨论较大的估计差异;6、专家复查估计总结并在迭代表上提交另一 个匿名估计;7、重复4-6, 直到达到一个最低和最高估计的一致。

      6.PERT估计法

        PERT对各个项目活动的完成时间按三种不同情况估计:一个产品的期望规模,一个最低可能估计,一个最高可能估计。用这三个估计用来得到一个产品期望规模和标准偏差的Pert 统计估计。Pert 估计可得到代码行的期望值E, 和标准偏差SD.

  • Websphere - 配置Oracle数据源(转)

    2009-07-15 10:54:31

    Websphere 6.0下Oracle数据源配置
    一、配置Oracle数据库
    打开Oracle Enterprise Manager Console,右键点击数据库FLOW—〉查看/编辑详细资料—〉所有初始化参数—〉找到processes(进程和会话),将该连接数最大值设置为150,设置好后,数据库配置完毕。

    二、Websphere6.0下创建Oracle数据源
    1. 启动Websphere6.0服务

    2. 打开IE浏览器,在地址栏中输入:http://localhost:9060/ibm/console/,登陆Websphere6.0管理控制台

    3. 在导航栏左侧选择:环境-〉Websphere变量

    找到ORACLE_JDBC_DRIVER_PATH ,输入ORACLE_JDBC_DRIVER_PATH 的值,指定ORACLE数据库驱动jar包的位置,确定,保存。

    4. 在导航栏左侧选择:资源-〉JDBC提供者
     
    5. 在右侧JDBC提供者新建页面点击“新建”按钮 

    6. 按照下图选择ORACLE数据库相关类型设置,点击下一步,完成第一步设置:

    7. 配置页面的设置全部默认,不用修改,点击确定,保存。

    8.点击刚才新建的ORACLE JDBC DRIVER,进入配置页面,点击右侧的“数据源
    9.点击“新建”,新建数据源:

    10. 输入名称:inforflowDS;JNDI名称:jdbc/inforflowDS;数据存储 helper 类名;

    Oracle 数据源属性中输入URL:

    jdbc:oracle:thin:@数据库服务器IP:1521:oracle             

    点击“确定”保存。

    11. 点击“inforflowDS”数据源,点击右侧的相关项:J2EE 连接器体系结构(J2C)认证数据条目

    12. 点击“新建”,输入用户别名flow_oracle,用户标识:system 密码:admin,点击确定,保存

    13. 打开inforflowDS数据源配置页面,在组件管理的认证别名下拉框中选择上面刚刚新建好的J2EE 连接器体系结构(J2C)认证数据条目——flow_oracle点击确定,保存设置

    14. 在数据源页面点击“测试连接”

    15. 测试连接成功即可。

    三、Websphere6.0下ORACLE数据源最大连接数配置
    在数据源配置页面,点击“连接池属性”     

    设置最大连接数为100,

    确定,保存,配置结束。

    四、Oracle初始数据备份与还原
    1. 备份:

    开始->运行 cmd

    在cmd中输入EXP SYSTEM/ADMIN@FLOW

    然后按照提示进行下面接下来的步骤既可,备份文件保存在当前目录下。

    2. 恢复:

    将oracle数据库中相应的流程定义表删除;

    开始->运行 cmd

    在cmd中输入IMP SYSTEM/ADMIN@FLOW

    然后按照提示进行下面接下来的步骤既可,将当前目录下的备份文件恢复到Oracle数据库;

    重新创建索引

  • WebSphere中流行数据库连接池的配置

    2008-12-08 11:49:36

    WebSphere中流行数据库连接池的配置
  • Websphere内存溢出的日志

    2008-12-08 11:32:12

    项目中碰到Websphere内存溢出的情况。原因可能:出现过多内存泄漏,或者分配过多大内存等。解决方法:
    1、进入was管理控制台,选择 应用程序服务器 > server1 > 进程定义 > Java 虚拟机,将"最大堆大小"改为768或1024以上(跟机器内存相关,你的机器最好有较大内存)。保存。
    2、优化你的程序,减少要求分配较大内存的设计,优化数据连接池。
    3、给was打补丁。ibm网站上有相关补丁下载,不过最好升级到同系列的最新版本
    4、修改启动文件,使之不产生这些文件,设置如下:
        export IBM_HEAP_DUMP=false
        export IBM_HEAPDUMP=false
        export IBM_HEAPDUMP_OUTOFMEMORY=false
        export IBM_JAVACORE_OUTOFMEMORY=false
    分析以上4中方法,只有方法2才是根本解决之道。
    针对4,IBM网站上有详细阐述,特附如下:
    http://www-1.ibm.com/support/docview.wss?uid=swg21140641


    用于故障诊断的工具:
    http://www.ibm.com/developerworks/cn/websphere/techjournal/0702_supauth/0702_supauth.html

    在您对 WebSphere Application Server 进行故障诊断时,日志记录工具很可能是您使用的第一项问题确定功能。这一工具集向用户和 IBM Support 提供深入了解运行时的能力,这种能力在确定基本问题时是必需的。

    WebSphere Application Server 日志记录基础结构是基于标准 Java 的日志记录基础结构(即java.util.logging)建立的。在一个典型的 WebSphere Application Server 配置中,日志记录被设置为将普通和严重的日志消息分别写入两个文件,即SystemOut.log 和 SystemErr.log。
       
    其他日志
    WebSphere Application Server 中还有其他两个日志文件:JVM native_stdout 和 native_stderr 文件。与 SystemOut.log 和 SystemErr.log 不同,这两个文件实际上是由 JVM 本身处理的,只包含与该 JVM 的操作有关的消息,而不包含来自 WebSphere Application Server 运行时的消息。


    假设在native_stderr.log里有这么一段日志:
    <AF[3160]: Allocation Failure. need 2621456 bytes, 195 ms since last AF>
    <AF[3160]: managing allocation failure, action=2 (5049520/1073740288)>
      <GC(3538): GC cycle started Wed Jul 30 17:41:02 2008
      <GC(3538): freed 4619080 bytes, 0% free (9668600/1073740288), in 6135 ms>
      <GC(3538): mark: 992 ms, sweep: 28 ms, compact: 5115 ms>
      <GC(3538): refs: soft 0 (age >= 32), weak 0, final 7, phantom 3>
      <GC(3538): moved 6184798 objects, 298397088 bytes, reason=1, used 101520 more bytes>
    <AF[3160]: managing allocation failure, action=3 (9668600/1073740288)>
    <AF[3160]: managing allocation failure, action=4 (9668600/1073740288)>
    <AF[3160]: managing allocation failure, action=6 (9668600/1073740288)>
    JVMDG217: Dump Handler is Processing OutOfMemory - Please Wait.
    JVMDG315: JVM Requesting Heap dump file
    JVMDG318: Heap dump file written to C:\Program Files\IBM\WebSphere\AppServer\profiles\default\heapdump.20080730.174102.3784.phd
    JVMDG303: JVM Requesting Java core file
    JVMDG304: Java core file written to C:\Program Files\IBM\WebSphere\AppServer\profiles\default\javacore.20080730.174149.3784.txt
    JVMDG274: Dump Handler has Processed OutOfMemory.
    <AF[3160]: Insufficient space in Javaheap to satisfy allocation request>
    <AF[3160]: completed in 92673 ms>


    第一行是说需要2621456 bytes内存,分配失败;
    然后第二行告知可用内存只有5049520 bytes;
    第三行GC开始回收内存;
    第四行回收了4619080 bytes,总的可用内存变为9668600bytes。0% free是指当前可用/总内存大小,9668600/1073740288=0.0090,被约等于0了。
    第五行开始不知道在干什么,猜测是移动数据以获取连续空间?
    第十一行终于报内存不足了,然后会记录两个日志文件,heapdump、javacore.log。
    根据这两个日志的时间,可以到sysetemOut.log中查看当时在做什么操作。

    再看一段:
    <AF[2]: Allocation Failure. need 524 bytes, 383 ms since last AF>
    <AF[2]: managing allocation failure, action=0 (528723272/536869376)>
      <GC(2): GC cycle started Sat Apr 05 21:40:31 2008
      <GC(2): freed 3529224 bytes, 99% free (532252496/536869376), in 10 ms>
      <GC(2): mark: 7 ms, sweep: 3 ms, compact: 0 ms>
      <GC(2): refs: soft 0 (age >= 32), weak 0, final 7, phantom 0>
    <AF[2]: completed in 11 ms>


    这段应该说明,可用内存很大,但申请连续内存时可能还是不足。这段日志记录的是gc回收后就正好够了,所以没有了上一段日志中的move。

    嗯,仅仅是猜测。
  • WebSphere Application Server v6中的问题诊断以及日志策略(转摘)

    2008-12-08 11:21:22

       WebSphere Application Server 是一个基于 Java 的 Web 应用程序服务器,它构建在开放标准的基础之上,能帮助您部署与管理从简单的 Web 站点到强大的电子商务解决方案的诸多应用程序。它遵循 J2EE 并为 Java 组件、XML 和 Web 服务提供了一个可移植的 Web 部署平台,这个平台能够与数据库交互并提供动态 Web 内容。

       随着WebSphere Application Server产品在中间市场的份额不断增加,使用WebSphere Application Server作为IT基础产品的企业越来越多,作为我们企业的IT部门,很重要的一部分工作就是管理WebSphere Application Server。由于业务系统的复杂性,以及IT系统的庞大等多种原因,我们的系统不可避免的会出现这样那样的问题,要定定位和解决这些问题,WebSphere Application Server的日志将起了很关键作用。怎么管理以及查看这些日志呢?

        本文作者所一直从事WebSphere Application Server的相关服务工作,积累了许多WebSphere Application Server的管理经验。我们希望能够通过一系列的文章与读者分享这些经验想,帮助您更好管理好你的WebSphere Application Server。

        本文将从问题诊断入手,在解决一系列具体问题的过程中,介绍配置日志的策略以及具体参数的用法,为您提供诊断问题的途经以及指定日志策略的方式和方法。

    问题诊断的方法

       在我们基于J2EE的应用程序中,问题的出现可能在各个相关的环节出现。所以首先要明确问题是发生在哪个组建上的,我们可以通过测试单个组件,检查他们成功或者失败来把问题进行一个隔离。从而分析相关日志来定位问题。下图是一些常用的测试方法以及相关日志的位置。

     

     

    当我们的系统出现不能访问现象时,我们一般按照一下步骤进行分析:

    1.使用浏览器通过80端口访问应用(例如:http://localhost/myWeb/)

    2.使用浏览器通过9080(根据实际端口而定)端口访问应用(例如:http://localhost:9080/myWeb)如果访问正常,说明HTTP server的请求没有正常转发,这时候通过http://localhost来验证HTTP 服务器是否正常启动,如果正常说明HTTP server 运行正常,此时请检查http_plugin.log查看插件日志,并且查看HTTP server 的配置文件httpd.conf,查找WebSpherePluginConfig 所加载的plugin-cfg.xml文件是否正确。

    3.如果通过9080(根据实际端口而定)端口不能访问应用程序,可以通过http://localhost:9080/snoop 验证应用服务器是否存活。如存活则如图:

     

     

    一般说明应用程序存在问题,查看分析相关日志:System.Out.log 、SystemErr.log、activity.log定位应用程序引起的问题。

    日志介绍

    System.Out.log 、SystemErr.log 属于JVM 日志,。WebSphere Application Server 写格式化的消息到 System.out日志。另外,应用程序和其他代码可以写入这些日志,通过print() 和 println() 方法实现。有些开发工具箱(Developer Kit)内置如 Throwable 类的 printStackTrace() 方法也可以写入这些日志。通常,System.out 日志用于监控应用程序服务器的运行是否正常。System.out 日志可用于问题确定,但建议改为使用 IBM 服务日志和日志分析器的高级能力。System.err 日志包含异常堆栈跟踪信息,这在执行问题分析时很有用。

    因为每个应用程序服务器都代表 JVM,所以每个应用程序服务器和它的所有应用程序都有一组 JVM 日志,缺省情况下该日志位于 installation_root/profiles/profile_name/logs/server_name 目录。在 WebSphere Application Server Network Deployment 配置的情况下,也为 Deployment Manager 和每个节点管理器创建 JVM 日志,因为它们也代表 JVM。

    activity.log为IBM 日志,应用程序服务器从各种 WebSphere Application Server 组件的活动创建服务或活动日志文件。服务或活动日志文件(activity.log)是二进制文件,它位于 install_root 的 logs 目录中,我们可以使用日志分析器用于查看服务或活动日志文件。

    查看 JVM 日志

    JVM 日志是作为纯文本文件写的。因此,查看这些日志没有特殊的要求。它们位于 installation_directory/profiles/profile_name/logs/server_name 目录中,并在缺省情况下命名为 SystemOut.log 和 SystemErr.log。

    有两种技术可用于查看应用程序服务器的 JVM 日志。

    l         使用管理控制台。它支持从远程机器查看 JVM 日志。

    l         使用存储日志的机器上的文本编辑器。

    此任务的步骤

    1.从管理控制台查看 JVM 日志。

    启动管理控制台。

    在控制台导航树中单击故障诊断 > 日志和跟踪。要查看特定服务器的日志,单击服务器名以选择它,然后单击 JVM 日志

    选择运行时选项卡。

    单击与您要查看的日志相应的查看。

    2.在服务器硬盘查看JVM 日志。

    转至存储日志的机器。

    在文本编辑器中打开文件或将文件拖放到编辑和查看程序中。

    日志格式:

    根据 JVM 日志配置的不同,格式化的消息可以用基本或高级格式写入 JVM 日志。

    消息格式 格式化的消息可以使用这两种格式中的一种写入 JVM 日志:

    基本格式 这是 WebSphere Application Server 的较早版本中使用的格式。

    高级格式 如果可能,则通过添加有关事件的信息来扩展基本格式。

    下面是一些日志常用格式,可以帮助我们更好的查看日志,可能找到的采用这些格式的各种字段如下:

    TimeStamp

    时间戳记是使用其被格式化所处于的进程语言环境格式化的。它包含标准日期(例如,YYMMDD),以毫秒为精度的 24 小时时间和时区。

    ThreadId

    从发出消息的线程的散列代码生成的 8 个字符的十六进制值。

    ThreadName

    发出消息或跟踪事件的 Java 线程名。

    ShortName

    发出消息或跟踪事件的记录组件的缩写名称。这通常是 WebSphere Application Server 内部组件的类名,但也可以是一些用户应用程序的其他标识。

    LongName

    发出消息或跟踪事件的记录组件的全名。这通常是 WebSphere Application Server 内部组件的标准类名,但也可以是一些用户应用程序的其他标识。

    EventType

    表明消息或跟踪事件类型的一个字符字段。消息类型是大写的。可能值包括:

    F

    致命消息。

    E

    错误消息。

    W

    警告消息。

    A

    审计消息。

    I

    参考消息。

    C

    配置消息。

    D

    详细信息消息。

    O

    通过用户应用程序或内部组件直接写入 System.out 的消息。

    R

    通过用户应用程序或内部组件直接写入 System.err 的消息。

    Z

    表明不可识别的类型的占位符。

    类名

    发出消息或跟踪事件的类。

    方法名称

    发出消息或跟踪事件的方法。

    组织

    拥有发出消息或跟踪事件的应用程序的组织。

    产品

    发出消息或跟踪事件的产品。

    组件

    发出消息或跟踪事件的产品内的组件。

    基本格式

    以基本格式显示的消息事件使用下列格式。符号 <name> 表明将总是在基本格式消息中出现的必需字段。符号 [name] 表明将被包括的可选的或有条件的字段,如果可以确定它们的话。

     

    <timestamp><threadId><shortName><eventType>[className][methodName]<message>

    高级格式

    以高级格式显示的消息事件使用下列格式。表示法 <name> 用于表明将总是以消息条目的高级格式出现的必需字段。表示法 [name] 用于表明将被包括的可选的或有条件的字段(如果可以确定它们的话)。

    <timestamp><threadId><eventType><UOW><source=longName>[className][methodName]<Organization><Product><Component>[thread=threadName]

    <message>

     

    配置 JVM 日志

    使用管理控制台配置应用程序服务器的 JVM 日志。直到下一次重新启动应用程序服务器,才应用为了运行应用程序服务器而对 JVM 日志进行的配置更改。

    此任务的步骤

    启动管理控制台

    单击故障诊断 > 记录和跟踪,然后单击服务器 > JVM 日志

    选择“配置”选项卡。

    滚动通过面板以显示要配置的日志的属性。

    更改相应的配置属性并单击应用。

    保存您的配置更改。

    Java 虚拟机(JVM)日志设置

    使用此页面查看和修改 Java 虚拟机(JVM)System.out 和 System.err 日志的设置。

    要查看此管理控制台页面,单击故障诊断 > 日志和跟踪 > server name > JVM 日志。

    查看和修改此受管进程的 Java 虚拟机(JVM)System.out 和 System.err 日志的设置。通过将 JVM 的 System.out 和 System.err 流重定向到独立日志文件来创建 JVM 日志。System.out 日志用于监控运行应用程序服务器的运行状况。System.err 日志包含执行问题分析时有用的异常堆栈跟踪信息。每个应用程序服务器及其所有应用程序有一组 JVM 日志。还为 Deployment Manager 和每个节点管理器创建 JVM 日志。“配置”面板上的更改将在重新启动服务器时应用。“运行时”面板上的更改将立即应用。

    “配置”选项卡

    文件名

    指定此页面中描述的某个日志文件的名称。

    第一个文件名字段指定 System.out 日志的名称。第二个文件名字段指定 System.err 文件的名称。

    按下“运行时”选项卡上的查看按钮查看所选日志文件的内容。

    为 System.out 日志或 System.err 日志指定的文件名必须具有以下某个值:

    文件名

    文件系统中的文件的名称。建议您使用标准文件名。如果该文件名不是标准文件名,则认为它相对于服务器的当前工作目录。每个日志必须配置一个专用文件。例如,我们无法将 System.out 和 System.err 重定向到同一物理文件。

    如果包含文件的目录已经存在,则正在运行的服务器所使用的用户标识需要该目录的读/写访问权限。如果该目录不存在,将会用适当的许可权创建它。正在运行的服务器所使用的用户标识必须有创建该目录的权限。

    控制台

    这是用于将流重定向到关联进程流的特殊文件名。如果为 System.out 指定了此值,则文件重定向到 stdout。如果为 System.err 指定了此值,则文件重定向到 stderr。

    废弃写入流的所有数据。指定无等于将流重定向到 UNIX 系统上的 dev/null。

    filename 的缺省路径是变量 SERVER_LOG_ROOT 的值。要查看 SERVER_LOG_ROOT 变量的值:

    1.在管理控制台上,选择环境 > WebSphere 变量

    2.单击服务器单选按钮,然后单击应用。在显示的列表中出现 SERVER_LOG_ROOT 变量的值。

    要更改 SERVER_LOG_ROOT 的值:

    1.选择 SERVER_LOG_ROOT

    2.在值字段中输入新的路径

    3.单击“应用”

    4.保存此配置。您必须重新启动服务器以使更改生效。

    当然我们还可以以将 ${SERVER_LOG_ROOT}/和 ${SERVER_LOG_ROOT}/SystemErr.log 文件的位置和名称更改为任何其他绝对路径和文件名(例如,/tmp/myLogfile.log)。

    文件格式

    指定用于保存 System.out 文件的格式。

    日志文件滚动(保留旧的日志文件生成新的日志文件)

    应用服务器有日志自管理功能,通过使用这一组配置属性将 System.out 或 System.err 日志文件配置为自我管理。

    自我管理日志文件将消息写入文件,直到达到时间或大小条件。当达到指定时间或文件达到指定大小时,日志文件将滚动(包括关闭文件并重命名保存的文件),同时记录将临时挂起。新保存的文件名是原始文件名加上表明文件重命名时间的时间戳记限定符。一旦完成重命名,则重新打开具有原始名称的新的空日志文件,并恢复记录。虽然日志文件滚动后一条消息可能会分割在保存的文件和当前文件中,但全部消息都将保留。

    如果关联流重定向到文件,则仅可以将一个日志配置为自我管理。

    文件大小

    单击日志文件的此属性以让它根据其文件大小管理它自己。当文件达到最大大小字段中指定的大小时,发生自动滚动。

    最大大小

    指定文件的最大大小(以兆字节为单位)。当文件达到此大小时,它就滚动。

    此属性仅当您单击“文件大小”后才有效。

     

    时间

    单击日志文件的此属性以让它根据一天中的时间管理它自己。文件在启动时间字段中指定的时间滚动。

    启动时间

    指定应用程序服务器重新启动后第一次启动周期滚动算法的时间,即,一天中的几点(从 1 到 24)。算法在应用程序服务器启动时装入。一旦滚动算法在启动时间字段指定的钟点启动后,它将每隔一定的时间(重复时间字段指定的小时数)滚动文件。此滚动模式将继续使用不作调整,直到应用程序服务器停止。

    注:滚动总是在一天中指定钟点开始时发生。一天的第一个小一天的第一个小时(自 00:00:00(午夜)起)是 1 点,而一天的最后一个小时(自 23:00:00 起)是 24 点。因此,如果您希望日志文件在午夜滚动,则将启动时间设置为 1。

    重复时间

    指定隔多少小时(从 1 到 24)发生周期滚动。

    重复时间

    指定每隔多少小时日志文件滚动一次。有效值范围是从 1 到 24。

    配置日志文件按时间、按大小或按时间和大小滚动。单击文件大小和时间以在首次匹配条件时滚动文件。例如,如果重复时间字段是 5 小时,而最大文件大小是 2 MB,则文件将每 5 小时滚动一次,除非时间间隔未到而文件大小已达 2 MB。按文件大小滚动后,文件将继续按时间间隔滚动。

    历史日志文件的最大大小

    指定要保存的历史(已滚动)文件数。流将写入当前文件,直到它滚动。滚动时,关闭当前文件,并以当前名称加上滚动时间戳记组成的新名称保存该文件。然后流将以原始名称重新打开一个新文件以继续写入。历史文件数从零增长到最大历史文件数字段的值。下一次滚动删除最旧的历史文件。

    已安装应用程序的输出

    指定是否记录和格式化应用程序代码发出的 System.out 或 System.err 打印语句。

    显示应用程序打印语句

    单击此字段以显示应用程序使用 print 和 println 流方法写入流的消息。总是出现 WebSphere Application Server 系统消息。

    格式化打印语句

    单击此字段以格式化应用程序打印语句(如 WebSphere Application Server 系统消息)。

    “运行时”选项卡

     

    文件名

    指定此页面中描述的某个日志文件的名称。

     

    第一个文件名字段指定 System.out 日志的名称。第二个文件名字段指定 System.err 文件的名称。

     

    按下“运行时”选项卡上的查看按钮查看所选日志文件的内容。

     

    为 System.out 日志或 System.err 日志指定的文件名必须具有以下某个值:

    文件名

    文件系统中的文件的名称。建议您使用标准文件名。如果该文件名不是标准文件名,则认为它相对于服务器的当前工作目录。每个流必须配置一个专用文件。例如,您无法将 System.out 和 System.err 重定向到同一物理文件。

    如果包含文件的目录已经存在,则正在运行的服务器所使用的用户标识需要该目录的读/写访问权限。如果该目录不存在,将会用适当的许可权创建它。正在运行的服务器所使用的用户标识必须有创建该目录的权限。

     

    控制台

    这是用于将流重定向到关联进程流的特殊文件名。如果为 System.out 指定了此值,则文件重定向到 stdout。如果为 System.err 指定了此值,则文件重定向到 stderr。

    废弃写入流的所有数据。指定无等于将流重定向到 UNIX 系统上的 dev/null。

    filename 的缺省路径是变量 SERVER_LOG_ROOT 的值。要查看 SERVER_LOG_ROOT 变量的值:

    1.在管理控制台上,选择环境 > WebSphere 变量

    2.单击服务器单选按钮,然后单击应用。在显示的列表中出现 SERVER_LOG_ROOT 变量的值。

    要更改 SERVER_LOG_ROOT 的值:

    1.选择 SERVER_LOG_ROOT

    2.在值字段中输入新的路径

    3.单击“应用”

    保存此配置。您必须重新启动服务器以使更改生效。当然我们还可以以将${SERVER_LOG_ROOT}/SystemOut.log 和 ${SERVER_LOG_ROOT}/SystemErr.log 文件的位置和名称更改为任何其他绝对路径和文件名(例如,/tmp/myLogfile.log)。

    结束语

    JVM 日志对我们对问题的的分析和跟踪是非常重要的。WebSphere Application Server 强大的日志自管理功能,使我们的日常工作更方便更简单,学习和掌握这些功能对我们管理人员来说受益非浅。

  • 性能测试经验总结

    2008-11-14 16:47:05

    性能测试经验总结

    第一步:计划测试

    1、明确压力点,根据压力点设计多少种场景组合

    2、把文档(包括多少种场景组合、场景与场景组合条件的对应表)写好

    3、如果监测UNIX机器,在被监测的机器需要安装监测Unix的进程

    4、让开发人员帮助我们准备测试数据或他们写相关的文档我们来准备数据

    5、让开发人员做一个恢复数据的脚本,以便于我们每次测试的时候都能够有一个相同的环境

    6、针对每一个模块包括四个子文件夹:如模块A下包括“脚本”“场景”“结果”“图表” 四个子文件夹,每个子文件夹储存对应的文件,如下表所示:

     

    模块名

    场景名

    结果名

    图表名

    用户层障碍

    1场景

    1场景0

    1场景0

    1场景1

    1场景1

    1场景2

    1场景2

    2场景

    2场景0

    2场景0

    2场景1

    2场景1

    2场景2

    2场景2

       其中:结果名“1场景”是在场景中的“Results Setting”中设置的,具体的设置见“建立场景”部分,这里也可以有另外一种方法:在打开模板设置,如下图1:

      

    选中“Automatically save the session as:”并且在“%ResultDir%”后面填写你想保存的文件名,当你打开某个lrr文件时,系统自动在当前目录中生成一个文件保存分析图表,如下图2所示:

     

    第二步:生成测试脚本

    1、把登陆部分放到“vuser_init”部分,把需要测试的内容部分放到“Action”部分执行;但是如果是模拟多个用户登陆系统,则要把登陆部分放到Action部分来实现

    2、录制脚本后,想查询某个函数的原型,按“F1”键

    3、确认脚本中哪些参数是需要进行参数化的(最好能可以和开发人员一起确认)

    4、在脚本参数化时把函数web_submit_data()中的ITEMDATA后面的数据参数化,因为这些数据是传递给服务器的,当然也可以把一个函数中的所有相同变量都替换掉

    5、脚本中无用的部分用“/*”“*/”“//”注释掉,但最好不要删除

    6、调试脚本遵循以下原则:

       确认在VUSUSI(单用户单循环次数single user & single iteration

    确认在VUSUMI(单用户多循环次数single user & multi iteration

    确认在controllerMUSI(多用户单循环次数multi user & single iteration

    确认在controllerMUMI(多用户多循环次数 multi user & multi iteration

    7、事务的名称取的有意义便于事务之间的区分,把所有的事务名都记录在一起,便于在测试结果概要中区分它们,这要写成一个表:某次测试有哪些模块,每个模块中有哪些事务(见对应的“关系表”)

    8、 Parameter List”中可以选择参数类型“Random Number”,使某一个参数取设定的范围内的随机值

    第三步:建立场景

    1、  把场景名称编号,并制定出一份场景名称和场景条件组合的对应表。比如,场景m对应于“某一模块_xxvu _zmachine(见“关系表”中的例子)

    2、  根据上面的对应表把场景设置好,需要设置的要素如下:总体多少个用户、分多少个组、每个组有多少个用户、分几台机器运行、每个脚本迭代多少次、是否回放think time时间、检查Parameter List中每个参数设置是否正确、参数从表中取值间隔是否正确、是否选中“Initialize all Vusers before Run

    3、  测试结果应该保存为“m场景0m场景1,…

    4、  把虚拟用户分散到几台机器上和在一台机器上面都要进行测试,因为有可以效果不同

    5、  场景中如果有需要改动的地方,必须新建一个场景(建议使用“另存为”,然后再修改结果文件名,再选择相应的脚本),并把场景按顺序编号,先维护好场景与场景组合条件的对应表,以便以后的查找,并且在结果 Results Setting”中设置的结果名与场景名相同。建议在“Results Setting”中选中“Automatically create a results directory for each scenario executeon”让它每次自动累加,不建议选中“Automatically overwrite existing results directory without prompting for confirmation”,因为我们不要覆盖掉以前的测试结果,把它保存下来以便有个根据。

    6、  需要注意的地方:当在“Parameter List”中的“Select next row”选中“Unique”时,如果再在“Edit Schedule\Schedule by Scenario\Duration”中选中第二项“Run for XX after the ramp up has been completed”时系统就会报错,提示“Unique”类型不相符。

    7、  在“Run-time Setting”设置中,“General”中的“Pacing”非常有用,可以设置每次迭代之间相隔多少时间,也可以是随机的取值

    8、  建议:把Parameter List和“Run-time Setting”中的所有设置都搞熟悉,这样便于以后对脚本和场景进行设置

    9、  设计“Parameter List”时的小技巧如下图3:即在“Allocate X values for each Vuser”时,尽量把它的间隔在数据容许的范围内取大些,这样可以做从一次迭代到最大值迭代,而且对脚本没有什么影响

    10、当一个脚本中有多个事务,在事务前面增加集合点时需要一点技巧。或者我们把脚本复制几个,或者我这样做:测试前面的事务的压力时,把后面的事务前的集合点设置为不激活状态;在测试后面的事务的压力时,把前面的事务的集合点设置为不激活状态,另外最好不选中Initialize all Vusers before Run,具体参见Controller中的“Scenario/Rendezvous”,及用户手册(F1)

    11、把持续时间从最后60秒改为整个场景的时间,右键单击某个图,选择“Configue”,修 Graph Time即可

    12、每次从一个场景修改后保存为另一个场景时别忘记把结果保存文件名修改相对应的文件名。在设置结果保存文件名时有一个技巧,如下图4:如果你打开这个窗口时,点击确定则系统会默认以“4场景2”为基点向后加“4场景20”“4场景21”等等,但是如果你把结果文件名后面的数据去掉,改为“4场景”,点击确定后,系统会自动搜索是以“4场景”开头的文件名,并在它的后面继续增加,比如把它改为“4场景”时,下次结果保存在“4场景3”中。而且他在搜索的时候搜索以“4场景”开头的文件名,从0开始,有的话就不取代而跳过,没有的话就取代。

    第四步:运行场景

    1、  运行场景前需要注意的事项:每个组的虚拟用户数、迭代次数、think time、参数化时的取值间隔、执行恢复数据的脚本、确认虚拟机的LoadRunner Agent Service打开

    2、  如果监测Unix,运行场景前需要启动监测Unix进程,启动的命令“rpc.rstatd”、查看这个进程是否启动的命令“rpcinfo –p

    3、  运行前使Generator机器处理Ready状态

    4、  确认被监测的机器已经连接上去,并且添加自己所需要的计数器

    5、  运行之前一定要确认系统中压力点的数据量是多少

    6、  确认以上都正确时再运行测试场景

    第五步:监视场景

    1、打开Passed Transactions”或“Failed Transactions”,可以随时观察到事务的运行状态

    第六步:分析测试结果

    1、  打开Analysis后,把经过数据处理的结果图表保存到“图表”文件夹,并且文件名和场景名、结果名相同,这样便于以后的查阅。也可以省去每次进行数据处理的时间。

    2、  可以通过点击界面上的View Run Time Setting”可以看到此场景运行时的一些场景设置

    3、  在关联图表时可以自动调节每个元素的比例,点击右键,选择"view measurement trends"即可

    4、  每次测试结束后确认所做的操作是正确的,确认正确后再分析结果

    5、  在结果文件夹中为每个场景建立一个文档,把每次运行时的情况记录下来以便于写测试报告,尤其运行错误的原因记录下来,并把开发人员所做的修改也记录下来以便知道开发人员做了些什么修改

    6、  在分析运行结果时可以把几个结果合在一起进行比较,打开如下“Cross with Result…”如下图5

    <SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso

  • char varchar varchar2 的区别

    2008-11-14 15:28:39

    char varchar varchar2 的区别:

    1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。
    2.CHAR的效率比VARCHAR2的效率稍高。
    3.目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。如果你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。
    4.何时该用CHAR,何时该用varchar2?
    CHAR与VARCHAR2是一对矛盾的统一体,两者是互补的关系.
    VARCHAR2比CHAR节省空间,在效率上比CHAR会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。
    VARCHAR2虽然比CHAR节省空间,但是如果一个VARCHAR2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR2会更好一些。

    Oracle数据库中char(),varchar2(),nvarchar2()三种数据类型的区别如下:

    1.  char()类型:
    (1)如果在数据库中定义的长度为10位,而我实际录入的数据长度不足10位,系统会在录入数据的后面用空字符串补足10位。
    (2)一个全角认作2位长度。
    2. varchar2()类型:
    (1)不足数据库规定长度,不会补足长度。
    (2)一个全角认作2位长度。
    3. nvarchar2()类型:
    (1)不足数据库规定长度,不会补足长度。
    (2)一个全角认作1位长度。
    结论:由此在做设计时,为节省系统资源会尽量选用varchar2()和nvarchar2()类型。

    文章出处:http://www.diybl.com/course/7_databases/oracle/oraclexl/2008324/107065.html

     

  • 软件测试报告写作实战案例(收藏)

    2008-05-30 17:31:53

     

    由于缺陷列表太细、太大,测试用例过于专业,很多人对其不感兴趣,因此测试报告能很好地展示自己的工作状况,测试报告是提供给很多人看的一份文档。

            下面是一个项目的测试报告的纲要:
    1 简介
    1.1 编写目的
    1.2 项目背景
    1.3 术语和缩略词
    1.4 参考资料
    2 目标及范围
    2.1 测试目的及标准
    2.2 测试范围
    3 测试过程
    3.1 测试内容
    3.2 测试时间
    3.3 测试环境
    3.4 测试方法及测试用例设计
    4 测试情况分析
    4.1 测试概要
    4.2 测试用例执行情况
    4.3 缺陷情况
    4.4 测试覆盖率分析
    4.5 产品质量情况分析
    5 测试总结
    5.1 测试资源消耗情况
    5.2 测试经验总结
    6 附件
    附件1 测试用例清单
    附件2 缺陷清单
    一、缺陷分类报告
            缺陷分类报告是测试报告的重要组成部分,可以再细分为:缺陷类型分布报告、缺陷区域分布报告和缺陷状态分布报告等。
    1.缺陷类型分布报告
            缺陷类型分布报告主要描述缺陷类型的分布情况,看缺陷属于哪些类型的错误。这些信息有助于引起开发人员的注意,并分析缺陷为什么会集中在这种类型。例如,如果缺陷主要是界面类型的,如界面提示信息不规范、界面布局凌乱等问题,那么就要讨论是否需要制定相应的界面规范,让开发人员遵循,从而防止类似问题的出现。
    缺陷类型分布报告一般用饼图或柱状图显示。如图7.29所示,用饼图表示了几种类型的缺陷各自所占的比例。

    三、典型缺陷与Bug模式
            软件开发有设计模式,测试其实也有模式存在,需要测试人员进行总结和归纳。测试人员应从经常出现的Bug中学习,总结出Bug模式,用于指导测试。如果开发人员能关注这些Bug模式,还能起到预防错误的效果。
            要成为典型缺陷,必须满足以下条件:
            重复出现、经常出现;
            能代表某种类型的错误;
            能通过相对固定的测试方法或测试手段来发现这些错误。
            总结这些典型缺陷出现的现象,出现的原因,以及测试方法,就能成为一个Bug模式。

            说明:根据不同的开发平台、开发工具、开发语言、产品类型、采用的架构等,可以总结出不同的Bug模式,不同的Bug模式可能在不同的平台、语言、产品类型中才会出现。测试人员应该总结适合自己项目特点的Bug模式。

            提炼Bug模式的一般步骤如下:
            步骤1:分析缺陷报告,找出经常出现的Bug类型。
            步骤2:分析Bug的根源,找出Bug产生的深层次原因。
            步骤3:分析找到Bug的方法,总结如何才能每次都发现该类型的Bug。
            下面举一个例子来说明这个过程。
            首先,测试人员在分析缺陷报告时发现,有一类Bug经常出现,并且错误现象一致:执行某功能时提示Time Out。
            测试人员与程序员一起分析原因,发现这些错误都是在操作数据库时发生,发送的SQL语句被数据库长时间执行未返回,因此提示Time Out。通过进一步地分析表明,.NET的SqlCommand的CommandTimeOut属性是用于获取或设置在终止执行命令的尝试并生成错误之前的等待时间。等待命令执行的时间(以秒为单位)默认为30s,而数据库操作在较大数据量的情况下一般都超过这个时间,因此会提示超时的错误信息。
            这样就可以把这种类型的Bug归纳为“数据库操作超时Bug模式”。
            那么,如何才能找出这样的Bug呢?一般情况下,这类Bug基本上不会出现,只有数据量足够大时才会出现,因此需要设置大批数据,结合性能测试或压力测试来发现此类问题。也可以通过白盒的方式,查找程序在使用SqlCommand时是否合理地设置了Command TimeOut属性,这样将更有针对性地揭露上述的错误。
            至此就完成了一个Bug模式的归纳、提炼和总结,如果程序员积极地参与到该总结和分析过程中来,则可形成一个良性的反馈,当下次程序员编写相同的程序时就会避免类似的错误发生。
    四、测试中的PDCA循环
            PDCA循环是一种放之四海皆准的原则。在软件测试的过程中,也充斥着各种PDCA循环。PDCA循环是一个自我完善和改进的全闭环模型,如图7.34所示,对质量的不断提高和改进非常有效。

      PDCA循环模型


     

Open Toolbar