qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

单元测试Junit教程

为什么要进行单测试.
1.     单元测试的目的

一个单元测试从整个系统中单独检验产品程序代码的『一个单元』并检查其得到的 结果是否是预期的。要测试的『一个单元』其大小是依据一组连贯的功能的大小及介于一个类别及一个包(package)之间实际上的变化(varies)。 其目的是在整合程序代码到系统的其余部分之前先测试以便找出程序代码中的臭虫(bugs)。Junit等支持在Java程序代码中撰写单元测试。

在整合之前于系统其它部分隔离起来抓虫的理由是因为那是比较容易的找到臭虫(亦即比较快且便宜)及比较容易修正问题(并显示其解决方式是可行的)。

单 元测试对于在初始整合一小部分程序代码以及整合其余的改变之前提供了一些利益。如果有人需要变动现有的程序代码,事实上单元测试仍然可以让他对于其最后的 程序代码更有信心;即他的改变不会破坏任何东西。愈好的单元测试让人愈有信心--理想上测试必须在加入的新功能前也随之更新。

2.     谁来撰写单元测试及何时撰写单元测试

程序代码测试可能是非常乏味的,尤其是测试别人的程序,而当你是一个程序设计师的时候尤甚。但程序设计师喜欢撰写程序,因此为什么不让程序设计师撰写一些程序可以作为测试之用呢?

当 单元测试正确的实作可以帮助程序设计师变的更有生产力,而同时提升开发程序代码的品质。有一点你必须了解的是单元测试应该是开发程序的一部份是很重要的; 而且程序代码的设计必须是可以测试的。目前的趋势是在撰写程序代码之前要先撰写单元测试,并且把焦点放在Java类别的接口及行为上。

先写测试,再写代码的好处:

从技术上强制设计师先考虑一个类的功能,也就是这个类提供给外部的接口,而不至于太早陷入它的细节。这是面向对象提倡的一种设计原则。

好 的测试其实就是一个好的文档,这个类使用者往往可以通过查看这个类的测试代码了解它的功能。特别的,如果你拿到别人的一个程序,对他写测试是最好的了解这 个程序的功能的方法。 xp的原则是 make it simple,不是很推荐另外写文档,因为项目在开发过程中往往处于变动中,如果在早期写文档,以后代码变动后还得同步文档,多了一个工作,而且由于项目 时间紧往往文档写的不全或与代码不一致,与其这样,不如不写。而如果在项目结束后再写文档,开发人员往往已经忘记当时写代码时的种种考虑,况且有下一个项 目的压力,管理人员也不愿意再为旧的项目写文档。导致以后维护的问题

没有人能保证需求不变动,以往项目往往对需求的变动大为头疼,害怕这 个改动会带来其它地方的错误。为此,除了设计好的结构以分割项目外(松耦合),但如果有了测试,并已经建立了一个好的测试框架,对于需求的变动,修改完代 码后,只要重新运行测试代码,如果测试通过,也就保证了修改的成功,如果测试中出现错误,也会马上发现错在哪里。修改相应的部分,再运行测试,直至测试完 全通过。

软件公司里往往存在开发部门和测试部门之间的矛盾:由于开发和测试分为两个部门,多了一层沟通的成本和时间,沟通往往会产生错误 的发生。而且极易形成一个怪圈:开发人员为了赶任务,写了烂烂的代码,就把它扔给测试人员,然后写其它的任务,测试当然是失败的,又把代码拿回去重写,测 试就成了一个很头疼的问题。这种怪圈的根源是责任不清,根据 xp 中的规定:写这个代码的人必须为自己的代码写测试,而且只有测试通过,才算完成这个任务(这里的测试包括所有的测试,如果测试时发现由于你的程序导致别的 组的测试失败,你有责任通知相关人员修改直至集成测试通过),这样就可以避免这类问题的发生。

简而言之,如果程序设计师要写一段代码:

先用 junit 写测试,然后再写代码;

写完代码,运行测试,如果测试失败,

修改代码,运行测试,直到测试成功。

如果以后对程序进行修改,优化 ( refactoring ),只要再运行测试代码。如果所有的测试都成功,则代码修改完成。

3.     单元测试与Java Team开发的结合

Java下的team开发,一般采用cvs(版本控制) + ant(项目管理) + junit(单元测试、集成测试)的模式:

每天早上上班,每个开发人员从 cvs server 获取一个整个项目的工作拷贝。

拿到自己的任务,先用 junit 写今天的任务的测试代码。

然后写今天任务的代码,运行测试(单元测试),直到测试通过。

任务完成在下班前一两个小时,各个开发人员把任务提交到cvs server。

然后由主管对整个项目运行自动测试(集成测试),哪个测试出错,就找相关人员修改,直到所有测试通过。下班。。。

4.     测试控制工具中要有甚么?

无 论谁来撰写单元测试或何时撰写单元测试,我们的焦点应该放在检验程序代码;主要是在于产生错误的风险。如果设计文件包含被测试对象的使用情节;便可成为好 的测试来源。不管如何,这些情节写得不是很明确;因为这些情节实际上是以设计观点所写的--因此适当的测试应该有对等的情节,换句话说,也就是测试设计应 该尽可能的包含用户实际使用程序时可能产生的动作或者过程。

另一个测试案例好的来源是在整合后从产品程序代码当中找到的问题,维修问题的处理方式往往值得封装成为测试案例。

5.     为什么要使用Junit等工具呢?

前面的论述说明为什么我们需要测试控制工具,但为什么我们使用Junit这些工具呢?

首先,它们是完全Free的啦!。

第二点,使用方便。

l          在你提升程序代码的品质时JUnit测试仍允许你更快速的撰写程序

那 听起来似乎不是很直觉,但那是事实。当你使用JUnit撰写测试,你将花更少的时间除虫,同时对你程序代码的改变更 俱有信心。这个信心让你更积极重整程序代码并增加新的功能。没有测试,对于重整及增加新功能你会变得没有信心;因为你不知道有甚么东西会破坏产出的结果。 采用一个综合的测试系列,你可以在改变程序代码之后快速的执行多个测试并对于你的变动并未破坏任何东西感到有信心。在执行测试时如果发现臭虫,原始码仍然 清楚的在你脑中,因此很容易找到臭虫。在JUnit中撰写的测试帮助你以一种极 大(extreme)的步伐撰写程序及快速的找出缺点。

l          JUnit非常简单

