什么是BETA,RC,ALPHA版

1. 软件版本阶段说明
* Alpha版: 此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,一般而言,该版本软件的Bug较多,需要继续修改。
* Beta版: 该版本相对于α版已有了很大的改进,消除了严重的错误,但还是存在着一些缺陷,需要经过多次测试来进一步消除,此版本主要的修改对像是软件的UI。
* RC版: 该版本已经相当成熟了,基本上不存在导致错误的BUG,与即将发行的正式版相差无几。
* Release版: 该版本意味“最终版本”,在前面版本的一系列测试版之后,终归会有一个正式版本,是最终交付用户使用的一个版本。该版本有时也称为标准版。一般情况下,Release不会以单词形式出现在软件封面上,取而代之的是符号(R)。

2. 版本命名规范
软件版本号由四部分组成,
第一个1为主版本号,第二个1为子版本号,第三个1为阶段版本号,第四部分为日期版本号加希腊字母版本号,
希腊字母版本号共有5种,分别为:base、alpha、beta、RC、release。
例如:1.1.1.051021_beta。

3. 版本号定修改规则
* 主版本号(1):当功能模块有较大的变动,比如增加多个模块或者整体架构发生变化。此版本号由项目决定是否修改。
* 子版本号(1):当功能有一定的增加或变化,比如增加了对权限控制、增加自定义视图等功能。此版本号由项目决定是否修改。
* 阶段版本号(1):一般是 Bug 修复或是一些小的变动,要经常发布修订版,时间间隔不限,修复一个严重的bug即可发布一个修订版。此版本号由项目经理决定是否修改。
* 日期版本号(051021):用于记录修改项目的当前日期,每天对项目的修改都需要更改日期版本号。此版本号由开发人员决定是否修改。
* 希腊字母版本号(beta):此版本号用于标注当前版本的软件处于哪个开发阶段,当软件进入到另一个阶段时需要修改此版本号。此版本号由项目决定是否修改。

4. 文件命名规范
文件名称由四部分组成:
第一部分为项目名称,第二部分为文件的描述,第三部分为当前软件的版本号,第四部分为文件阶段标识加文件后缀,
例如:项目外包平台测试报告1.1.1.051021_beta_b.xls,此文件为项目外包平台的测试报告文档,版本号为:1.1.1.051021_beta。
如果是同一版本同一阶段的文件修改过两次以上,则在阶段标识后面加以数字标识,每次修改数字加1,
项目外包平台测试报告1.1.1.051021_beta_b1.xls。
当有多人同时提交同一份文件时,可以在阶段标识的后面加入人名或缩写来区别,
例如:项目外包平台测试报告 1.1.1.051021_beta_b_LiuQi.xls。
当此文件再次提交时也可以在人名或人名缩写的后面加入序号来区别,
例如:项目外包平台测试报告1.1.1.051021_beta_b_LiuQi2.xls。

5. 版本号的阶段标识
软件的每个版本中包括11个阶段,详细阶段描述如下:
阶段名称 阶段标识
需求控制          a
设计阶段          b
编码阶段          c
单元测试          d
单元测试修改 e
集成测试          f
集成测试修改 g
系统测试          h
系统测试修改 i
验收测试          j
验收测试修改 k

posted @ 2008-11-03 19:10 Randy 阅读(249) | 评论 (0)编辑 收藏

人生最大的敌人

狭隘的偏见,狂妄的骄傲,无谓的羞耻

posted @ 2008-10-23 09:21 Randy 阅读(81) | 评论 (0)编辑 收藏

仅通过崩溃地址找出源代码的出错行

VC2005中 首先打开 C/C++-输出文件-汇编输出-Assembly,Machine code, and source 然后打开 链接器-调试-生成映射文件 “非法操作”对话框出现时,记录下产生崩溃的地址 在Map文件 Rva+Base 中找到与崩溃地址最接近但是小于它的地址 那个地址的所对应的函数,基本就是崩溃代码的入口函数 记录下崩溃代码入口函数的名称和地址 在COD文件中,查找入口函数起始位置, 实际代码偏移地址 = 崩溃代码地址 - 入口函数地址 在入口函数地址开始位置,偏移实际代码偏移地址后。就可以定位到出错的代码行了 经验证。此方法有效。哈哈。又学会了一招

posted @ 2008-10-21 20:17 Randy 阅读(147) | 评论 (0)编辑 收藏

volatile

尽管C和C++标准对于线程都明显的“保持沉默”,但它们以volatile关键字的形式,确实为多线程保留了一点特权。
 就象大家更熟悉的const一样,volatile是一个类型修饰符(type modifier)。
它是被设计用来修饰被不同线程访问和修改的变量。
如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。
class Gadget
 

publicvoid Wait() 

while (!flag_) 

Sleep(
1000); 
// sleeps for 1000 milliseconds 
}
 
}
 
void Wakeup() 

flag_ 
= true
}

  
private:
 
bool flag_; 
}

上面代码中Gadget::Wait的目的是每过一秒钟去检查一下flag_成员变量,当flag_被另一个线程设为true时,该函数才会返回。
然而,这个Wait函数是错误的。
假设编译器发现Sleep(1000)是调用一个外部的库函数,它不会改变成员变量flag_,那么编译器就可以断定它可以把flag_缓存在寄存器中,以后可以访问该寄存器来代替访问较慢的主板上的内存。
这对于单线程代码来说是一个很好的优化,但是在现在这种情况下,
它破坏了程序的正确性:当你调用了某个Gadget的Wait函数后,即使另一个线程调用了Wakeup,Wait还是会一直循环下去。
这是因为flag_的改变没有反映到缓存它的寄存器中去。编译器的优化未免有点太……乐观了。

