2007年7月1日

               摘要: http://thinhunan.cnblogs.com/archive/2006/04/01/DeveloperNotesForPrototype.html JavaScript類擴(kuò)展 prototype.js 類庫實(shí)現(xiàn)強(qiáng)大功能的一種途徑是擴(kuò)展已有的JavaScript 類。 對 Object的擴(kuò)展 Method ...  閱讀全文
          posted @ 2007-07-01 15:53 朱海濤 閱讀(340) | 評論 (0)編輯 收藏

          2007年6月28日

          成功的軟件產(chǎn)品是建立在成功的需求基礎(chǔ)之上的,而高質(zhì)量的需求來源于用戶與開發(fā)人員之間有效的溝通與合作。當(dāng)用戶有一個(gè)問題可以用計(jì)算機(jī)系統(tǒng)來解決,而開發(fā)人員開始幫助用戶解決這個(gè)問題,溝通就開始了。

            需求獲取可能是軟件開發(fā)中最困難、最關(guān)鍵、最易出錯(cuò)及最需要溝通交流的活動。對需求的獲取往往有錯(cuò)誤的認(rèn)識:用戶知道需求是什么,我們所要做的就是和他們交談從他們那里得到需求,只要問用戶系統(tǒng)的目標(biāo)特征,什么是要完成的,什么樣的系統(tǒng)能適合商業(yè)需要就可以了,但是實(shí)際上需求獲取并不是想象的這樣簡單,這條溝通之路布滿了荊棘。首先需求獲取要定義問題范圍,系統(tǒng)的邊界往往是很難明確的,用戶不了解技術(shù)實(shí)現(xiàn)的細(xì)節(jié),這樣造成了系統(tǒng)目標(biāo)的混淆。

            其次是對問題的理解,用戶對計(jì)算機(jī)系統(tǒng)的能力和限制缺乏了解,任何一個(gè)系統(tǒng)都會有很多的用戶或者不同類型的用戶,每個(gè)用戶只知道自己需要的系統(tǒng),而不知道系統(tǒng)的整體情況,他們不知道系統(tǒng)作為一個(gè)整體怎么樣工作效率更好,也不太清楚那些工作可以交給軟件完成,他們不清楚需求是什么,或者說如何以一種精確的方式來描述需求,他們需要開發(fā)人員的協(xié)助和指導(dǎo),但是用戶與開發(fā)人員之間的交流很容易出現(xiàn)障礙,忽略了那些被認(rèn)為是"很明?quot;的信息。最后是需求的確認(rèn),因?yàn)樾枨蟮牟环€(wěn)定性往往隨著時(shí)間的推移產(chǎn)生變動,使之難以確認(rèn)。為了克服以上的問題,必須有組織的執(zhí)行需求的獲取活動。

            需求獲取活動建議要完成的11個(gè)任務(wù)或者說步驟分別是確定需求過程、編寫項(xiàng)目視圖和范圍文檔、用戶群分類、選擇用戶代表、選擇用戶代表、建立核心隊(duì)伍、確定使用實(shí)例、召開聯(lián)合會議、分析用戶工作流程、確定質(zhì)量屬性、檢查問題報(bào)告和需求重用。當(dāng)然應(yīng)該根據(jù)組織和項(xiàng)目的具體情況進(jìn)行適當(dāng)?shù)牟脺p,比如根據(jù)項(xiàng)目和用戶情況把需求獲取會議改成問卷調(diào)查或者座談等等。

          1、編寫項(xiàng)目視圖和范圍文檔

            系統(tǒng)的需求包括四個(gè)不同的層次:業(yè)務(wù)需求、用戶需求和功能需求、非功能性需求。業(yè)務(wù)需求說明了提供給用戶新系統(tǒng)的最初利益,反映了組織機(jī)構(gòu)或用戶對系統(tǒng)、產(chǎn)品高層次的目標(biāo)要求,它們在項(xiàng)目視圖與范圍文檔中予以說明。用戶需求文檔描述了用戶使用產(chǎn)品必須要完成的任務(wù),這在使用實(shí)例文檔或方案腳本說明中予以說明。功能需求定義了開發(fā)人員必須實(shí)現(xiàn)的軟件功能,使得用戶能完成他們的任務(wù),從而滿足了業(yè)務(wù)需求。

            非功能性需求是用戶對系統(tǒng)良好運(yùn)作提出的期望,包括了易用性、反應(yīng)速度、容錯(cuò)性、健壯性等等質(zhì)量屬性。需求獲取就是根據(jù)系統(tǒng)業(yè)務(wù)需求去獲得系統(tǒng)用戶需求,然后通過需求分析得到系統(tǒng)的功能需求和非功能需求。項(xiàng)目視圖和范圍文檔就是從高層次上描述系統(tǒng)的業(yè)務(wù)需求,應(yīng)該包括高層的產(chǎn)品業(yè)務(wù)目標(biāo),評估問題解決方案的商業(yè)和技術(shù)可行性,所有的使用實(shí)例和功能需求都必須遵從的標(biāo)準(zhǔn)。而范圍文檔定義了項(xiàng)目產(chǎn)品所包括的所有工作及產(chǎn)生產(chǎn)品所用的過程。項(xiàng)目相關(guān)人員對項(xiàng)目的目標(biāo)和范圍能達(dá)成共識,整個(gè)項(xiàng)目組都應(yīng)該把注意力集中在項(xiàng)目目標(biāo)和范圍上。

          2、用戶群分類

            系統(tǒng)用戶在很多方面存在著差異,例如:使用系統(tǒng)的頻度和程度、應(yīng)用領(lǐng)域和計(jì)算機(jī)系統(tǒng)知識、所使用的系統(tǒng)特性、所進(jìn)行的業(yè)務(wù)過程、訪問權(quán)限、地理上的布局以及個(gè)人的素質(zhì)和喜好等等。根據(jù)這些差異,你可以把這些不同的用戶分成不同的用戶類。與UML中Usecase的Actor概念一樣,用戶類不一定都指人,也可以包括其他應(yīng)用系統(tǒng)、接口或者硬件,這樣做使得與系統(tǒng)邊界外的接口也成為系統(tǒng)需求。將用戶群分類并歸納各自特點(diǎn),并詳細(xì)描述出它們的個(gè)性特點(diǎn)及任務(wù)狀況,將有助于需求的獲取和系統(tǒng)設(shè)計(jì)。


          3、選擇用戶代表

            不可能對所有的用戶都進(jìn)行需求獲取,這樣做時(shí)間不允許效果也不一定好,所以要識別出能夠確定需求和了解業(yè)務(wù)流程的用戶作為每類用戶的代表。每類用戶至少選擇一位能真正代表他們需求的人作為代表并且能夠作出決策,用戶代表往往是本類用戶中三類人:對項(xiàng)目有決定權(quán)的領(lǐng)導(dǎo)、熟悉業(yè)務(wù)流程的專家、系統(tǒng)最終用戶。每一個(gè)用戶代表者代表了一個(gè)特定的用戶類,并在那個(gè)用戶類和開發(fā)者之間充當(dāng)主要的接口,用戶代表從他們所代表的用戶類中收集需求信息,同時(shí)每個(gè)用戶代表又負(fù)責(zé)協(xié)調(diào)他們所代表的用戶在需求表達(dá)上的不一致性和不兼容性。

          4、建立核心隊(duì)伍

            通常用戶和開發(fā)人員不自覺的都幸恢?quot;我們和他們"的想法,產(chǎn)生一種對立關(guān)系,把彼此放在對立面,每一方都定義自己的"邊界",只想自己的利益而忽略對方的想法。他們通過文檔、記錄和對話來溝通,而不是作為一個(gè)合作的整體去識別和確定需求完成任務(wù)。實(shí)踐證明這樣的方法是不正確的,不會給雙方帶來一點(diǎn)益處,良好的溝通關(guān)系沒有建立導(dǎo)致了誤解和忽略重要的信息。只有當(dāng)雙方參與者都明白要成功自己需要什么,同時(shí)也知道要成功對方需要什么時(shí),才能建立起一種合作關(guān)系。

            為了建立合作關(guān)系通常采取一種組隊(duì)的方式來獲取需求,建立一個(gè)由用戶代表和開發(fā)人員組成的聯(lián)合小組作為需求獲取的核心隊(duì)伍。聯(lián)合小組將負(fù)責(zé)識別需求、分析解決方案和協(xié)商分歧,小組成員可以采用會議、電子郵件、綜合辦公系統(tǒng)等方式進(jìn)行交流,但交流時(shí)應(yīng)注意以下原則:小組會議應(yīng)該由中立方來組織和主持,用戶和開發(fā)人員都要參加;交流預(yù)先要確定準(zhǔn)備和參與的規(guī)則;議題要明確并覆蓋所有關(guān)鍵點(diǎn),但信息來源應(yīng)該自由;交流目標(biāo)要明確,并告知所有的成員。

          5、確定使用實(shí)例

            從用戶代表處收集他們將使用系統(tǒng)完成所需任務(wù)的描述,討論用戶與系統(tǒng)間的交互方式和對話要求,這就是使用實(shí)例,一個(gè)單一的使用實(shí)例可能包括完成某項(xiàng)任務(wù)的許多邏輯相關(guān)任務(wù)和交互順序。使用實(shí)例方法給需求獲取帶來的好處來自于該方法是用以任務(wù)為中心和以用戶為中心的觀點(diǎn),比起使用以功能為中心和以開發(fā)者為中心的方法,使用實(shí)例方法可以使用戶更清楚地理解和認(rèn)識到新系統(tǒng)允許他們做什么和怎么做。描寫使用實(shí)例的時(shí)候要注意使用簡潔直白的表述,盡量使用主動語態(tài),?quot;系統(tǒng)"或者"用戶"作為主語,比如"用戶提交用戶密碼,系統(tǒng)驗(yàn)證用戶密碼是否正確",還有一點(diǎn)在描述中不要設(shè)計(jì)界面細(xì)節(jié),比如"用戶從下拉框中選擇產(chǎn)品類型"。使用實(shí)例為以后寫用例場景描述中的基本路徑和擴(kuò)展路徑提供了素材。

          6、召開聯(lián)合會議

            最常見的需求獲取方法是召開會議或者面談,聯(lián)合會議是范圍廣的、簡便的討論會,也是核心隊(duì)伍成員之間一種很好的溝通方法,該會議通過緊密而集中的討論得以將用戶代表與開發(fā)人員間的合作伙伴關(guān)系付諸于實(shí)踐并能由此擬出需求文檔的底稿。聯(lián)合會議的第一個(gè)議題就是系統(tǒng)的必要性和合理性,必須所有成員都同意系統(tǒng)是必要的而且合理的。接下來就可以討論使用實(shí)例清單,清單可以打印成大紙掛在墻上、寫在黑板上或做成演示材料。對每個(gè)清單合并去掉重復(fù)項(xiàng),加上補(bǔ)充內(nèi)容就可以得到一份總的清單,注意避免采用負(fù)面的"太差""不可行"去否定用戶的想法,這些想法都應(yīng)該保留下來作為被評議的清單項(xiàng),這樣保護(hù)了小組成員開放的思維。最后對清單進(jìn)行討論,會議成員必須檢查每一個(gè)使用實(shí)例,在把它們納入需求之前決定其是否在項(xiàng)目所定義的范圍內(nèi),形成最終的需求報(bào)告。

            在進(jìn)行討論時(shí),也應(yīng)該避免受不成熟的細(xì)節(jié)的影響,在對系統(tǒng)需求取得共識之前,用戶能很容易地在一個(gè)報(bào)表或?qū)υ捒蛑辛谐瞿承┚_設(shè)計(jì),如果這些細(xì)節(jié)都作為需求記錄下來,他們會給隨后的設(shè)計(jì)過程帶來不必要的限制,應(yīng)確保用戶參與者將注意力集中在與所討論的話題適合的抽象層上,重點(diǎn)就是討論做什么而不是怎么做。這里有一點(diǎn)很重要就是要讓用戶理解對于某些功能的討論并不意味著即將在系統(tǒng)中實(shí)現(xiàn)它,更不要做暗示或者承諾什么時(shí)候完成需求。在討論之后,記下所討論的條目,并請參與討論的用戶評論并更正,因?yàn)橹挥刑峁┬枨蟮娜瞬拍艽_定是否真正獲取需求。當(dāng)最后拿到了一份詳細(xì)準(zhǔn)確的需求報(bào)告書的時(shí)候,會議就算成功完成了。但是要清楚需求過程本身就是一個(gè)迭代的過程,在以后的過程活動中不可避免的將要修改和完善這份報(bào)告。

          7、分析用戶工作流程

            分析用戶工作流程觀察用戶執(zhí)行業(yè)務(wù)任務(wù)的過程,通過分析使用實(shí)例得到系統(tǒng)的用例圖。編制用例圖文檔將有助于明確系統(tǒng)的使用實(shí)例和功能需求,統(tǒng)一建模語言的使用有助于與用戶進(jìn)一步交流。每個(gè)用例的描述應(yīng)包括:編號,為每個(gè)用例分配一個(gè)唯一的編號,為需求的追溯提供了方便;參與者,與這個(gè)用例交互的actor;前置條件,開始用例前所必須具備的系統(tǒng)狀態(tài);后置條件,用例完成后系統(tǒng)達(dá)到的狀態(tài);基本路徑,用例完成的關(guān)鍵路徑,也是用戶期望的路徑;擴(kuò)展點(diǎn),基本路徑的分枝,表示意外情況;字段說明,路徑中名稱的進(jìn)一步分解說明,對以后類屬性的定義和數(shù)據(jù)庫字段設(shè)計(jì)起作用;設(shè)計(jì)約束,實(shí)現(xiàn)用例的非功能約束。寫基本路徑時(shí)應(yīng)該使用主動語句;句子以actor或者系統(tǒng)作為主語;一句表示一個(gè)actor動作,一句表示系統(tǒng)動作,交叉表現(xiàn)交互;不要涉及界面細(xì)節(jié),比如"用戶在文本框輸入名稱,下拉框選擇類型"。


          用例:用戶注冊,用戶注冊成為系統(tǒng)會員
          編號 UC1
          參與者 用戶
          前置條件 用戶訪問系統(tǒng),系統(tǒng)運(yùn)行正常
          后置條件 系統(tǒng)記錄用戶注冊信息
          基本路徑 1. 用戶請求注冊。
          2. 系統(tǒng)顯示注冊界面。
          3. 用戶提交注冊信息。
          4. 系統(tǒng)驗(yàn)證注冊信息是否正確。
          5. 系統(tǒng)生成用戶名和密碼,保存注冊信息。
          6. 系統(tǒng)顯示"注冊成功"信息,進(jìn)入會員頁面。
          擴(kuò)展點(diǎn) 4a. 用戶提供的信息不正確:
          4a1. 系統(tǒng)提示輸入正確信息
          4a2. 返回3 
          補(bǔ)充說明 注冊信息包括=用戶實(shí)名+電話+傳真+Email+聯(lián)系地址聯(lián)系地址=省份+城市+街道+郵編
          設(shè)計(jì)約束 注冊反應(yīng)時(shí)間不能超過3秒

          8、確定質(zhì)量屬性

            在功能需求之外再考慮一下非功能的質(zhì)量特點(diǎn),以及確定由于特殊的商業(yè)應(yīng)用環(huán)境對系統(tǒng)提出的功能或性能上的約束,這會使你的產(chǎn)品達(dá)到并超過客戶的期望。對系統(tǒng)如何能很好地執(zhí)行某些行為或讓用戶采取某一措施的陳述就是質(zhì)量屬性,這是一種非功能需求。聽取那些描述合理特性的意見:快捷、簡易、直覺性、用戶友好、健壯性、可靠性、安全性和高效性。你將要和用戶一起商討精確定義他們模糊的和主觀言辭的真正含義,并且要將質(zhì)量屬性分配到每個(gè)用例的設(shè)計(jì)約束中去。

          9、檢查問題報(bào)告

            通過檢查當(dāng)前已經(jīng)運(yùn)行系統(tǒng)的問題報(bào)告來進(jìn)一步完善需求客戶的問題報(bào)告及補(bǔ)充需求為新系統(tǒng)或新版本提供了大量豐富的改進(jìn)及增加特性的想法,負(fù)責(zé)提供用戶支持及幫助的人能為收集需求過程提供極有價(jià)值的信息。

          10、需求重用

            如果客戶要求的功能與已有的系統(tǒng)很相似,則可查看需求是否有足夠的靈活性以允許重用一些已有的軟件組件。業(yè)務(wù)建模和領(lǐng)域建模式需求重用的最好方法,像分析模式和設(shè)計(jì)模式一樣,需求也有自己的模式。

          posted @ 2007-06-28 16:07 朱海濤 閱讀(230) | 評論 (0)編輯 收藏

          2007年6月19日

                今天有位同學(xué)遇到了一個(gè)關(guān)于循環(huán)內(nèi)綁定對象事件奇怪的問題,通過我在 Google上搜索后得到這是由于沒有對js級別變量完全理解所產(chǎn)生的問題。所以我覺得很有必要把這方面的知識記錄下來,避免再發(fā)生這樣的錯(cuò)誤。
               同學(xué)的編碼如下:

           1<script>
           2//點(diǎn)擊圖片調(diào)用的方法
           3function click(value)
           4{
           5  alert(value);
           6}

           7
           8for(var i=1;i<=3;i++)
           9{
          10var img = document.createElement("IMG");
          11img.id = "img"+i;
          12//這是圖片的路徑
          13img.src="d:/1.jpg";
          14img.style.cursor="hand";    
          15img.onclick = function(){
          16  click(i);
          17}

          18document.body.appendChild(img);
          19}

          20</script>

                這時(shí)奇怪的問題就出現(xiàn)了,點(diǎn)擊這三個(gè)圖片中的任何一個(gè),彈出的數(shù)值都是4(也就是循環(huán)結(jié)束后的值)。按我們正常的理解應(yīng)該給每個(gè)圖片點(diǎn)擊時(shí)間中傳入的參數(shù)按順序來因該是1,2,3。
                下面我就來談?wù)勎医鉀Q這個(gè)問題的過程
                 1.考慮到每回點(diǎn)擊顯示的都是i這個(gè)變量循環(huán)結(jié)束后的值,所以這個(gè)i變量的范圍一定不只限于循環(huán)內(nèi),于是我在循環(huán)后面加入了alert(i)這條語句發(fā)現(xiàn)打印出來的是i而不是undefined.由此我們可以斷定i是全局變量。
                 2.第二步我寫了下面代碼

           1<HTML>
           2 <BODY>
           3  <script>
           4
           5      for(var i = 1; i <= 3;i++){
           6        var button = document.createElement("button");
           7        var k = 1;
           8        button.value=i;
           9        button.onclick=function(){
          10           alert(k++);
          11        }

          12        document.body.appendChild(button);
          13      }

          14    </script>
          15 </BODY>
          16</HTML>

                 通過這段代碼我們發(fā)現(xiàn),只要重復(fù)點(diǎn)擊任何一個(gè)按鈕都會從1開始逐漸增加,由此我們可以確認(rèn)在onclick函數(shù)中沒有執(zhí)行k++,而是在觸發(fā)了onclick時(shí)間才會執(zhí)行k++.
                  3.由上面我得到的結(jié)論傳給onclick函數(shù)內(nèi)的是變量引用,于是我寫了下面的代碼,才最終解決了問題

           1<HTML>
           2 <BODY>
           3<script>
           4    function mapping(element,value){
           5        element.onclick=function(){
           6        alert(value);
           7    }

           8    }

           9    for(var i = 1; i <= 3;i++){
          10        var button = document.createElement("button");
          11        mapping(button,i);
          12        button.value=i;
          13        document.body.appendChild(button);
          14    }

          15</script>
          16 </BODY>
          17</HTML>
          posted @ 2007-06-19 12:26 朱海濤 閱讀(1501) | 評論 (3)編輯 收藏
          僅列出標(biāo)題  
           
          主站蜘蛛池模板: 朝阳市| 凭祥市| 牙克石市| 平乐县| 垦利县| 班戈县| 洪洞县| 安乡县| 西昌市| 曲水县| 独山县| 广安市| 荔波县| 义马市| 莒南县| 吉水县| 大安市| 阿荣旗| 错那县| 灵宝市| 行唐县| 叙永县| 宁陵县| 马边| 当阳市| 彩票| 定远县| 新闻| 长汀县| 都江堰市| 沁阳市| 梧州市| 开江县| 武山县| 绥化市| 万载县| 宿迁市| 固阳县| 策勒县| 涞源县| 新闻|