撰 写测试应该很简单--这是重点!如果撰写测试太复杂或太耗时间,便无法要求程序设计师撰写测试。使用JUnit你可以快速的撰写测试并检测你的程序代码并 逐 步随着程序代码的成长增加测试。只要你写了一些测试,你想要快速并频繁的执行测试而不至于中断建立设计及开发程序。使用JUnit执行测试就像编译你的程 序代码那么容易。事实上,你应该执行编译时也执行测试。编译是检测程序代码的语法而测试是检查程序代码的完整性(integrity)。

l          JUnit测试检验其结果并提供立即的回馈。

如果你是以人工比对测试的期望与实际结果那么测试是很不好玩的,而且让你的速度慢下来。JUnit测试可以自动执行并且检查他们自己的结果。当你执行测试,你获得简单且立即的回馈; 比如测试是通过或失败。而不再需要人工检查测试结果的报告。

l          JUnit测试可以合成一个测试系列的层级架构。

JUnit可以把测试组织成测试系列;这个测试系列可以包含其它的测试或测试系列。JUnit测试的合成行为允许你组合多个测试并自动的回归(regression)从头到尾测试整个测试系列。你也可以执行测试系列层级架构中任何一层的测试。

l          撰写JUnit测试所费不多。

使 用Junit测试框架,你可以很便宜的撰写测试并享受由测试框架所提供的信心。撰写一个测试就像写一个方法一样简单;测试是检验要测试的程序代码并定义期 望的结果。这个测试框架提供自动执行测试的背景;这个背景并成为其它测试集合的一部份。在测试少量的投资将持续让你从时间及品质中获得回收。

l          JUnit测试提升软件的稳定性。

你写的测试愈少;你的程序代码变的愈不稳定。测试使得软件稳定并逐步累积信心;因为任何变动不会造成涟漪效应而漫及整个软件。测试可以形成软件的完整结构的胶结。

l          JUnit测试是开发者测试。

JUnit 测试是高度区域性(localized)测试;用以改善开发者的生产力及程序代码品质。不像功能测试(function test)视系统为一个黑箱以确认软件整体的工作性为主,单元测试是由内而外测试系统基础的建构区块。开发者撰写并拥有JUnit测试。每当一个开发反复 (iteration)完成,这个测试便包裹成为交付软件的一部份 提供一种沟通的方式,「这是我交付的软件并且是通过测试的。」

l          JUnit测试是以Java写成的。

使用Java测试Java软件形成一个介于测试及程序代码间的无缝(seamless)边界。在测试的控制下测试变成整个软件的扩充同时程序代码可以被重整。Java编译器的单元测试静态语法检查可已帮助测试程序并且确认遵守软件接口的约定。
一 段测试的程序代码无法单独的执行,它需要是执行环境的一部份。同时,它需要自动执行的单元测试--譬如在系统中周期性的执行所有的测试以证明没有任何东西 被破坏。由于单元测试需要符合特定的准则:一个成功的测试不应该是人工检查的(那可要到天荒地老了啊),一个未通过测试的失败应可以产出文件以供诊断修 改。而Junit可以提供给我们这些便利.。这样所有测试开发者所需撰写的只是测试码本身了。跟optimizeit、Jtest那些昂贵而又超级麻烦的 tool比较起来,其利昭然可见!


下面是如何在实际运用中使用单元测试.

http://www.51testing.com/html/9/271.html

我用的eclipse 3.1.2,其中就包含了Junit,可以直接使用了.

给出一个简单的测试实例
HelloWorld.java

public class HelloWorld {

    public HelloWorld() {
        super();
        // TODO Auto-generated constructor stub
    }
    public String say()
    {
        return "Hello World!";
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

}


TestHelloWorld.java

import junit.framework.TestCase;

public class TestHelloWorld extends TestCase {
    
    public TestHelloWorld(String name)
    {
            super(name);
        }

        public void testSay() {
           HelloWorld hi = new HelloWorld();
            assertEquals("Hello World!", hi.say());

        }

        public static void main(String[] args) {

            junit.textui.TestRunner.run(TestHelloWorld.class);

        }

    }



单元测试的FAQ.
http://junit.sourceforge.net/doc/faq/faq.htm

posted @ 2011-10-09 14:43 顺其自然EVO| 编辑 收藏

gwt使用入门 - 快速入门

http://code.google.com/intl/zh-CN/webtoolkit/gettingstarted.html

posted @ 2011-10-09 13:44 顺其自然EVO| 编辑 收藏

关于gxt:ext-gwt的入门详细教程(转)

关于gxt:ext-gwt的入门详细教程(转)
2009-02-10 17:34
开 始研究gxt (我也刚接触,大家一起提高,学习)也就是mygwt加入extjs阵营以后的新版本(gxt1.2),关于gxt(ext gwt)与gwt-ext的区别,请自行查阅相关资料. Google Web Toolkit(GWT)是Google开发的开源AJAX组件库,它使得编写类似GoogleMaps和Gmail这样的AJAX应用程序变得非常容 易,开发人员并不需要了解太多的JavaScript知识就可以通过Java来开发动态Web应用程序。
如今,开发动态的Web应用程序是非常繁琐且易于出错的,开发人员常常花费90%的时间在进行跨平台和跨浏览器调试,并且,难以用JavaScript编写模块化的,易于复用的组件。
GWT的设计非常创新,它允许开发人员使用Java语言来编写和调试Web应用程序,然后,GWT的Java-to-JavaScript编译器会将其自 动转化为可以运行的JavaScript和相关HTML文件,这样,开发人员不必了解JavaScript语言就可以开发AJAX应用,极大地提高了开发 效率。


Ext GWT: Rich Internet Application Framework for GWT:官方网站:http://extjs.com/products/gxt/,里面有很多丰富的例子和api文档。
一、构建eclispe开发环境
1、前期准备
(1)开发工具:
j2se6,正确安装及配置。
Eclipse Ganymede:eclipse V3.4,下载地址为:http://www.eclipse.org/ganymede/;解压直接使用。
(2)相关jar包:
gwt-windows-1.5.3:下载地址为:http://code.google.com/webtoolkit/versions.html;解压好待使用,本人直接解压到D盘,呆会要用到。
gxt1.2:下载地址:http://extjs.com/products/gxt/;解压好待使用。
(3)GWT插件:Eclipse Plugins for GWT:cypal.studio.for.gwt-1.0,下载地址为:http://code.google.com/p/cypal-studio/。解压后直接 Copy到 Eclipse安装目录/plugins下即可。
2、配置 GWT Home目录
打开 Eclipse的 Window—Preferences—Cypal Studio 选择 Gwt的目录(即gwt-windows-1.5.3目录)。

如果没有出现Cypal Studio ,说明插件没有安装成功。必须放在正确的位置。同时,GWT Home,一定要选择在gwt-windows-1.5.3解压目录下,否则待建立module时jar找不到,同时有可能带来其他问题。呵呵。我就有过莫名其妙的错误。
二、编写简单实例
1、新建一个动态 web项目, File—New—Other—Web—Dynamic Web Project,在 Configurations中选择 Cypal Studio for GWT,其他的默认即可。 注意,Target Runtime 一定要为<None>,不要选择服务器,如果选择了服务器,下一步运行的时候会出现异常,还得手动删除它,所以不要选择服务器,下一篇将介绍在tomcate6上运行配置。这里运行是在GWT自己的环境下运行。

2、创建 Module模型
项目上点击右键 New—Other—Cypal Studio—Module,输入包名 org.gxt,类名 Test



创建成功后,正确工程为:


3.在Test.java的onModuleLoad() 方法中加入Window.alert("success");

package org.gxt.client; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.user.client.Window; public class Test implements EntryPoint { public void onModuleLoad() { Window.alert("success"); } }

三、配置运行环境
选择 Run—Run Configurations—Gwt Hosted Mode Application,选择 New,新建一个运行实例new_gxt,在 Project中选择 Gxt, Module会自动选择所要运行的模型类Test.java。

点击Run,自动启动GWT运行环境:


ok,运行成功。
四、编写ext gwt 的window测试范例。
以上还没有用到gxt1.2文件夹中的东西,现在该用到它了。把WebContent文件夹删除掉,新建了一个lib文件夹,复制gxt.jar到lib下。


把lib/gxt.jar添加到Java Build Path里面


在Test.gwt.xml中加入(继承GXT):
<inherits name='com.extjs.gxt.ui.GXT'/>
在Test.html中加入(默认样式表):
<link rel="stylesheet" type="text/css" href="css/ext-all.css" />
ok,现在在Test.java中onModuleLoad()方法注释掉Window.alert("success");同时为避免出现重复,删除掉 已经导入的com.google.gwt.user.client.Window包;添加gxt的 com.extjs.gxt.ui.client.widget.Window;完整代码如下:

