Desktop端UI測試概要

最近在做一些測試,為產品的順利公測做部分支持。

以下為Desktop端的測試。

第一部分:Windows程序UI設計初​​步

1.背景介紹

UI就是用戶界面(user-interface),就是人和工具之間的界面。在人和機器的互動過程中,必須經由界面。這個界面實際上是體現在我們生活中的每一個環節的,例如我們開車時候方向盤和儀錶盤就是這個界面,看電視的時候遙控器和屏幕就是這個界面,用電腦的時候鍵盤和顯示器就是這個界面,到了使用軟件的時候,用戶能夠通過視覺看到的都是界面。這個界麵包括硬件和軟件。我們這裡講的UI設計特指Windows操作系統下的軟件界面。

用戶界面設計有三個基本的原則:a. 置界面於用戶的控制之下;b. 減少用戶的負擔;c. 保持界面的一致性。從程序設計開發的角度來看,界面設計可以分為結構設計、交互設計、視覺設計三個部分。



結構設計也稱概念設計(Conceptual Design),是界面設計的骨架,通過對用戶研究和任務分析,制定出產品的整體架構。基於紙質的的低保真原型(Paper Prototype)可提供用戶測試並進行完善。在結構設計中,目錄體系的邏輯分類和語詞定義是用戶易於理解和操作的重要前提。

交互設計是程序的神經,使用戶與軟件處理部分進行溝通,最終目的是使產品讓用戶能簡單使用。任何產品功能的實現都是通過人和機器的交互來完成的。因此,人的因素應作為設計的核心被體現出來。

1)有清楚的錯誤提示。錯誤操作後,系統提供有針對性的提示。

2)讓用戶控制界面。 “下一步”、“完成”,面對不同層次提供多種選擇,給不同層次的用戶提供多種可能性。

3)允許兼用鼠標和鍵盤。同一種功能,同時可以用鼠標和鍵盤。提供多種可能性。

4)允許工作中斷。例如用手機寫新短信的時候,收到短信或電話,完成後回來仍能夠找到剛才正寫的新短信。

5)使用用戶的語言,而非技術的語言。

6)提供快速反饋。給用戶心理上的暗示,避免用戶焦急。

7)方便退出,如手機的退出,是按一個鍵完全退出,還是一層一層的退出。提供兩種可能性。

8)導航功能。隨時轉移功能,很容易從一個功能跳到另外一個功能。

視覺設計是在結構設計的基礎上,參照目標群體的心理模型和任務達成的,是程序的臉面,要達到使用戶愉悅的目的,包括色彩、字體、頁面等。視覺設計的原則如下:

1)界面清晰明了。允許用戶定制界面。

2)減少短期記憶的負擔。讓計算機幫助記憶,例:User Name,、Password、IE進入界面地址可以讓機器記住。

3) 依賴認知而非記憶。如打印圖標的記憶、下拉菜單列表中的選擇。

4)提供視覺線索。圖形符號的視覺的刺激;GUI(圖形界面設計):Where, What, Next Step。

5)提供默認(default)、撤銷(undo)、恢復(redo)的功能

6)提供界面的快捷方式。

7)盡量使用真實世界的比喻。如:電話、打印機的圖標設計,尊重用戶以往的使用經驗。

8)完善視覺的清晰度。條理清晰;圖片、文字的佈局和隱喻不要讓用戶去猜。

9)界面的協調一致。如手機界面按鈕排放,左鍵肯定;右鍵否定;或按內容擺放。

10)同樣功能用同樣的圖形。

11)色彩與內容。整體軟件不超過5個色系,盡量少用紅色、綠色。近似​​的顏色表示近似的意思。

2. UI設計的一些原則。

對於Windows用戶來說,用戶認識到的就是所看到的。必須看到的現實就是:界面是面向用戶的,用戶需要的是開發者開發的應用軟件滿足其需求,並且易於使用。好的用戶界面使得用戶不用閱讀用戶手冊或接受培訓就能使用應用軟件。

2.1 交互設計的一些原則:

2.1.1有清楚的,針對性的操作提示。使用訊息和標籤措辭要適當。屏幕上顯示的文本是用戶主要的信息源。文本措辭直接影響用戶的理解。要使用用戶的語言,而非技術的語言。訊息措辭要積極,顯示用戶處於控制之中,並提示如何正確使用軟件。如, “你輸入了錯誤信息”還是“帳號應為8位數”會給用戶不同的體驗。此外,訊息措辭要一致,在屏幕上顯示的位置要一致。

