版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
11aa宜賓職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)企業(yè)QQ通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)TOC\o"1-5"\h\z系 部 _專業(yè)名稱^ ^班 級(jí) 姓 名 學(xué)號(hào). —指導(dǎo)教師 2013年09月28日企業(yè)QQ通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)摘要企業(yè)QQ通信系統(tǒng)可作為企業(yè)內(nèi)部的交流工具使用,雖然通信的安全性不是很高,但是要求信息的響應(yīng)速度要較快,能讓企業(yè)內(nèi)部員工充分享受到網(wǎng)絡(luò)即時(shí)消息的方便和快捷,從而提高工作質(zhì)量和效率。本設(shè)計(jì)采用VisualC++6.0程序,使用C++編程語(yǔ)言進(jìn)行軟件的開(kāi)發(fā)。主要實(shí)現(xiàn)了用戶注冊(cè)、用戶登錄、用戶之間文字聊天、文件傳輸、語(yǔ)音聊天、視頻聊天功能,構(gòu)成一個(gè)實(shí)用的、功能完善的聊天軟件,達(dá)到預(yù)期目標(biāo);通過(guò)運(yùn)行、測(cè)試與分析說(shuō)明,該多功能聊天軟件運(yùn)行穩(wěn)定、可靠,具有一定的實(shí)用價(jià)值。關(guān)鍵詞:QQ系統(tǒng);企業(yè)通信;VisualC++6.0;C++;數(shù)據(jù)庫(kù)目錄TOC\o"1-5"\h\z\o"CurrentDocument"引言 1課題背景 1國(guó)內(nèi)外主要聊天工具的發(fā)展?fàn)顩r 1本課題研究的意義 3\o"CurrentDocument"系統(tǒng)需求分析 4系統(tǒng)的功能需求分析 4系統(tǒng)的可行性分析 4可行性要求、目標(biāo) 4技術(shù)可行性分析 5經(jīng)濟(jì)可行性分析 5\o"CurrentDocument"系統(tǒng)設(shè)計(jì) 6系統(tǒng)拓?fù)浣Y(jié)構(gòu)圖 6系統(tǒng)功能結(jié)構(gòu)圖 6網(wǎng)絡(luò)通信原理分析 7開(kāi)發(fā)環(huán)境 8數(shù)據(jù)庫(kù)設(shè)計(jì) 9\o"CurrentDocument"服務(wù)器端設(shè)計(jì) 10服務(wù)器端主窗體模塊 10服務(wù)器端主窗體概述 10窗口設(shè)計(jì) 10關(guān)鍵代碼分析 11服務(wù)器端賬戶管理模塊 15服務(wù)器端賬戶管理概述 15窗口設(shè)計(jì) 15關(guān)鍵代碼分析 16服務(wù)器端系統(tǒng)組織結(jié)構(gòu)管理模塊 19服務(wù)器端系統(tǒng)組織結(jié)構(gòu)概述 19窗口設(shè)計(jì) 19關(guān)鍵代碼 20\o"CurrentDocument"客戶端關(guān)鍵技術(shù) 21客戶端概述 21客戶端的關(guān)鍵技術(shù) 21\o"CurrentDocument"系統(tǒng)測(cè)試 24軟件測(cè)試基礎(chǔ)理論 24系統(tǒng)測(cè)試 24測(cè)試結(jié)果 26\o"CurrentDocument"結(jié)束語(yǔ) 27\o"CurrentDocument"致謝 28\o"CurrentDocument"參考文獻(xiàn) 29企業(yè)QQ通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)引言課題背景21世紀(jì)將是網(wǎng)絡(luò)化、信息化的世紀(jì),信息的融合已經(jīng)成為社會(huì)發(fā)展的主流方向。簡(jiǎn)易版企業(yè)QQ聊天系統(tǒng)將不斷與信息交流領(lǐng)域的系統(tǒng)相互集成和滲透,擴(kuò)展其自己的功能和應(yīng)用范圍,滿足未來(lái)話音,數(shù)據(jù)和視頻的多媒體應(yīng)用需要,使即時(shí)消息以更豐富的接入方法,更高的服務(wù)質(zhì)量,更友好的面貌呈現(xiàn)在世人的面前。從功能角度來(lái)看,簡(jiǎn)易版企業(yè)QQ聊天系統(tǒng)向支持全媒體方向發(fā)展,隨著多媒體技術(shù)在網(wǎng)絡(luò)應(yīng)用中的發(fā)展,簡(jiǎn)易版企業(yè)QQ聊天系統(tǒng)承載的媒體,不再局限于原來(lái)的文字、語(yǔ)音和文件的信息交換,信息載體擴(kuò)展到圖形、圖像和流媒體等多媒體業(yè)務(wù)上。目前ICQ和QQ預(yù)設(shè)了部分簡(jiǎn)單的表情圖像,通過(guò)傳輸圖像代碼來(lái)傳遞表情圖像,可以被視為即時(shí)消息開(kāi)發(fā)商開(kāi)發(fā)支持圖形、圖像為載體的即時(shí)消息軟件的開(kāi)端。從應(yīng)用范圍角度來(lái)看,簡(jiǎn)易版企業(yè)QQ聊天系統(tǒng)集中在Internet個(gè)人用戶之間的信息交流應(yīng)用,隨著網(wǎng)絡(luò)技術(shù)應(yīng)用的發(fā)展,簡(jiǎn)易版企業(yè)QQ聊天系統(tǒng)應(yīng)用范圍向園區(qū)化、集團(tuán)化拓展,應(yīng)用領(lǐng)域突破個(gè)人,而用于遠(yuǎn)程教學(xué)、遠(yuǎn)程醫(yī)療、遠(yuǎn)程演示、網(wǎng)絡(luò)會(huì)議等領(lǐng)域。國(guó)內(nèi)外主要聊天工具的發(fā)展?fàn)顩r中國(guó)的大部分網(wǎng)絡(luò)用戶都擁有自己的QQ號(hào)碼。騰訊計(jì)算機(jī)系統(tǒng)有限公司成立于1998年11月。1999年2月,騰訊自主開(kāi)發(fā)了基于Internet的即時(shí)通信網(wǎng)絡(luò)工具騰訊即時(shí)通信TencentInstantMessenger,簡(jiǎn)稱TIM或騰訊QQ。騰訊QQ經(jīng)過(guò)三年時(shí)間的發(fā)展,到2002年,其用戶群成為中國(guó)最大的互聯(lián)網(wǎng)注冊(cè)用戶群,注冊(cè)用戶達(dá)到1億6000萬(wàn),其中活躍用戶總數(shù)超過(guò)5000萬(wàn)。自此騰訊QQ成為中國(guó)最大的即時(shí)通信服務(wù)提供商。騰訊公司是中國(guó)最早也是目前中國(guó)市場(chǎng)上最大的本土互聯(lián)網(wǎng)即時(shí)通信軟件開(kāi)發(fā)商。公司成立10多年以來(lái),一直以追求卓越的技術(shù)為導(dǎo)向,始終處于穩(wěn)健、高速發(fā)展的狀態(tài)。騰訊QQ超過(guò)6億的注冊(cè)用戶群體現(xiàn)了網(wǎng)絡(luò)用戶對(duì)騰訊QQ這一聊天工具的廣泛應(yīng)用。在當(dāng)今市場(chǎng)經(jīng)濟(jì)高速發(fā)展的前提下,騰訊QQ也在不斷自我完善,漸漸地演變?yōu)橐粋€(gè)人性化、市場(chǎng)化的多功能的聊天工具軟件,它可以給網(wǎng)絡(luò)聊天用戶帶來(lái)越來(lái)越多的人性化服務(wù):從原來(lái)單一的文字聊天過(guò)渡到集語(yǔ)音、視頻、文件傳輸?shù)榷喙δ苡谝簧淼牧奶燔浖?。ICQ和MSN是在國(guó)外比較盛行的即時(shí)聊天工具,騰訊QQ的開(kāi)發(fā)對(duì)MSN和ICQ都進(jìn)行了借鑒。ICQ是ISeekYou(我找你)的縮寫(xiě),最初是一家以色列公司開(kāi)發(fā)出來(lái)的免費(fèi)軟件,中文名稱目前可以稱之為“網(wǎng)絡(luò)呼叫器”,它在全球擁有超過(guò)4000萬(wàn)的用戶。事實(shí)上這種軟件最主要的功能就是讓用戶知道網(wǎng)絡(luò)上的朋友現(xiàn)在有沒(méi)有上線(前提是對(duì)方也有安裝ICQ),然后可以互送Messages(消息)交談或是交換檔案等等,比電子郵件更具即時(shí)性。正如一位ICQ軟件的最初程序設(shè)計(jì)員所說(shuō):“當(dāng)你登錄因特網(wǎng)之后,你周圍都是些自己熟悉的人,而且,你還可以和他們分享這種體驗(yàn),這的確是一件令人激動(dòng)的事情?!盡SN是微軟推出的聊天軟件,是一套類似ICQ的網(wǎng)上即時(shí)通訊軟件,它以最簡(jiǎn)單的方式為用戶提供強(qiáng)有力的即時(shí)消息支持,同時(shí)能使MicrosoftOutlookExpress(R)ffMSNHotmail(R)變得更簡(jiǎn)單易用。MSNMessengerService還可使用戶間的聯(lián)機(jī)交談變得更加輕松愉快,了解誰(shuí)在聯(lián)機(jī)以及查看用戶何時(shí)聯(lián)機(jī)并與其交換即時(shí)消息。用戶間可以進(jìn)行單獨(dú)的聊天,或者在同一個(gè)對(duì)話窗口中與多達(dá)四個(gè)的聯(lián)系人進(jìn)行聊天。自動(dòng)的輸入指示器可讓用戶知道何時(shí)聯(lián)系人正在輸入答復(fù),還可以進(jìn)行全球電話呼叫——以非常低的費(fèi)用呼叫世界的任何地方。用戶可以選擇所要使用的電話服務(wù)提供商,從服務(wù)提供商的列表中選擇最適合的提供商。用交談取代鍵盤(pán)輸入,使用計(jì)算機(jī)上的話筒和揚(yáng)聲器就可以和位于世界各地的朋友進(jìn)行交談,甚至可以呼叫聯(lián)系人將文本消息發(fā)送到聯(lián)系人的移動(dòng)電話和傳呼機(jī)上(注:此特性僅適用于美國(guó)和加拿大),而進(jìn)入“聊天室”結(jié)識(shí)新朋友,或加入與名人聊天,此特性在所有地區(qū)都適用。用戶可以使用MSNMessenger與朋友交換照片、喜愛(ài)的音樂(lè)或任何其他文件,也可以監(jiān)視新的電子郵件并查看用戶有多少新的電子郵件。MSNMessenger能在收到新的Hotmail郵件時(shí)通知用戶,還能邀請(qǐng)聯(lián)系人進(jìn)行聯(lián)機(jī)DirectPlay兼容游戲。本課題研究的意義此次開(kāi)發(fā)的企業(yè)QQ通信系統(tǒng)可作為個(gè)人的交流工具使用,通信的安全性不是很高,但要求信息的響應(yīng)速度要較快,讓用戶充分享受到網(wǎng)絡(luò)即時(shí)消息的方便和快捷。本聊天工具由服務(wù)器端程序和客戶端程序兩部分組成,整體采用VisualC++6.0平臺(tái)開(kāi)發(fā),并使用Access2003管理數(shù)據(jù)庫(kù)數(shù)據(jù)。服務(wù)器是可以監(jiān)聽(tīng)和查看用戶的基本操作;客戶端程序面向?qū)嶋H用戶,它有必要的界面的按鈕,向用戶提供網(wǎng)絡(luò)即時(shí)消息的功能。系統(tǒng)需求分析系統(tǒng)的功能需求分析本系統(tǒng)的設(shè)計(jì)目標(biāo)是實(shí)現(xiàn)一個(gè)企業(yè)內(nèi)部局域網(wǎng)通信系統(tǒng),企業(yè)內(nèi)部職工可以方便的進(jìn)行交流,可以大大的提高職工的工作效率。根據(jù)企業(yè)對(duì)局域網(wǎng)通信的需求,本系統(tǒng)主要包括信息通信、系統(tǒng)設(shè)置、搜索用戶、訪問(wèn)公共資源、訪問(wèn)對(duì)方主機(jī)五大功能。各功能概述:信息通信:信息通信是企業(yè)內(nèi)部通信系統(tǒng)的核心功能,它用于不同職工之間的通信,這種通信方式能夠?qū)崿F(xiàn)多個(gè)職工之間的通信,而不存在類似電話占線的問(wèn)題,增加了任務(wù)分配的新方式,從而提高企業(yè)的工作效率。系統(tǒng)設(shè)置:系統(tǒng)設(shè)置用于設(shè)置用戶界面、公共路徑、公告欄等的功能。用戶搜索:用戶搜索用于搜索企業(yè)局域網(wǎng)內(nèi)的其他用戶,系統(tǒng)會(huì)根據(jù)用戶所設(shè)置的IP搜索范圍搜索所有計(jì)算機(jī)上的用戶。訪問(wèn)公共資源:本功能用于實(shí)現(xiàn)企業(yè)內(nèi)部公共服務(wù)器上資源訪問(wèn)的功能。訪問(wèn)對(duì)方主機(jī):本功能用于兩人聊天情況下對(duì)對(duì)方主機(jī)的訪問(wèn)和控制的功能。第一次使用系統(tǒng)的用戶通過(guò)填寫(xiě)個(gè)人信息來(lái)注冊(cè),服務(wù)器返回一個(gè)注冊(cè)ID號(hào)給注冊(cè)用戶,用來(lái)登錄。已經(jīng)注冊(cè)的用戶在登錄界面填寫(xiě)完相關(guān)登錄信息,通過(guò)服務(wù)器的驗(yàn)證后就可以進(jìn)入客戶端界面。在線用戶在添加好友時(shí)可以查看所要添加用戶的列表信息。當(dāng)對(duì)要添加的好友發(fā)送請(qǐng)求添加的信息后,由該好友驗(yàn)證是否通過(guò)請(qǐng)求,同意后會(huì)向請(qǐng)求方發(fā)送同意添加的消息。當(dāng)請(qǐng)求方添加完成后,服務(wù)器端會(huì)把相關(guān)信息存入到好友表的數(shù)據(jù)庫(kù)中。完成以上操作以后,兩人即可進(jìn)行在線聊天。系統(tǒng)的可行性分析可行性要求、目標(biāo)企業(yè)內(nèi)部通信系統(tǒng)必須提供網(wǎng)絡(luò)通信功能,在通信過(guò)程中禁止使用聊天表情、文件傳送等功能,避免資料外泄,或因發(fā)送錯(cuò)誤而導(dǎo)致上機(jī)資料的丟失以及其他損失。最重要的是必須適應(yīng)任何操作系統(tǒng),也就是實(shí)現(xiàn)跨平臺(tái)技術(shù),因?yàn)槠髽I(yè)內(nèi)部的工作需要,工作環(huán)境中使用了多個(gè)操作系統(tǒng)來(lái)完成不同的工作。另外,系統(tǒng)不需要使用服務(wù)器中轉(zhuǎn)和記錄通信內(nèi)容,可以獨(dú)立完成通信任務(wù),排除職工對(duì)領(lǐng)導(dǎo)監(jiān)視工作進(jìn)度等行為的逆反心理。企業(yè)內(nèi)部通信系統(tǒng)的目標(biāo)是實(shí)現(xiàn)企業(yè)的信息化通信,提高企業(yè)通信能力,提高任務(wù)理解和執(zhí)行能力,減少?zèng)]有必要的人員流動(dòng)和資金損耗,以最快的速度提升企業(yè)的市場(chǎng)競(jìng)爭(zhēng)力。技術(shù)可行性分析局域網(wǎng)通信系統(tǒng)的技術(shù)已經(jīng)非常成熟,首先,從硬件上講,計(jì)算機(jī)硬件速度現(xiàn)在已經(jīng)不是問(wèn)題,高速便捷的網(wǎng)絡(luò)已經(jīng)十分普遍,這些為本系統(tǒng)的運(yùn)行打下堅(jiān)實(shí)的基礎(chǔ)。從軟件的角度上講,數(shù)據(jù)庫(kù)技術(shù)已經(jīng)相當(dāng)成熟(目前用得比較多的有SQLServer,VisualC++6.0等),并且處理能力也非常強(qiáng),這為海量數(shù)據(jù)的存儲(chǔ)和處理打下了堅(jiān)實(shí)的基礎(chǔ),同時(shí),使用VisualC++6.0開(kāi)發(fā)程序也相當(dāng)普遍。有了這些技術(shù)的支持,我們成功開(kāi)發(fā)一個(gè)局域網(wǎng)通信系統(tǒng)沒(méi)有任何技術(shù)風(fēng)險(xiǎn)。經(jīng)濟(jì)可行性分析經(jīng)濟(jì)可行性主要是對(duì)項(xiàng)目的經(jīng)濟(jì)效益進(jìn)行評(píng)價(jià)。本系統(tǒng)開(kāi)發(fā)完成后可縮減工作時(shí)間,提高工作效率,而且簡(jiǎn)單易操作,不需對(duì)使用人員進(jìn)行培訓(xùn),不管是在資金上還是效率上都能達(dá)到預(yù)期的效果。本系統(tǒng)開(kāi)發(fā)經(jīng)費(fèi)對(duì)于企業(yè)在經(jīng)濟(jì)上是可以接受的,并且本系統(tǒng)實(shí)施后可以顯著提高工作效率,有助于企業(yè)的信息化管理,所以該企業(yè)內(nèi)部通信系統(tǒng)在經(jīng)濟(jì)上是可行的。系統(tǒng)設(shè)計(jì)系統(tǒng)拓?fù)浣Y(jié)構(gòu)圖企業(yè)QQ通信系統(tǒng)分為客戶端和服務(wù)器端,并且多個(gè)客戶端可以連接同一個(gè)服務(wù)器端,通信系統(tǒng)的拓?fù)浣Y(jié)構(gòu)如圖3.1所示。圖3.1企業(yè)QQ通信系統(tǒng)拓?fù)浣Y(jié)構(gòu)圖系統(tǒng)功能結(jié)構(gòu)圖企業(yè)QQ通信系統(tǒng)分為客戶端和服務(wù)器端兩個(gè)項(xiàng)目。其中服務(wù)器端不但提供接收客戶端的鏈接,還能夠?qū)~戶進(jìn)行管理。服務(wù)器端的主要模塊如圖3.2所示??蛻舳酥灰獙?shí)現(xiàn)相互之間的消息和文件傳遞,客戶端的主要模塊如圖3.3所示。服務(wù)器端帳戶管理組織管理主界面帳戶管理組織管理主界面圖3.2服務(wù)器端客戶端系統(tǒng)設(shè)置添加聯(lián)系人主界面登錄界面系統(tǒng)設(shè)置添加聯(lián)系人主界面登錄界面圖3.3客戶端網(wǎng)絡(luò)通信原理分析企業(yè)QQ通信系統(tǒng)使用TCP和UDP兩種連接方式進(jìn)行連接??蛻舳耸褂肨CP連接服務(wù)器,服務(wù)器端是使用UDP進(jìn)行通信,系統(tǒng)連接模式如圖3.4所示。圖3.4連接模式服務(wù)器端和客戶端使用Socket建立通信連接的過(guò)程如下:(1)服務(wù)器端建立m_SvrSock和m_OrgSock兩個(gè)套接字句柄。m_OrgSock和OnOrgMsg函數(shù)建立異步通信,端口1201,接收客戶端發(fā)送的連接請(qǐng)求(FD_ACCEPT)。在OnOrgMsg函數(shù)內(nèi)將org.xml文件發(fā)送到客戶端。m_SvrSock和OnNetEvent函數(shù)建立異步通信,端口1200,接收客戶端發(fā)送的連接請(qǐng)求,接收到客戶端的心跳測(cè)試和登錄請(qǐng)求(登錄后將端口1201的信息發(fā)送過(guò)去,并判斷是否已經(jīng)登錄),定時(shí)向客戶端發(fā)送心跳包,每隔10s發(fā)送一次,如果5次沒(méi)有心跳回復(fù),則認(rèn)為掉線。(2)客戶端建立m_ClientSock和m_UdpSock兩個(gè)套接句柄,m_ClientSock連接方式為T(mén)CP,m_UdpSock連接方式為UDP,端口都是隨機(jī)獲取的。m_ClientSock和OnNetEvent函數(shù)建立異步通信。m_UdpSock和OnOrgMsg函數(shù)建立異步通信。客戶端首先使用m_ClientSock建立連接,連接服務(wù)器的IP地址和端口。首先發(fā)送PT_LOGINREQUEST和本機(jī)UDP端口(m_nUdpPort)到服務(wù)器,如果用戶名和密碼正確,則得到PT_LOGINACCEPT和1201端口,此時(shí)服務(wù)器會(huì)向每個(gè)客戶端發(fā)送剛登錄客戶端的IP地址和UDP端口(PT_USERINF)O。客戶端接收到PT_LOGINACCEPT后,創(chuàng)建m_OrgSock套接字,本地端口隨機(jī),連接到服務(wù)器端的1201端口,準(zhǔn)備獲取org.xml文件??蛻舳税l(fā)送消息首先會(huì)創(chuàng)建taskSock套接字(客戶端為A),因?yàn)橛脩粼陔p擊要發(fā)送消息的用戶時(shí)(OnDblclkOrgtree),會(huì)獲得它的UDP端口和IP地址,然后發(fā)送PT_REQUESTUDPPORT到客戶端B,B新生成的UDP連接端口號(hào)后,返回PT_RETURNUDPPORT消息給A。每次創(chuàng)建taskSock套接字都會(huì)啟動(dòng)一個(gè)接收數(shù)據(jù)的線程(SendTaskProc),此時(shí)客戶端A和B都啟動(dòng)了接收數(shù)據(jù)的線程。A接收到PT_RETURNUDPPORT后,返回PT_STREAM及相應(yīng)的數(shù)據(jù)。發(fā)送文件和發(fā)送消息流程相同,創(chuàng)建taskSock套接字后啟動(dòng)的是SendFile進(jìn)程,A接收到PT_RETURNUDPPORT后,返回PT_FILE。開(kāi)發(fā)環(huán)境企業(yè)QQ通信系統(tǒng)的開(kāi)發(fā)環(huán)境如下:系統(tǒng)開(kāi)發(fā)平臺(tái):VisualC++6.0。系統(tǒng)開(kāi)發(fā)語(yǔ)言:C++。數(shù)據(jù)庫(kù)管理系統(tǒng)軟件:Access2003。運(yùn)行平臺(tái):WindowsXP(SP2)/Windows2000(SP4)/WindowsServer2003(SP1)。分辨率:最佳效果1024X768像素。數(shù)據(jù)庫(kù)設(shè)計(jì)服務(wù)器端使用Access2003作為后臺(tái)數(shù)據(jù)庫(kù),用來(lái)儲(chǔ)存組織結(jié)構(gòu)及賬戶信息,數(shù)據(jù)庫(kù)命名為SvrInfo,其中包含2張數(shù)據(jù)表。tb_Account表:tb_Account表儲(chǔ)存的是賬戶信息。賬戶信息如表3.1所示。表3.1賬戶信息表字段名數(shù)據(jù)類型長(zhǎng)度描述字段名數(shù)據(jù)類型長(zhǎng)度描述AccountID數(shù)字4賬戶HeaderShip文本20職務(wù)Username文本12姓名OfficePhone文本22辦公電話Password文本18密碼Handset文本22手機(jī)Sex文本2性別E-mail文本32電子郵件Age數(shù)字4年齡Address文本50聯(lián)系地址OrgID數(shù)字4部門(mén)Picture文本20圖片,以賬戶命名OrgName文本50部門(mén)名稱tb_OrgInfo表:tb_OrgInfo表用于儲(chǔ)存組織信息。組織信息如表3.2所示。表3.2組織信息表字段名數(shù)據(jù)類型長(zhǎng)度描述OrgID數(shù)字4組織編號(hào)OrgName文本20組織姓名ParentID數(shù)字4上一級(jí)編號(hào)4服務(wù)器端設(shè)計(jì)服務(wù)器端主窗體模塊服務(wù)器端主窗體概述服務(wù)器端可以對(duì)組織結(jié)構(gòu)及賬戶進(jìn)行管理,并且提供通信服務(wù),負(fù)責(zé)將組織結(jié)構(gòu)信息和賬戶信息發(fā)送給各個(gè)客戶端、提供通信服務(wù),負(fù)責(zé)將組織結(jié)構(gòu)信息和賬戶信息發(fā)送給各個(gè)客戶端、驗(yàn)證賬戶的登錄權(quán)限、檢查客戶端是否保持在線。客戶端主窗體模塊主要負(fù)責(zé)通信服務(wù),并且可以調(diào)用組織信息管理模塊和賬戶信息管理模塊。服務(wù)器端主界面效果如圖4.1所示。圖4.1服務(wù)器端主界面窗口設(shè)計(jì)創(chuàng)建一個(gè)對(duì)話框,向?qū)υ捒蛑刑砑觾蓚€(gè)按鈕控件。設(shè)置控件屬性如表4.1所示。表4.1控件屬性控件類型資源值對(duì)應(yīng)類成員名稱屬性設(shè)置ButtonIDC_ORGMANAGEOnOrgmanage組織信息管理默認(rèn)ButtonIDC_ACCOUNTMANAGEOnAccountManage賬戶信息管理默認(rèn)關(guān)鍵代碼分析在對(duì)話框初始化函數(shù)中,對(duì)數(shù)據(jù)庫(kù)進(jìn)行初始化,創(chuàng)建套接字并綁定本機(jī)IP地址和一個(gè)端口,然后開(kāi)始監(jiān)聽(tīng),并將網(wǎng)絡(luò)設(shè)置為異步通信。為什么要使用異步通信?異步通信有什么好處?可以通過(guò)OnInitDialog()函數(shù)的應(yīng)用來(lái)了解。部分代碼如下:BOOLCQQServerDlg::OnInitDialog(){CDialog::OnInitDialog();//Add"About..."menuitemtosystemmenu.//IDM_ABOUTBOXmustbeinthesystemcommandrange.ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX<0xF000);CMenu*pSysMenu=GetSystemMenu(FALSE);if(pSysMenu!=NULL){//監(jiān)聽(tīng)套接字listen(m_SvrSock,5);listen(m_OrgSock,5);WSAAsyncSelect(m_SvrSock,m_hWnd,WM_NETMSG,FD_READ|FD_WRITE|FD_CLOSE|FD_ACCEPT);WSAAsyncSelect(m_OrgSock,m_hWnd,WM_ORGMSG,FD_READ|FD_WRITE|FD_CLOSE|FD_ACCEPT);〃設(shè)置異步IO模式unsignedlongulValue=0;ioctlsocket(m_OrgSock,FIONBIO,&ulValue);SetTimer(1,10000,NULL); 〃開(kāi)始一個(gè)計(jì)時(shí)器,每隔10s向客戶端發(fā)送心跳包SetTimer(2,10000,NULL); //判斷客戶端是否掉線returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}OnNetEvent()函數(shù)對(duì)應(yīng)一個(gè)消息,當(dāng)應(yīng)用程序接收到消息后調(diào)用該函數(shù)執(zhí)行。使用WSAAsyncSelect函數(shù)可以設(shè)置事件類型。例如,F(xiàn)D_ACCEPT類型是當(dāng)客戶端發(fā)送連接請(qǐng)求時(shí)服務(wù)器端如何進(jìn)行應(yīng)答的類型,F(xiàn)D_READ是讀取客戶端發(fā)送過(guò)來(lái)的數(shù)據(jù)事件,F(xiàn)D_CLOSE關(guān)閉連接事件。LRESULTCQQServerDlg::OnNetEvent(WPARAMwParam,LPARAMlParam){WORDnEvent=WSAGETSELECTEVENT(lParam);//獲取網(wǎng)絡(luò)事件WORDnError=WSAGETSELECTERROR(lParam);//獲取錯(cuò)誤代碼switch(nEvent){caseFD_ACCEPT: //有客戶端發(fā)出連接請(qǐng)求,接受連接{sockaddr_inAddr;Addr.sin_family=AF_INET;intnAddrSize=sizeof(sockaddr_in);//接受客戶端連接CClient*client=newCClient();client->m_Sock=accept(m_SvrSock,(sockaddr*)&Addr,&nAddrSize);if(client->m_Sock==INVALID_SOCKET)//接受連接失敗{catch(...)//修改密碼失敗{CPackagePackage;Package.m_Type=PT_PT_UPDATEPASSFAILD;send(wParam,(char*)&Package,sizeof(CPackage),0);}}delete[]pBuffer;break;}returnS_OK;}服務(wù)器端創(chuàng)建兩個(gè)端口,并使用TCP進(jìn)行數(shù)據(jù)傳輸,TCP是傳輸控制協(xié)議,是一種提供可靠數(shù)據(jù)傳輸?shù)耐ㄐ艆f(xié)議。它在網(wǎng)際協(xié)議模塊和TCP模塊之間的傳輸,該協(xié)議允許兩個(gè)應(yīng)用程序建立一個(gè)連接,并在全雙工方向上發(fā)送數(shù)據(jù),然后終止連接,每一個(gè)TCP連接可靠地建立并完善地終止,在終止發(fā)生前,所有數(shù)據(jù)都會(huì)被可靠地傳輸。TCP通過(guò)3次握手建立可靠的連接,所謂3次握手指通信雙方彼此交換3次信息。3次握手是在存在數(shù)據(jù)報(bào)丟失、重復(fù)和延遲的情況下,確保通信雙方信息交換確定性的充分必要條件。使用TCP協(xié)議建立通信的步驟如圖4.2所示。服務(wù)器端 客戶端圖4.2TCP通信連接過(guò)程在應(yīng)用程序是指定時(shí)器用來(lái)做什么,從OnTimer的實(shí)現(xiàn)代碼中可以看出。判斷用戶是否在線需要使用定時(shí)器,每隔一段時(shí)間就向客戶端發(fā)送一個(gè)消息,如果客戶端能夠回復(fù)消息,說(shuō)明客戶端在線,否則認(rèn)為客戶端已經(jīng)掉線。將服務(wù)器端發(fā)送給客戶端的這條信息稱為心跳包,消息類型PT_TEST就代表該包是心跳包。服務(wù)器端保存有在線客戶的列表,如果客戶端掉線了,就在列表中將客戶端刪除。voidCQQServerDlg::OnTimer(UINTnIDEvent){switch(nIDEvent){case1: //向客戶端發(fā)送心跳包{POSITIONpos=m_ClientSockList.GetHeadPosition();m_ClientSockList.GetNext(pos);}break;}}CDialog::OnTimer(nIDEvent);驗(yàn)證用戶名和密碼,通過(guò)SQL語(yǔ)句檢查數(shù)據(jù)庫(kù)中是否有相應(yīng)的用戶名和密碼。BOOLCQQServerDlg::VerifyUser(intnID,char*szPassword){CStringszSQL;szSQL.Format("selectAccountIDfromtb_AccountwhereAccountID=%dandPassword='%s'",nID,szPassword);_RecordsetPtrpRecord=m_DataManage.m_pConnect->Execute((_bstr_t)szSQL,0,adCmdText);if(!pRecord->ADOEOF)//判斷用戶是否存在{returnTRUE;}returnFALSE;}OnOrgMsg函數(shù)同OnNetEvent函數(shù)一樣,都是消息的處理函數(shù),同樣可以處理FD_ACCEPT事件。在OnOrgMsg函數(shù)中當(dāng)有客戶端發(fā)送請(qǐng)求時(shí),服務(wù)器端會(huì)將org.xml文件發(fā)送到客戶端,org.xml文件中存放的是組織結(jié)構(gòu)信息,也就是含有在線用戶列表,每個(gè)客戶端都會(huì)在登錄時(shí)獲得該列表。如果組織結(jié)構(gòu)和用戶比較多時(shí),文件會(huì)比較大,所以如果文件超出一定范圍后,就將文件分成多份進(jìn)行發(fā)送。LRESULTCQQServerDlg::OnOrgMsg(WPARAMwParam,LPARAMlParam){WORDnEvent=WSAGETSELECTEVENT(lParam);//獲取網(wǎng)絡(luò)事件WORDnError=WSAGETSELECTERROR(lParam);//獲取錯(cuò)誤代碼DWORDdwRead=file.ReadHuge(pTmp,dwMsg-sizeof(CPackage));intnlen=send(sock,pData,dwMsg,0);closesocket(sock);// delete[]pBuffer;}break;} }returnS_OK;}UserIsLogined()函數(shù)主要用來(lái)判斷客戶端是否已經(jīng)在線了,和FindClient函數(shù)類似,同樣需要遍歷整個(gè)列表,同樣如果列表中有相同的IP和ID,說(shuō)明客戶端存在,否則客戶端不存在。BOOLCQQServerDlg::UserIsLogined(intnID,SOCKETsock){//獲取套接字IPsockaddr_inAddr;Addr.sin_family=AF_INET;intnAddrlen=sizeof(sockaddr_in);intnRet=getsockname(sock,(sockaddr*)&Addr,&nAddrlen);if(nRet==0)&&strcmp(pClient->m_szClientIP,szIP)!=0){returnTRUE;}}m_ClientSockList.GetNext(pos);} }returnFALSE;}服務(wù)器端賬戶管理模塊服務(wù)器端賬戶管理概述賬戶管理模塊主要完成向已建好的部門(mén)中添加部門(mén)成員,“賬戶管理”模塊如圖4.3所示?!附M縱結(jié)構(gòu){me來(lái)周本勤先哲秋杰+小鄭向胡壬張嚴(yán)任添加刪除I「組縱結(jié)構(gòu){me來(lái)周本勤先哲秋杰+小鄭向胡壬張嚴(yán)任添加刪除I圖4.3“賬戶管理”模塊窗口設(shè)計(jì)創(chuàng)建一個(gè)對(duì)話框,向?qū)υ捒蛑刑砑訕?shù)控件、按鈕、編輯框、組合框等控件。設(shè)置窗體中的各種控件屬性,如表4.2所示表4.2控件屬性控件類型資源值對(duì)應(yīng)類成員名稱或含義屬性設(shè)置ButtonIDC_BTADDOnBtadd添加默認(rèn)ButtonIDC_BT_DELETEOnBtDelete刪除默認(rèn)TreeControlIDC_ORGLISTm_Orglist組織結(jié)構(gòu)HasbuttonHaslineComboBoxIDC_SEXm_Sex性別DroplistData
EditBoxIDC_ACCOUNTIDm_AccoutID賬戶IDnumberEditBoxIDC_ACNAMEm_AccountName姓名默認(rèn)EditBoxIDC_ACPASSWORDm_Password密碼passwordEditBoxIDC_DEPARTm_OrgName部門(mén)ReadOnlyEditBoxIDC_DEPAPTIDm_OrgID部門(mén)IDReadOnlyNumberEditBoxIDC_HANDERSHIPm_HanderShip職務(wù)默認(rèn)EditBoxIDC_USERIDm_UserID用戶IDReadOnlyEditBoxIDC_CURUSERm_User賬戶姓名ReadOnly4.2.3關(guān)鍵代碼分析LoadOrgInfo()函數(shù)從數(shù)據(jù)庫(kù)中讀取信息,將數(shù)據(jù)添加到屬性結(jié)構(gòu)中,并生成xml文件,將數(shù)據(jù)庫(kù)中的內(nèi)容生成XML文件。voidCAccountManage::LoadOrgInfo(){if(m_InitSucess)//已連接數(shù)據(jù)庫(kù){m_OrgList.DeleteAllItems();//刪除所有節(jié)點(diǎn)CStringsql="select*fromtb_OrgInfowhereParentID=0";CStringszOrgName;HTREEITEMhRoot,hParent;m_DataManage.m_pRecord=m_DataManage.m_pConnect->Execute("select*fromtb_OrgInfowhereParentID=0",0,adCmdText);hRoot=m_OrgList.InsertItem("部門(mén)組織,0,0);//添加根節(jié)點(diǎn)m_pXMLDoc->save((unsignedshort*)(_bstr_t)szFileName);m_OrgList.Expand(hRoot,TVE_EXPAND);m_pXMLDoc.Release();}}在程序讀寫(xiě)XML文件需要借助微軟提供的接口,如果使用Windows2000操作系統(tǒng),還需要到微軟的官方網(wǎng)站下載關(guān)于XML解析的動(dòng)態(tài)鏈接庫(kù)。使用微軟提供的XML接口步驟。打開(kāi)數(shù)據(jù)可讀取數(shù)據(jù),將讀取的子節(jié)點(diǎn)數(shù)據(jù)顯示到樹(shù)形結(jié)構(gòu)中,并將數(shù)據(jù)寫(xiě)入XML文件,代碼如下:voidCAccountManage::LoadAccountInfo(){CStringszSQL,szName,szOrgName,szSex;intnOrgID,nAccountID;szSQL.Format("select*fromtb_Account");_RecordsetPtrpRecord=m_DataManage.m_pConnect->Execute((_bstr_t)szSQL,0,adCmdText);if(hInsert!=NULL){DWORDdwData=MAKELRESULT(0,nAccountID);m_OrgList.SetItemData(hInsert,dwData);}m_pXMLDoc->save((unsignedshort*)(_bstr_t)szFileName);pRecord->MoveNext();}m_pXMLDoc.Release();}FindNode()是遞歸調(diào)用函數(shù),從數(shù)據(jù)庫(kù)讀取子節(jié)點(diǎn)數(shù)據(jù)并保存到XML文件中。while(!pRecord->ADOEOF){OrgName=(TCHAR*)(_bstr_t)pRecord->GetFields()->GetItem("OrgName")->Value;intnID=pRecord->GetFields()->GetItem("OrgID")->Value.iVal;hTemp=m_OrgList.InsertItem(OrgName,0,0,hParent);FindNode(hTemp,nID,pTmp);pRecord->MoveNext();}}查找樹(shù)形結(jié)構(gòu)中節(jié)點(diǎn)是否存在,并遞歸調(diào)用返回子節(jié)點(diǎn),代碼如下:HTREEITEMCAccountManage::GetOrgItem(intnOrgID,HTREEITEMhCurrent){HTREEITEMhRet=NULL;if(hCurrent!=NULL){DWORDdwData=m_OrgList.GetItemData(hCurrent);intnID=LOWORD(dwData);if(nID!=0&&nID==nOrgID)while(hFind!=NULL){hFind=m_OrgList.GetNextItem(hFind,TVGN_NEXT);hRet=GetOrgItem(nOrgID,hFind);if(hRet!=NULL)returnhRet;}returnhRet;}進(jìn)行添加操作,首先獲取用戶的輸入信息,對(duì)輸入信息進(jìn)行判斷,然后將合法的用戶的賬戶數(shù)據(jù)保存到數(shù)據(jù)庫(kù),代碼如下:if(szAcID.IsEmpty()||szAcName.IsEmpty()||szSex.IsEmpty()||szOrgName.IsEmpty()||szOrgID.IsEmpty()||szPassword.IsEmpty()||szHanderShip.IsEmpty()){MessageBox(“帳戶信息不能為空!”,”提示)return;}if(atoi(szAcID)>300000){catch(_com_error&e){MessageBox("操作失敗!","提示");}}服務(wù)器端系統(tǒng)組織結(jié)構(gòu)管理模塊服務(wù)器端系統(tǒng)組織結(jié)構(gòu)概述系統(tǒng)組織結(jié)構(gòu)管理模塊主要完成組織結(jié)構(gòu)的建立,程序運(yùn)行結(jié)果如圖4.4所示。圖4.4 ”系統(tǒng)組織結(jié)構(gòu)管理”模塊窗口設(shè)計(jì)創(chuàng)建一個(gè)對(duì)話框,向?qū)υ捒蛑刑砑訕?shù)控件、文本框控件、靜態(tài)文本控件和按鈕控件,設(shè)置窗口中的各種控件屬性如表4.3所示。表4.3控件屬性控件類型資源值對(duì)應(yīng)類成員名稱默認(rèn)屬性ButtonIDC_BT_ADDOnBtAdd添加默認(rèn)ButtonIDC_BT_DELOnBtDel刪除默認(rèn)TreeControlIDC_ORGLISTm_OrgList組織結(jié)構(gòu)HasbuttonHaslineEdieBoxIDC_CURRENTNODEm_CurNode當(dāng)前節(jié)點(diǎn)ReadOnlyEdieBoxIDC_ORGNAMEm_OrgName組織名稱默認(rèn)關(guān)鍵代碼LoadOrgInfo()從數(shù)據(jù)庫(kù)的tb_OrgInfo表中讀取組織結(jié)構(gòu)信息,將組織機(jī)構(gòu)信息添加到樹(shù)形結(jié)構(gòu)中,通過(guò)FindNode函數(shù)查詢出子節(jié)點(diǎn)數(shù)據(jù),代碼如下:if(m_InitSucess)//數(shù)據(jù)庫(kù)已連接{m_OrgList.DeleteAllItems();//刪除所有節(jié)點(diǎn)CStringsql="select*fromtb_OrgInfowhereParentID=0";CStringOrgName;FindNode(hParent,nID);m_DataManage.m_pRecord->MoveNext();}m_OrgList.Expand(hRoot,TVE_EXPAND);}}FindNode()函數(shù)查詢指定的ID節(jié)點(diǎn)的子節(jié)點(diǎn)數(shù)據(jù),函數(shù)使用遞歸算法獲取指定節(jié)點(diǎn)的所有子節(jié)點(diǎn),代碼如下:voidCOrgManage::FindNode(HTREEITEMhParent,intParentID){_ConnectionPtrpCon; //定義連接對(duì)象_RecordsetPtrpRecord; //定義記錄集對(duì)象dwData=MAKELPARAM(nID,ParentID);m_OrgList.SetItemData(hTemp,dwData);FindNode(hTemp,nID);pRecord->MoveNext();}}客戶端關(guān)鍵技術(shù)客戶端概述用戶使用客戶端登錄服務(wù)器,然后可以和其他登錄的用戶進(jìn)行通信??蛻舳酥鞔绑w模塊是用戶有登陸權(quán)限登錄服務(wù)器后的界面,在主窗體界面中,主要有一個(gè)樹(shù)形列表,樹(shù)形列表中顯示了所有的組織結(jié)構(gòu)及結(jié)構(gòu)下的成員。并且在主窗體上可以調(diào)用系統(tǒng)設(shè)置和修改密碼等其他模塊??蛻舳酥鹘缑嫒鐖D6.1所示??蛻舳说年P(guān)鍵技術(shù)ThreadProc是向服務(wù)器端發(fā)送連接請(qǐng)求的線程,CS_CONNECTING,然后設(shè)置超時(shí)時(shí)間,如果超時(shí)需要重新連接,連接時(shí)將用戶名和密碼都會(huì)發(fā)送到服務(wù)器端。發(fā)送請(qǐng)求時(shí)消息包的類型設(shè)置為PT_LOGINREQUEST,服務(wù)器端會(huì)根據(jù)這個(gè)類型進(jìn)行相應(yīng)的處理。在LoginSrv()函數(shù)中調(diào)用InitSocket初始化網(wǎng)絡(luò)套接字,然后啟動(dòng)ThreadProc線程向服務(wù)器發(fā)送登錄請(qǐng)求。OnTimer是定時(shí)器,其可以判斷CS_CONNECT、CS_UNCONNECT、CS_CONNECTING這3種狀態(tài);通過(guò)計(jì)數(shù)標(biāo)量m_mCount判斷是否連接中斷,根據(jù)連接狀態(tài)改變系統(tǒng)托盤(pán)圖標(biāo)的樣式。初始化m_ClientSock和m_UdpSock套接字,將IP地址都綁定為本機(jī)IP地址,然后隨機(jī)選用端口,隨機(jī)選用端口使用goto語(yǔ)句形成了一個(gè)循環(huán),直到能正確獲得端口后循環(huán)停止,并且將套接字都設(shè)置為異步通信。在OnNetEvent中主要處理分包,以及對(duì)消息類型為PT_TEST、PT_USERINFO、PT_DISCOUNT、PT_LOGINACCEPT、PT_LOGINDENY、PT_LINEACCEPT、PT_UPDATEPASSSUCCESS、PT_PT_UPDATEPASSFAILD數(shù)據(jù)包進(jìn)行處理,主要消息類型如圖5.1所示。如果接收到PT_TEST的數(shù)據(jù)包,需要向服務(wù)器回復(fù)心跳測(cè)試。如果是PT_USERINFO的消息包,需要播放聲音提示并在主窗體的樹(shù)形列表改變新登錄用戶的圖標(biāo)。PT_TES「N跳測(cè)試PT_USERINFO新用戶登錄PT_DISCOUNT客戶端斷開(kāi)連接分析消息的類型PT_DISCOUNT客戶端斷開(kāi)連接分析消息的類型PT_DISCOUNT客戶端斷開(kāi)連接PT_LOGINDENY用戶名或密碼不正確PT_LOGINED用戶在其他地點(diǎn)登錄PT_LOGINACCEPT用戶名和密碼驗(yàn)證通過(guò)PT_LINEACCEPT服務(wù)器發(fā)送在線用戶信息圖5.1消息類型在OnOrgMsg中主要接收組織結(jié)構(gòu)信息,如果組織機(jī)構(gòu)信息比較大,一次只能接收固定大小的內(nèi)容,所以設(shè)計(jì)了分包處理機(jī)制,當(dāng)數(shù)據(jù)接收完整后,通過(guò)HandleOrgData函數(shù)進(jìn)行處理。OnOrgMsg處理分包的流程如圖5.2所示。
繼續(xù)接收數(shù)據(jù)合成數(shù)據(jù)結(jié)構(gòu)繼續(xù)接收數(shù)據(jù)是繼續(xù)接收數(shù)據(jù)合成數(shù)據(jù)包是處理接收到
的數(shù)據(jù)圖5.2處理分包流程繼續(xù)接收數(shù)據(jù)合成數(shù)據(jù)結(jié)構(gòu)繼續(xù)接收數(shù)據(jù)是繼續(xù)接收數(shù)據(jù)合成數(shù)據(jù)包是處理接收到
的數(shù)據(jù)如果是第一次處理讀取的數(shù)據(jù),可以分為包結(jié)構(gòu)是否完整兩種情況。將實(shí)現(xiàn)對(duì)讀取的數(shù)據(jù)進(jìn)行分析和處理。讀取部分?jǐn)?shù)據(jù)包結(jié)構(gòu)后,需要繼續(xù)判斷數(shù)據(jù)包結(jié)構(gòu)是否完整。其中OnOrgMsg()函數(shù)中關(guān)于數(shù)據(jù)包結(jié)構(gòu)是否完整的處理過(guò)程。獲取完整的數(shù)據(jù)結(jié)構(gòu)后,就需要判斷數(shù)據(jù)包是否已經(jīng)接收完畢,OnOrgMsg()函數(shù)中關(guān)于數(shù)據(jù)包是否完整的處理過(guò)程。RecTaskProc是接收消息并處理的線程。處理流程如圖5.3所示。是否有處理分包數(shù)據(jù)有分包等待數(shù)據(jù)判斷數(shù)據(jù)類型aPTFILE判斷數(shù)據(jù)‘包順序數(shù)據(jù)小PT_STREAM顯示數(shù)據(jù)數(shù)據(jù)處理分包數(shù)據(jù)有分包等待數(shù)據(jù)判斷數(shù)據(jù)類型aPTFILE判斷數(shù)據(jù)‘包順序數(shù)據(jù)小PT_STREAM顯示數(shù)據(jù)圖5.3接收消息并處理的處理流程判斷是否為第一個(gè)接收的數(shù)據(jù)包,如果是第一個(gè)接收的數(shù)據(jù)包,需要播放聲音提示,并找到對(duì)話框進(jìn)行交互。如果不是第一個(gè)接收的數(shù)據(jù)包,那么就進(jìn)行分包處理。OnUdpMsg用來(lái)接收UDP消息并處理。函數(shù)中使用recvfrom接收消息,如果接收到PT_REQUESTUDPPORT,就創(chuàng)建新套接字,然后將端口信息發(fā)送過(guò)去。如果有PT_TEXT類型的數(shù)據(jù),就直接進(jìn)行顯示。系統(tǒng)測(cè)試軟件測(cè)試基礎(chǔ)理論軟件測(cè)試是根據(jù)軟件開(kāi)發(fā)各階段的規(guī)格說(shuō)明和程序的內(nèi)部結(jié)構(gòu)而精心設(shè)計(jì)的一批測(cè)試用例,并利用這些測(cè)試用例運(yùn)行程序以及發(fā)現(xiàn)錯(cuò)誤的過(guò)程,即執(zhí)行測(cè)試步驟。軟件測(cè)試就是在軟件投入運(yùn)行前,對(duì)軟件需求分析、設(shè)計(jì)規(guī)格說(shuō)明和編碼實(shí)現(xiàn)的最終審查,它是軟件質(zhì)量保證的關(guān)鍵步驟。測(cè)試的含義:所謂測(cè)試,首先是一項(xiàng)活動(dòng),在這項(xiàng)活動(dòng)中某個(gè)系統(tǒng)或組成的部分將在特定的條件下運(yùn)行,結(jié)果將被觀察和記錄,并對(duì)系統(tǒng)或組成部分進(jìn)行評(píng)價(jià)。測(cè)試活動(dòng)有兩種結(jié)果:找出缺陷和故障,或顯示軟件執(zhí)行正確。測(cè)試是一個(gè)或多個(gè)測(cè)試用例的集合。測(cè)試的意義:系統(tǒng)測(cè)試是管理信息系統(tǒng)的開(kāi)發(fā)周期中的一個(gè)十分重要環(huán)節(jié)。盡管在系統(tǒng)開(kāi)發(fā)周期的各個(gè)階段均采取了嚴(yán)格的技術(shù)審查,但依然難免會(huì)留下錯(cuò)誤,如果沒(méi)有在投入運(yùn)行前的系統(tǒng)測(cè)試階段被發(fā)現(xiàn)并糾正,問(wèn)題遲早會(huì)在運(yùn)行中暴露出來(lái),到那時(shí)要糾正錯(cuò)誤將會(huì)付出更大的代價(jià)。系統(tǒng)測(cè)試占用的時(shí)間、花費(fèi)的人力和成本占軟件開(kāi)發(fā)的很大比例。系統(tǒng)測(cè)試在設(shè)計(jì)系統(tǒng)的過(guò)程中,難免會(huì)存在一些錯(cuò)誤。在程序編寫(xiě)過(guò)程中,一些程序語(yǔ)句的語(yǔ)法錯(cuò)誤,在程序運(yùn)行時(shí)自動(dòng)提示,可以立即糾正,因此,這類錯(cuò)誤比較容易發(fā)現(xiàn)及改正。但另一類錯(cuò)誤是在程
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024施工混凝土合同范本
- 2024年中英文對(duì)照技術(shù)文檔制作與審核合同3篇
- 2024年高端住宅銷售代理協(xié)議版
- 2025年度甜品連鎖店品牌授權(quán)合作合同范本3篇
- 2024幼兒園幼兒安全與健康管理聘用協(xié)議書(shū)3篇
- 2024幼兒園教師學(xué)生個(gè)性發(fā)展與教育引導(dǎo)合同3篇
- 2024年電子商務(wù)用戶隱私保護(hù)協(xié)議3篇
- 2024年電子產(chǎn)品物流配送合同
- 2025年度冷鏈倉(cāng)儲(chǔ)與配送服務(wù)合同范本3篇
- 2024物流運(yùn)輸合同涉及的責(zé)任與義務(wù)
- (八省聯(lián)考)河南省2025年高考綜合改革適應(yīng)性演練 思想政治試卷(含答案)
- 綜合測(cè)試 散文閱讀(多文本)(解析版)-2025年高考語(yǔ)文一輪復(fù)習(xí)(新高考)
- 鈑金設(shè)備操作培訓(xùn)
- 2024駕校經(jīng)營(yíng)權(quán)承包合同
- 福建省能化集團(tuán)筆試題目
- 快遞公司與驛站合作協(xié)議模板 3篇
- 水利工程招標(biāo)文件樣本
- 品質(zhì)管控培訓(xùn)質(zhì)量管理與質(zhì)量控制課件
- 小數(shù)加減乘除計(jì)算題大全(300題大全)-
- 中考英語(yǔ)688高頻詞大綱詞頻表
- 手糊補(bǔ)強(qiáng)工A卷考試 (1)附有答案
評(píng)論
0/150
提交評(píng)論