  • package org.gxt.client;

  • import com.google.gwt.core.client.EntryPoint;
  • import com.google.gwt.user.client.ui.RootPanel;
  • import com.extjs.gxt.ui.client.widget.Window;


  • public
    class Test implements EntryPoint {

  • public
    void onModuleLoad() {
  • Window window=new Window();//相当于html的div
  • window.setSize(500,300);//设置高度和宽度
  • window.setHeading("success");//设置标题
  • window.setPlain(true);//设置透明
  • window.show();
  • RootPanel.get().add(window);


  • }

  • }


  • 再次运行New_Gxt(已经建立的运行环境), 想要的结果出现了,呵呵。

  • .正确出现窗体,呵呵,成功。

posted @ 2011-10-09 13:36 顺其自然EVO| 编辑 收藏

Google Web Toolkit 教程

简介

受众

这些教程旨在服务于那些希望用Google Web Toolkit编写富AJAX应用程序的开发人员。

虽然这些教程假设你会HTML、CSS以及Java的相关知识,但它们并不是运行这些教程所必需的。

开始之前

在开始这些教程之前,我们假定你已经完成了以下几点:

  • 已经安装了Java SDK。
    如果你没有安装最新版本的Java SDK,你可以下载Sun Java Standard Edition SDK
  • 已经安装了Eclipse或其它你喜爱的Java IDE。
    在这些教程中,我们使用的是Eclipse,因为它是开源的。GWT并不强制你使用Eclipse,你可以使用IntelliJNetBeans或其它任何你偏爱的Java IDE。但是如果你使用Eclipse以外的Java IDE,在教程中的截图和一些特定的介绍将会变得不一样,不过基本的GWT概念仍然是相同的。
    如果你的Java IDE尚不包括对Apache Ant的支持,你可以去下载一个以方便地编译和运行GWT应用程序。
  • 已经安装了Google Eclipse 插件。
    Google Eclipse 插件为Eclipse添加了额外的功能用于创建和开发GWT应用程序。
  • 已经下载了Google Web Tookit。
    Google Web Toolkit可以通过Google Eclipse 插件进行下载。另外,你也可以为你的操作系统下载最新的Google Web Toolkit分发。
  • 已经将GWT解压到想要运行它的目录。
    GWT 没有安装程序,运行和使用 GWT 所需的所有文件都位于解压的目录中。

你也可以选择这样做:

  • 安装Google App Engine SDK。
    Google App Engine允许你在Google的设备上运行包含GWT的Java 网页应用程序。App Engine SDK可以通过Google Eclipse插件进行下载。另外,你也可以单独下载用于Java的App Engine SDK

GWT教程

构建一个示例GWT应用程序

  • 构建一个示例GWT应用程序。
    通 过用GWT开发一个StockWatcher(股指监视器),你将学习如何创建一个GWT项目、如何用GWT wigdets和panels构建UI、如何用Java语言编写客户端功能、如何在宿主模式下进行调试、如何应用CSS样式、如何将Java编译为 JavaScript以及如何在网页模式下运行应用程序。

客户端/服务器通信

  • 通过GWT RPC与服务器进行通信。
    通过GWT RPC添加一个到服务器的调用,你将学习如何进行异步调用,如何序列化Java对象以及如何处理异常。
  • 通过HTTP检索JSON数据。
    构建一个HTTP请求用于从服务器检索JSON数据。此技术也能被用来检索XML数据。
  • 构建跨站请求
  • 构建一个受到SOP(Same Origin Policy)约束的远程服务器调用

国际化

  • 对GWT应用程序进行国际化。
    通过Static String Internationalization将GWT应用程序的用户界面翻译成另外一种语言。

Junit测试

  • 使用Junit进行单元测试。
    通过Junit为GWT应用程序添加单元测试。

部署至Google App Engine

  • GWT与Google App Engine。
    将GWT应用程序部署到App Engine。

转载请保留作者姓名及原网址(jiaowei.cnblogs.com)。

posted @ 2011-10-09 13:28 顺其自然EVO| 编辑 收藏

ubuntu下安装JDK和配置环境变量

ubuntu下安装JDK和配置环境变量


        突然想把自己安装JDK和配置环境变量记录一下,主要是因为前几天装了ubuntu8.10,昨天不知道发什么神经,卸载了改装

ultimate2.0,再装JDK的时候,发现自己忘记了安装的细节,又到网上去查阿找的。结果多花了很多的时间。现在好了,写在自己的博客里面。万一忘记了,看看自己的博客就一目了然,也不用担心别人写的东西可能会是错误的。好了,言归正传。

 