2.1.2讓用戶控制界面。 ”下一步”、”完成”,面對不同層次提供多種選擇,給不同層次的用戶提供多種可能性。讓用戶知道自己當前的位置,使其做出下一步行動的決定。允許工作中斷,方便退出。整個交互過程提供快速反饋。給用戶心理上的暗示,避免用戶焦急。

2.1.3允許兼用鼠標和鍵盤等多種輸入。同一種功能,提供多種方式。

2.1.4使用非破壞性的缺省按鈕。通常每個屏幕定義一個缺省按鈕,如果用戶按了回車鍵調用此按鈕。問題是有時用戶會意外敲擊回車鍵,結果激活了缺省按鈕。缺省按鈕決不能有潛在的破壞性,如刪除或保存(也許用戶根本不想保存)。最好的方法是使用組合鍵來設置按鈕,更徹底的方法是去掉默認按鈕,這違背了同時支持多種輸入的原則,但是在特定的場合是可以考慮的。

2.1.5在操作焦點處打開窗口。當用戶雙擊一個對象顯示其編輯/詳情屏幕,用戶的注意力亦集中於此。因而在此處而不是其它地方打開窗口才有意義。

2.1.6彈出菜單不應是唯一的功能來源,主要功能菜單不應該被隱藏起來。適當使用上下文相關菜單。根據情況提供鼠標右鍵的這種菜單,缺少過濫都是不科學的。

2.1.7提供標準的常用功能,提供界面的快捷方式。如,常用的按鈕、菜單應該有和其它同類軟件相同的快捷鍵,一般打開放在文件菜單下。如果一個菜單項,按下去會彈出一個窗口,那麼這個菜單項的文字末尾應該有一個省略號來暗示用戶,例如“打開…”

2.1.8要考慮各種層次的用戶的操作水平的不均衡。

2.2視覺設計的一些原則:

2.2.1一致性。保證界面的協調一致。對於列錶框來說,如果雙擊其中的項,使得某些事件發生,那麼雙擊任何其它列錶框中的項,都應該有同樣的事件發生。所有窗口按鈕的位置要一致,標籤和訊息的措辭要一致,顏色方案要一致。

2.2.2 界面佈局很重要。人們是自左而右,從上而下閱讀,基於人們的習慣,屏幕的組織也應當是自左而右,從上而下。界面清晰明了,屏幕不能擁擠,擁擠的屏幕讓人難以使用。實驗結果(Mayhew,1992年)顯示屏幕總體蓋度不應超過40%,而分組中屏幕蓋度不應超過62%。如果要表達的信息比較多,最好分屏顯示。區域排列。當屏幕有多個編輯區域,要以視覺效果和效率來組織這些區域。區域左對齊是最好的方法。與之相應的標籤則應右對齊,置於編輯區域旁。這是屏幕上組織區域的一個整潔有效的方式。數據對齊要適當。對一列列的數據,通常的作法是整浮點數右對齊,字符串左對齊。有效組合。邏輯上關聯的項目在屏幕上應當加以組合,以顯示其關聯性。反之,任何相互之間毫不相關的項目應當分隔開。在項目集合間用間隔對其進行分組/或用方框也同樣可做到這一點。

2.2.3界面間切換很重要。如果從一個屏幕轉換到另一屏幕很困難,用戶會很快灰心並放棄。當屏幕流程與用戶想完成的工作流程相符,此軟件對用戶才有意義。由於不同用戶工作方式不同,應用軟件需要有足夠的靈活以支持他們不同的方式。盡可能的提供給用戶一個相對容易、自由的操作界面;

2.2.4 提供視覺線索。圖形符號的視覺的刺激遠遠大於文字。盡量使用真實世界的比喻。如:電話、打印機的圖標設計,同樣功能用同樣的圖形。加圖標的目的是為了使它更醒目,更突出。但是如果不加區分的全加、濫加,反而突出不了重點,都是重點就等於都不是重點。加圖標要保持風格一致,不要一個按鈕的圖標是XP風格的真彩圖標,下一個又成了Win95風格的16色圖標,到下一個又成了Mac風格的唯美圖標,這樣一個大雜燴顯得極不專業,降低用戶的信賴度。