在大多数情况下,把变量缓存在寄存器中是一个非常有价值的优化方法,如果不用的话很可惜。
C和C++给你提供了显式禁用这种缓存优化的机会。如果你声明变量是使用了volatile修饰符,
编译器就不会把这个变量缓存在寄存器里——每次访问都将去存取变量在内存中的实际位置。

这样你要对Gadget的Wait/Wakeup做的修改就是给flag_加上正确的修饰:

class Gadget 

public
private
volatile bool flag_;
 }

posted @ 2008-10-13 17:27 Randy 阅读(142) | 评论 (0)编辑 收藏

ios_base::binary

文本文件有一个并非必须使用的文件结束符0x26,但行结束符是必须遵守的\t\n或者\0x0d\0x0a,否则就不为文本文件.

posted @ 2008-10-12 18:09 Randy 阅读(660) | 评论 (0)编辑 收藏

破窗效应

一个碎了一块玻璃的房子,如果没有及时修补,很快其他的玻璃也会被打碎。 一段使用了全局变量和硬编码的代码,很快会充斥大量的全局变量和硬编码。

posted @ 2008-09-23 21:34 Randy 阅读(162) | 评论 (0)编辑 收藏

脚本

终于把UI的事件处理完全的使用了脚本来处理了,现在变成了UI属性信息由XML文件控制,UI逻辑由脚本来控制
终于不关程序的事了,程序只需要注册些UI所需要的API,就完全搞定,爽啊。
体系是在组件库中设定Script模型,然后在UIBase中实例一个脚本模型,并设置三种事件处理模型
第一种绑定静态函数回调
第二种接口脚本回调
第三种事件脚本回调

外部在启动前,注册相应脚本所需API进入程序,当某个UI事件被触发时,分派器根据当前脚本模型决定寻找接口脚本还是寻找事件脚本
如果找不到相关处理方法,再寻找静态回调。

同一程序中支持多个脚本模型实例.

脚本模型提供下列接口
设置脚本内变量值
得到脚本内变量值
执行脚本内某函数
注册程序某函数到脚本中
     ---静态函数
          ---成员函数

测试以完全通过,以后再发现问题就继续写咯


posted @ 2008-07-11 19:52 Randy 阅读(173) | 评论 (1)编辑 收藏

学子

04年~08年高校录取计划一览:
2004年:录取420万人 
2005年:录取504万人
2006年:录取530万人
2007年,录取567万人
2008年,计划录取599万人,考生1050万。

现状:
2007年尚有70万-80万大学生未能就业(04年录取生)
今中国高校毕业生将达到创纪录的559万人(05年录取生)
因此2008年实际需要就业的大学生将超过600万人(04~05级大学录取生)

这么多年的教育改革,确实使我们的教育普及率达到了一个前所未有的高度.
但教育体制的落后使学生们在学校根本无法接受到与社会合拍的培育.
为广大苦读的欣欣学子们叹息,未来之路看来并不平坦啊!


posted @ 2008-07-10 19:54 Randy 阅读(141) | 评论 (0)编辑 收藏

构思脚本体系

随着项目在VC2005下的逐步稳定,现在也彻底的更换到了VC2005
之前在写UI管理器时,,由于时间不够,只得将事件回调暂时以直接注册函数地址的形式注册进
UI管理器,看起来极度不爽,所以最近又回到了原来的问题,框架是否需要加入脚本支持,如
需要,是哪一部份需要,以现在的情况来看,UI体系是唯一需要脚本支持的,但是也曾徘徊过
究竟是将操作类注册进脚本,还是在程序内部封装API,再注册API进入脚本,现在也是决定了
实际的逻辑信息是不应该由脚本来进行控制的,而脚本确可以控制逻辑与逻辑之间的持续和关系
所以决定今天写出一个脚本体系用来真正完善UI体系。脚本的话,,,暂定也使用Lua吧,主要是
它比较小。。。一切。也都要等于写完才知道

posted @ 2008-07-10 09:47 Randy 阅读(120) | 评论 (0)编辑 收藏

更换VC2005

今天花了半天时间,将开发环境更换为了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打开文件前设置全局locale为本地环境,打开文件后再设置回去。                          

    ofstream writefile;
    string filename=("d:\我的文档\测试.txt");
    locale loc = locale::global(locale("")); //要打开的文件路径包含中文,设置全局locale为本地环境
    writefile.open(filename.c_str(),ios::out); //打开文件
    locale::global(loc);//恢复全局locale

用locale对象的name方法可以看到,通过locale("")构造出的locale对象的 name为"Chinese_People's Republic of China.936",而原始的locale对象的name为"C",也就是缺省的ANSI_C公约。

注意:如果使用locale loc = locale::global(locale(""))设置全局locale后没有用 locale::global(loc)恢复的话,那么在程序后面的cout语句就不能输出中午了,虽然这时候操作中文文件没有问题,但是这也是很容易让 人掉入陷阱的地方,应该值得注意。

posted @ 2008-06-28 00:56 Randy 阅读(242) | 评论 (0)编辑 收藏

仅列出标题
共4页: 1 2 3 4 
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

常用链接

留言簿(3)

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