        第一步:下载JDK。我下载的是jdk-6u10-linux-x64.bin。当然也可以使用 sudo apt-get install.但是速度出奇的慢。而且,天知道是哪个版本的。

        第二步:修改权限。sudo chmod +x jdk-6u10-linux-x64.bin

        第三步:安装。  ./jdk-6u10-linux-x64.bin

 

      安装完毕,下面配置环境变量
       配置classpath,修改所有用户的环境变量
      $ sudo gedit /etc/profile

     在文件最后添加


     #set java environment

   JAVA_HOME=/home/softkid/jdk1.6.0_10

   export JRE_HOME=/home/softkid/jdk1.6.0_10/jre

  export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

   export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

 

   接下来,打开终端,输入java,javac进行测试,发现报错。不用着急,注销用户重新登录之后就ok了。

整理在 Ubuntu 下 eclipse 的安装及配置。

与 netbeans 一样,eclipse的运行 也是需要JDK的,so — 你必须得先把JDK安装正确~~

大家可以到http://www.eclipse.org/downloads/ 下载 最新的eclipse。

我下载的是 eclipse-jee-helios-SR1-linux-gtk.tar.gz 。

安装及配置:

1.首先 cd 到 eclipse-jee-helios-SR1-linux-gtk.tar.gz 文件目录,将文件拷贝到 /opt 目录:

1
 sudo cp eclipse-jee-helios-SR1-linux-gtk.tar.gz /opt

2.cd 到 /opt 并解压文件;

1
2
 sudo cd /opt
 sudo tar zxvf eclipse-jee-helios-SR1-linux-gtk.tar.gz

3.把eclipse目录更改为root拥有:

1
 sudo chown -R root:root /opt/eclipse

4.eclipse的安装配置 基本完成了。接下来就是创建 桌面启动图标了。桌面 鼠标右键->创建启动器:

名称:eclipse
命令:/opt/eclipse/eclipse
注释:eclipse

点击左侧图标 ,到/opt/eclipse/icon.xpm ->”打开” ->“确定”。—完成!

这样,eclipse也成功的安装到了Ubuntu 中了,o(∩∩)o…哈哈。


 

posted @ 2011-10-09 11:50 顺其自然EVO| 编辑 收藏

在Windows7下构建Android的开发环境

四月份的时候就写过一次,由于种种原因放弃了Android的开发,现在QQ也换了,也要重新拾起Android开发,所以重新写一次。好了不废话了,正文开始。。。

---------------------------------华丽的分割线--------------------------------
1、安装JDK 6
下载最新版本的JDK:
32位的
64位的
安装后需要注意的是:环境变量的配置
附上环境变量配置:
新 建系统变量JAVA_HOME:D:\Android\Java\jdk1.6.0_27\新建系统变量CLASSPATH:.;%JAVA_HOME% \lib;(注意:点号表示当前目录,不能省略)在系统变量Path的值的前面加入以下内容:%JAVA_HOME%\bin;(注意:这里的分号不能省 略)到这里,JDK安装完毕。
单击“开始”—>“运行”—>输入:cmd命令,在CMD窗口中输入:java -version
出现如下界面,就表示安装成功:


  2、安装Eclipse

下载最新版本的Eclipse(目前Helios (3.6)):
http://www.eclipse.org/downloads/packages/release/helios/sr2
选择“Eclipse IDE for Java Developers, 99 MB”,进行下载。


  下载完成后,将其解压到适当的我位置(如D:\Android\eclipse)

3、安装Android SDK
下载最新版本的Android SDK
android-sdk_r13-windows.zip
下载完成后,将其解压到一个适当的目录中(如:D:\Android\android-sdk-windows),然后运行SDK Manager.exe
进行更新(见图),此更新要花3-5小时,视网速而定,我这里是更新完成后的图。


 更新完成后为了方便,也要配置一下环境变量:
新建系统环境变量:ANDROID_HOME:D:\Android\android-sdk-windows\platform-tools;D:\Android\android-sdk-windows\tools;
在PATH中加入:%ANDROID_HOME%


 4、安装ADT(Android开发工具包,Android Development Toolkit)
(1)下载ADT:http://dl.google.com/android/ADT-12.0.0.zip
(2)启动Eclipse,然后选择Help>Install New Software…
(3)在Available Software窗口中,单击Add…


 


 (4)安装完成后会重启Eclipse。
5、设置Android SDK
(1)选择Windows—>Preferences—>Android,在SDK Location上单击“Browse…”,选择刚才解压完的Android SDK文件夹所在目录(即D:\Android\android-sdk-windows),单击OK按钮。
(2) 选择Window—>Android SDK and AVD Manager,弹出“Android SDK and AVD Manager”对话框,选择“Available Packages”,点击“+”展开选项。并选中“API 8”的4个选项。点击“Install Selected”按钮。
(2)弹出“Choose Packages to Install”对话框,选中“Accept All”单选框,点击“Install”按钮。弹出“Installing Archives”对话框,开始下载安装。安装完毕后关闭窗口。
注意:如果不确定刚才的4个包是否正确安装,可以在“Android SDK and AVD Manager”对话框中选择“Installed Packages”,查看已安装的软件包。

6、新建AVD(Android Virtual Devices = AVD,Android虚拟设备,亦即嵌入式开发中常用的模拟器)
(1)如果SDK安装无误,则在“Android SDK and AVD Manager”对话框中选择“Virtual Devices”,点击“New...”按钮。
(2) 弹出“Create new Android Virtual Device(AVD)”对话框,在Name中输入:Android-AVD,Target中选择:Android 2.2 - API Level 8。其它选项按照默认即可,点击“Create AVD“按钮即可。
(3) 如果安装成功,会在“Android SDK and AVD Manager”对话框中显示。 


 


 7、新建Android项目。(新建一个Android程序,以验证开发环境是否搭建成功)
(1)在Eclipse中依次选择菜单:File->New->Project...
(2) 弹出“New Project”对话框,选中:Android->Android Project,点击“Next”按钮
(3) 弹出“New Android Project”对话框。
Project Name中输入:hello
Build Target中选择:Android 2.2复选框
Appication name中输入:hello_android
Package name中输入:com.android.test
Create Activity中输入:HelloAndroid

点击“Next”按钮。
(4)弹出“New Android Test Project”,因为是一个小的演示项目,所以不需要创建测试项目。直接点击“Finish”按钮即可。
(5)编辑HelloAndroid.java文件。
代码如下:
Java代码  收藏代码
  1. package com.android.test;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.widget.*;  
  6.   
  7. public class HelloAndroid extends Activity {  
  8.         public void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         TextView textView = new TextView(this);     
  11.         textView.setText("Hello Android!");     
  12.         setContentView(textView);    
  13.     }  
  14. }  
 