2.2.5色彩與內容。整體軟件不超過5個色系,盡量少用紅色、綠色。近似​​的顏色表示近似的意思。顏色使用要適當,得一致,以使整個軟件有同樣的觀感。此外,在不同平台上,色彩的表現不盡人意.在一個系統上看上去很好,在另一個系統上常常看上去很糟,需要考慮軟件的運行環境而不是開發環境下閉門造車。顏色的使用要遵循對比原則。確保屏幕的可讀性,最好的方法是遵循對比原則:在淺色背景上使用深色文字,在深色背景上使用淺色文字。藍色文字以白色為背景很容易讀,但以紅色為背景很難辨認。問題出在藍色與紅色之間沒有足夠反差,而藍色與白色之間則反差很大。字體使用要適當。要用那些可讀性好的字體,如Times Roman。節儉、有效地使用兩、三種字體的屏幕看上去遠勝於使用五、六種字體的屏幕。此外,字體的使用要一致,要記住每次改變了字體的大小、風格(粗體、斜體、下劃線,……)、樣式或顏色,都是在使用不同的字體,就表示了他們的不完全一致。顯示一定要考慮用戶所使用的輸入/輸出設備,如觸摸設備相對要大些。

2.2.6豪華界面,不適合所有的軟件。華而不實的感覺往往來自界面。一般來講,遊戲類、播放器類,需要美麗的界面。

3.用戶的操作

對於用戶來說,操作越簡單越好,程序的使用思路越清晰越好。下面結合環境簡單說明一下常用控件該如何合理使用。

3.1對於較長時間的運算:

建議使用進度條(progress bar)比如要進行數據庫操作,需要時間長的情況。使用進度條可以讓用戶有個等待的時間,否則用戶不知道你的程序在幹什麼,用戶對於不明不白花費的時間一般容易惱火。設計的時候,對自己的操作運算時間進行估算,確定是否需要使用。如果只有5秒鐘,用戶一般是可以忍受的,加入進度條反而會產生畫蛇添足的效果。

在使用進度條的同時,可以配合使用狀態欄。 StatusBar經常被放置在窗體的下面,建議使用dock。可以在狀態欄中提供多個面板(pane)來提供不同的信息。狀態欄中,通常都會有一個面板來提示程序運行的信息,例如顯示進度,時間等。需要擴展的話,需要owerndrawn屬性支持。可以添加按鈕等,如取消。一般,在長時間的後台運算開始時,在狀態欄中設置開始的狀態信息,在計算結束之後,清除狀態信息或將狀態信息設置為停止狀態,在後台運行期間通過狀態欄來顯示必要的錯誤信息,提示用戶當前的狀態。比如,進行一個計算時,開始顯示:正在計算,請耐心等待。當運算結束時顯示:可以結束,正確退出。

等待指針的使用,在進行計算的時候,尤其在很難計算出這些操作的進度的情況下,設置前台鼠標指針為wait cursor是對用戶一個很好的提示。如果有些操作必須是阻塞的,這時需要使用等待指針(wait cursor)也是對用戶很好的交代。同樣,光標的形狀是非常靈活的,合理的使用能夠給用戶恰當的提示。

總之,使用上面的控件,能通過可視化的方式通知用戶有一些程序正在執行過程中,可能需要等待一定的時間。

在程序中合理使用try…finally語句可以達到很好的效果。保證無論遇到什麼情況,是正常也還,是異常也好,反正最後都會執行到finally。

3.2操作開始之後,在適當的時候提供必要的程序開關。

用戶應當能夠通過界面操作取消或終止較長時間的運算。不管你在做什麼,都要給用戶一個機會,因為用戶是程序的使用著。當然,不能讓用戶,任何時間都可以插手程序的操作,比方,一個數據保存的界面,保存,關閉,取消三個按鈕,當正在保存數據的時候,如果強行關閉的話,會導致數據的異常,在這種情況下就需要適當的啟用,禁用控件。對於該界面來說,“保存”點擊後,禁用“關閉按鈕”。在保存處理完畢後,再啟用“保存按鈕”。

3.3適時合理禁用一些菜單

