qileilove

          blog已經(jīng)轉移至github,大家請訪問 http://qaseven.github.io/

          軟件測試的案例分析

          國內為數(shù)不少軟件企業(yè)雖然經(jīng)過多年的發(fā)展,但仍處于疲于奔命、停滯不前的局面;另一方面,規(guī)模像“作坊”一樣的小公司,幾乎每天都在誕生、消亡。導致公司興衰成敗的原因是多方面的,筆者以為其中一個最重要的原因是軟件產(chǎn)品質量的好壞。(當然,市場策略也是其中一個極為重要的因素。)幾乎所有的企業(yè)都想對自己已有的技術成果或項目成果進行產(chǎn)品化,然后再把產(chǎn)品市場化、國際化。可是,絕大多數(shù)企業(yè)的軟件產(chǎn)品一旦走向市場就會遭遇重重困難,例如,軟件質量不過關,軟件可維護性差,軟件使用學習周期過長等等問題。本文不打算深入剖析決定軟件企業(yè)及其產(chǎn)品成敗的各個因素,而是側重于測試角度,以案例的形式,對軟件企業(yè)中影響產(chǎn)品質量提升的常見錯誤認識作一些分析并給出解決方案。

            軟件公司在產(chǎn)品開發(fā)中,通常存在三大不合理現(xiàn)象,它們嚴重影響了產(chǎn)品質量的提升:

            1)為了保證產(chǎn)品的工期和進度,文檔、質量管理、測試、評審等一系列工作統(tǒng)統(tǒng)可以忽略;

            2)為了早日推出產(chǎn)品,不進行正規(guī)的缺陷管理,導致缺陷反復出現(xiàn),缺陷較多的問題不能從“源頭”進行控制;

            3)發(fā)生質量問題不好好反思自己產(chǎn)品開發(fā)管理方面的不足,進而從最根本處入手解決問題;而是掩蓋真實原因,追查個人責任。

            本文將針對這三大現(xiàn)象,以真實的案例為藍本,逐個進行剖析。

            1、進度 VS 質量

            本案例是非常典型的產(chǎn)品開發(fā)案例,幾乎是很多中小公司的典型做法——以按時發(fā)布產(chǎn)品和進度為理由,不實施任何測試工作,就更不用說質量保證工作了。

            下面是案例的一些基本信息:

          產(chǎn)品信息

              

          內容

          產(chǎn)品名稱

              

          系統(tǒng)為J2EE結構的某行業(yè)的ERP系統(tǒng)。本產(chǎn)品是一個來源于項目的產(chǎn)品,原有客戶和新的客戶已經(jīng)投入使用部分功能。

          開發(fā)人員

              

          產(chǎn)品開發(fā)人員10人。

          功能模塊

              

          含有工作流流程的模塊有30個,不含工作流流程的普通功能模塊20個左右。

          進度要求

              

          當時計劃一年內開發(fā)完成,實際目前已經(jīng)耽誤進度0.5年。

          產(chǎn)品現(xiàn)狀

              

          主要功能基本完成,而且在一些新的客戶中投入使用,反饋問題較多。

            下面是產(chǎn)品開發(fā)的過程:

          階段

              

          過程

              

          大事記

          項目立項階段

              

          三家大客戶準備采用該產(chǎn)品,公司把三個項目在內部作為一個項目來開發(fā),同時制定要把該項目成果產(chǎn)品化的目標。

              

          為了趕進度,采取封閉開發(fā)的方法,同時決定第一版不進行測試。

          第1個月

           

              

          項目在沒有文檔的情況下進入開發(fā)狀態(tài),主要參考依據(jù)是公司內部基于另外一個平臺的同類產(chǎn)品,該平臺有些過時是開發(fā)這個產(chǎn)品的主要原因。

              

          產(chǎn)品整個開發(fā)過程基本沒有進行關鍵方案、文檔的評審工作;沒有進行任何測試;沒有任何質量保證人員。

          第2~5個月

              

          產(chǎn)品正常開發(fā),大多數(shù)功能由程序員做主進行開發(fā)。同時,開發(fā)完成的部分準備安裝試用。

          第6~12個月

              

          開發(fā)團隊進一步開發(fā)產(chǎn)品;

          實施人員在現(xiàn)場安裝已經(jīng)完成的部分,同時做缺陷修改工作;

              

          第六個月時,客戶開始對公司施壓,要求盡快安裝全部產(chǎn)品,同時拒絕使用已經(jīng)安裝好的部分產(chǎn)品;

          幾個實施工程師以超人的“救火”能力,解決了現(xiàn)有缺陷,在幾乎沒有提供新產(chǎn)品的條件下?lián)芜^了半年。

          第13個月

              

          把主要功能提供給客戶進行安裝;

              

          前面的幾位實施工程師在季度會議上,被公司評為了“英雄”,給予了一定的獎勵,鼓勵他們繼續(xù)堅守陣地。

          第14~18個月

              

          公司決定把產(chǎn)品交給現(xiàn)場的實施人員進行維護,專注產(chǎn)品化工作;

          確定在接下來的6個月推出新版本的目標;

              

          由于缺陷較多,現(xiàn)場用戶抱怨不斷;

          實施人員忙于現(xiàn)場“救火”。

          第19個月

              

          所有的開發(fā)人員不再兼顧項目,加班加點準備按時發(fā)布產(chǎn)品。

              

           

          ……

              

          ……

              

          ……

            現(xiàn)實中很多公司目前都是這樣進行軟件開發(fā)的,幾乎很少進行測試工作,最多也就是在產(chǎn)品發(fā)布后進行最后的“用戶測試”和一些功能性測試。當軟件系統(tǒng)在用戶那里出故障了,現(xiàn)場補救成功的人成了公司的英雄,好心的用戶甚至還會因此寄來感謝信。然而這并不是真正合理的做法。如同案例中描述的那樣,這會導致現(xiàn)場用戶抱怨不斷,分配用于“救火”的工程師越來越多,最后導致企業(yè)不堪重負,不得不放棄部分現(xiàn)有客戶的系統(tǒng)維護工作。要想改變這種現(xiàn)狀,應該從以下幾個方面入手:

            不但要主觀認識到測試對軟件質量的重要性,同時還要落實到行動中。

            測試的重要性已經(jīng)逐漸被軟件開發(fā)團隊認可。但是落實到實際工作中,通過測試真正提高軟件質量,還有一段很長時間的路要走。因為幾乎所有的軟件公司都灌輸著“進度高于一切”的思想,只要是為了趕進度和發(fā)布產(chǎn)品,所有影響進度的工作都可以忽略。
           從表面上看,測試、質量檢查、評審是在耽誤進度,實際上則不然。如果軟件缺陷被遺落并流落到客戶那里,其結果就是代價高昂的電話費或者現(xiàn)場支持費 用,還可能需要修復、重新測試和發(fā)布新的產(chǎn)品,更糟糕的情況是產(chǎn)品要被召回甚至被客戶起訴。這種成本付出非常高,幾乎是在內部修改缺陷時的幾何級數(shù)倍,一 般高達100~1000倍(可以參考PhilipCrosb的相關著作)。

            案例中的情況,實際上就是為了趕進度而不進行測試,如果第一版進行規(guī)范的測試,后面那些“救火”英雄肯定會少些,同時也會得到客戶對公司更大的認可。很多公司盡管對這個道理已經(jīng)耳熟能詳,但接下來如何進一步落實到行動中卻是不容樂觀的問題。

            樹立提高質量就是尊重客戶的思想。

            作者注意到目前不少公司存在著“愚弄客戶”的嫌疑。不管是有心的還是無意的,很多公司認為只要能拿到“錢”就已經(jīng)達到目的了,因此也不在乎是否 掩蓋缺陷和敷衍客戶。案例中的做法肯定是不尊重客戶的,因為沒有產(chǎn)品可以安裝時,不說明實情,反而提供一個“滿目瘡痍”的產(chǎn)品來臨時應付客戶,甚至最后安 排實施人員“硬撐”半年。

            生活中大家都討厭假冒偽劣產(chǎn)品,但是軟件行業(yè)從業(yè)者的卻很少意識到質量不好的軟件也是假冒偽劣產(chǎn)品。對客戶負責,就是對公司負責。“樹立客戶是 上帝”的思想,一定要把重視質量落實到行動中,這樣我們就不至于拼命的去生產(chǎn)那些“假冒偽劣”軟件,最后被市場淘汰。在軟件產(chǎn)業(yè)發(fā)達的今天,已經(jīng)是客戶的 買方市場,客戶永遠會選擇質量好的、服務好的產(chǎn)品來滿足自己的需求,只有質量好的產(chǎn)品,才可以不斷的向前發(fā)展。

            建立規(guī)范的測試體系和質量保證體系,逐步使軟件開發(fā)進入良性循環(huán)狀態(tài)。

            在沒有開發(fā)規(guī)范的前提下,軟件團隊是很少能開發(fā)出高質量的軟件。因此軟件團隊一定要建立規(guī)范的測試體系和質量保證體系,同時把規(guī)范體系逐步落實 到工作中。案例中的公司就是沒有“開發(fā)法律”的小軟件作坊,所以才倒行逆施。不但做了很多浪費人力、物力的無謂工作,還給客戶留下了不好的印象,造成了不 良后果。類似案例中這樣的開發(fā)團隊在現(xiàn)實中很多,都是處于混亂的開發(fā)狀態(tài)。解決的根本辦法就是逐步規(guī)范測試體系,進而建立全面管理的質量管理系統(tǒng),最終形 成一個良好的開發(fā)體系。在好的開發(fā)體系下,片面重視進度的情況是不容易發(fā)生的。

            2、缺陷反復出現(xiàn),誰的責任?

            下面的案例取材自某公司產(chǎn)品開發(fā)部開發(fā)某網(wǎng)絡教育平臺軟件的工程過程。本產(chǎn)品在歷時一年半的研發(fā)后開始投入測試。測試工作允許的時間為7個工作日。

            測試工作過程記錄如下

          進度

          測試人員

          開發(fā)人員

          其他問題

          第一天

          (1)熟悉軟件

          (2)閱讀項目文檔

          (3)制定測試策略(2人)

          (4)制作測試跟蹤表格(1人)

          其它工作

          第二天

          (1)確定測試策略

          (2)劃分測試任務

          (3)閱讀各自測試模塊的文檔

          下午做整個系統(tǒng)的業(yè)務功能串講(部分開發(fā)人員)。

          第三天

          開始執(zhí)行測試

          其它工作

          缺陷總數(shù)70多

          第四天

          執(zhí)行測試

          其它工作

          缺陷總數(shù)200多

          第五天

          執(zhí)行測試

          其它工作

          缺陷總數(shù)500多

          第六天

          (1)執(zhí)行測試

          (2)總結測試

          (3)撰寫測試缺陷報告

          其它工作

          缺陷總數(shù)600多

          第七天

          撰寫測試分析報告

          其它工作

            經(jīng)過7個工作日的測試,得出結果,此系統(tǒng)不可用,需做重大修改。系統(tǒng)經(jīng)過重新設計,保留了部分原有業(yè)務功能和業(yè)務邏輯之后重新開發(fā),并進行了測試。測試工作允許的時間為三個月。

            測試工作過程記錄如下

          階段

          測試人員

          開發(fā)人員

          其他問題

          單元測試

          build通過,操作均實現(xiàn)

          集成測試

          數(shù)據(jù)流轉執(zhí)行正常

          系統(tǒng)測試

          隨著開發(fā)過程測試

          缺陷總數(shù)500多

           

          全部開發(fā)完成集中測試

          缺陷總數(shù)4000多

            在最后的系統(tǒng)測試結束后,對測試結果進行了分析,發(fā)現(xiàn)如下現(xiàn)象:

            第二版中的4000個多缺陷基本包含了第一版發(fā)現(xiàn)的600多個缺陷;

            相似缺陷較多,例如:如果一個程序員寫的模塊中發(fā)現(xiàn)某個頁面郵件輸入格式?jīng)]有校驗,那么他寫的所有頁面中包含郵件數(shù)據(jù)項的內容都不會校驗;

            數(shù)據(jù)校驗遺漏較多:如果在一個系統(tǒng)輸入了不合法的數(shù)據(jù)項,那么,整個系統(tǒng)中就會出現(xiàn)幾十個數(shù)據(jù)項合法校驗遺漏;

            細節(jié)錯誤較多,例如:頁面Title不對應的錯誤在系統(tǒng)中有600多個;

            程序設計風格不統(tǒng)一。相同的功能點,如分頁、翻頁處理,做得五花八門,并且以測試人員的理解來判斷是否為缺陷,導致某些功能點在不同頁面就能發(fā)現(xiàn)個3到5個缺陷。

            通過上面的案例信息,可以看出這個產(chǎn)品的開發(fā)過程本身就是不規(guī)范的,而且測試工作介入的太晚,同時在軟件產(chǎn)品設計、過程管理、文檔評審等諸多方 面均存在問題。產(chǎn)品開發(fā)工作和項目開發(fā)工作相比,一般進度壓力較小。但是產(chǎn)品要進行商業(yè)化最終轉化為通用的商品軟件,質量方面的要求要比項目成果高很多。 缺陷反復出現(xiàn)幾乎是軟件產(chǎn)品開發(fā)的一個常見現(xiàn)象,要想解決這個問題,作者建議整個團隊要從下面幾個方面入手:

            規(guī)范化產(chǎn)品開發(fā)流程:產(chǎn)品開發(fā)是應該遵循軟件工程規(guī)范的,開發(fā)過程不應該跳過必要的環(huán)節(jié)。例如這個案例中的產(chǎn)品,無疑就是開始系統(tǒng)設計和評審工作沒有做好,才導致二次開發(fā),并且還有一個嚴重的遺漏就是首次開發(fā)忽略了測試工作。測試、質量保證等相關工作應該從立項開始就同步啟動。

            需求分析要明確:如果開發(fā)人員都不知道完成的內容是否正確,而是由測試人員來判斷是否符合要求,那簡直是需求分析的的巨大“失誤”。用戶或者設計者想要達到什么目標一定要清晰的描述出來,模棱兩可的需求是沒有辦法設計測試用例的,更不用說進行測試了。

            開發(fā)人員的調試一定要到位:開發(fā)人員一定要認真調試代碼,至少要把自己負責的部分和其它模塊的接口部分進行 詳細的測試。這項由開發(fā)人員進行的基礎測試是不可缺少的。目標就是把盡可能多的缺陷消滅在開發(fā)階段,這也無疑是最節(jié)約成本的。現(xiàn)代軟件系統(tǒng)十分復雜,程序 員寫了程序不仔細檢查代碼,大多會有很多缺陷存在。如果憑著僥幸心里把所有的測試工作都交給測試工程師來完成,那只能適得其反。這些本來在開發(fā)階段解決的 缺陷由測試人員來發(fā)現(xiàn)會有如下的后果:

            耽誤進度——首先,缺陷要經(jīng)過一定的測試流程。例如上面的案例中,網(wǎng)頁的Title寫錯這樣的缺陷折騰了兩個部門,簡直是“勞民傷財”。

            轉移測試人員注意力——大量的低級缺陷使測試工程師無法進行更加深入的測試。測試工程師的注意力分散在對于開發(fā)工程師來說“無關痛癢”的缺陷上,使得更深層次的缺陷隱藏起來。

            降低開發(fā)人員斗志——盡管這些缺陷是開發(fā)人員自己“制造”的,但是一看到上百、上千個缺陷,無疑會影響心情,降低效率。

            當然,增大開發(fā)人員測試力度會帶來一定的投入,因此需要在項目初期進行合理的規(guī)劃,否則開發(fā)工程師就會拼命趕進度,自然把測試工作“寄厚望”于測試工程師。

            加強缺陷管理:缺陷管理在這個案例的前期做的不好。在缺陷管理中,我們不但應該把缺陷修改工作能否一次通過 作為考核開發(fā)師的標準之一,更應該把一些常見的缺陷是否存在作為考核開發(fā)工程師的標準。在經(jīng)過一定的積累后,開發(fā)團隊應該形成一些常見的程序缺陷列表,以 引起開發(fā)組成員注意。在此基礎上,還需要做到下面幾個要求來提高質量:

            修改缺陷要徹底——徹底不單單是要修改好測試人員提交的缺陷,還要爭取不帶來新的缺陷、這就要求開發(fā)工程師修改缺陷時要對相關聯(lián)的部分進行檢查。

            低級缺陷不存在——常見缺陷列表中的錯誤盡量不應該由測試工程師發(fā)現(xiàn)并提出。

            3、產(chǎn)品發(fā)布后,缺陷誰來負責?

            本案例發(fā)生在一個正在建設測試團隊的組織中,這個研發(fā)團隊有獨立的測試小組,但不是獨立的測試部門,產(chǎn)品部經(jīng)理兼任測試經(jīng)理。在產(chǎn)品提交給代理商后,代理商發(fā)現(xiàn)了一個嚴重的缺陷,并對其進行了投訴,最終的結果是公司領導層對開發(fā)隊伍的相關人員進行了一系列懲罰。

            測試過程簡要記錄:

          測試階段

          測試人員

          備注

          單元測試

          主要由開發(fā)人員負責。

          開發(fā)人員一邊開發(fā)一邊測試。

          集成測試

          開發(fā)人員負責,測試人員沒有參與。

          沒有作為一個獨立的測試階段進行,在開發(fā)過程中進行。

          系統(tǒng)測試

          由測試小組進行,共5名工程師,測試了進15個工作日。

          測試過程采用了缺陷管理工具。

          回歸測試

          測試工程師和開發(fā)工程師進行交互的測試、修改。

          開發(fā)工程師修改完最后的缺陷后,把所有的模塊打包,發(fā)送給客戶。

          驗收測試

          由軟件代理商的測試隊伍自己進行驗收測試。

          根據(jù)用戶手冊進行測試。

            在代理商驗收測試進行的第三天,測試人員發(fā)現(xiàn)了一個嚴重缺陷——“流轉后的文檔無法正常歸檔”。代理商立刻向公司的客戶服務部進行了投訴。在此之后的10多天里,代理商的測試人員又陸續(xù)發(fā)現(xiàn)了近30個缺陷。

            公司對產(chǎn)品的質量十分“震怒”,詳細調查后,發(fā)現(xiàn)了這個問題產(chǎn)生的過程如下:

            這個缺陷實際發(fā)現(xiàn)過一次,開發(fā)人員進行修改時,發(fā)現(xiàn)難度較大,決定暫停修改,得到了測試人員的認可;

            接著大家忙于新的測試和修改工作;

            產(chǎn)品發(fā)布前,開發(fā)工程師進行了修改,然后直接發(fā)布,在開發(fā)環(huán)境下問題確實得到了解決;

            最后公司對相關人員進行了連帶懲罰:

            產(chǎn)品部經(jīng)理、項目經(jīng)理、開發(fā)工程師本季度績效考核降為最低,即下個季度每個月份都要扣除一定比例的工資;

            測試工程師績效考核降為最低,同樣扣除了工資。

            上面案例的執(zhí)行過程中,有幾處顯而易見的不合理的地方:

            缺少文檔,尤其是需求文檔。文檔是測試的主要依據(jù)。如果交給測試組僅僅是一個軟件系統(tǒng),然后告訴他“你們來測試吧,發(fā)現(xiàn)缺陷就提交”,我相信提交缺陷后開發(fā)與測試雙方幾乎會陷入喋喋不休的爭吵狀態(tài)。

            測試介入太晚。只在系統(tǒng)測試階段才安排測試人員進行測試,實際上質量已經(jīng)失控了。尤其是沒有文檔,測試人員 無疑會把一些“缺陷”認為是合理的,而開發(fā)人員通常會自信地人為自己的開發(fā)工作是正確的。這樣,一些問題是否是缺陷就會最終交給客戶來完成。質量控制和測 試的相關工作沒有按照合理的流程進行必然會產(chǎn)生這種結果。要改變這種現(xiàn)狀測試工作就應該盡早地介入整個產(chǎn)品的開發(fā)流程。

            回歸測試做的不合理。案例中在回歸測試時,“開發(fā)工程師修改完最后的缺陷后,把所有的模塊打包,發(fā)送給客戶”,這里明顯還缺少一次測試。所有的缺陷應該經(jīng)過修改驗證后才可以發(fā)布產(chǎn)品,最后階段發(fā)現(xiàn)的缺陷也不應例外。必須經(jīng)過這道工序才可以發(fā)布產(chǎn)品,因為修改可能會帶來新的缺陷。

            產(chǎn)品發(fā)布的出口不對。案例中的產(chǎn)品最后是由開發(fā)人員發(fā)布的,這是十分不合理的。這些產(chǎn)品來自于開發(fā)環(huán)境,眾 所周知,很多缺陷在開發(fā)環(huán)境下運行時是不出現(xiàn)的。產(chǎn)品在經(jīng)過最后的回歸測試并且確定可以發(fā)布后,應該把經(jīng)過測試的產(chǎn)品而不是來自于開發(fā)環(huán)境的產(chǎn)品納入配置 管理基線庫,最后發(fā)布的產(chǎn)品應該從配置管理庫中提取的。

            缺陷流程不合理。這個帶來嚴重后果的缺陷其實就是從不規(guī)范的流程“空隙”中逃脫的,原因主要如下:

            缺陷的用戶權限控制不嚴。開發(fā)工程師無權決定是否延期或者暫時停止修改某一缺陷。案例中開發(fā)工程師自己決定延期修改,測試工程師也進行了認可,這是不合理的做法。

            沒有對每個缺陷進行全程跟蹤。測試工程師應該跟蹤每一條缺陷,并確定修改后才可以進行關閉操作,而不是發(fā)現(xiàn)缺陷就完成了任務。

            缺少了缺陷審核步驟。產(chǎn)品發(fā)布前,項目經(jīng)理應該對產(chǎn)品發(fā)現(xiàn)的缺陷進行審核,根據(jù)修改狀況來決定是否可以發(fā) 布。產(chǎn)品帶著缺陷發(fā)布也是正常的行為,例如微軟的大多數(shù)產(chǎn)品都是帶著缺陷發(fā)布的。重要的是對最后未關閉的缺陷進行合理的處理。這些缺陷要由項目經(jīng)理甚至是 技術總監(jiān)進行審核簽字后確定不進行修改后,才可以轉入產(chǎn)品發(fā)布。本案例中如果事先對缺陷做過審核并確認,就可以規(guī)避風險。

            上面的諸多原因,必然導致了產(chǎn)品會遺漏很多缺陷。實際也是如此。開始發(fā)現(xiàn)的這個“嚴重缺陷”只是個開端,后面陸續(xù)發(fā)現(xiàn)的30多個缺陷才是上面這 些原因的“所以”。如果這30多個缺陷都要進行懲罰,公司可以收入一大筆。雖然公司根本目的是想把產(chǎn)品質量做好,并不希望處罰大家,可是找不出提高質量的 根本方法,只能出此下策以儆效尤。

            產(chǎn)品發(fā)布后的責任究竟應該由誰來承擔?作者認為,應該根據(jù)具體的問題來決定。首先要意識到產(chǎn)品帶著一些缺陷是正常現(xiàn)象。如果純屬個人原因造成, 個人是應當承擔責任的,懲罰永遠不是最有效的辦法。實際上,本案例中的開發(fā)工程師在不到20天就提出了辭職并離開公司,給公司的產(chǎn)品開發(fā)帶來更大的損失。 提高質量必須從提高項目管理水平處入手,同時加強質量控制來避免類似問題發(fā)生。

            4、小結

            通過對上面三個案例進行分析,我們應該已經(jīng)意識到質量、進度、成本是相輔相成、同等重要的,決不可以忽略任何一個方面。尤其是軟件質量,決不要 因為它是非硬性指標就敷衍了事。此外,軟件測試作為質量控制的最重要手段,必須引起足夠的重視。本文所討論的案例,都是直接從實踐中來的,且具有相當?shù)拇?表性。那么,為什么為數(shù)不少的軟件企業(yè)會陷入上述“怪圈”呢?歸根結底就是短期利益心理在作怪。希望企業(yè)能夠通過本文的案例剖析,意識到問題產(chǎn)生的原因的 所在,進而提高軟件質量管理水平,建立合理的質量管理體系。

          posted on 2012-04-12 10:59 順其自然EVO 閱讀(4330) 評論(1)  編輯  收藏

          評論

          # re: 軟件測試的案例分析 2014-07-23 11:50 吳金額

          嗯 是吧
          還是有用的。  回復  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          <2012年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 报价| 凌源市| 沾益县| 收藏| 巴南区| 建瓯市| 玉门市| 巴东县| 海晏县| 仙游县| 南漳县| 贺州市| 措美县| 蒙山县| 嵩明县| 奈曼旗| 蒙阴县| 博罗县| 泽库县| 姚安县| 桑植县| 宁德市| 衢州市| 南和县| 方山县| 普定县| 濉溪县| 盖州市| 蒲江县| 盘山县| 那坡县| 大安市| 新丰县| 辽宁省| 阿拉善左旗| 称多县| 迁西县| 永修县| 竹溪县| 九寨沟县| 绍兴县|