8、运行Android项目
(1)点击工具栏的“运行”按钮,或选择菜单:Run->Run,会弹出“Run As”对话框,选择“Android Application”,点击“OK”按钮。
(2)AVD加载的速度有些慢,需要耐心等待:


 


 



 

 

 至此,Windows7下Android的开发环境搭建就完成了,如果在搭建中有什么疑问请留言,或者加我QQ:859066216

posted @ 2011-10-08 23:30 顺其自然EVO| 编辑 收藏

推动Java前进--Java Strategy Keynote JavaOne 2011

推动Java前进--Java Strategy Keynote JavaOne 2011
每年的JavaOne都会发布关于Java未来发展的计划或愿景,在今年的Java Strategy Keynote中,Oracle则向大家描述了将如何推动Java继续前进。本文是JavaOne2011的官方博文,概述了Java Strategy Keynote中提及的重要内容。(2011.10.07最后更新)

    周四的战略主旨演讲展示了Oracle在对待Java投资与创新方面的长期愿景。该议题包罗广泛,涉及技术,合作伙伴,宣言和路线图--从移动与手持设备,到桌面应用,再到云。
    早上,先由David Ward开始,他是Juniper Networks平台系统部门的CTO与首席架构师。Ward详述了在云时代开发者们认知并利用可编程的"由软件定义的网络"时代的必要性。Ward探究了直接对网络进行编程的应用接口,告之了它最得意的功能,使用网络设备确定实际的位置/拓扑,终端设备的功能,实时应用的要求,以及其它方面。总之,这些接口定义了一个双向的交互与可编程特性。Ward说道,"来源于网络的是对其拓扑的实时理解,而从应用空间到网络中去的是将通信引导到高效途径中"。

推动Java前进:三大支柱
    随后,Hasan Rizvi,Oracle Fusion中间件与Java部门的高级副总裁,简要探讨了"推动Java前进"的三大支柱:正确的技术,Java社区,以及Oracle对Java的领导/管理。在该环节中,Rizvi提供了一个近期里程碑的记录,包括在今年夏天发布的JDK 7,正在开发中的(且由社区深度参与的)Java EE 7,JavaFX 2.0,以及刚刚针对Mac OS X发布的JDK 7预览版。他也提到了IBM,Apple以及SAP成为OpenJDK社区的成员,当然还有其它成员。
    然后,Intel的Java技术主管Jason Gartner,RedHat的高级工程主管Mark Little博士,以及Intel的软件工程主管Steven Chin也走上台,加入到Rizvi的演讲中。Gartner宣布,上周发布了IBM平台上的Java 7,他也提到,尽管Oracle与IBM之间存在竞争关系,但Java平台基于标准的合作本质是它最强大的力量之一。他还稍稍讨论了Java EE 6的开放式开发成果,以及这对JBoss产品的益处。Chin讨论了Oracle与Intel之间的合作,在过去4年中,这一合作致使Java的性能在Intel硬件中提高了14倍。

延伸Java的触角
    Adam Messinger,负责Java SE与Java ME产品线的副总裁,讨论了延伸Java的触角,以跨越新的应用模型及新的设备类型的目的。一种方法就是通过模块化,这是Java SE 8中的计划。同时,Java 7的Coin项目与Java 8的Lambda项目致力于更高的开发者生产效率。如下的路线图有清晰的描述:




    Rob Benso,Twitter的运行时系统主管,随后也与Messinger同台演讲。Benson详述了Twitter在需要一个成熟且有高伸缩能力的技术时,是如何应用Java的。"我们每天要处理大约2.3亿条推特,我们的流API每天要推送大约6TB的数据,并且我们的公共API每天要服务大约13亿个请求。所以我们期望中的运行时环境要能够处理当前及未来的通信量。"Twitter选择了Java,是由于它有一个庞大且充满活力的开源社区。Twitter当场宣布,他们已经加入了OpenJDK,同样也加入了JCP。
    Messinger重申推进JavaFX在战略上的重要性,JavaFX是Oracle首要的RIA开发环境,它包含对已有Swing应用的交互,以及能进行可视化开发的JavaFX Scene Builder工具。随后,Messinger的同事Nandini Ramani提供了一个实验性的JavaFX游戏的原型,该原型能运行在多种便携设备上--包括Windows,Linux,甚至是Apple iPad。
    Messinger还宣布了Oracle对JavaFX的开源计划,首先开源的是组件,然后是框架的其它部分。只要OpenJDK社区提出要求,这一开源计划就会执行。另外,他们还计划对JavaFX进行标准化,使它成为Java SE的一个标准组成,这可能要到Java 8之后了。

Java移动与嵌入式的三大目标
    后来,Messinger谈到Oracle针对Java移动与嵌入式体系的三大目标--在Java SE设备与Java ME设备之间起到桥梁作用(同步CLDC与JDK的版本/聚合CDC与嵌入式Java SE应用),完整地涵盖嵌入式垂直市场,并在运行时环境与工具方面提供深度的内容与服务整合。这必将导致Java Card技术应用于极小设备,Java ME应用于小的嵌入式环境,而Java SE应用于更大的嵌入式市场。
    在真正的嵌入式领域中,ARM的执行副总裁Lance Howarth探讨了"无处不在的计算"的将来。作为制造商随处都使用的32位RISC微处理器(基于ARM的设备已经出厂了610万台),Howarth预测对于智能计算设备,我们很少意识到,也很少见到把Java作为实现这一设想的关键。对之后,移动手机应用商店GetJar的CEO Ilya Lars探讨他们对移动领域的愿景,以及他们对Java开放标准的提案。

Java EE路线图
    Oracle开发部门的副总裁Cameron Purdy详述了Java EE路线图。Purdy提到Java EE是"企业级应用所依赖的唯一标准开发平台",这些应用可以跨越不同的社区,不同的软件提供商,以及不同的开源实现。他还讲到Java EE当前是企业级开发者的首选,它已经被下载4000万次了。Java EE的目标是使EE易于开发--在从事往常复杂而费解的任务时,EE会使Java开发者们感到更为自然,同时为下一代企业应用建立了一个开放的,由社区驱动的,且基于标准的平台。他探讨了很多Java EE 7的独创特性,如多租用(multi-tenancy),按需扩容(capacity on demand),以及自动提供(auto-provisioning),这些特性使高级云应用及其平台成为一种服务。
    随后,ESPN的Sean Comerford与Purdy讨论了在ESPN.com在当前的企业需求中对Java EE的选择。"Glassfish给了我们相同的性能,但与其它可选技术相比,它还具备高得多的可伸缩性。在处理每秒3000次请求的场景中,对我们的产品部署进行了测试。"对于ESPN,游戏的规则就是可伸缩性,还伴随着未来在任何地方、任何设备上提供服务的潜在可能。
    然后,Adam Messinger以对Avatar项目的介绍结束了本场会议。Avatar项目是Oracle针对动态富客户端的混合编程模型,它在浏览器中集成HTML 5作为UI,使Java应用作为控制器与模型,而Java EE 7则在后台的云中--这统一了Java ME,Java SE和Java EE。