通過可視化的方式提示用戶在運行某些程序的時候某些功能是被禁用的,程序結束後,重新啟用一些被禁止的菜單和控件,並通過適當的方式提示用戶操作已完成。同時,適當的啟​​用禁用菜單可以使用戶更清晰的理解應用程序的工作流程,理解應用程序執行的邏輯。比如用戶,一般先要看你界面上什麼功能可以使用,什麼需要達到一定的前提才能使用。在執行某功能的時候,通過禁用啟用,可以知道這個不能執行。當執行完畢後,用戶發現,哦,那個按鈕亮了,可以執行了。

3.4驗證用戶的輸入,使用validation control。

避免因為用戶的失誤,導致程序的失敗,意外。使用界面友好的MessageBox,注意要在提示對話框中使用適當的按鈕和圖標,它的重載比較多,根據具體的情況選擇不同的圖標和按鈕。比方說,如果用戶強行退出,可以彈出警告,這個時候就應該告誡用戶可能產生的不良後果。

3.6使用適當的控件

使用TreeView控件來顯示有層次的數據,使用ListView來顯示一組具有多個列的數據,使用DataGrid控件可以讓用戶改變每一個單元格中的數據,使用TabControl可以將窗體中的控件按照使用邏輯進行分類,根據具體的需要開發複合控件,擴展控件,自定義控件。

3.7 合理使用Splitters Docking與Anchoring屬性

當窗體放大時,你的窗體上的各種元素是否能夠按照比例放大,並且填充區域呢。

用Splitter控件來分離用戶區域,使用Dock屬性的Fill選項使控件能夠填充屏幕的一部分,設置Anchor可以在窗口大小變化時,保證窗體中的控件與窗體的相對位置不發生變化。通過設置

3.8不同分辨率下顯示效果的自動調整。

考慮到用戶的使用環境,程序在高分辨率下,字體,圖片,顯示需要隨著分辨率自動調整,以滿足用戶的視覺效果。

3.9通過使用Common Dialog可以讓用戶通過熟悉的界面來實行標準的操作

ColorDialog,FontDialog,OpenFileDialog等等

3.10對於較長時間的操作,不要阻塞主線程,也就是UI線程

如果時間長的話,建議使用多線程。可以使用ThreadPool.QueueUserWorkItem()來進行異步調用。在該類中,管理線程,QueueUserWorkItem:將方法變成代理,將代理交給QueueUserWorkItem,如果沒有其他線程,則立即計算,否則需要等待,給用戶提供取消/停止的功能。從其它線程中更新用戶界面中的控件,需要使用BeginInvoke和delegate。 Hook,當前線程中調用的方法,獲得另外線程中的方法,在另外的線程中操作。不是用來創建線程,只是讓線程去執行想執行的方法。代理函數指針的封裝,自己作為對像在程序中傳遞,實現callback機制。在NF2中,使用輔助線程Backgroundworker

3.11關閉確認原則。關閉需要激活原則,使權限不夠的用戶不能關閉程序。對實時軟件尤其重要。

第二部分:UI測試要點

一. UI測試概念

UI測試指測試用戶界面的風格是否滿足客戶要求,文字是否正確,頁面美工是否好看,文字,圖片組合是否完美,背景是否美觀,操作是否友好等等。

用戶界面(UI) 測試用於核實用戶與軟件之間的交互。 UI 測試的目標是確保用戶界面會通過測試對象的功能來為用戶提供相應的訪問或瀏覽功能。另外,UI 測試還可確保UI 中的對象按照預期的方式運行,並符合公司或行業的標準。包括用戶友好性,人性化,易操作性測試。 UI測試比較主觀,與測試人員的喜好有關,比如:頁面基調顏色刺眼;用戶登入頁面比較難於找到,文字中出現錯別字,頁面圖片範圍太廣等都屬於UI測試中的缺陷,但是這些缺陷都不太嚴重。

二. UI測試要點

1. 按功能將界面劃分局域塊,完成相同或相近功能的按鈕框起來, 並要有功能說明

2. 界面要支持按Tab鍵的自動切​​換功能;Tab鍵切換是否正確; Tab鍵的順序與控件排列順序要一直,目前流行總體從上到下,同時行間從左到右的方式;

3. 默認按鈕要支持Enter及選操作,即按Enter後自動執行默認按鈕對應操作

4. 菜單點擊,窗口初始化

