欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      高質(zhì)量軟件模塊開(kāi)發(fā)總結(jié)(最終5篇)

      時(shí)間:2019-05-13 19:30:12下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫(xiě)寫(xiě)幫文庫(kù)小編為你整理了多篇相關(guān)的《高質(zhì)量軟件模塊開(kāi)發(fā)總結(jié)》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫(xiě)寫(xiě)幫文庫(kù)還可以找到更多《高質(zhì)量軟件模塊開(kāi)發(fā)總結(jié)》。

      第一篇:高質(zhì)量軟件模塊開(kāi)發(fā)總結(jié)

      當(dāng)開(kāi)始進(jìn)行模塊開(kāi)發(fā)時(shí),系統(tǒng)負(fù)責(zé)人會(huì)給模塊開(kāi)發(fā)負(fù)責(zé)人描述模塊功能與要求,但是此時(shí)模塊功能與需求一般是比較粗線條和不完備的,例如很多細(xì)粒度異常情況處理需求一般系統(tǒng)負(fù)責(zé)人可能會(huì)考慮不到。

      模塊負(fù)責(zé)人通過(guò)詳細(xì)設(shè)計(jì)完成:細(xì)化和確定模塊的功能(包括異常處理需求)、識(shí)別關(guān)鍵問(wèn)題和實(shí)現(xiàn)策略與流程、以及主要靜態(tài)類和線程結(jié)構(gòu)設(shè)計(jì)等。

      詳細(xì)設(shè)計(jì)完成并通過(guò)評(píng)審之后,模塊負(fù)責(zé)人根據(jù)詳細(xì)設(shè)計(jì)指導(dǎo),進(jìn)行編碼并實(shí)現(xiàn)模塊。

      需要指出的是即使詳細(xì)設(shè)計(jì),但一般只是初步設(shè)計(jì)了主要的類和線程結(jié)構(gòu),以及一些比較大方面的異常情況處理。雖然可能不同的人完成的詳細(xì)設(shè)計(jì)的細(xì)致粒度存在差別,即使是設(shè)計(jì)比較細(xì)致的詳細(xì)設(shè)計(jì)一般不能到達(dá)可以直接根據(jù)詳細(xì)設(shè)計(jì)自動(dòng)生成代碼的粒度,當(dāng)然個(gè)人認(rèn)為類和線程結(jié)構(gòu)等實(shí)現(xiàn)方面的設(shè)計(jì)也沒(méi)有必要太過(guò)細(xì)致,要把握好度,不要太過(guò)也不要不夠。因此即使在編碼和實(shí)現(xiàn)階段其實(shí)也存在大量的設(shè)計(jì)工作,此時(shí)設(shè)計(jì)的粒度較為細(xì)致,一般是類級(jí)別的詳細(xì)設(shè)計(jì)和編碼實(shí)現(xiàn)(包括詳細(xì)劃分和確認(rèn)類的功能規(guī)格說(shuō)明書(shū),并實(shí)現(xiàn)類的功能)。

      雖然個(gè)人認(rèn)為在詳細(xì)設(shè)計(jì)階段類和線程結(jié)構(gòu)等實(shí)現(xiàn)方面的設(shè)計(jì)不必要太過(guò)細(xì)致,但是對(duì)模塊功能規(guī)格(包括異常處理需求)的確認(rèn)和細(xì)化一定要盡可能細(xì)致和想全。對(duì)關(guān)鍵問(wèn)題和實(shí)現(xiàn)策略也一定要盡可能的細(xì)致和想全。對(duì)實(shí)現(xiàn)方面的類和線程結(jié)構(gòu)設(shè)計(jì)能夠想細(xì)還是細(xì)的為好,即盡量想細(xì)一點(diǎn)為好。所謂“謀定而后動(dòng)”,只有先設(shè)計(jì)好了,想好了后面才能少出錯(cuò)。

      根據(jù)上面論述,我們可以得出不管是詳細(xì)設(shè)計(jì)還是編碼實(shí)現(xiàn)都包括兩個(gè)階段工作:首先確認(rèn)和細(xì)化功能規(guī)格,然后是實(shí)現(xiàn)功能規(guī)格。對(duì)詳細(xì)設(shè)計(jì)而言是確認(rèn)和細(xì)化模塊的功能規(guī)格,并初步設(shè)計(jì)如何實(shí)現(xiàn)模塊功能。對(duì)編碼實(shí)現(xiàn)而言是確認(rèn)和細(xì)化各個(gè)類的功能規(guī)格,然后實(shí)現(xiàn)各個(gè)類功能,最終實(shí)現(xiàn)模塊功能。

      而導(dǎo)致模塊質(zhì)量不高的主要原因是整個(gè)開(kāi)發(fā)過(guò)程,沒(méi)有明確地區(qū)分“確認(rèn)和細(xì)化功能規(guī)格”和“實(shí)現(xiàn)功能規(guī)格”兩個(gè)階段,很多開(kāi)發(fā)者的開(kāi)發(fā)過(guò)程是兩個(gè)過(guò)程混在一起,整個(gè)過(guò)程屬于沒(méi)有明確方向和不斷變化的狀態(tài),惡果是導(dǎo)致很多例外情況沒(méi)有考慮到并進(jìn)行妥當(dāng)處理,最終導(dǎo)致大量BUG的出現(xiàn)。具體表現(xiàn)如下:

      ??詳細(xì)設(shè)計(jì)時(shí),模塊功能需求確認(rèn)不夠細(xì)致,甚至是一直到編碼實(shí)現(xiàn)階段都是處于模糊狀態(tài),導(dǎo)致很多情況沒(méi)有想到。例如各個(gè)對(duì)外提供接口的功能細(xì)節(jié),特別是在一些異常情況下的返回值細(xì)節(jié)或者響應(yīng)細(xì)節(jié)都不是很明確。

      ??詳細(xì)設(shè)計(jì)時(shí),不仔細(xì)考慮會(huì)存在哪些異常情況,以及設(shè)計(jì)相應(yīng)異常處理措施,導(dǎo)致在設(shè)計(jì)階段很多異常根本沒(méi)有考慮。??詳細(xì)設(shè)計(jì)時(shí),不識(shí)別模塊實(shí)現(xiàn)中關(guān)鍵問(wèn)題,導(dǎo)致很多關(guān)鍵實(shí)現(xiàn)策略要到編碼時(shí)才確定,但是由于編碼時(shí)一般思維焦點(diǎn)是當(dāng)前類,導(dǎo)致確定實(shí)現(xiàn)策略時(shí)缺乏全局考慮,同時(shí)加上還要考慮如何實(shí)現(xiàn),因此會(huì)導(dǎo)致采用不是最優(yōu)的或者是錯(cuò)誤的實(shí)現(xiàn)策略。??詳細(xì)設(shè)計(jì)時(shí),類、類狀態(tài)變化、線程結(jié)構(gòu)設(shè)計(jì)等考慮太粗。由于詳細(xì)設(shè)計(jì)時(shí)能不考慮具體實(shí)現(xiàn),會(huì)忽略一些細(xì)節(jié),這樣更能集中精力從整體和全局來(lái)考慮一些關(guān)鍵的實(shí)現(xiàn)策略和以及類和線程結(jié)構(gòu)設(shè)計(jì)。而實(shí)現(xiàn)階段一般更加關(guān)注細(xì)節(jié),但只關(guān)注當(dāng)前類細(xì)節(jié)和局部細(xì)節(jié),因此詳細(xì)設(shè)計(jì)時(shí)類、類狀態(tài)變化、線程結(jié)構(gòu)設(shè)計(jì)等考慮太粗會(huì)導(dǎo)致這些問(wèn)題遺留到開(kāi)發(fā)階段,使得整個(gè)編碼過(guò)程混亂,最終很多例外情況想不到。至少要保證詳細(xì)設(shè)計(jì)完成后,模塊開(kāi)發(fā)者能在自己大腦里面把模塊跑起來(lái)。

      ??編碼實(shí)現(xiàn)階段,還沒(méi)有制定清楚每個(gè)類、類方法的詳細(xì)功能規(guī)格說(shuō)明(即要處理哪些情況,異常情況下如何處理等)的情況下,就開(kāi)始編碼實(shí)現(xiàn)。明確區(qū)分兩個(gè)階段的好處是每次大腦只需要集中精力考慮一個(gè)方面問(wèn)題,這樣大腦考慮問(wèn)題會(huì)比較輕松,使得問(wèn)題能夠容易想全,出現(xiàn)紕漏的概率要小一些。

      1詳細(xì)設(shè)計(jì)過(guò)程明確劃分為兩個(gè)階段

      第一個(gè)階段是明確模塊的需求,能夠以詳細(xì)的功能規(guī)格說(shuō)明書(shū)的方式,明確模塊的功能需求,重點(diǎn)考慮模塊要處理哪些例外和異常情況,盡自己最大努力把情況想全。

      例如對(duì)本模塊對(duì)外提供的接口要詳細(xì)寫(xiě)清楚,各種輸入?yún)?shù)情況下的行為是什么,以及返回什么值。對(duì)本模塊要調(diào)用的外部接口,要寫(xiě)明白本模塊要求的響應(yīng)是什么,以及調(diào)用失敗情況下的處理策略等。

      此階段同時(shí)要描述清楚本模塊運(yùn)行環(huán)境包括:與周圍模塊交互描述、對(duì)內(nèi)存以及磁盤(pán)的要求等對(duì)外圍環(huán)境的需求、模塊部署方式(多機(jī)并發(fā)部署、還是單節(jié)點(diǎn)運(yùn)行)等。注意此時(shí)只集中精力考慮需求,不要考慮如何實(shí)現(xiàn)。

      第二階段是設(shè)計(jì)中的實(shí)現(xiàn)階段。此階段要求必須包括有:關(guān)鍵問(wèn)題與實(shí)現(xiàn)策略、主要靜態(tài)類圖設(shè)計(jì)和說(shuō)明(主要類、主要方法說(shuō)明)、線程結(jié)構(gòu)說(shuō)明(包含哪幾類線程、每類線程個(gè)數(shù)、每類線程職責(zé)、每類線程會(huì)訪問(wèn)到的類和對(duì)象等,如果比較復(fù)雜則要說(shuō)清楚為什么這些設(shè)計(jì),設(shè)計(jì)目標(biāo)是解決什么問(wèn)題)、在線程結(jié)構(gòu)基礎(chǔ)上描述互斥策略以及線程間關(guān)系等、主要的處理活動(dòng)圖(個(gè)人推薦更多使用泳道圖,能更直觀看到對(duì)象之間的職責(zé)劃分和交互過(guò)程)。如果類對(duì)象的狀態(tài)比較多,則建議采用狀態(tài)機(jī)圖的方式描述清楚,并通過(guò)審查狀態(tài)機(jī)變化來(lái)檢查是否有情況沒(méi)有處理。

      2編碼階段建議采用三個(gè)步驟

      ??先想清楚,并寫(xiě)出類和每個(gè)方法詳細(xì)功能規(guī)格說(shuō)明(可以先把類名和方法名寫(xiě)好,然后以注釋的方式把類的職責(zé)、關(guān)鍵實(shí)現(xiàn)策略、以及每個(gè)方法的功能規(guī)格說(shuō)明<重點(diǎn)是例外和異常情況的處理與返回值>)。??根據(jù)規(guī)格說(shuō)明中列舉情況,寫(xiě)出相應(yīng)測(cè)試代碼。??編寫(xiě)實(shí)現(xiàn)代碼,并通過(guò)測(cè)試。?編寫(xiě)模塊功能規(guī)格說(shuō)明書(shū),重構(gòu)代碼?經(jīng)過(guò)編碼階段之后,模塊功能已經(jīng)非常明確了,此時(shí)應(yīng)該細(xì)致、清楚地編寫(xiě)模塊功能規(guī)格說(shuō)明書(shū)。原因如下:

      1)模塊功能規(guī)格說(shuō)明中描述的功能會(huì)比詳細(xì)設(shè)計(jì)中更為細(xì)致和清楚。另外經(jīng)過(guò)編碼階段,此時(shí)模塊實(shí)現(xiàn)的功能可能與詳細(xì)設(shè)計(jì)時(shí)考慮的模塊功能在細(xì)節(jié)方面可能會(huì)有些變化。項(xiàng)目描述本模塊的功能說(shuō)明,可以方便自己和其他人日后進(jìn)行系統(tǒng)維護(hù)工作。

      2)通過(guò)編寫(xiě)該功能規(guī)格說(shuō)明可以彌補(bǔ)詳細(xì)設(shè)計(jì)萬(wàn)一考慮不細(xì)情況下,一些例外和異常情況是否處沒(méi)有處理或者處理不周到。由于在詳細(xì)設(shè)計(jì)階段,設(shè)計(jì)出模塊的類和對(duì)象構(gòu)成以及運(yùn)行機(jī)制還是有一些模糊,因此很可能存在某些例外、特別分布式情況下某些狀態(tài)組合沒(méi)有考慮到的情況發(fā)生。但是在編碼階段,由于一般只會(huì)關(guān)注當(dāng)前類和當(dāng)前的方法的實(shí)現(xiàn),因此考慮問(wèn)題一般比較局部。為此在完成整個(gè)模塊編碼后,所有細(xì)節(jié)都已經(jīng)明確(特別是在寫(xiě)代碼過(guò)程中會(huì)發(fā)現(xiàn)存在一些新的異常情況需要處理<詳細(xì)設(shè)計(jì)時(shí)沒(méi)考慮到>),此時(shí)必須再一次從整體來(lái)考慮模塊運(yùn)行起來(lái)后在處理邏輯是否有缺陷,這樣能更早發(fā)現(xiàn)以前設(shè)計(jì)中缺陷,避免上線后才發(fā)現(xiàn)缺陷。此時(shí)重點(diǎn)考慮是否還有情況沒(méi)有考慮到或者某些處理不到位。

      很多BUG難以發(fā)現(xiàn)和定位原因是在不同類和對(duì)象之間的發(fā)生交互和聯(lián)系后,組合排列后的情況非常多,從而想不到某些組合。這種BUG只有從整體考慮、考慮不同類和對(duì)象之間交互關(guān)聯(lián)后才可能想到。模塊詳細(xì)設(shè)計(jì)指南與規(guī)范

      模塊詳細(xì)設(shè)計(jì)要完成兩個(gè)方面工作:一是明確模塊的功能需求和非功能需求、二是設(shè)計(jì)如何完成和實(shí)現(xiàn)模塊的功能需求,包括類結(jié)構(gòu)、線程結(jié)構(gòu)設(shè)計(jì)等。本節(jié)根據(jù)后臺(tái)模塊特點(diǎn),描述了兩部分工作需要考慮和設(shè)計(jì)的關(guān)鍵點(diǎn)。

      3.1確定模塊的功能規(guī)格

      1)本模塊概述

      概述主要描述了本模塊所屬子系統(tǒng),以及在子系統(tǒng)中所承當(dāng)職責(zé)的簡(jiǎn)單描述。2)本模塊在系統(tǒng)中與周圍模塊關(guān)系和交互情況 很多模塊一般要依賴周圍的模塊或者數(shù)據(jù)庫(kù),為此建議以圖形方式描述本模塊與本模塊依賴的其他模塊或者數(shù)據(jù)庫(kù)之間交互情況。交互方式主要包括: 基于接口調(diào)用的交互、基于數(shù)據(jù)流的交互,直接訪問(wèn)數(shù)據(jù)庫(kù)。

      基于接口交互要描述:接口實(shí)現(xiàn)方式(ICE、WCF等)、接口調(diào)用目的、以及什么時(shí)候調(diào)用等。

      基于數(shù)據(jù)流交互要描述:傳輸數(shù)據(jù)類型,傳輸方式等。對(duì)數(shù)據(jù)庫(kù)或者存儲(chǔ)要描述:需要訪問(wèn)的數(shù)據(jù)庫(kù)名稱、表格名稱以及表格存儲(chǔ)數(shù)據(jù)含義、訪問(wèn)數(shù)據(jù)庫(kù)中表格的目的等。

      3)本模塊部署角色以及對(duì)基礎(chǔ)軟硬件要求 描述本模塊將要部署的角色、部署模式、對(duì)操作系統(tǒng)要求、對(duì)基礎(chǔ)軟件要求、對(duì)硬盤(pán)要求、對(duì)內(nèi)存要求等。

      部署模式主要考慮是分布式多機(jī)部署、還是只會(huì)單實(shí)例部署。操作主要考慮需要對(duì)操作系統(tǒng)版本的要求。

      基礎(chǔ)軟件主要包括:jdk版本要求、需要安裝其他基礎(chǔ)軟件以及版本等。對(duì)硬盤(pán)要求:是否需要臨時(shí)存儲(chǔ)、大概需要多大(盡量能不用存儲(chǔ)就不用)。對(duì)內(nèi)存要求:大概需要多大內(nèi)存等。4)本模塊所處理數(shù)據(jù)的數(shù)據(jù)格式描述

      對(duì)數(shù)據(jù)預(yù)處理模塊,描述本模塊對(duì)待處理數(shù)據(jù)的格式的假定和要求。5)本模塊調(diào)用接口描述

      詳細(xì)描述清楚需要調(diào)用接口:接口名字、參數(shù)類型、參數(shù)單位、接口功能、接口執(zhí)行時(shí)間要求(超時(shí)處理)、分片傳輸(消息大小限制導(dǎo)致分片傳輸需求)。接口功能部分重點(diǎn)要描述清楚異常情況下接口返回值和應(yīng)該執(zhí)行操作,例如調(diào)用的接口是否會(huì)返回NULL等。

      6)本模塊功能性需求描述

      以功能點(diǎn)方式詳細(xì)描述本模塊功能。

      如果是涉及對(duì)外提供接口的,明確描述:接口名字、參數(shù)類型、參數(shù)單位、各種輸入?yún)?shù)下預(yù)期行為和返回值、接口應(yīng)該滿足執(zhí)行時(shí)間要求。

      7)例外與異常情況下描述與處理要求

      詳細(xì)考慮本模塊第2)、3)、4)、5)中所描述本模塊依賴的外部環(huán)境不滿足本模塊要求情況下的處理方式。

      3.2設(shè)計(jì)與實(shí)現(xiàn)部分

      1)關(guān)鍵問(wèn)題與策略

      只要有一點(diǎn)復(fù)雜或者難度模塊的設(shè)計(jì)工作都會(huì)存在幾個(gè)有難度或者關(guān)鍵問(wèn)題去解決,這些關(guān)鍵問(wèn)題的解決方案好壞決定了整個(gè)模塊實(shí)現(xiàn)質(zhì)量。一般而言這些關(guān)鍵問(wèn)題解決方案會(huì)有多種,并且有好有壞,且會(huì)存在較大爭(zhēng)議。相反一般非關(guān)鍵點(diǎn)設(shè)計(jì)就比較沒(méi)有異議。關(guān)鍵問(wèn)題與策略是開(kāi)展設(shè)計(jì)評(píng)審的重點(diǎn)。模塊設(shè)計(jì)評(píng)審就是審查兩點(diǎn):是否存在有些關(guān)鍵問(wèn)題沒(méi)考慮到、二是每個(gè)關(guān)鍵問(wèn)題的解決方案是否是最優(yōu)的。因此要求模塊設(shè)計(jì)人員,在確認(rèn)了功能規(guī)格后,第一件事就是要考慮本模塊設(shè)計(jì)中存在哪些關(guān)鍵問(wèn)題,然后再思考對(duì)應(yīng)解決方案。在確定了所有影響比較大的關(guān)鍵問(wèn)題的解決方案之后,剩余的類結(jié)構(gòu)設(shè)計(jì)和線程設(shè)計(jì)等就會(huì)比較順利。

      此部分要求設(shè)計(jì)人員要反復(fù)問(wèn)自己:一是否所有值得斟酌的問(wèn)題都想到了、二目前設(shè)計(jì)的策略是否是最好的(好的策略一般是簡(jiǎn)單策略),要敢于否定自己已經(jīng)設(shè)計(jì)好的策略。

      衡量?jī)?yōu)秀實(shí)現(xiàn)策略的標(biāo)準(zhǔn)是:“用最簡(jiǎn)單方式滿足最重要需求”。后臺(tái)設(shè)計(jì)過(guò)程中要避免的事情是:不要為了某個(gè)不常用、但是聽(tīng)起來(lái)很美好的功能點(diǎn)導(dǎo)致設(shè)計(jì)很復(fù)雜。有時(shí)候?yàn)榱四K運(yùn)行簡(jiǎn)單和穩(wěn)定,寧肯不要太完美。特別是很多時(shí)候很多需求是矛盾和有沖突的,作為設(shè)計(jì)人員一定要能識(shí)別哪些是主要需求,哪些是次要需求。

      例如某全文檢索檢索模塊,第一版本為提高檢索性能,設(shè)計(jì)了檢索結(jié)果緩存功能。但是實(shí)際使用過(guò)程中發(fā)現(xiàn)緩存命中概率很低,而這個(gè)功能導(dǎo)致整個(gè)模塊設(shè)計(jì)復(fù)雜很多。

      2)靜態(tài)類結(jié)構(gòu)設(shè)計(jì) 類結(jié)構(gòu)設(shè)計(jì),主要設(shè)計(jì)出本模塊主要類以及類之間的關(guān)系,并利用類圖的方式表達(dá)出來(lái)。

      在靜態(tài)類結(jié)構(gòu)設(shè)計(jì)中,除類圖外,還需要對(duì)各個(gè)類的職責(zé)分工,以及類中主要的方法要進(jìn)行描述。另外要仔細(xì)考慮哪些類是主動(dòng)類。

      在靜態(tài)類結(jié)構(gòu)設(shè)計(jì)好壞,主要取決與設(shè)計(jì)人員面向?qū)ο笤O(shè)計(jì)的能力。要求設(shè)計(jì)人員考慮以下幾個(gè)方面:

      ??是否可以采用現(xiàn)成的設(shè)計(jì)模式。

      ??是否違反了面向?qū)ο蟮膸讉€(gè)原則:?jiǎn)我宦氊?zé)原則、開(kāi)放封閉原則、替換原則、依賴倒置原則、接口隔離原則。

      為了提高自己此方面設(shè)計(jì)能力,希望大家多看一些面向?qū)ο笤O(shè)計(jì)方面的書(shū),以及一些經(jīng)典優(yōu)秀開(kāi)源軟件的結(jié)構(gòu),能真正領(lǐng)會(huì)設(shè)計(jì)模式和面向?qū)ο蟮膸讉€(gè)原則的精髓,并能指導(dǎo)自己模塊類結(jié)構(gòu)設(shè)計(jì)。

      另外如果感覺(jué)自己負(fù)責(zé)多個(gè)模塊存在重復(fù)部分,例如感覺(jué)可能幾個(gè)模塊大的處理步驟基本相同,只是在處理細(xì)節(jié)上不同,則可以考慮將其中相同部分抽出來(lái)設(shè)計(jì)成一個(gè)具備一定通用性的框架或者共用代碼,并貢獻(xiàn)出來(lái)。

      3)線程結(jié)構(gòu)與同步互斥策略設(shè)計(jì) 后臺(tái)模塊一般會(huì)涉及多線程的處理,因此線程結(jié)構(gòu)設(shè)計(jì)是后臺(tái)組模塊設(shè)計(jì)經(jīng)常會(huì)遇到的問(wèn)題。

      ??線程結(jié)構(gòu)設(shè)計(jì)必須描述以下幾個(gè)部分: ??包括那幾類線程以及每類線程的職責(zé)

      ??每類線程的個(gè)數(shù)

      ??每類線程的啟動(dòng)和停止時(shí)間

      ??線程間的協(xié)作關(guān)系:消費(fèi)者-生成者關(guān)系、同步互斥、共享變量等。為了清楚描述和思考同步互斥問(wèn)題,建議采用圖的方式劃出每類線程與每類線程會(huì)訪問(wèn)到公共對(duì)象,這樣就能很直觀識(shí)別出需要保護(hù)的對(duì)象,然后在詳細(xì)設(shè)計(jì)和描述同步互斥策略。

      線程結(jié)構(gòu)設(shè)計(jì)基本經(jīng)驗(yàn)是: ??盡量減少線程間的交互。例如有三類線程,本來(lái)可能需要每類之間都要交互,則可以考慮以以某類線程作為樞紐,其他兩類線程都和該線程交互,而其他兩類線程之間不交互。

      ??同步互斥在后臺(tái)性能不是很重要情況下,可以考慮加鎖的粒度粗一點(diǎn)。例如多個(gè)線程都要從一個(gè)隊(duì)列取任務(wù),并執(zhí)行任務(wù),且修改任務(wù)狀態(tài),則可以每次都鎖整個(gè)隊(duì)列,包括修改隊(duì)列中某個(gè)任務(wù)的狀態(tài)也變成隊(duì)列類中的一個(gè)被同步保護(hù)的方法,而不是直接調(diào)用任務(wù)類的修改狀態(tài)的方法。??被同步互斥保護(hù)代碼禁止有訪問(wèn)數(shù)據(jù)庫(kù)、訪問(wèn)文件、調(diào)用遠(yuǎn)程接口等操作,必須都是只訪問(wèn)本地內(nèi)存的操作,確保不會(huì)長(zhǎng)期被鎖住。被同步互斥保護(hù)代碼只應(yīng)該是“控制”代碼而不能是“干活”的代碼。

      4)主要執(zhí)行流程

      描述本模塊所需要處理的主要業(yè)務(wù)事件對(duì)應(yīng)的處理過(guò)程。建議多采用泳道圖來(lái)表示,好處是能直觀的看到各類在該業(yè)務(wù)處理過(guò)程中的職責(zé),方便設(shè)計(jì)人員對(duì)類的職責(zé)進(jìn)行調(diào)整。

      5)模塊配置項(xiàng)設(shè)計(jì)

      模塊配置項(xiàng)設(shè)計(jì)主要為提高模塊通用性,減少模塊修改,讓設(shè)計(jì)人員多考慮將很多參數(shù)作為配置而不要寫(xiě)死。

      對(duì)于配置項(xiàng)考慮:

      ??哪些配置項(xiàng)是全局配置、哪些配置項(xiàng)只是本模塊需要讀的。??哪些配置項(xiàng)和建設(shè)方案有關(guān)、哪些配置項(xiàng)和建設(shè)方案無(wú)關(guān)。對(duì)全局配置項(xiàng)和與建設(shè)方案有關(guān)的配置項(xiàng),應(yīng)該放入到系統(tǒng)配置中去。方便系統(tǒng)部署時(shí),可以實(shí)現(xiàn)設(shè)備安裝與建設(shè)方案無(wú)關(guān),實(shí)現(xiàn)設(shè)備安裝程序標(biāo)準(zhǔn)化。

      3.3與應(yīng)用運(yùn)維相關(guān)的考慮

      為了與即將實(shí)現(xiàn)的應(yīng)用運(yùn)維系統(tǒng)進(jìn)行對(duì)接。每個(gè)模塊在設(shè)計(jì)時(shí)要考慮兩個(gè)方面問(wèn)題:一是如何從模塊外面對(duì)模塊運(yùn)行狀態(tài)進(jìn)行監(jiān)控,以及判斷模塊是否正常運(yùn)行的標(biāo)準(zhǔn)是什么;二是如果是因?yàn)橥獠凯h(huán)境無(wú)法滿足本模塊要求,則在日志里面表達(dá)清楚。代碼編程指南與過(guò)程規(guī)范

      強(qiáng)烈建議采用測(cè)試驅(qū)動(dòng)的模式來(lái)完成代碼編程。測(cè)試驅(qū)動(dòng)開(kāi)發(fā)中編寫(xiě)測(cè)試代碼目的是利用測(cè)試代碼來(lái)描述和確認(rèn)類的功能規(guī)格,然后編寫(xiě)實(shí)現(xiàn)代碼來(lái)實(shí)現(xiàn)測(cè)試代碼規(guī)定的功能規(guī)格并利用測(cè)試來(lái)驗(yàn)證編寫(xiě)的代碼確實(shí)是符合事先設(shè)計(jì)好的功能規(guī)格。

      根據(jù)前面的闡述,在詳細(xì)設(shè)計(jì)時(shí)是不可能把每個(gè)類設(shè)計(jì)的很細(xì),也就是每個(gè)類很細(xì)致的功能規(guī)格是沒(méi)有設(shè)計(jì)好的。此部分工作是留在代碼編寫(xiě)階段來(lái)完成的,即在代碼編寫(xiě)階段包括:類功能規(guī)格設(shè)計(jì)和實(shí)現(xiàn)。

      大部分開(kāi)發(fā)者在編碼時(shí)其實(shí)是在一邊在編碼實(shí)現(xiàn)、一邊在確定類和方法的功能規(guī)格,并且會(huì)不斷的調(diào)整(有時(shí)候會(huì)因?yàn)橥蝗幌氲揭环N以前沒(méi)考慮到的情況沒(méi)處理、有時(shí)候是為了代碼實(shí)現(xiàn)簡(jiǎn)單等等)。此時(shí)由于大部分精力是在考慮實(shí)現(xiàn),并且是局部的實(shí)現(xiàn),很容易導(dǎo)致某些需要全局考慮的一些例外或者異常情況沒(méi)有考慮到,從而出現(xiàn)BUG。通過(guò)測(cè)試驅(qū)動(dòng)模式可以強(qiáng)制大家把第二部分所講的兩個(gè)階段區(qū)分開(kāi)。

      4.1代碼編寫(xiě)建議采取以下步驟

      ??寫(xiě)代碼前,先站在使用者角度考慮清楚將要實(shí)現(xiàn)的類功能規(guī)格。類分為高層類和低層類(例如數(shù)據(jù)庫(kù)連接池代碼,數(shù)據(jù)庫(kù)連接池類屬于高層類、數(shù)據(jù)庫(kù)連接類屬于低層類)。一般情況下會(huì)出現(xiàn)一個(gè)高層類和多個(gè)低層類組成一個(gè)內(nèi)聚的包。在這種情況下,可以先寫(xiě)出整個(gè)包或者高層類的功能職責(zé),然后逐步下低層的,也可以先寫(xiě)低層再寫(xiě)上層,具體過(guò)程看大家自己。因此不管怎么樣,都會(huì)出現(xiàn)類職責(zé)調(diào)整的情況發(fā)生。??編寫(xiě)類名和類中間的方法,但是不實(shí)現(xiàn)。

      ??以注釋方式,描述類的職責(zé)、本類一些關(guān)鍵或者復(fù)雜的策略(方便別人能讀懂你的代碼)、本類需要處理的情況(要求從設(shè)計(jì)上,每個(gè)類職責(zé)要單一,否則這里就會(huì)寫(xiě)的很復(fù)雜)。??以注釋方式,詳細(xì)描述public方法功能規(guī)格,特別是各種異常和例外情況下的處理方式(此時(shí)還沒(méi)有私有方法,類的職責(zé)是通過(guò)public方法來(lái)體現(xiàn)的)。

      ??根據(jù)上述注釋,以類為單位編寫(xiě)測(cè)試代碼。??實(shí)現(xiàn)各個(gè)方法,并通過(guò)測(cè)試。

      4.2對(duì)于編寫(xiě)測(cè)試代碼的建議如下??必須先寫(xiě)測(cè)試代碼

      ??盡可能的去寫(xiě)測(cè)試代碼

      ??要以類的使用者角度來(lái)編寫(xiě)測(cè)試代碼。

      ??針對(duì)類的功能點(diǎn)來(lái)寫(xiě)測(cè)試代碼,而不是針對(duì)方法

      不要采取為每個(gè)Public方法編寫(xiě)一個(gè)測(cè)試方法的模式來(lái)編寫(xiě)測(cè)試方法。每個(gè)測(cè)試方法應(yīng)該測(cè)試的是該類需要處理的某一種情況。因?yàn)轭惖囊粋€(gè)功能點(diǎn)可能要涉及多個(gè)Public方法。

      類似軟件測(cè)試每個(gè)測(cè)試用例,都對(duì)應(yīng)一個(gè)測(cè)試點(diǎn)一樣。每個(gè)測(cè)試方法其實(shí)都是測(cè)試類的一個(gè)功能點(diǎn)。

      例如:一個(gè)隊(duì)列類,有pop和push兩個(gè)public 方法。則不要寫(xiě)兩個(gè)測(cè)試代碼:一個(gè)是testPop,一個(gè)是testPush。

      而是要站在使用者角度來(lái)考慮隊(duì)列類的功能規(guī)格: 1)如果隊(duì)列為空,則彈出空對(duì)象。2)隊(duì)列應(yīng)該保證先進(jìn)后出。3)如果隊(duì)列滿,則Push失敗。

      然后針對(duì)以上三種情況,分別對(duì)應(yīng)寫(xiě)出三個(gè)測(cè)試函數(shù)。模塊功能說(shuō)明編寫(xiě)規(guī)范5.1編寫(xiě)模塊功能說(shuō)明的目的??編寫(xiě)完整個(gè)模塊后,從模塊整體思考和檢查所實(shí)現(xiàn)的模塊是否符合設(shè)計(jì)要求,以及在相應(yīng)細(xì)節(jié)處理方面是否存在BUG,或者不合理的情況。??方便開(kāi)發(fā)人員和維護(hù)人員日后的維護(hù)

      5.2功能說(shuō)明內(nèi)容及規(guī)范

      編寫(xiě)功能說(shuō)明時(shí),由開(kāi)發(fā)人員站在使用者角度來(lái)描述和重新審查模塊

      1、模塊部署環(huán)境和與周圍模塊交互情況描述

      ??以圖方式描述本模塊與周圍模塊的交互情況,以及部署方式。??本模塊調(diào)用的外部接口描述。

      ??本模塊對(duì)基礎(chǔ)環(huán)境要求:內(nèi)存、網(wǎng)絡(luò)、磁盤(pán)等。

      2、模塊配置說(shuō)明

      ??配置文件設(shè)計(jì)理由,那些固定不變的,哪些是應(yīng)對(duì)業(yè)務(wù)變化。??仔細(xì)描述各個(gè)配置文件的含義

      ??說(shuō)明如何通過(guò)配置來(lái)對(duì)應(yīng)業(yè)務(wù)變化

      3、模塊功能說(shuō)明

      詳細(xì)描述本模塊的功能點(diǎn)。對(duì)每個(gè)功能點(diǎn),一般描述以下幾個(gè)方面: ??功能名

      ??與該功能相關(guān)的配置文件中的配置項(xiàng) ??處理流程 ??故障處理

      ??可能存在的問(wèn)題。

      例如: ??功能N:按比例刪除老數(shù)據(jù) ??相關(guān)參數(shù)

      STORE_POLICY :各數(shù)據(jù)類型的存儲(chǔ)比例

      PARTITION_MIN_FREESIZE_GB:每個(gè)分區(qū)應(yīng)該保留的剩余空間 DELETE_INTERVAL_MINUTE:老數(shù)據(jù)覆蓋的觸發(fā)間隔。

      ??處理流程

      1)判斷是否所有磁盤(pán)分區(qū)的數(shù)據(jù)塊都被掃描,如果存在退出 2)判斷是否獲取了所有磁盤(pán)分區(qū)的總空間TotalSpace,如果存在某個(gè)分區(qū)因故障無(wú)法獲取,則退出。

      3)針對(duì)本小組內(nèi)每種數(shù)據(jù)類型執(zhí)行下列步驟

      4)根據(jù)塊信息計(jì)算出本數(shù)據(jù)類型所有數(shù)據(jù)塊的總大小UsedSpace 5)UsedSpace <(TotalSpace– 磁盤(pán)個(gè)數(shù)* minFreeSpace)* storagePer則退出類型處理

      6)計(jì)算UsedSpace-(TotalSpace – 磁盤(pán)個(gè)數(shù)* minFreeSpace)* storagePer得到需要?jiǎng)h除空間needDelSize。

      7)依次刪除登記表中本類型最老數(shù)據(jù)塊,直到刪除塊總大小大于needDelSize,或者刪除干凈。

      ??故障處理

      1.被刪除數(shù)據(jù)塊不存在:刪除邏輯直接返回刪除成功。

      2.被刪除數(shù)據(jù)塊刪除失?。ㄟh(yuǎn)程代理通訊失敗、該分區(qū)目前不能訪問(wèn)、被占用無(wú)法訪問(wèn)等):將該數(shù)據(jù)塊加入到“刪除失敗數(shù)據(jù)塊列表”,定期重試。

      3.磁盤(pán)分區(qū)故障: 導(dǎo)致從來(lái)沒(méi)有成功獲取過(guò)總空間,會(huì)導(dǎo)致所屬小組會(huì)覆蓋停止工作,導(dǎo)致沒(méi)有成功掃過(guò)數(shù)據(jù)塊,會(huì)導(dǎo)致所屬小組覆蓋停止工作。

      4.MASTER重起,會(huì)導(dǎo)致“刪除失敗數(shù)據(jù)塊列表”被清空,不過(guò)MASTER重起會(huì)掃描到所有數(shù)據(jù)塊,并重新刪除。

      ??可能存在問(wèn)題

      1)實(shí)際數(shù)據(jù)塊分布與MASTER記錄不一致,導(dǎo)致錯(cuò)誤刪除老數(shù)據(jù)。例如有人手工刪除了一塊比較新數(shù)據(jù)。

      2)有些刪除失敗數(shù)據(jù)塊,會(huì)導(dǎo)致實(shí)際剩余空間不夠。

      4、模塊故障診斷說(shuō)明

      模塊故障診斷用于當(dāng)開(kāi)發(fā)人員不在時(shí),維護(hù)人員可以根據(jù)此部分初步判斷出模塊工作不正常時(shí)的原因。

      由于一般模塊出問(wèn)題,開(kāi)發(fā)人員去維護(hù),一般都是先檢查是否是本模塊依賴的其他模塊或者環(huán)境不正常,如果本模塊所依賴的環(huán)境和模塊都正常,那么可能是本模塊的問(wèn)題。診斷說(shuō)明里要描述所有的檢查步驟。可以依次寫(xiě)出所有的檢查步驟,每個(gè)檢查步驟包括:

      ??檢查方法:如何檢查(檢查日志中的異常輸出、檢查基礎(chǔ)環(huán)境)??異常原因:XXX硬件故障、XXX軟件故障、XXX模塊異常

      第二篇:軟件開(kāi)發(fā)心得總結(jié)

      有感于網(wǎng)盤(pán)開(kāi)發(fā)過(guò)程

      有感于網(wǎng)盤(pán)開(kāi)發(fā)過(guò)程..............................................................................................................................1

      一、軟件開(kāi)發(fā)個(gè)人體會(huì):.................................................................................................................2

      二、做軟件開(kāi)發(fā)我覺(jué)得要明白:.....................................................................................................2

      三、在開(kāi)發(fā)中遇到問(wèn)題應(yīng)該怎么去解決?......................................................................................2

      四、怎么樣才能提高自身的能力?..................................................................................................2

      五、怎么樣才能做好軟件開(kāi)發(fā)?.....................................................................................................2

      六、文檔的重要性.............................................................................................................................3

      七、我的收獲.....................................................................................................................................3

      八、網(wǎng)盤(pán)項(xiàng)目開(kāi)發(fā)的最大體會(huì).........................................................................................................4

      九、軟件測(cè)試(單體測(cè)試和連接測(cè)試)..........................................................................................4

      常熟理工學(xué)院SIG小組

      3/28/2013

      一、軟件開(kāi)發(fā)個(gè)人體會(huì):

      1.軟件領(lǐng)域中的知識(shí)在于積累。

      2.做軟件開(kāi)發(fā),就類似算數(shù)學(xué)題和世界杯足球賽一樣:重在結(jié)果,而不在乎過(guò)程。3.軟件服務(wù)于人類,軟件是在解決一些生活中的問(wèn)題和錯(cuò)誤,問(wèn)題決定解決方案。

      二、做軟件開(kāi)發(fā)我覺(jué)得要明白:

      1.職業(yè)的樂(lè)趣:

      (A)用自己的智慧去創(chuàng)建新事物的快樂(lè)(B)開(kāi)發(fā)對(duì)別人有用的東西(C)不斷學(xué)習(xí)來(lái)充實(shí)自己 2.職業(yè)的苦惱:(A)總是追求完美

      (B)所有要實(shí)現(xiàn)的功能由他人而定

      (C)概念設(shè)計(jì)計(jì)是有趣的,但找Bug總是很苦惱的

      三、在開(kāi)發(fā)中遇到問(wèn)題應(yīng)該怎么去解決?

      1.2.3.4.不明白就多問(wèn),不要自已一直去琢磨。

      一個(gè)問(wèn)題如果30分鐘還沒(méi)有解決就應(yīng)該考慮是不是問(wèn)問(wèn)別人。一個(gè)問(wèn)題在沒(méi)有用過(guò)3種以上的方法解決過(guò)就不要去問(wèn)別人。解決問(wèn)題思路是關(guān)鍵:

      相信問(wèn)題總歸有解決的辦法,就算連技術(shù)上都沒(méi)法實(shí)現(xiàn)的問(wèn)題,相信通過(guò)良好的溝通終究也會(huì)有解決的方法。

      5.解決問(wèn)題的前提是:理解別人的意思,理解別人的需求,多溝通,及時(shí)給客戶反饋信息。

      四、怎么樣才能提高自身的能力?

      1.程序員怎么樣進(jìn)步最快? - 理論結(jié)合實(shí)踐

      2.不要怕出錯(cuò),不怕遇到錯(cuò)誤,有錯(cuò)誤就有挑戰(zhàn),這樣才可以進(jìn)步,但不要讓同一個(gè)石頭把你絆倒2次。

      五、怎么樣才能做好軟件開(kāi)發(fā)?

      1.首先要明白解決的問(wèn)題是什么,理解問(wèn)題,其次再?zèng)Q定怎么解決這個(gè)問(wèn)題 2.碰到很復(fù)雜的問(wèn)題,我們就簡(jiǎn)單想,把問(wèn)題簡(jiǎn)單化,細(xì)化到能夠?qū)崿F(xiàn)為止

      常熟理工學(xué)院SIG小組

      3/28/2013

      3.出了問(wèn)題,我們要先分析問(wèn)題,然后知道引起問(wèn)題的原因,最后并想出問(wèn)題的解決辦法 4.我們應(yīng)該從2個(gè)方面去把握一個(gè)項(xiàng)目:從業(yè)務(wù)角度和項(xiàng)目的關(guān)鍵問(wèn)題上去把握一個(gè)項(xiàng)目

      (A)從不同的系統(tǒng)場(chǎng)景

      (B)從不同的用戶角色(充當(dāng)什么角色)(C)從不同的系統(tǒng)使用角度(擁有那些權(quán)限)

      5.其實(shí)我覺(jué)得開(kāi)發(fā)人員說(shuō)實(shí)在應(yīng)該要比使用系統(tǒng)的人更了解系統(tǒng)需求,只有真正徹底的了解了項(xiàng)目的業(yè)務(wù)需求,我們才能做真的做好這個(gè)項(xiàng)目

      六、文檔的重要性

      記得我當(dāng)初剛開(kāi)發(fā)項(xiàng)目的時(shí)候都是寫(xiě)個(gè)大致的需求說(shuō)明書(shū),做一個(gè)E-R圖,畫(huà)幾個(gè)大致的數(shù)據(jù)流程圖,然后建立數(shù)據(jù)字典和表結(jié)構(gòu)關(guān)系。再接著搭建一個(gè)開(kāi)發(fā)環(huán)境,配置幾臺(tái)服務(wù)器,劃分一下模塊,分工,我們就可以Coding了,一直到項(xiàng)目結(jié)束了,也沒(méi)有完整的設(shè)計(jì)文檔,更沒(méi)有完整的測(cè)試文檔,雖然這樣的確是很快的完成了Coding工作,感覺(jué)上好像節(jié)省了好多成本和開(kāi)發(fā)時(shí)間,但后期的維護(hù)和Bug 就是經(jīng)常出現(xiàn)的事。

      小項(xiàng)目沒(méi)有文檔關(guān)系不大,但如果遇到一個(gè)大項(xiàng)目的時(shí)候,那這樣的開(kāi)發(fā)方式就很有問(wèn)題很危險(xiǎn)的。

      大項(xiàng)目沒(méi)有文檔: 首先維護(hù)就很麻煩,也很亂,寫(xiě)的代碼,過(guò)幾天都不知道它是完成什么功能的了,其次系統(tǒng)的穩(wěn)定性和可靠性也讓人懷疑,擴(kuò)展性就不用說(shuō)了。

      七、我的收獲

      A.程序員大多都不喜歡寫(xiě)文檔,我們以前也是特討厭,記得以前都是系統(tǒng)開(kāi)發(fā)完了,為了應(yīng)付項(xiàng)目驗(yàn)收,就匆匆忙忙的一組人在那里補(bǔ)文檔。在我們的思想里,所謂的文檔就是一些廢話,一句話硬是用十句話來(lái)代替的無(wú)聊透頂。B.代碼風(fēng)格要規(guī)范

      以前做項(xiàng)目,我們都是不怎么去注意代碼風(fēng)格和寫(xiě)代碼的規(guī)范,都是稍微想一下就直接開(kāi)始寫(xiě)代碼了。注釋也很少用,總感覺(jué)我們自己寫(xiě)的代碼,我們?cè)趺磿?huì)不知道它做了些什么事呢 ?總覺(jué)得我們自己寫(xiě)的代碼我們?cè)趺磿?huì)不知道它是用來(lái)做什么的呢。一直都不相信這是個(gè)事實(shí),但事實(shí)上,項(xiàng)目驗(yàn)收后,系統(tǒng)剛開(kāi)始使用的人少,也就不會(huì)出現(xiàn)潛在的錯(cuò)誤,隨著時(shí)間的增加,久而久之,當(dāng)大量用戶并發(fā)訪問(wèn)的時(shí)候,系統(tǒng)的Bug 就暴漏出來(lái)了,那時(shí)你再用熟悉的Eclipse打開(kāi)整個(gè)項(xiàng)目的源碼時(shí),再去看自己寫(xiě)的代碼的時(shí)候,真的發(fā)現(xiàn),我們定義的這個(gè)變量名是什么意思啊 ? 我們的這個(gè)Flag 是用來(lái)判斷什么的啊 ?我們的if()中條件不知道是判斷什么? Function()也忘記是什么功能了? 想想好可怕啊。難道真的都忘記了嗎 ?回答是肯定的: 真的忘了。C.心得體會(huì): 通過(guò)做該網(wǎng)盤(pán)項(xiàng)目,在這2年的鍛煉中,我們才真的體會(huì)到,良好的文檔是正規(guī)研發(fā)流程中非常重要的環(huán)節(jié),一個(gè)好的程序是先寫(xiě)好設(shè)計(jì)文檔再進(jìn)行編程的,在設(shè)計(jì)文檔的指導(dǎo)下,才能寫(xiě)出安全的代碼。如果你不寫(xiě)文檔,一開(kāi)始就寫(xiě)程序,這樣你就不會(huì)按已設(shè)計(jì)好的路線走,而是想到哪寫(xiě)到哪。小功能還好說(shuō),要是大功能,就容易混亂.常熟理工學(xué)院SIG小組

      3/28/2013

      剛開(kāi)始我們還很不習(xí)慣這一系列的編程風(fēng)格,很多的規(guī)范,尤其是命名,方法和注釋,都有這著很多限制,讓我們覺(jué)得真羅唆,寫(xiě)個(gè)程序完成功能不就可以了嗎,明明1小時(shí)做完的事情非得讓人用3、4個(gè)小時(shí)去做,我們現(xiàn)在真的明白這樣做的好處了,我們已經(jīng)習(xí)慣這樣的編程風(fēng)格了,這也養(yǎng)成了我們的一個(gè)編程習(xí)慣了,深有體會(huì)啊。

      最忙的時(shí)候就是我們成長(zhǎng)和收獲最多的時(shí)候。

      八、網(wǎng)盤(pán)項(xiàng)目開(kāi)發(fā)的最大體會(huì)

      我們覺(jué)得項(xiàng)目開(kāi)發(fā)的開(kāi)始時(shí)候,應(yīng)該由項(xiàng)目負(fù)責(zé)人很好的對(duì)項(xiàng)目是什么項(xiàng)目,具體大概做什么事情,是誰(shuí)提出來(lái)的,目的是解決什么問(wèn)題,以及里面用到的很多專有名詞做個(gè)細(xì)致的說(shuō)明,而不是從一開(kāi)始就分幾本式樣書(shū),給個(gè)靜態(tài)Html 的Demo看看,然后搭建好開(kāi)發(fā)環(huán)境就按照式樣設(shè)計(jì)書(shū)來(lái)開(kāi)發(fā)。

      九、軟件測(cè)試(單體測(cè)試和連接測(cè)試)

      我們首先認(rèn)為,編寫(xiě)程序的時(shí)候不要想出了問(wèn)題再解決,而是要想如何不會(huì)出現(xiàn)問(wèn)題,要根據(jù)經(jīng)驗(yàn)來(lái)預(yù)測(cè)可能出現(xiàn)的問(wèn)題,然后避免出現(xiàn)。

      測(cè)試,說(shuō)的直接點(diǎn)就是給軟件找錯(cuò)誤。

      很多人認(rèn)為發(fā)現(xiàn)錯(cuò)誤是軟件測(cè)試的唯一目的,查找不出錯(cuò)誤的測(cè)試就是沒(méi)有價(jià)值的測(cè)試,實(shí)際上我們不這么認(rèn)為。

      我們覺(jué)得對(duì)開(kāi)發(fā)人員來(lái)說(shuō),我們要把測(cè)試出來(lái)的Bug都應(yīng)該做個(gè)分析,知道錯(cuò)的原因之后,我們就應(yīng)該在下個(gè)項(xiàng)目中防止類似的錯(cuò)誤發(fā)生,而真正來(lái)提高我們開(kāi)發(fā)的效率。

      常熟理工學(xué)院SIG小組

      3/28/2013

      第三篇:648軟件開(kāi)發(fā)總結(jié)

      內(nèi)部

      648軟件開(kāi)發(fā)介紹

      一 DM648介紹

      DM648屬于TI達(dá)芬奇系列,采用單核C64X+定點(diǎn)CPU,支持最高頻率1.1GHz,有兩個(gè)乘法器支持四個(gè)16bits*16bits(結(jié)果32bits)單個(gè)clock cycle或者八個(gè)8bits*8bits(結(jié)果16bits)單個(gè)clock cycle。還有6個(gè)ALU。

      648的片上存儲(chǔ)器有L1P(32KB),L1D(32KB),L2(512KB)648集成了五個(gè)視頻口VPORT,省去FPGA做FIFO,可以節(jié)省產(chǎn)品成本。

      648集成了豐富的外設(shè),包括edma(64個(gè)通道),SPI,I2C,UART,EMIF,DDR2,Ethernet,gpio(32個(gè)),McASP,PCI。

      二 搭建軟件開(kāi)發(fā)環(huán)境 2.1操作系統(tǒng)環(huán)境

      Win7 32位或win-XP環(huán)境 2.2軟件安裝和配置

      需準(zhǔn)備的安裝軟件 Ccs3.3

      bios3.08 648dvsdk perl Bios是TI針對(duì)DSP開(kāi)發(fā)的實(shí)時(shí)嵌入式操作系統(tǒng)。

      Dvsdk是基于BIOS系統(tǒng)的視頻開(kāi)發(fā)包。Perl是腳本工具,燒寫(xiě)程序時(shí)將out文件轉(zhuǎn)換為ais文件。

      建議所有軟件安裝到默認(rèn)目錄下,安裝完后

      配置操作系統(tǒng)環(huán)境變量

      修改BIOS_INSTALL_DIR變量為 C:/CCStudio_v3.3/bios_5_31_08 配置CCS的組件管理器,如圖2-1

      點(diǎn)“開(kāi)始->所有程序->TI->component manager,修改Target Content(DSP/BIOS)->TMS320C64XX為當(dāng)前版本的DSP/BIOS

      圖 2-1 2.3 DVSDK目錄文件介紹

      默認(rèn)安裝到C:dvsdk_1_11_00_00_DM648目錄下,其中

      edma3_lld_1_05_00是edma3驅(qū)動(dòng)包

      examples 包含很多基于BIOS的示例應(yīng)用工程,我們參考video_preview示例程序作為框架,添加圖像處理算法和通訊驅(qū)動(dòng)。flashutil 包含flash燒寫(xiě)工程norwriter,bootloader程序ubl,ais文件生成腳本

      ndk_1_92_00_22_eval 網(wǎng)絡(luò)開(kāi)發(fā)軟件包 pspdrivers_1_10_00 包含了TI提供的很多基于BIOS系統(tǒng)的驅(qū)動(dòng),我們參考其中VPORT的驅(qū)動(dòng),將按幀采集修改為按場(chǎng)采集的功能 xdc_2_95_02 xdc工具安裝路徑,xdc是ccs的子工具,是一個(gè)javascript編譯工具,用于編譯cfg文件,cfg文件在后面講。如圖2-2安裝XDC后,會(huì)在工程的編譯選項(xiàng)界面增加X(jué)DC選項(xiàng)。

      圖2-2 2.4仿真器

      TDS560USB PLUS

      在CCS setup界面選擇TDS560USB PLUS platform和C64x+ family的DM648。如圖2-3.圖2-3 三 VPORT+EDMA工作原理 3.1 VPORT介紹

      DM648集成了五個(gè)VPORT口,用于視頻輸入輸出,每個(gè)VPORT可以配置為capture或display模式。Capture模式又分為雙通道8bit BT656,單通道16 bit Y/C模式。Display模式又分為單通道8bit BT656, 單通道16 bit Y/C模式。

      目前,capture和display模式都采用8bit BT656子模式,PAL視頻編碼芯片和解碼芯片也設(shè)置為BT656模式。3.2 BT656標(biāo)準(zhǔn)簡(jiǎn)介

      BT656標(biāo)準(zhǔn)將4:2:2格式Y(jié)CbCr數(shù)據(jù)統(tǒng)一封裝在一個(gè)數(shù)據(jù)流中,按照CbYCrY順序排列,Y的數(shù)據(jù)數(shù)量是Cb,Cr的2倍。

      BT656數(shù)據(jù)流中,ffh和00h保留用于時(shí)序標(biāo)示。在視頻數(shù)據(jù)每行的開(kāi)頭和結(jié)尾有標(biāo)示SAV(start of video),EAV(end of video)。SAV和EAV的格式是ffh,00h,00h,XYh,前三個(gè)字節(jié)固定,第四個(gè)字節(jié)包含場(chǎng)標(biāo)示,場(chǎng)消隱狀態(tài)和行消隱狀態(tài),如圖3-1。

      圖3-1 3.3 VPORT FIFO 每個(gè)VPORT有一個(gè)FIFO存儲(chǔ)進(jìn)入的數(shù)據(jù)或者從FIFO輸出。

      BT656 capture模式中,F(xiàn)IFO分成A、B兩個(gè)通道,如圖3-2,A通道接收VDIN[9-2]管腳的數(shù)據(jù),B通道接收VDIN[19-12]管腳的數(shù)據(jù)。每個(gè)通道又分Y,Cb,Cr三個(gè)緩存,每個(gè)緩存區(qū)有獨(dú)立的讀寄存器。

      圖3-2 BT656 display模式中,如圖3-3,只有一路輸出,F(xiàn)IFO分為Y,Cb,Cr三個(gè)緩存區(qū),每個(gè)緩存區(qū)有獨(dú)立的寫(xiě)寄存器。

      圖3-3 VPORT和EDMA配合在FIFO和外部或片上存儲(chǔ)器之間移數(shù)。我們可以編程FIFO的閾值寄存器,當(dāng)FIFO達(dá)到設(shè)置滿度(fullness)(對(duì)于捕獲模式)或者低于設(shè)置滿度(對(duì)于顯示模式)時(shí),生成EDMA事件,觸發(fā)相應(yīng)EDMA通道移數(shù)。

      每個(gè)VPORT對(duì)應(yīng)6個(gè)EDMA事件,分別是

      VPxYEVTA,VPxCbEVTA,VPxCrEVTA,VPxYEVTB,VPxCbEVTB,VPxCrEVTB 例如,我們用VP0口的A通道做為BT656視頻輸入,VP1口做為BT656視頻輸出。

      設(shè)置VP0口A通道Y,Cb,Cr三個(gè)緩存區(qū)的閾值為720,360,360。當(dāng)PAL圖像數(shù)據(jù)傳輸完一行后,三個(gè)緩存區(qū)都達(dá)到閾值,生成VP0YEVTA,VP0CbEVTA,VP0CrEVTA三個(gè)事件,觸發(fā)對(duì)應(yīng)的三個(gè)EDMA通道將三個(gè)FIFO緩存區(qū)的一行圖像數(shù)據(jù)移入DDR2緩存區(qū)。

      設(shè)置VP1口Y,Cb,Cr三個(gè)緩存區(qū)的閾值為720,360,360。當(dāng)三個(gè)緩存區(qū)數(shù)據(jù)數(shù)量低于閾值時(shí),生成VP1YEVTA,VP1CbEVTA,VP1CrEVTA三個(gè)事件,觸發(fā)對(duì)應(yīng)的三個(gè)EDMA通道將DDR2緩存區(qū)的一行圖像數(shù)據(jù)移入三個(gè)FIFO緩存區(qū)。

      四 應(yīng)用程序及驅(qū)動(dòng)解析

      4.1兩個(gè)重要文件

      基于BIOS/DSP系統(tǒng)開(kāi)發(fā)軟件,有兩個(gè)重要工程文件tcf和cfg文件,如圖4-1中紅圈1和2。

      圖4-1

      tcf文件包含了DSP/BIOS的配置信息。紅圈3的global settings設(shè)置DSP工作頻率,L1,L2 cache size,大小端,L2 cache 128kB。Memory section設(shè)置程序和數(shù)據(jù)各部分在存儲(chǔ)器中的段地址。

      紅圈4 HWI(hardware interrupt)處,添加硬件中斷處理函數(shù)

      紅圈5 添加BIOS/DSP的線程

      cfg文件包含了庫(kù)鏈接路徑信息,使用javascript語(yǔ)言,如圖紅圈6。使用XDC工具編譯cfg文件,生成庫(kù)鏈接信息,供C編譯器鏈接庫(kù)時(shí)使用。cfg文件常鏈接的庫(kù)有vport驅(qū)動(dòng),edma驅(qū)動(dòng)程序。

      4.2圖像緩存分配和管理

      Edma在VPORT和SDRAM之間搬數(shù),CPU要訪問(wèn)SDRAM最新的圖像數(shù)據(jù),程序采用多個(gè)圖像緩存區(qū)循環(huán)的方式將這兩個(gè)過(guò)程并行化。

      應(yīng)用層創(chuàng)建捕獲或顯示通道時(shí),調(diào)用驅(qū)動(dòng)層程序在DDR2分配存放圖像數(shù)據(jù)的緩存區(qū)。分配之前,驅(qū)動(dòng)根據(jù)通道的配置參數(shù)計(jì)算每個(gè)緩存區(qū)的大小。

      例如,vp0按場(chǎng)采集,vp1按幀顯示。Vp0的每個(gè)緩存區(qū)的大小是720*288*2,vp1的每個(gè)緩存區(qū)的大小是720*576*2。

      應(yīng)用程序使用FVID_dequeue()出隊(duì)函數(shù)和FVID_queue()入隊(duì)函數(shù)或FVID_exchange()交換函數(shù),在應(yīng)用程序和驅(qū)動(dòng)程序之間交換圖像緩存區(qū)。

      捕獲和顯示驅(qū)動(dòng)的緩存管理方法不同,如下面兩圖4-2和4-3:

      圖中藍(lán)塊表示應(yīng)用程序的圖像緩存區(qū),白塊表示驅(qū)動(dòng)程序的圖像緩存區(qū)。

      圖像捕獲緩存區(qū),初始時(shí)所有的緩存區(qū)都在捕獲隊(duì)列里,捕獲驅(qū)動(dòng)程序以循環(huán)的方式填充每個(gè)緩存區(qū)。

      當(dāng)應(yīng)用程序調(diào)用FVID_dequeue()函數(shù)時(shí),將放有最新圖像數(shù)據(jù)的緩存區(qū)出隊(duì)并返回給應(yīng)用程序,驅(qū)動(dòng)在余下的隊(duì)列里循環(huán)填充,如(a)到(b)和(b)到(e)。

      當(dāng)應(yīng)用程序調(diào)用FVID_queue()函數(shù)時(shí),將一個(gè)空的緩存區(qū)交給驅(qū)動(dòng)程序并加入隊(duì)列,如圖(b)到(a)和(e)到(b)。

      當(dāng)應(yīng)用程序調(diào)用FVID_exchange()函數(shù)時(shí),應(yīng)用程序交給驅(qū)動(dòng)一個(gè)空的緩存區(qū),驅(qū)動(dòng)交給應(yīng)用程序放有最新圖像的緩存區(qū),相當(dāng)于同時(shí)調(diào)用FVID_dequeue()和FVID_queue()兩個(gè)函數(shù),如圖(b)到(c)和(c)到(d)。

      圖4-2

      圖像顯示緩存區(qū),初始時(shí)只有一個(gè)緩沖區(qū)用于顯示,其它緩存區(qū)等待出隊(duì),如圖(a),黃塊表示顯示驅(qū)動(dòng)隊(duì)列里準(zhǔn)備出隊(duì)的緩存區(qū)。顯示驅(qū)動(dòng)程序重復(fù)顯示一個(gè)緩存區(qū)的圖像。

      當(dāng)應(yīng)用程序調(diào)用FVID_dequeue()函數(shù)時(shí),從驅(qū)動(dòng)獲得一個(gè)緩存區(qū),應(yīng)用程序向它填充顯示數(shù)據(jù),同時(shí)驅(qū)動(dòng)仍然顯示之前的緩存區(qū),如圖(b)和(d)。當(dāng)應(yīng)用程序調(diào)用FVID_queue()函數(shù)時(shí),應(yīng)用程序給驅(qū)動(dòng)程序一個(gè)準(zhǔn)備顯示的緩存區(qū),同時(shí)驅(qū)動(dòng)將它設(shè)置為當(dāng)前的緩存區(qū),如圖(b)到(c)到(d)。

      當(dāng)應(yīng)用程序調(diào)用FVID_exchange()函數(shù)時(shí),應(yīng)用程序給驅(qū)動(dòng)一個(gè)準(zhǔn)備顯示的緩存區(qū),從驅(qū)動(dòng)得到一個(gè)空的緩存區(qū),相當(dāng)于同時(shí)調(diào)用FVID_dequeue()和FVID_queue()函數(shù),如圖(d)到(e)。

      圖4-3

      4.3 應(yīng)用程序框架介紹

      基于dvsdk_install_dir/example目錄下的video_preview示例程序,做為項(xiàng)目軟件框架

      應(yīng)用程序主要包含三部分:

      Main函數(shù)

      Video_preview線程

      自添加的中斷處理函數(shù)

      許多實(shí)時(shí)DSP應(yīng)用都需要同時(shí)執(zhí)行很多不相關(guān)的功能,這些功能一般是對(duì)外部事件的響應(yīng),這些功能就加線程。

      DSP/BIOS支持4種線程:

      (1)硬件中斷(HWI):頻率可達(dá)200KHz(5us)(2)軟件中斷(SWI):SWI允許HWI將一些非關(guān)鍵處理在低優(yōu)先級(jí)上延遲執(zhí)行,這樣可以減少在中斷服務(wù)程序中的駐留時(shí)間。

      (3)任務(wù)(TSK):任務(wù)與中斷不同點(diǎn)在于,任務(wù)在執(zhí)行過(guò)程中可以被掛起。

      (4)后臺(tái)線程(IDL):空閑循環(huán),運(yùn)行那些沒(méi)有執(zhí)行時(shí)間限制的函數(shù)。

      上電加載完操作系統(tǒng)內(nèi)核后,首先執(zhí)行main函數(shù)。

      Main函數(shù)執(zhí)行完后,啟動(dòng)video_preview線程,線程生命期直到執(zhí)行結(jié)束后。此線程主要功能有圖像采集,處理,字符疊加,顯示。

      Video_preview線程第一步調(diào)用FVID_create()函數(shù)為vp0口創(chuàng)建捕獲通道對(duì)象capChan,初始化vp0寄存器,為vp1口創(chuàng)建顯示通道對(duì)象disChan,初始化vp1寄存器。

      第二步調(diào)用FVID_allocBuffer()為capChan和disChan分別分配三個(gè)圖像緩存區(qū),然后調(diào)用FVID_queue()將三個(gè)緩存區(qū)組成隊(duì)列,同時(shí)為capChan和disChan分配edma通道,設(shè)置edma參數(shù)表。

      第三步調(diào)用FVID_control()函數(shù)使能vp0,vp1口,vp0開(kāi)始捕獲,vp1開(kāi)始輸出顯示。

      第四步調(diào)用FVID_dequeue()從capChan和disChan的緩存隊(duì)列中各出一個(gè)緩存。

      第五步 進(jìn)入while(1)循環(huán),在循環(huán)中執(zhí)行兩次FVID_exchange()。FVID_exchange(capChan,pImg1)捕獲新的一場(chǎng)圖像數(shù)據(jù),F(xiàn)VID_exchange(disChan,pImg)顯示新的一幀圖像。捕獲兩次,顯示一次。

      FVID_exchange(capChan,pImg1)后面添加圖像處理算法和疊加字符。

      4.4添加圖像處理算法

      在FVID_exchange(capChan,img)函數(shù)捕獲圖像后添加圖像處理算法。為了減少CPU訪問(wèn)圖像數(shù)據(jù)時(shí)間,將圖像數(shù)據(jù)和訪問(wèn)頻率高的中間數(shù)組放在L2 RAM里。DM648 L2的大小512KB,其中128KB用于cache,剩余384KB可用于應(yīng)用程序存放圖像數(shù)據(jù)。

      4.5 VPORT驅(qū)動(dòng)調(diào)試方法

      VPORT驅(qū)動(dòng)采用BIOS的兩層驅(qū)動(dòng)模型class/mini-driver,BIOS現(xiàn)在抽象定義了三種class驅(qū)動(dòng),PIP/PIO,SIO/DIO,GIO,應(yīng)用程序通過(guò)這三類BIOS API接口與mini driver通訊,在一個(gè)應(yīng)用工程中可以同時(shí)使用這三種API 接口。

      Mini層通過(guò)CSL層訪問(wèn)外圍硬件的寄存器,存儲(chǔ)器,中斷資源,如圖4-6。

      圖4-6 Video_preview應(yīng)用工程中使用了BIOS GIO接口API,如圖4-7是GIO和mini diver層包含的API,F(xiàn)VID函數(shù)是GIO API的宏定義,如下:

      #define FVID_create(name, mode, status, optArgs, attrs)

      GIO_create(name, mode, status, optArgs, attrs)#define FVID_exchange(gioChan, bufp)

      GIO_submit(gioChan, FVID_EXCHANGE, bufp, NULL, NULL)#define FVID_control(gioChan, cmd, args)

      GIO_control(gioChan, cmd, args)

      圖4-7 VPORT的mini driver層實(shí)現(xiàn)工程vport_bios_dm648_drv_lib.pjt在dvsdk_install_dir/pspdriver目錄下,將其設(shè)置為video_preview_PAL.pjt的依賴工程(Dependent Projects),如圖4-8,這樣應(yīng)用工程重新編譯之后就可以同時(shí)調(diào)試應(yīng)用工程

      和mini driver層。

      圖4-8 五 flash芯片燒寫(xiě)程序

      在燒寫(xiě)程序之前需要準(zhǔn)備兩個(gè)文件ubl.ais和video_preview_PAL.ais,使用Dvsdk_install_dirflashutil目錄下的perl腳本命令create_ais.bat將ubl.out和video_preview_PAL.out生成對(duì)應(yīng)的ais文件。

      Ubl(user boot loader)是DSP啟動(dòng)加載器,DSP上電后會(huì)自動(dòng)將UBL代碼從 flash加載到存儲(chǔ)器中,開(kāi)始執(zhí)行UBL,ubl先初始化pll,ddr2,emif,再將video_preview_PAL工程從flash加載到存儲(chǔ)器中,然后開(kāi)始執(zhí)行應(yīng)用程序。

      準(zhǔn)備好ais文件后,加載運(yùn)行norwrite工程Dvsdk_install_dirflashutilDM647_8CCSDM648_NORWriter,norwriter包含四個(gè)步驟:

      (1)設(shè)備初始化,pll,ddr2,emif初始化。(2)擦寫(xiě)flash塊0xa000 0000-0xa002 0000,將UBL二進(jìn)制文件寫(xiě)入該flash塊。

      (3)擦寫(xiě)flash塊0xa002 0000-0xa008 0000,將video_preview工程二進(jìn)制文件寫(xiě)入該flash塊。

      (4)擦寫(xiě)flash塊0xa060 0000-0xa060 2000,將軸位寫(xiě)入該flash塊

      第四篇:軟件開(kāi)發(fā)期末總結(jié)

      MTTF:平均無(wú)故障時(shí)間;MTBF:平均故障間隔時(shí)間

      1軟件開(kāi)發(fā)的本質(zhì):高層概念到低層概念的映射。2.軟件的本質(zhì)特征:構(gòu)造性,演化性

      3面向?qū)ο蟮乃膫€(gè)原則:抽象,繼承,多態(tài),封裝。4抽象概念的理解:對(duì)抽象事物的理解;歸納概括;總結(jié)事物共同點(diǎn);進(jìn)行邏輯思維和推理 java最大特點(diǎn):簡(jiǎn)單,面向?qū)ο螅梢浦?,最大限度利用網(wǎng)絡(luò) java與C++區(qū)別:全局變量;goto語(yǔ)句;指針;內(nèi)存管理;類型轉(zhuǎn)換;頭文件

      7軟件危機(jī): 軟件的開(kāi)發(fā)和維護(hù)過(guò)程中所遇到的一系列嚴(yán)重問(wèn)題。不僅只軟件不能運(yùn)行,幾乎所有的軟件都存在這些問(wèn)題,所包含:如何開(kāi)發(fā)軟件;如何維護(hù)

      軟件過(guò)程 一系列任務(wù)步驟和框架

      8軟件工程: 是指導(dǎo)計(jì)算機(jī)軟件開(kāi)發(fā)和維護(hù)的一門(mén)工程學(xué)科。采用工程的概念、原理、技術(shù)和方法來(lái)開(kāi)發(fā)與維護(hù)軟件,把經(jīng)過(guò)時(shí)間考驗(yàn)而證明正確的管理技術(shù)和當(dāng)前能夠得到的最好的技術(shù)方法結(jié)合起來(lái),以經(jīng)濟(jì)地開(kāi)發(fā)出高質(zhì)量的軟件并有效地維護(hù)它,這就是軟件工程。

      9中間件 定義:是位于平臺(tái)(硬件和操作系統(tǒng))和應(yīng)用之間的通用服務(wù),這些服務(wù)具有標(biāo)準(zhǔn)的程序接口和協(xié)議。目的:提出中間件的概念是為解決分布異構(gòu)問(wèn)題。分類:基礎(chǔ)中間件;業(yè)務(wù)中間件;領(lǐng)域中間件。構(gòu)件:是系統(tǒng)中實(shí)際存在的可更換部分,它實(shí)現(xiàn)特定的功能,符合一套接口標(biāo)準(zhǔn)并實(shí)現(xiàn)一組接口 組件:組件技術(shù)就是利用某種編程手段,將一些人們所關(guān)心的,但又不便于讓最終用戶去直接操作的細(xì)節(jié)進(jìn)行了封裝,同時(shí)對(duì)各種業(yè)務(wù)邏輯規(guī)則進(jìn)行了實(shí)現(xiàn),用于處理用戶的內(nèi)部操作細(xì)節(jié),甚至于將安全機(jī)制和事物機(jī)制體現(xiàn)的淋漓盡致。而這個(gè)封裝體就常常的被我們稱作組件。12 軟件生產(chǎn)線:是共享同樣的體系結(jié)構(gòu)和實(shí)現(xiàn)平臺(tái)的軟件系統(tǒng)的集合,它是具有公共的系統(tǒng)需求集的軟件系統(tǒng)。這些需求是針對(duì)一組共享公共的設(shè)計(jì)和標(biāo)準(zhǔn)(或構(gòu)件)的產(chǎn)品族,或者是一類特定的行為或任務(wù)。

      13操作系統(tǒng)發(fā)展趨勢(shì):操作系統(tǒng)內(nèi)核將呈現(xiàn)多平臺(tái)統(tǒng)一的趨勢(shì)

      14軟件開(kāi)發(fā)趨勢(shì)

      開(kāi)源:兩個(gè)作用,社區(qū)和標(biāo)準(zhǔn)的建立。SOA:面向服務(wù)的體系結(jié)構(gòu);IT治理:公司治理的一部分。

      15軟件開(kāi)發(fā)技術(shù)趨勢(shì)(1)下一代Web開(kāi)發(fā);(2)企

      業(yè)應(yīng)用2.0(SOA).(3)系統(tǒng)開(kāi)發(fā).(4)開(kāi)發(fā)工具和語(yǔ)言.(5)項(xiàng)目管理及安全 不同的軟件開(kāi)發(fā)方法(1)結(jié)構(gòu)化開(kāi)發(fā)方法(2)面

      向?qū)ο箝_(kāi)發(fā)方法(3)統(tǒng)一軟件開(kāi)發(fā)過(guò)程(4)敏捷軟件開(kāi)發(fā).軟件的體系結(jié)構(gòu):一個(gè)程序或系統(tǒng)各構(gòu)件的結(jié)

      構(gòu),他們之間的相互關(guān)系及進(jìn)行設(shè)計(jì)的原則和指導(dǎo)方針;本質(zhì):對(duì)復(fù)雜事物的抽象; 一定時(shí)間內(nèi)保持穩(wěn)定 三要素:構(gòu)件的層次結(jié)構(gòu);構(gòu)件之間交互方式;數(shù)據(jù)結(jié)構(gòu)

      組成元素從靜態(tài)模式轉(zhuǎn)向動(dòng)態(tài)模式,組件模塊有被動(dòng)調(diào)用轉(zhuǎn)向主動(dòng)調(diào)用以適應(yīng)系統(tǒng)環(huán)境 軟件架構(gòu)技術(shù):根據(jù)項(xiàng)目情況分析系統(tǒng)行為,設(shè)計(jì)系統(tǒng)組件,給出構(gòu)架表示方式,描述構(gòu)架的各個(gè)方面,最后對(duì)系統(tǒng)構(gòu)架進(jìn)行精化??蚣鼙燃軜?gòu)更加具體 數(shù)據(jù)庫(kù)設(shè)計(jì) 方法:(1)屬性主導(dǎo)設(shè)計(jì)(2)實(shí)體主

      導(dǎo)設(shè)計(jì); 遵循原則:(1)信息隱藏(2)適當(dāng)冗余(3)慎用外鍵 數(shù)據(jù)一致性:域完整性,實(shí)體完整性,引用完整性,數(shù)據(jù)有效性 插件 定義:系統(tǒng)運(yùn)行時(shí)的功能單元,是一種遵

      循一定規(guī)范的應(yīng)用程序結(jié)構(gòu)編寫(xiě)出來(lái)的程序。呈現(xiàn)方式:運(yùn)行時(shí)根據(jù)外部配置文件來(lái)定 基本功能:插件注冊(cè),管理和調(diào)用 軟件質(zhì)量定義 明確聲明的功能和性能需求,明

      確文檔化過(guò)得開(kāi)發(fā)標(biāo)準(zhǔn),以及專業(yè)人員開(kāi)發(fā)的軟件應(yīng)具有的所有隱含特征 軟件需求是進(jìn)行質(zhì)量度量的基礎(chǔ),軟件質(zhì)量特性反應(yīng)了軟件的本質(zhì)。影響軟件質(zhì)量的4個(gè)方面:開(kāi)發(fā)技術(shù);人員素

      質(zhì);成本時(shí)間,進(jìn)度;過(guò)程質(zhì)量 軟件項(xiàng)目管理 為了使軟件項(xiàng)目能夠按照預(yù)定的成本,進(jìn)度,質(zhì)量順利完成,對(duì)成本,人員,進(jìn)度,質(zhì)量,風(fēng)險(xiǎn)等進(jìn)行分析和管理的活動(dòng)。24 軟件配置: 計(jì)算機(jī)程序(源代碼和可執(zhí)行程序);

      描述計(jì)算機(jī)程序的文檔(針對(duì)開(kāi)發(fā)技術(shù)者和用戶); 數(shù)據(jù)(包含程序內(nèi)部和外部)軟件維護(hù)和軟件配置管理的區(qū)別: 維護(hù)是發(fā)生

      在軟件以交付給客戶,并且投資運(yùn)行后的一系列軟件工程活動(dòng);軟件配置管理則是當(dāng)軟件項(xiàng)目開(kāi)始,并且僅僅當(dāng)軟件退出運(yùn)行后在終止的一組跟蹤和控制活動(dòng) 軟件過(guò)程成熟度:指一個(gè)特定的軟件過(guò)程被顯示定義、管理、度量、和能行的程度 JavaBean開(kāi)發(fā)的三個(gè)階段:構(gòu)造階段,內(nèi)造階段,執(zhí)行階段; 包含的基本元素:屬性,方法,事件 一個(gè)Java對(duì)象具有以下特征就可以是JavaBeans 定制、持久性、通信、反省 簡(jiǎn)單的時(shí)說(shuō)(1)作為一個(gè)類必須被聲明為public(2)必須要有g(shù)et/set方法(3)有構(gòu)造函數(shù)但不能有參數(shù) 29 引發(fā)事件 當(dāng)javaBean觸發(fā)某個(gè)事件是,javabean講點(diǎn)用該事件的監(jiān)聽(tīng)對(duì)象的響應(yīng)函數(shù) 30 監(jiān)聽(tīng)事件 javabean被添加到某個(gè)類改事件的監(jiān)聽(tīng)隊(duì)列中,并且具有該事件的響應(yīng)函數(shù),被監(jiān)聽(tīng)類的此事件被激發(fā)時(shí)被監(jiān)聽(tīng)類就會(huì)調(diào)用javaBean的響應(yīng)函數(shù)

      JDBC工作的四個(gè)主要組件 java應(yīng)用程序,JDBC驅(qū)動(dòng)器管理器、驅(qū)動(dòng)器,數(shù)據(jù)源

      數(shù)據(jù)源的種類 用戶DNS、系統(tǒng)DNS 文件DNS 33 java多線程的生命周期 新建狀態(tài);就緒狀態(tài)或可運(yùn)行狀態(tài);運(yùn)行狀態(tài)、阻塞狀態(tài)、消亡狀態(tài) 33 J2EE規(guī)定的web曾包括 jsp頁(yè)面、基于web的java applet、以及用于動(dòng)態(tài)生成的html頁(yè)面的Servlet構(gòu)成。

      作業(yè) 1簡(jiǎn)述Servlet設(shè)計(jì)中涉及的類和接口

      (1)Servlet interface: 所有的servlet直接或間接實(shí)現(xiàn)這個(gè)interface, 它提供安排servlet與客戶端聯(lián)系的方法.最關(guān)鍵的方法是Service,負(fù)責(zé)處理ServletRequest對(duì)象和ServletResponse對(duì)象。2)HttpServlet class: 實(shí)現(xiàn)Servlet interface,重寫(xiě)了Service方法以區(qū)分請(qǐng)求(常見(jiàn)的HTTP請(qǐng)求類型是GET和POST),并調(diào)用相應(yīng)的方法來(lái)處理(doGet、doPost)。

      servlet接收來(lái)自客戶端的調(diào)用請(qǐng)求, 它接收兩個(gè)對(duì)象: 一個(gè)是ServletRequest,另外一個(gè)是ServletResponse。

      3)HttpServletRequest interface: 概括從客戶端到服務(wù)器之間的聯(lián)系,實(shí)現(xiàn)該接口的對(duì)象包含了客戶端的請(qǐng)求信息。

      4)HttpServletResponse interface: 概括從Servlet返回客戶端的聯(lián)系,實(shí)現(xiàn)該接口的對(duì)象提供了方法,使Servlet向客戶端發(fā)回響應(yīng)。

      1.現(xiàn)有數(shù)據(jù)庫(kù)db位于名為lz的MS SQL Server

      服務(wù)器上,用戶名為sa,密碼為空,請(qǐng)編寫(xiě)數(shù)據(jù)庫(kù)連接dbConnect類,實(shí)現(xiàn)數(shù)據(jù)庫(kù)的連接、返回連接對(duì)象及重載有關(guān)的close()方法。public class dbConnect {

      public dbConnect(){

      try{

      Class.forName(“com.microsoft.jdbc.sqls

      erver.SQLServerDriver”);

      }

      catch(ClassNotFoundException ee){

      }

      }

      public static Connection getconn()throws SQLException{

      String url

      =

      “jdbc:microsoft:sqlserver://lz:1433;DatabaseName=

      db”;

      String username= “sa”;

      String password= "";

      return

      DriverManager.getConnection(url,username,password);

      }

      public static void close(ResultSet rs){

      try{

      rs.close();

      }

      catch(Exception ex){

      }

      }

      public static void close(Statement stmt){

      try{

      stmt.close();

      }

      catch(Exception ex){

      }

      }

      public static void close(Connection conn){

      try{

      conn.close();

      }

      catch(Exception ex){

      }

      }

      private static dbConnect dbconn = new dbConnect();

      }

      第五篇:一份高質(zhì)量的總結(jié)如何寫(xiě)

      一份高質(zhì)量的總結(jié)如何寫(xiě)?

      到了年尾,各公司開(kāi)始忙著寫(xiě)年終總結(jié),班組年終總結(jié),個(gè)人年終總結(jié),銷售年終總結(jié),財(cái)務(wù)年終總結(jié)??很多人為此頭疼不已,不知道年終總結(jié)該如何寫(xiě)?下面一篇文章,教你如何寫(xiě)出一篇高質(zhì)量的年終總結(jié)。

      一份高質(zhì)量的總結(jié)究竟應(yīng)該如何寫(xiě)呢?

      一、要充分認(rèn)識(shí)到總結(jié)的要義??偨Y(jié)是最好的老師,沒(méi)有總結(jié)就沒(méi)有進(jìn)步,總結(jié)是一面鏡子,通過(guò)總結(jié)可以全面地對(duì)自己成績(jī)與教訓(xùn)、長(zhǎng)處與不足、困難與機(jī)遇的進(jìn)行客觀評(píng)判,為下一步工作理清思路,明確目標(biāo),制訂措施,提供參考和保障。所以總結(jié)不僅僅是給領(lǐng)導(dǎo)看的,更是對(duì)自己進(jìn)行全方位的剖析,使自己更加認(rèn)識(shí)自己,發(fā)揮優(yōu)點(diǎn),彌補(bǔ)不足,不斷提高。為此,必須認(rèn)識(shí)到總結(jié)的重要意義。當(dāng)然各級(jí)領(lǐng)導(dǎo)也要重視總結(jié)的重要性,要讓下屬?gòu)V開(kāi)言道,言無(wú)不盡,言者無(wú)罪,實(shí)事求是,客觀認(rèn)真地總結(jié)。

      二、對(duì)一年來(lái)工作的回顧。對(duì)一年來(lái)各項(xiàng)工作的完成情況進(jìn)行總結(jié),全面總結(jié)成績(jī):各項(xiàng)計(jì)劃完成了多少、銷售指標(biāo)(銷量、銷售額、回款、利潤(rùn))完成情況、與去年同期相比各項(xiàng)任務(wù)是否有增長(zhǎng)、產(chǎn)品結(jié)構(gòu)是否得到優(yōu)化、渠道建設(shè)和客戶關(guān)系是否得到加強(qiáng)、經(jīng)銷商的素質(zhì)是否得到提高、經(jīng)銷商與消費(fèi)者對(duì)品牌的滿意度和忠誠(chéng)度是否得到提升、競(jìng)爭(zhēng)對(duì)手衰退了沒(méi)有、如果作為團(tuán)隊(duì)領(lǐng)導(dǎo)還要總結(jié)團(tuán)隊(duì)建設(shè)、培訓(xùn)學(xué)習(xí)等方面的內(nèi)容。

      三、分析取得成績(jī)的原因。沒(méi)有人會(huì)隨隨便便成功,每一個(gè)成功的后面都是付出的艱辛努力。認(rèn)真分析取得成績(jī)的原因,總結(jié)經(jīng)驗(yàn),并使之得以傳承,是實(shí)現(xiàn)工作業(yè)績(jī)持續(xù)提升的前提和基礎(chǔ)。成績(jī)固然要全面總結(jié),原因更要認(rèn)真客觀分析:

      1、成績(jī)的取得客觀因素分析:行業(yè)宏觀環(huán)境的勢(shì)利性、競(jìng)爭(zhēng)對(duì)手失誤所造成的機(jī)會(huì)、公司所給予的資源支持程度、團(tuán)隊(duì)領(lǐng)導(dǎo)在具體方面的指導(dǎo)、同事的幫助。

      2、成績(jī)?nèi)〉玫闹饔^因素分析:自己對(duì)目標(biāo)任務(wù)的認(rèn)識(shí)和分解、自己對(duì)市場(chǎng)的前瞻性認(rèn)識(shí)、自己的困難的挑戰(zhàn)意識(shí)、自己自我學(xué)習(xí)素質(zhì)提升、解決問(wèn)題能力提升、自己對(duì)市場(chǎng)變化的反應(yīng)能力。

      四、分析導(dǎo)致工作目標(biāo)沒(méi)有達(dá)成的失誤和問(wèn)題。人貴有自知之明,總結(jié)并不是要總結(jié)得形勢(shì)一片大好,必須認(rèn)真客觀的分析在工作中的失誤和存在的問(wèn)題。通過(guò)分析問(wèn)題,查找原因,認(rèn)識(shí)不足,不斷改進(jìn)和提高,實(shí)現(xiàn)工作質(zhì)量的持續(xù)提高。來(lái)反思自己為什么沒(méi)有進(jìn)步。一般來(lái)說(shuō)工作中往往會(huì)存在以下的失誤和問(wèn)題:

      1、主觀認(rèn)識(shí)不足,思路不夠高度重視。

      2、自身沒(méi)有遠(yuǎn)大理想與目標(biāo),對(duì)自己不能嚴(yán)格要求,對(duì)下屬和自己過(guò)于放任。

      3、計(jì)劃制訂得不合理,脫離客觀實(shí)際。

      4、對(duì)計(jì)劃的分解不到位,執(zhí)行和過(guò)程監(jiān)控不到位。

      5、對(duì)競(jìng)爭(zhēng)對(duì)手的跟蹤分析不深入,市場(chǎng)反應(yīng)速度滯后。

      6、產(chǎn)品結(jié)構(gòu)、價(jià)格策略、促銷組合、渠道建設(shè)、品牌傳播計(jì)劃不合理、執(zhí)行不到位。

      7、團(tuán)隊(duì)管理能力差、個(gè)體成員素質(zhì)差,不能勝任工作的要求。

      8、來(lái)自于競(jìng)爭(zhēng)對(duì)手的強(qiáng)大壓力,使自身的優(yōu)勢(shì)不能突顯。

      五、對(duì)當(dāng)前形勢(shì)的展望與分析。總結(jié)不僅要回顧過(guò)去,還要展望未來(lái)。要對(duì)當(dāng)前的形勢(shì)現(xiàn)狀與未來(lái)的發(fā)展進(jìn)行客觀深入的分析:

      1、外界宏觀與微觀環(huán)境分析:行業(yè)發(fā)展現(xiàn)狀與發(fā)展、競(jìng)爭(zhēng)對(duì)手現(xiàn)狀與動(dòng)向預(yù)測(cè)、區(qū)域市場(chǎng)現(xiàn)狀與發(fā)展、渠道組織與關(guān)系現(xiàn)狀、消費(fèi)者的滿意度和忠誠(chéng)度總體評(píng)價(jià)。

      2、內(nèi)部環(huán)境分析。企業(yè)的戰(zhàn)略正確性和明晰性、企業(yè)在產(chǎn)品、價(jià)格、促銷、品牌等資源方面的匹配程度。

      3、自身現(xiàn)狀分析。自身的目標(biāo)與定位、工作思路和理念、個(gè)人素質(zhì)方面的優(yōu)勢(shì)與差距。通過(guò)對(duì)現(xiàn)狀與未來(lái)的客觀分析,能夠更加清楚所面臨的困難和機(jī)遇。從而對(duì)困難有清醒的認(rèn)識(shí)和深刻的分析,找到解決困難的方法,對(duì)機(jī)遇有較強(qiáng)的洞察力,及早做好搶抓機(jī)遇的各項(xiàng)準(zhǔn)備。

      六、下一工作計(jì)劃與安排。總結(jié)上年工作當(dāng)然是總結(jié)的重點(diǎn),但更好的籌劃和安排下年工作才總結(jié)的目的,所以下一工作計(jì)劃和安排同等重要。

      1、明確工作的主要思路。戰(zhàn)略決定命運(yùn),思路決定出路,良好的業(yè)績(jī)必須要有清楚正確的思路的支撐。否則人就變成了無(wú)頭蒼蠅,偏離了方向和軌道,就會(huì)越走越遠(yuǎn)。

      2、新一工作的具體目標(biāo):銷量目標(biāo)、回款目標(biāo)、利潤(rùn)目標(biāo)、渠道建設(shè)目標(biāo)、區(qū)域市場(chǎng)發(fā)展目標(biāo)、團(tuán)隊(duì)建設(shè)目標(biāo)、學(xué)習(xí)培訓(xùn)目標(biāo)。

      3、完成計(jì)劃的具體方法:團(tuán)隊(duì)整體素質(zhì)與協(xié)作能力的提升、資源需要和保障措施、目標(biāo)任務(wù)的分解、渠道的開(kāi)發(fā)與管理、產(chǎn)品結(jié)構(gòu)的調(diào)整與優(yōu)化、市場(chǎng)秩序的規(guī)范管理、客戶關(guān)系管理與加強(qiáng)、品牌策略創(chuàng)新與高效傳播

      年末歲尾,正是各單位、各部門(mén)總結(jié)工作的時(shí)候,要做好年終總結(jié)工作,余以為必須做到“五忌、五體現(xiàn)”:

      一忌事無(wú)俱細(xì),體現(xiàn)突出重點(diǎn)的原則。全年工作方方面面,大小事情很多,無(wú)需事無(wú)俱細(xì)地對(duì)所有工作進(jìn)行總結(jié),芝麻西瓜一起抓。重點(diǎn)應(yīng)該是本單位、本部門(mén)承擔(dān)的任務(wù)指標(biāo)完成情況,隊(duì)伍建設(shè)情況,以及為完成指標(biāo)克服困難所采取的措施等。用事實(shí)和數(shù)字說(shuō)話,做到有理有據(jù)。

      二忌成績(jī)注水,體現(xiàn)實(shí)事求是的原則。總結(jié)成績(jī)必須是事實(shí)成果的匯總歸類和條理化,既不能人為拔高,注水膨脹,也不能把別人成果拿來(lái)共享,把年初工作計(jì)劃變換口氣當(dāng)成績(jī)來(lái)總結(jié),更不能筆下生花,無(wú)中生有,閉門(mén)造車。

      三忌簡(jiǎn)單羅列,體現(xiàn)依事說(shuō)理的原則。工作總結(jié)不僅僅是工作量的羅列匯總,而是要通過(guò)總結(jié)上升到理性的高度來(lái)認(rèn)識(shí)所做的工作。要通過(guò)對(duì)全年的工作總結(jié)得出一般性規(guī)律,形成有益的經(jīng)驗(yàn),達(dá)成一致的認(rèn)識(shí),使其對(duì)今后工作具有指導(dǎo)作用,對(duì)他人具有借鑒作用,沒(méi)有經(jīng)驗(yàn)體會(huì)的總結(jié)是不全面的,不完整的,也是毫無(wú)意義的。

      四忌回避問(wèn)題,體現(xiàn)一分為二的原則。總結(jié)的目的全在于應(yīng)用、發(fā)展和提高?!俺煽?jī)不講跑不掉,問(wèn)題不講不得了”。在總結(jié)成績(jī)的同時(shí),要客觀地查找工作中存在的不足和問(wèn)題,正視缺點(diǎn),以警示今后的工作,少走彎路,避免在將來(lái)的工作中犯同樣的錯(cuò)誤,切忌“一路頌歌,滿地鮮花”。

      五忌單一行為,體現(xiàn)全員參與的原則。有總結(jié)才會(huì)有提高,才會(huì)有進(jìn)步。工作總結(jié)不能靠辦公室一個(gè)部門(mén)來(lái)做,也不能由秘書(shū)一個(gè)人來(lái)完成,而應(yīng)該由各系統(tǒng)、各部門(mén)、各崗位共同來(lái)做,領(lǐng)導(dǎo)干部本人也不能例外。只有大家都來(lái)總結(jié),才能做到人人長(zhǎng)經(jīng)驗(yàn),個(gè)個(gè)有提高,才能促進(jìn)整體工作的協(xié)調(diào)健康發(fā)展。

      下載高質(zhì)量軟件模塊開(kāi)發(fā)總結(jié)(最終5篇)word格式文檔
      下載高質(zhì)量軟件模塊開(kāi)發(fā)總結(jié)(最終5篇).doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        一份高質(zhì)量年度總結(jié)如何寫(xiě)(五篇)

        一份高質(zhì)量年度總結(jié)如何寫(xiě)?【導(dǎo)讀】:到了年尾,各公司開(kāi)始忙著寫(xiě)年終總結(jié),班組年終總結(jié),個(gè)人年終總結(jié),銷售年終總結(jié),財(cái)務(wù)年終總結(jié)??很多人為此頭疼不已,不知道年終總結(jié)該如何寫(xiě)?下面......

        軟件開(kāi)發(fā)年終個(gè)人自我總結(jié)

        20xx年是我進(jìn)入公司的第一年,也是我的工作能力得到提高和快速發(fā)展的一年,在公司領(lǐng)導(dǎo)的指導(dǎo)和同事以及其它部門(mén)的支持配合下,最后在經(jīng)過(guò)自己的努力,完成了自己所要完成的各項(xiàng)工作......

        最新軟件開(kāi)發(fā)實(shí)習(xí)個(gè)人總結(jié) (合集)

        軟件開(kāi)發(fā)實(shí)習(xí)個(gè)人總結(jié)短短兩周的很快就過(guò)去了,在xx的實(shí)習(xí)馬上就要過(guò)去了,最新軟件開(kāi)發(fā)實(shí)習(xí)個(gè)人總結(jié)。雖然只有短短的兩周,但我學(xué)會(huì)了很多知識(shí),熟悉了軟件開(kāi)發(fā)的流程,也很好的增強(qiáng)......

        aspnet軟件開(kāi)發(fā)學(xué)習(xí)總結(jié)

        asp.net學(xué)習(xí)經(jīng)驗(yàn)總結(jié)通過(guò)幾個(gè)月的學(xué)習(xí),我初步掌握ASP.NET開(kāi)發(fā)平臺(tái)的基本知識(shí),也通過(guò)老師的教學(xué),完成了實(shí)際項(xiàng)目中的應(yīng)用。由于大學(xué)學(xué)習(xí)中打下了較為扎實(shí)的C#基礎(chǔ),所以在選擇開(kāi)發(fā)......

        軟件開(kāi)發(fā)心得總結(jié)(精選5篇)

        有感于網(wǎng)盤(pán)開(kāi)發(fā)過(guò)程 有感于網(wǎng)盤(pán)開(kāi)發(fā)過(guò)程 ............................ 1 一、軟件開(kāi)發(fā)個(gè)人體會(huì): ...................... 2 二、做軟件開(kāi)發(fā)我覺(jué)得要明白: ........................

        輕負(fù)擔(dān)高質(zhì)量總結(jié)

        學(xué)校的追求,家長(zhǎng)的希望 ——“輕負(fù)擔(dān)、高質(zhì)量”先進(jìn)經(jīng)驗(yàn)總結(jié) 坊子區(qū)南流小學(xué) 2009年10月 學(xué)校的追求,家長(zhǎng)的希望 —— “輕負(fù)擔(dān)、高質(zhì)量”先進(jìn)經(jīng)驗(yàn)總結(jié) 坊子區(qū)南流小學(xué) 坊......

        **區(qū)高質(zhì)量發(fā)展總結(jié)

        **區(qū)高質(zhì)量發(fā)展總結(jié)“101%”的服務(wù),比100%多了1%。正是這多出的1%,讓**區(qū)憑借一流的營(yíng)商環(huán)境在經(jīng)濟(jì)基礎(chǔ)強(qiáng)大的江蘇省脫穎而出,變工業(yè)基礎(chǔ)薄弱的劣勢(shì)為后發(fā)優(yōu)勢(shì)、生態(tài)優(yōu)勢(shì)、區(qū)位......

        大學(xué)生軟件開(kāi)發(fā)實(shí)習(xí)總結(jié)[推薦5篇]

        軟件開(kāi)發(fā)實(shí)習(xí)已經(jīng)結(jié)束,為此做一實(shí)習(xí)總結(jié),下面是大學(xué)生三篇總結(jié)范文,歡迎大家閱讀學(xué)習(xí)。大學(xué)生軟件開(kāi)發(fā)實(shí)習(xí)總結(jié)一:本人自_年9月份參加工作至今, 六個(gè)月的實(shí)習(xí)時(shí)間已經(jīng)結(jié)束。在這......