posted @ 2011-10-08 00:00 顺其自然EVO| 编辑 收藏

浅说《测试用例》----给测试新手的

    在此之前我搜集一些关于测试用例的知识,后来在我们的QQ群里专门定了一期讨论,来探讨测试用例,毕竟这是一个很大的话题,很难做到面面俱到,但我会尽量全面,用通俗的语言来说测试用例。

---------------------------------------------------------------------------------------

注:我们这里要说的测试用例指功能测试用例。

一、什么是测试用例?

     测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。

     通俗的讲:就是把我们测试系统的操作步骤用按照一定的格式用文字描述出来。

二、写测试用例有什么好处?

  • 理清思路,避免遗漏

        这里是我们认为最重要的一点,假如我们测试的项目大而复杂,我们可以把项目功能细分,根据每一个功能通过编写用例的方式来整理我们测试系统的思路,避免遗漏掉要测试的功能点。

  • 跟踪测试进展

        通过编写测试用例,执行测试用例,我们可以很清楚的知道我们的测试进度。

  • 历史参考

        在我们所做的项目中,也许会有很多功能是相同或相近的,我们对这类功能设计了测试用例,便于以后我们遇到类似功能的时候可以做参考依据。

  • 重复性

        我们测试一个系统不是一个人测一遍就算测完的,需要多人反复的进行测试,那么我们就需要测试用例来规范和指导我们的测试行为。

  • 告诉领导,这事俺干过,不然别人怎么知道你测没测,测的全面不全面,拿测试用例给他们看呗!俺就是照着这个干活,呵呵!

三、测试用例的方法

     好吧,咱知道啥是测试用例了,也是知道为什么要写测试用例了,那到底应该怎么写?无从下手啊。我们在写测试用例之前,先学习几种方法,它是我们写测试用例的指导思想。

    1.  等价类划分

         在某个输入域的子集合,在该子集合中,各个输入数据对于揭露程序中的错误都是等价的。假如有一个输入框要求输入1-10000个数,我们不可能用每一个数去试,我们输入5 和输入6去验证和揭露输入框的错误可以看做是等价的。那么这个时候我们就可以随机的抽取一些数据来进行验证。如:10 、99、7777......

       等价类分:有效等价类和无效等价类

       输入框要求输入1-10000的数

       有效等价类:可以输入1-10000之间的数来验证,如:2、5、99、8495......

       无效等价类:可以输入1-10000之外的任意字符验证,如:20000、字母、下划线、特殊符号、空格、回车.....

    2.  边界值

       边界值是对等价类的补充,测试工作经验告诉我们,大量的错误是出在输入输出的边界价上。我们还拿上面的例子,一个输入框要求输入1-10000之间的数。我们要测它有没有超出这个范围,如:0、-1、-2、1000、10001.....等等,来判定是否超出了我们的范围。

    3.  因果图

       因果图方法最终生成的就是判定表,它适合于检查程序输入条件的各种组合情况。举个例子:原因:A=0,B=0,结果我就可以判定:A=B。确切的说他是一种因果关系思想。它会无形中指导这我们的测试。当然了,我们为了以免遗漏,可以把系统中的因果关系用图画出。不过系统大而复杂的话就是个体力活了。呵呵。

    4.  错误推测法

     基于经验和直觉推测出系统可能存在的错误,从而有针对性的设计测试用例的方法。

   5.  其它

      设计测试用例的方法有很多,我们常用就上面几种,其它的方法还有:状态迁移图、流程分析法、正交验证法等等。

 

四、测试用例的格式与要素

   一个测试用例应该包括:编号,标题,测试场景,测试步骤,预期结果。

   当然还可加入一些它选项,如:优先级、测试阶段....

注:上面的格式取自《微软的软件测试之道》,它并不一定适合你,我只是让大家对测试格式有个了解。

关于测试用例的存放管理:

1.  项目管理系统自带的用例管理,一般用例会与项目挂钩,有固定的格式,搜索、修改等功能,使用起来非常方便。如:禅道项目管理、QC、bugfree 等等都带的有用例管理功能。

2.  通过world\Excel文档形式管理,这样的好处就是自己定义测试用例的格式。

-----------------------测试用例例子--------------------------------------------------------

基础知识了解的差不多了,下面来看一个具体的测试用例。我们会有更深刻的认识。

 注:这不是一个完整的测试用例,格式也不是固定必须这样的,你们可以根据自己的需求编写设计测试用例。

==========================================================================

------------------------------------我们还需要知道的,关于测试用例的-------------------------------

一、.我们在什么时候可以设计测试用例?

    当根据客户的需求整理出项目需求分析文档时,我们就可以根据需求文档来编写测试用例了。但是,一般我们(国内大多小公司)项目需求文档都非常“简陋”,所以,很难根据需求文档设计测试用例。

    我们只有等到项目开发人员把项目开发出来,给我们系统文档、部署环境、数据库结构(如果系统牵涉到数据库的话),我们根绝这些文档来设计测试用例。

二、测试用例的评审与更新

     我们设计的测试用例设计完成之后,是否完整?是否符合系统?符合客户要求?对用例做一个评审是必不可少。关于评审的方式,不同的公司有不同的流程。

     我们编写的测试用例也不是经过评审之后就不变了,随着需求的变更、功能的改进,测试用例当然也需要更新和变动。

三、什么情况下不适合写测试用例

  •      文件时间

       如果一个功能我很快就测试完了,而且只需要测试一遍,但我们设计测试用例时却比较麻烦,花时间也长。这个时候就没必要编写测试用例了。

  •      需求变动大且频繁

      需求的功能变动非常频繁,而且变动很大,之前编写的测试用例根本没法使用,必须要重新编写,这个时候也没必要去设计测试用例了。

  •      项目时间不允许

      这一项是不太厚道的做法,如果不是急需交付客户的话,尽量不要这样做;当然了,如果只是给客户展示或试用,可以在之后进行补充和完善测试用例。

  • 不要编写不完整或别人看不懂的测试用例,那样就没有意义了。