5. 父窗體或主窗體的中心位置應該在對角線焦點附近;子窗體位置應該在主窗體的左上角或正中;多個子窗體彈出時應該依次向右下方偏移,以顯示窗體出標題為宜

6. 在各種分辨率下是否顯示正常

7. 前景與背景色搭配合理協調,反差不宜太大,最好少用深色,如大紅、大綠等。常用色考慮使用Windows界面色調。

8. 如果窗體支持最小化和最大化或放大時,窗體上的控件也要隨著窗體而縮放;對於含有​​按鈕的界面一般不應該支持縮放,即右上角只有關閉功能。

9. 窗體能否多次正確關閉,打開

10. 滾動條是否能拖動,並可通過鍵盤自動拖動

11. 與正在進行的操作無關的按鈕應該加以屏蔽(Windows中用灰色顯示,沒法使用該按鈕)。

12. 對可能造成數據無法恢復的操作必須提供確認信息,給用戶放棄選擇的機會,如刪除確認提示,退出前確認是否保存

13. 可寫控件的數據類型及長度,盡量在前台進行控制

14. 非法的輸入或操作應有足夠的提示說明, 讓用戶明白錯誤出處,避免形成無限期的等待,提示、警告、或錯誤說明應該清楚、明了、恰當;提示順序按Tab順序

