1. 軟件版本階段說明
* Alpha版: 此版本表示該軟件在此階段主要是以實(shí)現(xiàn)軟件功能為主,通常只在軟件開發(fā)者內(nèi)部交流,一般而言,該版本軟件的Bug較多,需要繼續(xù)修改。
* Beta版: 該版本相對于α版已有了很大的改進(jìn),消除了嚴(yán)重的錯(cuò)誤,但還是存在著一些缺陷,需要經(jīng)過多次測試來進(jìn)一步消除,此版本主要的修改對像是軟件的UI。
* RC版: 該版本已經(jīng)相當(dāng)成熟了,基本上不存在導(dǎo)致錯(cuò)誤的BUG,與即將發(fā)行的正式版相差無幾。
* Release版: 該版本意味“最終版本”,在前面版本的一系列測試版之后,終歸會有一個(gè)正式版本,是最終交付用戶使用的一個(gè)版本。該版本有時(shí)也稱為標(biāo)準(zhǔn)版。一般情況下,Release不會以單詞形式出現(xiàn)在軟件封面上,取而代之的是符號(R)。
2. 版本命名規(guī)范
軟件版本號由四部分組成,
第一個(gè)1為主版本號,第二個(gè)1為子版本號,第三個(gè)1為階段版本號,第四部分為日期版本號加希臘字母版本號,
希臘字母版本號共有5種,分別為:base、alpha、beta、RC、release。
例如:1.1.1.051021_beta。
3. 版本號定修改規(guī)則
* 主版本號(1):當(dāng)功能模塊有較大的變動,比如增加多個(gè)模塊或者整體架構(gòu)發(fā)生變化。此版本號由項(xiàng)目決定是否修改。
* 子版本號(1):當(dāng)功能有一定的增加或變化,比如增加了對權(quán)限控制、增加自定義視圖等功能。此版本號由項(xiàng)目決定是否修改。
* 階段版本號(1):一般是 Bug 修復(fù)或是一些小的變動,要經(jīng)常發(fā)布修訂版,時(shí)間間隔不限,修復(fù)一個(gè)嚴(yán)重的bug即可發(fā)布一個(gè)修訂版。此版本號由項(xiàng)目經(jīng)理決定是否修改。
* 日期版本號(051021):用于記錄修改項(xiàng)目的當(dāng)前日期,每天對項(xiàng)目的修改都需要更改日期版本號。此版本號由開發(fā)人員決定是否修改。
* 希臘字母版本號(beta):此版本號用于標(biāo)注當(dāng)前版本的軟件處于哪個(gè)開發(fā)階段,當(dāng)軟件進(jìn)入到另一個(gè)階段時(shí)需要修改此版本號。此版本號由項(xiàng)目決定是否修改。
4. 文件命名規(guī)范
文件名稱由四部分組成:
第一部分為項(xiàng)目名稱,第二部分為文件的描述,第三部分為當(dāng)前軟件的版本號,第四部分為文件階段標(biāo)識加文件后綴,
例如:項(xiàng)目外包平臺測試報(bào)告1.1.1.051021_beta_b.xls,此文件為項(xiàng)目外包平臺的測試報(bào)告文檔,版本號為:1.1.1.051021_beta。
如果是同一版本同一階段的文件修改過兩次以上,則在階段標(biāo)識后面加以數(shù)字標(biāo)識,每次修改數(shù)字加1,
項(xiàng)目外包平臺測試報(bào)告1.1.1.051021_beta_b1.xls。
當(dāng)有多人同時(shí)提交同一份文件時(shí),可以在階段標(biāo)識的后面加入人名或縮寫來區(qū)別,
例如:項(xiàng)目外包平臺測試報(bào)告 1.1.1.051021_beta_b_LiuQi.xls。
當(dāng)此文件再次提交時(shí)也可以在人名或人名縮寫的后面加入序號來區(qū)別,
例如:項(xiàng)目外包平臺測試報(bào)告1.1.1.051021_beta_b_LiuQi2.xls。
5. 版本號的階段標(biāo)識
軟件的每個(gè)版本中包括11個(gè)階段,詳細(xì)階段描述如下:
階段名稱 階段標(biāo)識
需求控制 a
設(shè)計(jì)階段 b
編碼階段 c
單元測試 d
單元測試修改 e
集成測試 f
集成測試修改 g
系統(tǒng)測試 h
系統(tǒng)測試修改 i
驗(yàn)收測試 j
驗(yàn)收測試修改 k
VC2005中
首先打開 C/C++-輸出文件-匯編輸出-Assembly,Machine code, and source
然后打開 鏈接器-調(diào)試-生成映射文件
“非法操作”對話框出現(xiàn)時(shí),記錄下產(chǎn)生崩潰的地址
在Map文件 Rva+Base 中找到與崩潰地址最接近但是小于它的地址
那個(gè)地址的所對應(yīng)的函數(shù),基本就是崩潰代碼的入口函數(shù)
記錄下崩潰代碼入口函數(shù)的名稱和地址
在COD文件中,查找入口函數(shù)起始位置,
實(shí)際代碼偏移地址 = 崩潰代碼地址 - 入口函數(shù)地址
在入口函數(shù)地址開始位置,偏移實(shí)際代碼偏移地址后。就可以定位到出錯(cuò)的代碼行了
經(jīng)驗(yàn)證。此方法有效。哈哈。又學(xué)會了一招
文本文件有一個(gè)并非必須使用的文件結(jié)束符0x26,但行結(jié)束符是必須遵守的\t\n或者\(yùn)0x0d\0x0a,否則就不為文本文件.
一個(gè)碎了一塊玻璃的房子,如果沒有及時(shí)修補(bǔ),很快其他的玻璃也會被打碎。
一段使用了全局變量和硬編碼的代碼,很快會充斥大量的全局變量和硬編碼。
終于把UI的事件處理完全的使用了腳本來處理了,現(xiàn)在變成了UI屬性信息由XML文件控制,UI邏輯由腳本來控制
終于不關(guān)程序的事了,程序只需要注冊些UI所需要的API,就完全搞定,爽啊。
體系是在組件庫中設(shè)定Script模型,然后在UIBase中實(shí)例一個(gè)腳本模型,并設(shè)置三種事件處理模型
第一種綁定靜態(tài)函數(shù)回調(diào)
第二種接口腳本回調(diào)
第三種事件腳本回調(diào)
外部在啟動前,注冊相應(yīng)腳本所需API進(jìn)入程序,當(dāng)某個(gè)UI事件被觸發(fā)時(shí),分派器根據(jù)當(dāng)前腳本模型決定尋找接口腳本還是尋找事件腳本
如果找不到相關(guān)處理方法,再尋找靜態(tài)回調(diào)。
同一程序中支持多個(gè)腳本模型實(shí)例.
腳本模型提供下列接口
設(shè)置腳本內(nèi)變量值
得到腳本內(nèi)變量值
執(zhí)行腳本內(nèi)某函數(shù)
注冊程序某函數(shù)到腳本中
---靜態(tài)函數(shù)
---成員函數(shù)
測試以完全通過,以后再發(fā)現(xiàn)問題就繼續(xù)寫咯
04年~08年高校錄取計(jì)劃一覽:
2004年:錄取420萬人
2005年:錄取504萬人
2006年:錄取530萬人
2007年,錄取567萬人
2008年,計(jì)劃錄取599萬人,考生1050萬。
現(xiàn)狀:
2007年尚有70萬-80萬大學(xué)生未能就業(yè)(04年錄取生)
今中國高校畢業(yè)生將達(dá)到創(chuàng)紀(jì)錄的559萬人(05年錄取生)
因此2008年實(shí)際需要就業(yè)的大學(xué)生將超過600萬人(04~05級大學(xué)錄取生)
這么多年的教育改革,確實(shí)使我們的教育普及率達(dá)到了一個(gè)前所未有的高度.
但教育體制的落后使學(xué)生們在學(xué)校根本無法接受到與社會合拍的培育.
為廣大苦讀的欣欣學(xué)子們嘆息,未來之路看來并不平坦啊!
隨著項(xiàng)目在VC2005下的逐步穩(wěn)定,現(xiàn)在也徹底的更換到了VC2005
了
之前在寫UI管理器時(shí),,由于時(shí)間不夠,只得將事件回調(diào)暫時(shí)以直接注冊函數(shù)地址的形式注冊進(jìn)
UI管理器,看起來極度不爽,所以最近又回到了原來的問題,框架是否需要加入腳本支持,如
需要,是哪一部份需要,以現(xiàn)在的情況來看,UI體系是唯一需要腳本支持的,但是也曾徘徊過
究竟是將操作類注冊進(jìn)腳本,還是在程序內(nèi)部封裝API,再注冊API進(jìn)入腳本,現(xiàn)在也是決定了
實(shí)際的邏輯信息是不應(yīng)該由腳本來進(jìn)行控制的,而腳本確可以控制邏輯與邏輯之間的持續(xù)和關(guān)系
所以決定今天寫出一個(gè)腳本體系用來真正完善UI體系。腳本的話,,,暫定也使用Lua吧,主要是
它比較小。。。一切。也都要等于寫完才知道
今天花了半天時(shí)間,將開發(fā)環(huán)境更換為了VC2005,不容易啊。。終于可以看迭代器了
記下一些移植中解決的問題
Log4cplus1.0.2 要在vs2005上編譯需要將include中的stringhelper.h的118行左右添加如下代碼:
typedef std::output_iterator_tag iterator_category;
并且將128行左右的__value改名,例如改成__rvalue
hash_map
從std 換到了 stdext
VC++ 2005中fstream對象無法訪問中午路徑下的文件
在用ifstream和ofstream打開文件前設(shè)置全局locale為本地環(huán)境,打開文件后再設(shè)置回去。
ofstream writefile;
string filename=("d:\我的文檔\測試.txt");
locale loc = locale::global(locale("")); //要打開的文件路徑包含中文,設(shè)置全局locale為本地環(huán)境
writefile.open(filename.c_str(),ios::out); //打開文件
locale::global(loc);//恢復(fù)全局locale
用locale對象的name方法可以看到,通過locale("")構(gòu)造出的locale對象的
name為"Chinese_People's Republic of
China.936",而原始的locale對象的name為"C",也就是缺省的ANSI_C公約。
注意:如果使用locale loc =
locale::global(locale(""))設(shè)置全局locale后沒有用
locale::global(loc)恢復(fù)的話,那么在程序后面的cout語句就不能輸出中午了,雖然這時(shí)候操作中文文件沒有問題,但是這也是很容易讓
人掉入陷阱的地方,應(yīng)該值得注意。