============个人闲聊内容,欢迎指正========

四、停止软件测试的标准。

      语句覆盖最低不能小于80%,测试需求覆盖率达到100%,测试用例覆盖率达到100%,一、二级缺陷修复率达到100%,三、四级修复率达到80%

      (上面一句是再网上找的,不是标准,只是个参考)

      bug等级:

      一级:非常严重的bug

      二级:严重的bug

      三级:一般性的bug

      四级:建议性问题

五、关于探索性测试

       完全的执行测试用例时一件非常枯燥的事情,个人在执行测试用例时会做一些,其它的非常规性的操作,看系统是否会有相应的处理和提示。我的一部分bug就是再这种非常规操作下发现的。

       当然了真正的探索性测试需要对产品的深入了解,以及软件开发技术有一定的深度和宽度。姑且把我们的探索性测试看成是瞎捣鼓吧!呵呵。

六、 交叉测试

     有木有发现,当我们第一遍测试系统时,会非常认真,但要我们测试第二遍时,我们不愿意像第一次那样认真的去测了,这不能说明我们不负责,而是每个人都有的心理现象。这个时候,我们可以和其它测试人员交换功能来测试,提高效率,而且更容易发现问题。

七、测试的目的

    1.  我们让它做的它必须会做。

   2.  我们不让它做的它必须不会做。

   可能你会发现有附加功能的时候,就是客户没有要求,我们加了这样的功能,可能加了这点功能系统看上去会更好。这时怎么办?算问题么?

   作为开发人员,中规中矩的做东西最好,如果真的有非常好的功能要加的话,需要和客户沟通,然后写到需求里。毕竟多一点功能多一点风险。呵呵

   作为测试人员,凡是不符合需求文档的都需要当问题点提出。责任分明,以免后续麻烦。   

----------------------------------------------------

 修改:

 1.测试用例的格式的要素,去掉“实际结果”

 2.关于测试方法“等价类划分”的解释。

谢谢“zdd”朋友的纠正。:)

posted @ 2011-09-29 20:20 顺其自然EVO| 编辑 收藏

java日期处理类总结:

     摘要: Date/Calendar/GregorianCalendar/DateFormat/SimpleDateFormat类     java中的日期处理类总结:Date/Calendar/GregorianCalendar/DateFormat/SimpleDateFormat类 今天花了好大一点时间把java的日期类做了一下整理,哈 1、  &...  阅读全文

posted @ 2011-09-27 13:11 顺其自然EVO| 编辑 收藏

这样去写你的 HTML

昨天在 twitter 上说,怎么忍心把页面写得这么难用?是的,这个世界还有一群人等着我们创建出来的东西,可以让他们的生活能过得更容易呢。比如那些需要读屏软件的用户。作为一个前端,我们又怎么会忍心呢。之前就一直想写这样的一篇文章,分享一下如何去创造一个可访问性更好的页面。今天的计划里有一条把 2HTML T2ag 和 WCAG标准结合起来。我推荐你这样去写你的 HTML,让某些人的生活可以更容易。

今天想分享的是如何去使用我们的 HTML Tag, 把 WCAG 的标准和语义网的目标进行代码上的体现:

1. 文档声明:<!Doctype>

其实这跟 WCAG 根本上连不上什么直接关系,但为了一个兼容性更好,特别是向后兼容的页面,我推荐你这样写:

<!Doctype html>

2. 链接:<a>

互联网的联几乎可以说是用 <a> 来实现的,作为一个页面最常见的标签。我们应该如何对待呢?

  1. 为关键链接添加 accesskey
  2. 除非万不得已,不要去掉 focus 时虚线框
<a href="" title="" accesskey="M" rel="" hidefocus>Link</a>

3. 缩写: <abbr>

对于用 HTML Tag 的正确使用,也是非常重要的,这有利于读屏软件使用者对于页面结构的理解。特别是在 H1,H2,H3 等这些标签的使用,滥用非常容易造成结构费解。当然,使用一般的标签,再利用 CSS 来使视觉上形成对比这也是常人能辨识的。但读屏软件用户呢。当然,这里只是顺带提起需要注意页面标签的使用方法,而 abbr 最重要的应该是应该添加一个 title 属性对缩写进行描述。比如:

<abbr title="Web Developer" >WD</abbr>

4. 大段引用: <blockquote>,一般引用: <cite>

 有大段引用的时候,使用 <blockquote>,而行内引用则使用 <cite>,让你的结构更加易读:

<blockquote>
    之前就一直想写这样的一篇文章,分享一下如何去创造一个可访问性更好的页面。今天的计划里有一条把 2HTML T2ag 和 WCAG标准结合起来。我推荐你这样去写你的 HTML,让某些人的生活可以更容易。
</blockquote>
<p>某A给我印象最深刻的一句话是,<cite>“做前端要有爱。不要动不动就有朩有地对各种人使用咆哮体”</cite>。</p>

5. 删除:<del>

在纸上写东西不能像在计算机上写东西一样,可以用撤销键可以按,但当我们想要强调某些东西是被删除的怎么办?那就是使用 <del> 标签了。比如这样:

<del>HTML上表示强调时,请使用 &lt;b&gt; 标签</del>
HTML上表示强调时,请使用 &lt;strong&gt; 标签

效果是这样的:

HTML上表示强调时,请使用 <b> 标签
HTML上表示强调时,请使用 <strong> 标签

6. 定义列表:<dl>

去年带着新人做支付宝前端博客的时候,他们给我印象最深刻的是很喜欢用 <dl>。当时在想,这些同学挺不错的,对语义化的理解还不错。我们还是比较少用到定义列表的。而是使用一般的 <ul> <ol> 这两个。<dl> 也是应该慎用的,最好只使用在某些有“定义”意义的条目,如 w3school 的这个例子,对咖啡和牛奶的定义:

<dl>
  <dt>Coffee</dt>
    <dd>- black hot drink</dd>
  <dt>Milk</dt>
    <dd>- white cold drink</dd>
</dl>

7. 无序/有序列表 <ul>/<ol>

列表,这个对于每个前端来说,都熟悉不过了。因为结构可以非常灵活地进行应用,在导航、列表、Tab 等,都经常要要用到。这个就无须多说了。但有一点还是需要明白的,不要相信什么 <ul>/<ol> 是 <table> 的替代品。在我们常用的 HTML Tags 中,每个标签都有自己的作用,谁都不是谁的替代品。

<ol>
  <li>Coffee</li>
  <li>Tea</li>
  <li>Milk</li>
</ol>