15. 對一些特殊符號的輸入、與系統使用的符號相衝突的字符等進行判斷並阻止用戶輸入該字符, 特殊字符常有;;'”><,`':“[” {、\|}]+=)-(_*&&^%$#@!,.。?/還有空格

16. 在讀入用戶所輸入的信息時,根據需要選擇是否去掉前後空格。

三.一般客戶端測試邏輯劃分

1. 標題欄

a、標題文字描述的正確性

b、標題欄中(最大化、最小化、關閉)按鈕,根據窗口的特性,如沒有最大化或者最小化狀態的窗口,應該不顯示最大化和最小化按鈕,或者把按鈕Disable狀態顯示。

2. 文字

(1)文字描述的準確性:

a、檢查文字的描述和所對應的功能是否一致;

b、檢查錯別字。

(2)文字用語的一致性:

(菜單、界面按鈕或者Label等、ToolTip、窗口標題)比如選項設置,在主界面的有按鈕可以進入選項設置對話框,或者菜單中有菜單項可進入選項設置對話框中,那麼,按鈕、菜單、對話框的標題都應該統一用詞,如用“選項”或者“設置”,而不能又用“選項”,又用“設置”,或者還有其他的的用詞。

(3)為了全面的檢查所有的文字,應該檢查程序中的所有文字資源,因為一些對話框可能比較難在黑盒測試的時候能全部都出現過。

3. 控件

(1) 控件對齊:

a、 並排關係的控件間應該左對齊,同行的控件應該橫向對齊。

b、 有所屬關係的控件應該縮進。

(2)控件狀態:

a、不能操作的的控件的狀態應該為Disable,這樣界面也起到引導用戶使用操作的效果。

b、有依賴關係的控件,比如(幾個選項供選擇(CheckBox或者RadioBox),每個選項下面都有獨立的設置(其他的控件:Edit、 ComboBox、CheckBox等),那麼當所屬的選項沒有選中時,下面的控件應該是Disable的,相反為Enable。

(3)控件的TabOrder

控件的TabOrder應該依次從上到下、從左到右的順序,界面中默認的TabOrder應該落在界面上的第一個Enable狀態的控件​​上面。

(4)控件的右鍵菜單支持

允許輸入的控件都應該支持右鍵菜單,方便習慣使用右鍵菜單的用戶複製、剪切、粘貼、全選等操作。

(5)控件的操作方式

a、單行文本的Edit輸入框中,對回車符的支持:回車默認操作是本窗口中的“確定”按鈕的功能。

b、在可操作的列表控件(List、ListView)中,鼠標雙擊的操作、鍵盤操作都應該有對應的默認操作。比如下面的圖中,雙擊列表中某一項,默認操作就是Modify按鈕的操作;雙擊列表中的空白處,默認操作應該是Add按鈕的操作;選中列表中的項的情況下,按下Delete鍵,默認操作應該是Remove按鈕的操作。

(6)Edit控件對輸入的有效性判斷

a、類型判斷:整型、浮點型的數據輸入框中,不允許輸入非表示數據的其他字符串(如:abcd或者其他字符等);

b、大小判斷:數據類型的數據如有大小範圍限制的,要對輸入的大小進行判斷(如:表示月份的輸入框中,只能允許輸入1-12的數字。

c、長度判斷:如果是程序處理的字符串有長度限制,但是輸入框中沒有對輸入的數據長度進行限制,將有可能會造成程序錯誤,或者處理後的結果和輸入的不相符合。

d、正確性判斷:表示路徑的或者文件名全路徑的輸入框,要對輸入的路徑是否為有效的路徑進行判斷,如:輸入aaaa或者C:\\//等為不正確的輸入。

4. 圖片

圖片顯示的篇幅不要太大。

5. 界面整體的顏色搭配

6. 窗口在任務欄上的系統菜單

每個應用程序,如窗口在系統任務欄上有縮小圖標的,都應該有系統右鍵菜單的支持(還原、最大化、最小化等),要測試右鍵菜單中各個項的Enable和Disable狀態的正確性以及功能的正確性。

7. 提示對話框測試

1、文字描述的正確性

2、圖標顯示的正確性:

a、程序錯誤、操作錯誤、禁止操作等的提示:MB_ICONHAND, MB_ICONSTOP,MB_ICONERROR

b、詢問的提示:MB_ICONQUESTION

c、感嘆、警告的提示:MB_ICONEXCLAMATION ,MB_ICONWARNING

d、普通信息的提示:MB_ICONASTERISK,MB_ICONINFORMATION

第三部分: UE測試概要

UE(User Experience 用戶體驗):指的是軟件應用和審美價值,是以用戶至上的觀點作為基石的。主要由以下四種因素構成:

1、印象(感官衝擊)

2、功能性

3、使用性

4、內容

這些因素相互關聯,不可分割,共同形成正確的用戶體驗。這些因素也是一個軟件成功必不可少的主要因素。其中“印象”也可以歸結成這個軟件塑造的一個“品牌”效應。

用戶體驗是一種純主觀的在用戶使用一個產品(服務)的過程中建立起來的心理感受。因為它是純主觀的,就帶有一定的不確定因素。個體差異也決定了每個用戶的真實體驗是無法通過其他途徑來完全模擬或再現的。但是對於一個界定明確的用戶群體來講,其用戶體驗的共性是能夠經由良好設計的實驗來認識到。

用戶體驗主要是來自用戶和人機界面的交互過程。在早期的軟件設計過程中,人機界面被看做僅僅是一層包裹於功能核心之外的“包裝”而沒有得到足夠的重視。其結果就是對人機界面的開發是獨立於功能核心的開發,而且往往是在整個開發過程的尾聲部分才開始的。這種方式極大地限制了對人機交互的設計,其結果帶有很大的風險性。因為在最後階段再修改功能核心的設計代價巨大,犧牲人機交互界面便是唯一的出路。這種帶有猜測性和賭博性的開發幾乎是難以獲得令人滿意的用戶體驗。至於客戶服務,從廣義上說也是用戶體驗的一部分,因為它是同產品自身的設計分不開的。客戶服務更多的是對人員素質的要求,而已經難以改變已經完成並投入市場的產品了。但是一個好的設計可以減少用戶對​​客戶服務的需要,從而減少公司在客戶服務方面的投入,也降低由於客戶服務質量引髮用戶流失的機率。

現在流行的設計過程注重以用戶為中心。用戶體驗的概念從開發的最早期就開始進入整個流程,並貫穿始終。其目的就是保證(1)對用戶體驗有正確的預估(2)認識用戶的真實期望和目的(3)在功能核心還能夠以低廉成本加以修改的時候對設計進行修正(4)保證功能核心同人機界面之間的協調工作,減少BUG。

在具體的實施上,就包括了早期的focus group(焦點小組),contextual interview,和開發過程中的多次usability study(可用性實驗),以及後期的user test(用戶測試)。在設計–測試–修改這個反复循環的開發流程中,可用性實驗為何時出離該循環提供了可量化的指標。

來源:http://www.mdong.org/?p=1643

特別注意:本站所有轉載文章言論不代表本站觀點,本站所提供的攝影照片,插畫,設計作品,如需使用,請與原作者聯繫,文章轉自alibuybuy

Comments are closed.