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 下一頁 
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宁蒗| 黄冈市| 怀来县| 天门市| 阿坝县| 滁州市| 搜索| 抚顺市| 东安县| 重庆市| 邢台县| 兖州市| 定陶县| 天峨县| 札达县| 隆回县| 淅川县| 平乡县| 达孜县| 建水县| 宜昌市| 都昌县| 鄂尔多斯市| 张家口市| 惠安县| 杭锦旗| 威信县| 丰城市| 台东县| 曲靖市| 青田县| 清苑县| 当涂县| 永宁县| 桦川县| 庆云县| 太白县| 都安| 明水县| 凤台县| 伊春市|