8. 表格: <table>

如果是一个表格,那就,就不要用段落来替代,更不要用列表。除非万不得已,并且他们是可以转换的。另外,表格中还有一些需要注意的点:

  • 给 <table> 添加 summary 属性,有些表格非常大,并不需要去读完整个
  • 添加 <tbody>,如果我没记错,如果没添加的话,浏览器会自动为你添加
  • 必要时使用 <col> <colgroup> 来控制表示的栏
<table summary="sofish's blog status">
    <thead>
        <tr>
            <th>DATE</th>
            <th>IP</th>
            <th>PV</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>2011.3.11</td>
            <td>3000</td>
            <td>8000</td>
        </tr>
    </tbody>
</table>

9. 格式化片段 <code>/<pre>

<code> 是指 computer code text, 而 <pre> 是指 preformatted text。<pre> 的范围更广,并且是块状元素,可能被使用来格式化各种文本,特别是代码。使用没有需要特别注意的,主要是语义上的正确使用,比如不要用 <pre> 来代替一般的 <p>。

<code>text-align:center</code>
<pre>
{ ( 1 * 102 ) + ( 9 * 101 ) + ( 3 * 100 ) }
</pre>

10. 换行: <br>

在现代网页中,使用 <br> 的情况是非常少的。网页中的留白,一般都是使用 CSS 的 padding 和 margin 来实现。这样更精准,并用更容易控制。现在推荐的用法是,使用到一般的段落 <p> 中做简单的换行,而不是用来控制页面留白。

<p>我是一个段落。<br />
诗歌都会用换行的。
</p>

11. 分割线: <hr>

<hr> 具有非常好的语义作用。但他的视觉效果很难控制。之前就写过这样的文章关于<hr />在各浏览器中的问题。一般也都很少用。如果专门为读屏软件使用者提供单独页面的话,或许 <hr> 会大有用处。

<h3>标题一</h3>
<p>Lorem Ipsum is ...</p>
<hr />
<h3>标题二</h3>
<p>This is the entry of... </p>

12. 无语义标签:<div>/<span>

其实 <div>/<span> 这两个标签是有语义的,都是 defines a section in a document。是的,和 HTML5 中的 <section> 其实是一样的。只是,因为搜索引擎的的原因,搜索引擎认为它们是无语义标签,因此他们成了 “无语义” 标签。推荐用法是尽量使用其他来做为页面框架的容器,比如布局、添加额外的视觉效果,而不是段落等的替代品。

<div id="container">
    <div id="content">
    </div>
    <div id="sidebar">
        <ul>
            <li><span>God</span>, oh my zsh</span></li>
        </ul>
    </div>
</div>

13. 段落/标题: <p>,<h1>/<h2>/<h3>…

这几个标签几乎可以说是一个页面标签等级结构中最重要的标签。我们可以用一本书的结构来说明这几个标签,而我们构建一个页面的时候,也应该有这样的一种思想在脑中:

  • 书的名称:H1
  • 书的每个章节标题: H2
  • 章节内的文章标题: H3
  • 章节的段落: P
  • 小标题/副标题: H4/H5/H6

是的,当然还有引用 <blockquoute>,技术类书中提供的代码 <pre class="code">,一些需要注意点的列表 <ul>,一些方便比较的表格 <table> 等。

<h1>LOGO</h1>
<h2>Title</h2>
<div class="entry">
    <h3>Summary:</h3>
    <p>lorem ipsum is ...<em>emphasize</em></p>
</div>

14. 强调: <em>/<strong>

<em> emphasize 的缩写。而 <strong> 是 strong emphasize。可能很多刚入门前端的同学会对 <em>、<strong>、<cite> 、<i>、<b> 这几个标签的使用拿捏不准。<i> 和 <b> 基本上是被废置的,相当于现在的 <em> 和 <strong>,一般情况下他们对于内容重要性的排序是这样的:strong > em ≈ cite。 

<strong>注意:</strong>别使用老掉牙的标签,比如<cite>FONT、CENTER</cite>等,特别是 <em>FONT</em>。

15. 表单项: <input>/<textarea>/<select>

表单项是 HTML 中相对比较复杂的标签,需要注意的点也比较多:

  1. 需要给每个表单项添加 <label> 对其进行描述,当不能使用 label 时,为表单项添加 title 属性
  2. 当表单项是必填项的时候,使用 “*“ 符号来标记
  3. Flash 创建表单项一般是不会生成 <label> 的,请勾上 auto label 那个选项
<form method="post" action="http://sofish.de">
    <fieldset><legend>My Form</legend>
      <label for="firstname">* First name:</label> <input type="text" id="firstname" />
      <label for="speech">Say something:</label>
      <textarea id="speech" />
      </textare>
      <input type="submit" value="submit" title="submit button" />
    </fieldset>
</form>

16. 图片: <img>

对于图片,盲人看不到。提供 alt 来表示替代文本。告诉他们这是一张什么样的图。

<img src="http://sofish.de/favicon.ico" alt="幸福收藏夹的 favicon" />

17. 框架: <iframe>

尽量避免 <iframe>框架的使用,但当你需要使用的时候,最好提供一个 title 属性对其进行描述。

<iframe src="http://sofish.de" title="幸福收藏夹" /></iframe>

18. 流媒体:<video>/<audio>/<object>/<embed>

媒体也是比较复杂的格式,处理起来比较麻烦。通常我们可以这样做:

  • 为视听媒体提供相应的文本,包括相应的场景,比如演讲中的鼓掌等有利有阅读者感知现在气氛的,都应该体现在演讲文本中。其他的依此类推。
  • 如果像交响乐这种不能提供具体描述的,可以进行简单的说明
  • 如果文本较长,不能在当前页面展示,可以在媒体后提供一个链接到相应替代文本的链接
  • 如果媒体中有可能会引起癫痫发作的,应做相应的说明
<audio src="mozart.mp4">莫扎特39号交响曲</audio>

19. 网页标题:<title>

网页中一定要包含标题,并且每个标签应该具有辨识性。比如支付宝中是这样体现的:

alipay web page title

<title>联系我 -- 幸福收藏夹</title>

20. 总结

好吧。就先写到这里了。WCAG 并不只是这些简单的 HTML Tags 的用法,语义化的网页也不是一两篇文章能够写完的。慢慢来吧。从最常见的做起,养成好的习惯。回到文章前面的那句话,难道你忍心把页面写得这么难用吗?

 

posted @ 2011-09-27 09:28 顺其自然EVO| 编辑 收藏

仅列出标题
共394页: First 上一页 386 387 388 389 390 391 392 393 394 下一页 
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