为什么 tdd不能采用软lte tdd切换流程技术

关注证券之星官方微博:
- 3G专题导读 - SCDMA - 正文
TD-SCDMA无线传输技术的突出特点
  0前言   通过近10年的努力,TD-SCDMA已从一项技术上升为一项国际标准,然后再形成一个产业链。   2006年,它必然成为我国部署3G网络的主角。根据业界的预测:到2008年,我国将会在大城市建成上亿用户的3G网络;到2010年,将有2亿以上的3G用户。那时,我国的3G时代才真正到来。   在认识3G的3项主流国际标准,即cdma2000、WCDMA和TD-SCDMA时,一定要仔细研究其技术特点,认真理解各项技术,要相信近8年来国际电联和3GPP,以及各国专家所认可的技术,相信3G是现阶段无线通信发展的必然阶段。   本文介绍了TD-SCDMA移动通信技术的特点及其中无线传输技术的地位,然后分析其特点,并简要介绍TD-SCDMA的未来发展。   1第三代移动通信系统的共同点   在日召开的ITUTG8/1第18次会议上通过了输出文件IMT_RSPC[2],标志着第三代移动通信标准的基本定型,TD-SCDMA、W-CDMA和cdma2000一起列入ITUIMT-RSPC,成为世界3大主流标准,然后由2个国际标准化组织3GPP和3GPP2分别制定和完善此3个主流标准。近年来,经过数千人数年的国际合作,标准均已基本定型。2006年1月,信息产业部也正式公布了我国的行业标准TD-SCDMA,标志着它将在近年内获得广泛应用。   1.1第三代移动通信系统的主要目标   a)具有高层次的业务质量,其中包括:   (a)提高话音和数据质量,支持网络的无缝连接;   (b)较好地解决传输误码和系统时延问题,因为移动数据业务对误码率和传输时延提出了更高的要求;   (c)提高频谱利用率,从而增加系统容量,以满足话音及多种数据业务的要求。   b)提供多种新型业务,包括宽带数据和视频业务。   c)具有高度的系统灵活性。其灵活性表现在实现统一接口,以规范无线寻呼、陆地蜂窝、无绳电话、卫星移动通信等多种系统。该系统必须能与各种形式的广域网进行相互操作及网络集成。灵活性还包括多功能、多环境能力、多操作模式、多频段运行等,以实现全球无缝漫游。   d)具有良好的系统兼容性能,首先必须能够与GSM等第二代移动通信系统兼容。   1.2第三代移动通信系统的主要要求[1]   因为3G考虑的业务是移动多媒体,即可以同时传输话音和数据,对数据传输,移动通信的主要问题是传输速率。为此,对3G及3G后的系统的主要要求就是如何利用无线手段来传输足够高的数据速率。简单地说,2005年前,在低速移动时,要求传输速率为384kbit/s;高速移动时为64或128kbit/s。2005年后,低速移动时应传输2~10Mbit/s的数   据;而2008年以后,则应当对每个用户提供传输至100Mbit/s的能力。对移动速度,则最高应能达到500km/h。   1.3第三代移动通信网络   第三代移动通信由卫星移动通信网和地面移动通信网所组成。它们将形成一个对全球无缝覆盖的立体通信网络,满足城市和偏远地区各种用户密度及高速移动(对TDD方式为120km/h,FDD方式为500km/h)的需求,并支持话音、数据和多媒体等多种业务,最高速率可达2Mbit/s以上,基本满足个人通信的要求。   本文着重介绍3GPP对第三代移动通信网络的概念,其定义的网络拓扑如图1所示,并对其简单说明如下:   a)核心网:它是移动网络的核心,在3G初期,将从GSM网络概念出发:在电路域(如电话等业务)仍然采用程控交换技术;对包交换数据,使用GPRS类似的方法,基于ATM的技术。2005年后,向全IP技术过渡。   b)无线接入网:完成用户终端向核心网络进行无线接入的全部处理,是移动网络的最主要部分。   c)用户终端:它不仅是2G的手持机,而更可能是功能完善的智能个人终端。   d)连接各设备之间的接口:无线接入网到核心网之间的Iu接口、RNC之间的Iur接口、RNC与Node_B之间的Iub接口以及终端和无线接入网之间的Uu接口。   对WCDMA和TD-SCDMA来说,此网络结构是完全相同的,它们所提供的业务也将是完全相同的。   23G无线传输技术(RTT)   各种移动通信标准的区别在于所使用的无线传输技术,而传输技术是根据物理层技术而设计的,且物理层技术是进步最为显著、涉及知识产权最多的部分,也是竞争的焦点。   3TD-SCDMA的主要优势   作为一种ITM-2000的无线传输技术,TD-SCDMA的核心是使用智能天线等新技术,尽可能地提高CDMA系统的频谱利用率,满足IMT-2000的要求。简单地说,TD-SCDMA就是一种基于智能天线的时分双工、同步CDMA系统。   本文不可能全面介绍TD-SCDMA系统和标准(有兴趣的读者可参阅参考文献3),而只着重介绍其与其他RTT不同的,具有优势的核心技术。   3.1时分双工方式及帧结构   TD-SCDMA采用了TDD双工方式,设计了1个多时隙的帧结构,它将3GPP标准中的1个10ms的无线帧分为2个子帧,每个子帧又设计了7个业务时隙,此外,还有上下行导引时隙(DwPTS和UpPTS)和作为收发间隔的保护时隙(G)。   将时隙设计得比较小,并使用子帧的目的是为了支持智能天线的应用;设计导引时隙是为了实现同步CDMA。在每个基本业务单元中,将业务数据安放在单元的两边;中间设计了中间码(Midamble),应用于同步及信道估计,为使用联合检测而准备的,并将缺少保护和纠错的物理层信令安放在中间码两旁。整个帧结构设计方法是我们所特有的,是为满足系统技术而设计的[3]。  使用此帧结构,可以灵活配置上下行时隙,提供满足各种要求的不对称业务(从上下行1∶6到6∶1)的TDD双工工作方式。众所周知,TDD与FDD双工方式相比有如下优点:   a)只需要单一载波频率,频谱使用有较高的灵活性;   b)上下行使用相同载波频率,可以通过对上行链路的估值获得上下行电波传播特性,便于使用诸如智能天线、预Rake接收等技术以提高系统性能;   c)便于支持上下行不对称业务;   d)产品简单,成本低。   但是,TDD采用不连续接收和发射,在对抗多径衰落及多普勒频移等方面不如FDD。20世纪80年代以来,均认为TDD方式主要使用于微小区,难以支持较大的小区范围和较高的移动速度。   在TD-SCDMA系统中,采用智能天线技术加上联合检测技术克服了TDD方式的缺点,在小区覆盖方面和WCDMA相当,支持的移动速度也达到250km/h,完全满足单独组网的要求。   3.2智能天线和联合检测   参见前一章中对CDMA系统问题的描述,要使CDMA系统自干扰问题获得解决的一条途径就是使用智能天线。如果天线能够自适应地提供一个波束,只接收此波束方向内的信号,则干扰将大幅度地降低。简单计算,如果此天线波束宽度只有小区覆盖的1/m,则干扰将降低到1/m,系统容量可能增加m倍。此外,前面讨论的TDD双工方式所存在的问题,采用智能天线也能得到解决。   一个具有智能天线的TDD基站设备由多只天线单元组成的天线阵和与各个天线单元连接的,相干工作的射频收发信机及基带数字信号处理器等主要部分构成。简单地说,此智能天线的工作原理为:来自各接收机的信号首先进行解扩,然后对各码道的接收数据进行合并,得到来波方向(DOA)及接收波束赋形,然后,再进行后续信号处理。而对发射信号,首先根据DOA加上对每个天线的权重,实现发射波束赋形,再交各个发射机,通过天线发射出去。当天线阵的单元数足够多,此接收和发射波束就可能足够窄,CDMA系统的容量就可能达到所使用扩频码的数量,使CDMA系统的容量优势充分发挥出来。   但是,智能天线并不能克服时延较长(如达到或者超过一个码片宽度)的多径。为此,在TD-SCDMA系统中,我们将智能天线和联合检测算法联合使用,以充分发挥两者的优势。众所周知,联合监测是一种多用户检测方法,比单用户检测(如Rack)性能要好,但算法复杂,其复杂度与CDMA的扩频码道数成2次方以上的速度增加。TD-SCDMA采用的最大扩频系数只有16,故可以接受其复杂性而使用其高性能。   3.3独特的无线资源管理技术   在CDMAFDD系统中,每个小区内只有一种无线资源(即码),不同业务分配不同扩频码。而这些码又是相互干扰的,每一个新用户的接入,特别是要求高数据速率用户的接入将使整个系统的干扰情况全部变化,对其他正在通信的用户通信质量有明显影响,无线资源管理必须采取行动来处理。故在用户接入、码的分配与管理等方面的技术受到广泛关注,除复杂外,往往还受到很多限制。  在TD-SCDMA系统中,每个小区内将有3种无线资源(即载波频率、时隙及码)。其中,载波频率和时隙都是相互正交的,只有码之间存在干扰。这样,无线资源管理的难度就大大降低,并非常有效。特别对快速信道动态分配和下行功率控制两个无线资源管理的主要功能,可以大大提高系统容量和通信质量,由于TD-SCDMA系统无线资源的正交特性而可以充分发挥作用。   3.4易于进行网络规划   众所周知,CDMA系统有一个特点,即给定发射功率后,扩频系数越大,小区的覆盖越大。对一个移动通信系统,小区的覆盖基本上由手持机的发射功率所限制。   图3示出了TD-SCDMA和WCDMA系统在手持机最大发射功率为24dBm条件下的小区半径和数据传输速率的关系(城市内手持机环境)。显然,由于WCDMA只有码一种资源,其小区覆盖随数据传输速率变化非常明显,远远超过TD-SCDMA,这样就给网络规划带来了困难。   3.5其他特殊技术   作为一个完整的系统,在TD-SCDMA无线接入技术中,还包括了下述一系列和别的3G标准不同的、更有效的技术:   a)上行同步:众所周知,同步CDMA可以充分发挥扩频码正交的特点,使系统具有更好的特性和更高的容量。问题在于用什么技术来实现同步CDMA?花多大的代价来实现同步CDMA?   在TD-SCDMA系统中,同步是基于帧结构来实现的,并使用一套开环和闭环控制的技术来保持。这样,TD-SCDMA系统几乎没有花代价,就实现了同步CDMA。   当然,由于移动通信所处的、具有多径的电波传播环境,使真正的同步CDMA无法实现。故TD-SCDMA系统实现上行同步的主要作用在于简化基站的信号处理过程,使智能天线更有效的工作。   b)接力切换:传统移动通信系统在用户终端切换中都采用硬切换,对数据传输是不利的。CDMA(IS-95)系统采用了软切换,是一个大的进步。但采用软切换要付出占用更多网络及无线信道作为代价,特别当所有无线信道资源(码)都可以作为业务使用时,使用软切换的代价就太高了。   接力切换的概念是充分利用TDD双工方式的特点,即不连续接收和发射。另外,由于在TDD系统中,上下行链路的电波传播特性相同,可以通过开环控制实现同步。这样,当终端在切换前,首先和目标基站实现同步,并获得开环测量的功率和同步所需要的参数。切换时,原基站和目标基站同时和此终端通信,在不产生任何中断情况下就实现了切换。这样,接力切换具有软切换的主要优点,但又克服了软切换的缺点。而且,接力切换可以在工作载波频率不同的基站间进行,比软切换的适用范围大大推广了。   c)动态信道分配:TDD系统中的动态信道分配(DCA)是一项重要技术。在TD-SCDMA系统中,将DCA和智能天线波束赋形结合进行考虑,部分引入空分多址(SDMA)概念,将使DCA的手段大大增强。这对相邻小区使用不同上下行比例业务有非常明显的效果。   4发展方向   移动通信在市场和技术两个驱动力的作用下,在过去20年间获得了高速发展。在移动通信领域内,发展最快的又是其物理层技术。TD-SCDMA作为一个国际标准,即将得到我国和全世界的应用,但也承受着巨大的发展压力。在未来的5~10年内,移动通信将支持更高的移动速度和更高的数据速率,TD-SCDMA技术也将继续发展,其主要发展方向可能在下面几个方面:   a)多载波TD-SCDMA,最大使用12个载波,占用20MHz的带宽;   b)使用更高的QAM、频谱效率更高的调制方式;   c)多天线收发技术,包括智能天线、空间分集、时空编码等技术;   d)结合其他多址技术,如OFDM;   e)下一代网络(NGN)。   总的说来,目前移动通信技术发展中最受学术和工程界关注的两个主要方向是TDD系统和天线技术。非常荣幸的是这两个方向都是TD-SCDMA系统考虑的出发点。而目前TD-SCDMA系统所使用的技术还远远没有达到此两个方向所可能达到的水平,还有大量改进、完善、甚至完全重新设计的空间。目前,国际上正在制定长期演进(LTE)的有关标准,预计在2010年以后投入商用。
0102030405
郑重声明:以上内容与证券之星立场无关。证券之星发布此内容的目的在于传播更多信息,证券之星对其观点、判断保持中立,不保证该内容(包括但不限于文字、数据及图表)全部或者部分内容的准确性、真实性、完整性、有效性、及时性、原创性等。相关内容不对各位读者构成任何投资建议,据此操作,风险自担。股市有风险,投资需谨慎。
欢迎访问证券之星!请与我们联系 版权所有:Copyright & 1996-年捷配欢迎您!
微信扫一扫关注我们
当前位置:&>>&&>>&&>>&宽带无线移动通信网络软切换技术
  软切换是同一频率不同之间的切换,在软切换过程中,两条链路及相对应的两个数据流在一个相对较长的时间内同时被激活,一直到进入新基站并测量到新基站的传输质量满足指标要求后,才断开与原基站的连接,不管是从移动节点的角度还是从网络的角度看,两条链路传输的是同一个数据流,保证了通信不会发生中断。
  软切换由于“先切换,后断开”,移动节点只有在取得了与新基站的链接之后,才会中断与原基站的联系,因此在切换过程中没有中断,不会影响通话质量;软切换由于是在频率相同的基站间进行,在两基站或多基站覆盖区的交界处,移动节点同时与多个基站通信,起前向业务信道和反向业务信道的路径分集的作用,因而可大大减少切换造成的掉话。另外,由于软切换中移动节点和基站均采用了分集接收技术,有抵抗衰落的能力,同时通过反向功率控制,我们可以使移动节点的发射功率降至最小,从而降低了移动节点对系统的干扰。进入软切换区域的移动节点即使不能立即得到与新基站的链路,也可以进入切换等待的队列,从而减少了系统的阻塞率。但是在取得上述优点的同时,软切换同时有需要占用的信道资源较多、信令复杂导致系统负荷加重、增加下行链路干扰、增加设各投资和系统背板的复杂性等缺点。
  上面介绍的几种切换方式按照切换的方向来分都可以归位水平切换,而与此相对应,还存在一种切换方式,即垂直切换。那么什么是水平切换和垂直切换呢?
  当用户接入时,系统根据所测得的信号强度和各小区的容量为某一呼叫选择最恰当的小区(宏小区、微小区或微微小区),发生切换时有两种切换方式:相同层次小区之间的水平切换和不同层次小区之间的垂直切换。水平切换就是普通的小区切换,通常情况下移动速率没有较大的改变、相同小区的容量未饱和都只需要水平切换即可;反之,则根据情况进行相应的向上或者向下的垂直切换。
  可以这样来概括水平切换和垂直切换:移动节点在相同系统的基站(扇区、信道)之间的切换称为水平切换,而移动节点在不同系统的基站(扇区、信道)之间的切换就称为垂直切换。
  集成的类型对HPCS的实现有重大的影响,问题之一就是垂直切换或不同系统之间的切换。在一个PCS系统中,当一个MS在通话期间从一个蜂窝移动到另一个蜂窝时,MS与新的蜂窝之间的无线链路必须建立,而MS与原来蜂窝之间的无线链路必须拆除。FDMA和TDMAPCS系统采用一种硬切换方案,从而在一个时刻一个MS只能与一个基站通话。在IS-95CDMA系统中,采用的是软切换,每个基站都使用整个频谱,在切换过程中,MS开始与一个新的基站通信,但不中断与原来基站的通信。切换时,在原基站与新基站之间被赋予同样的频率,这就提供了不同位置选择的多样性,以增强信号。
  当一个MS在通话过程中从一层切换到另一层时,HPCS还需要处理垂直切换。如果系统不重叠,垂直切换不发生,垂直切换就不构成一个问题。对于SRSN中的微蜂窝/宏蜂窝结构,宏蜂窝和微蜂窝系统遵循同样的空中和网络信令协议。因此,垂直切换与单个系统中的一般切换完全相同。
  对于具有不同频带的SRSN,除了运行的频带不同外,所集成的系统是一样的。因此,垂直切换没有微蜂窝/宏蜂窝结构切换那样简单,但也不难实现。FarˉEastone公司的报告称在双频带网络中,8%的切换是垂直切换。
  对于DRSN,显然未实现垂直切换,但必须进行一些改进。显然,IS-95中的软切换与S中的硬切换不兼容。而且,IS-136的MAHO/TDMA切换与AMPS中的MCHO/FDMA也不兼容。当一个IS-95或IS-136业务信道被切换到一个AMPS业务信道时,要执行一个经修改过的MCHO/FDMA切换。在目前的]S-95实现方案中,可以执行从IS-95到AMPS的切换,但反之不然。
  对于DRDN,尤其是信道的子频带空间不同于所涉及的PCS时,垂直切换几乎是不可能的。首先,所集成的系统可以采用不同的切换过程。例如,AMPS遵循NCHO,而PACS遵循MCHO。同样,遵循MAHO,而DECT遵循MCHO。为了执行像一般切换一样的垂直切换,对于所集成的系统都必须大大地修改切换规程。即使切换方案与所集成的系统类似,如AMPS与CT2组合,其中两个系统都采用NCHO,其实现通常是非常不同的。(注意:原来的CT?规范不包括切换特点)。
  在垂直切换时,最佳的选择是让DRDN网络自动重新拨号并重新连接呼叫。例如,当一个MS在通话时,打算从低层移动到高层,DRDN按低层呼叫终结规程切断低层的呼叫,然后再按高层的呼叫建立规程重新连接呼叫。下面从多层小区结构入手给读者更深处来分析这两个概念。
  (1)多层小区
  在移动通信系统中,传统的小区式网络由宏小区构成,每小区的覆盖半径大多为1~25km。这种小区中通常存在着两种特殊的微小区域:盲点和热点。盲点是由于网络漏覆盖或电波在传播过程中遇到障碍物而造成阴影区域等原因,使得某些区域的信号强度极弱而形成的。“热点”是由于商业中心或交通要道等业务繁忙区域,造成空间业务负荷的不均匀分布形成的。为了解决这些问题于是产生了微小区技术。
  微小区最初被用来加大无线电覆盖,消除宏小区中的“盲点”。同时由于低发射功率的微小区基站允许较小的频率复用距离,每个单元区域的信道数量较多,因此业务密度得到了巨大的增长,将它安置在宏小区的“热点”上,则解决了盲点和热点问题。
  随着容量的需求进一步增长,可以安装第三或第四层网络,即微微小区。微微小区实质是微小区的一种,只是它的覆盖半径更小,基站发射功率更小。微微小区是作为网络覆盖的一种补充形式而存在,它主要用来解决商业中心、会议中心等室内“热点”的通信问题。表给出了宏小区、微小区、微微小区的各类参数值及应用范围。
  表 宏小区、微小区、微微小区的比较
  (2)多层小区的基本结构
  多层小区中基站的网络组织基本上都是采用以宏小区基站为中心的控制方式,宏小区基站与微小区基站之间的连接,可以直接采用星形的连接方式,也可以采用FDDI或者IEEE 802.6双的连接方式,都是由宏小区的基站进行控制。
  在每个由一个宏小区基站和多个微小区基站组成的小区群中,采用高速LAN来进行连接,如采用FDDI或者是IEEE 802.6双方式互联各个基站,宏小区的基站同时以星形结构的方式连接到无线交换局,交换局作为该星形结构的中心,负责对整个接人的小区基站进行控制。宏小区的基站可以作为网桥或者是,这样,同一个宏小区之中的微小区之间的切换由宏小区的基站控制,可以在本地完成,在不同宏小区范围的微小区之间的切换则需要通过宏小区基站,再由无线交换局进行控制。
  Amitary提出了利用电信网的分布式交换和控制结构,有两种形式,一种是利用LAN来连接各个微小区群,一种是利用分组交换来处理各个微小区群之间的报文交换,其中的每个微小区群的微小区基站和宏小区基站之间的拓扑都是星形结构,宏小区基站位于这类拓扑的中心位置,并且通过数字干线(T1 line or sub-scriber loop carrler,T/SLC)和本地交换局连接。对于步行用户的通话,很多时候在一个基站范围内就结束了,如果涉及越区切换,则需要使用上述结构中的LAN或者是分组交换网来进行信令传输和路由建立。
  (3)多层小区的应用
  在移动通信系统中,通过在宏小区引入微小区和微微小区而形成分级小区结构,从而解决网络内的“盲点”和“热点”,同时也针对用户的不同运动状态,用不同级别的小区提供通信能力,如图所示的三层小区结构示意图。
  图 多层小区的应用示意
  多层小区包括宏小区、微小区和微微小区。其中宏小区用于处理快速移动车辆的通信业务;微小区处理慢速移动,如步行或交通阻塞车辆的通信业务;微微小区用于覆盖商场和办公室等室内区域。这样处理的优势是可以降低切换的次数,减少网络中管理数据的流量,同时又保证了较大的网络容量。  &&来源:
技术资料出处:hugerat
该文章仅供学习参考使用,版权归作者所有。
因本网站内容较多,未能及时联系上的作者,请按本网站显示的方式与我们联系。
【】【】【】【】
上一篇:下一篇:
本文已有(0)篇评论
发表技术资料评论,请使用文明用语
字符数不能超过255
暂且没有评论!
暂且没有信息...
12345678910
  漏电保护,简单来说,就是在100毫秒内当漏电电流超过30mA时切断电源,这需要电流检测非常灵敏可靠,继电器非常稳定可靠。在平时的生活中,也会出现很多问题,今天小编就来讲讲漏电保护器仍推不上去的原因和解决的办法。
[][][][][][][][][][]
IC热门型号
IC现货型号
推荐电子百科学习TDD:TDD的好处 - CSDN博客
学习TDD:TDD的好处
&TDD的全称是Test Driver Development,测试驱动开发。就是开发要以测试为驱动。编码之前,测试先行。代码都没有,我如何测试,我连要测的对象都没有啊?这好像是个问题。
TDD的哲学为我们解答了这个问题:先编写测试用例(没有代码之前这些测试用例一个也通不过),然后再写代码让这些测试用例通过。更进一层的讲就是:编写足够的测试用例使测试失败,编写足够的代码是测试成功。我们编码的目的更加明确的。
TDD是大名鼎鼎的极限编程的一个最重要的设计工具之一(另一个是重构(Refactoring),这是它的荣誉,下面我列举几点它实际的好处。
TDD带来的好处有:
1. 你会更加站在用户的角度去看你将要完成的产品,你要尽可能想到用户所有进行的操作。而不是从程序员的角度想用户应该会如何去使用我们的产品。
2. 测试用例是在对功能进行测试。在写代码之前先写测试用例,可以对我们编写代码提供指导性的参考。防止我们漏掉一些功能。
3. 它使我们对自己代码有了信心,因为我们事先设计好的所有测试用例都Pass了。
4. 如果在更改代码后测试用例不能通过,我们可以根据不能通过的测试用例精确的定位问题,并轻而易举的解决的这个bug。
5. 哈!我们的一整套完备的测试用例在这里替我们把关(把的什么关?),我们就可以十分安全的使用极限编程的另一个最重要的工具——重构。重构改变的是代码的内部结构,而不会改变外部接口功能。知道在做重构时测试用例是把的什么关了吧!很明显,测试用例是保证我们在进行重构时,不会影响到代码的外部接口功能。所以我刚刚说,我们进行的重构是十分安全的。
6. 基于第5点,我们找到了重构的信心,必要时候你还可以痛痛快快的并且满怀信心的对代码做一场大的变革。这样我们的代码变得干净了,扩展性、可以维护性以及易理解性纷至沓来。
TDD有这么多好处,但它也不是免费的午餐,它需要我们有设计完备的测试用例的能力(这项能力是长期理论与实践的结合体),否则你将会吃了亏编写了一大堆测试用例,却没测到点子上。可怕的是,你还对你“测试通过”的糟糕的代码满怀信心。
的主旨是高效,可能这个高效不是非常高的开发速度。
通常的软件开发过程是先写功能,然后再写测试。甚至有时候只进行某些方面的测试,或者有省事的就略去了某些细小功能的测试,或者是忘了对这些模块的测试。
这些看起来对软件影响不大,但是似乎有点过于自信了。因为我们是人,不是神,所以难免会出一些这样或那样的错误,而这些小的问题在项目整合起来以后进行排错是非常令人头疼的。
的思想是以测试推动开发进程。因为我们在软件开发之前,每个程序单元的功能都已经确定了。程序员在理解完整个程序需求以后,直接进行开发,有可能会因为种种原因考虑不很周全,似乎功能实现的没有问题了,但是其中却可能隐藏着非常可怕的。促使开发人员先根据程序单元的功能编写测试代码,就像是先建一个模型,然后向里面浇注合适功能的代码。最后满足所有的测试验证了,才能正常通过测试,这个程序单元才算完成。
这样消除了开发人员主观性的对程序单元健壮性的评估,更客观的验证每一个程序单元的功能实现以及可能出现的。
当然,这些操作都需要有大量的代码支持,所以费事是在所难免的,但是这点“费事”与健壮性非常强的代码相比,有些人还是偏向于使用。
首先站在客户方代码的立场,可以获得更好的api。
其次可以改善软件质量,支持重构。
其三,大幅减少debug时间。
前期投入大,后期能大幅缩短开销,将问题发现在最源头
提供明确的目标:
你很清楚, 一旦结束(测试通过), 你的工作就完成了(假设你的测试写的很好). 测试代码会为代码建立一个自然的边界, 使你把重点集中在当前任务上. 一旦测试通过, 就有确切的证据证明你的代码能工作. 相对于人工的测试用户界面或者比较日志文件中的结果,& 在一个xUnit框架中运行自动化测试, 速度要快几个数量级. 大多数xUnit测试的运行只需几微秒, 而且大多数采用TDD的人都会一天运行数次测试. 在许多开发小组中, 将代码上传配置库前, 必须成功地通过测试.
你是不是经常遇到看不懂的代码? 这些代码可能没有任何文档说明, 而且开发代码的人可能早就走了(或者去度假了). 当然看到这种代码的时间往往也很不合时宜, 可能是凌晨3点, 也可能有位副总在你旁边大声催促着赶快解决问题, 这样要想花些时间来愿作者的意图就更困难了. 我们见过一些好的单元测试文档, 它们会指出系统要做什么. 测试就像原开发人员留下的记号, 可以展示他们的类具体是怎么工作的.
编写测试能改善设计. 测试有助于你从界面的角度思考, 测试框架也是代码的客户. 测试能让你考虑得更简单. 如果你确实遵循了&尽量简单而且行之有效&的原则, 就不会写出篇幅达几页的复杂算法. 要测试的代码通常依赖性更低, 而且相互之间没有紧密的联系, 因为这样测试起来更容易. 当然, 还有一个额外的作用, 修改起来也会更容易!
利用一套健壮的测试集, 你能根据需要进行重构. 你是不是经常遇到一些不知是否该修改的代码? 种种的顾虑让你行动迟缓, 过于保守, 因为你不能保证所做的修改会不会破坏系统. 如果有一套好的单元测试集, 就能放心的进行重构, 同时能保证你的代码依然简洁.
编写这么多测试会不会使开发速度减慢呢? 人们经常会以速度(或开发开销)作为反对进行TDD和使用xUnit框架的理由. 所有的新的工具都会有学习曲线, 但是一旦开发人员适应了他们选择的框架(通常只需要很短的时间), 开发速度实际上会加快. 一个完备的单元测试集提供了一种方法对系统完成回归测试, 这说明, 增加一个新特性之后, 你不必因为怀疑它会不会破坏原系统而寝食难安.
单元测试还有一个经常被忽略的优点, 即开发的节奏. 尽管看上去好像无关紧要, 但通过测试之后你会有一种完成任务的成就感! 你不会成天地修改代码而没有任何反馈, 这种测试-代码-测试的方法会鼓励你动作幅度小一些 通常修改一次代码的时间仅仅几分钟而已. 这样你不会一下子看到冒出一大堆新的特性, 而只是让代码每次前进一小步.&
当需要进行测试时,我信守下面的经验主义的做法:
第一篇技术博客,希望有人支持,您的关注是我的动力...
本文主要是基于本人的开发经验,概叙一下TDD,也就是测试驱动开发。我比较喜欢用问题方式来写,语言水平有限 希望读者看得懂且有帮助
TDD这个东西 你一般用了之后会上瘾:) 它可能改变你以后的编程习惯
故名思意就是用测试的方法驱动开发。简单说就是先写测试代码,再写开发代码,和传统的方式是反的。
为什么要用TDD
用TDD的方法可以使代码干净(代码重构的结果),测试覆盖率高(先写测试的结果),软件做集成测试的时候一般问题会比较少。
而且你敢改人家的代码,看到有fail的test case 证明你有改错人家的东西,看到所有的test case都过了的话,你也很有信心说,我没有改错,或程序不会因为我的改动而挂掉。
什么时候TDD
TDD是在Unit Test,& 也就是单元测试时用的方法。
什么地方TDD
我觉得写任何代码都可以用TDD吧
怎么做TDD(关键5步)
加入一个新的测试 运行下新加的测试,看到它失败(因为你还没写功能代码) 对开发代码做很小的修改,目的就是让新加的测试通过 (注意这里的目的) 运行所有的测试(test case),然后看到所有测试都通过了 (看到测试都变成绿色,一般都会小开心一下) 移掉重复的代码,对代码进行重构 (既包括功能代码,也包括测试代码。特别注意红色的字串 一般会有重复,还有一些代码可以抽出来变成公用方法,测试代码中同样的初始化和还原测试环境的代码,可以放到intilize和cleanup中去)
而外还有一些步骤也是可以加入的,比方
在写测试代码前,先从需求出发,准备一个Test list (需要测到的功能的列表)。忘掉你该怎么实现,那是后面的事情 每测完一个就用横线划掉 如果发现有漏掉的test 就加到这个列表中(列表测完你的功能也就完成了)
TDD的好处,和不足的地方
测试代码都是从客户需求出发的,不是重实现出发的。测试更关注于对外部的接口。 软件的需求都被测试代码描叙得很清楚,可以减少很多不必要的文档(有些时候写文档时间比开发时间多多了, 需要一个专门写文档的,而且用的机会很少。这里我很喜欢敏捷开发中说的:Just enough)每次都是很小的步骤,这样你就很集中注意解决一个问题。葛优说的:步子迈大了容易扯着蛋,步子大想的就多,容易忽视些东西, 容易出错。小而简单就是美 可以优化设计。如果有做过测试驱动开发的会发现,为了更好的,更容易的做单元测试。它逼着你面向接口编程和使用一些设计模式,自然设计就灵活了,耦合性也低
有时候开发代码可能只有几行,可是测试代码可能比真正的代码要多很多。而且花时间想怎么测试。 可能不适合时间很紧的软件开发,更适合于产品和平台的开发
怎么学习TDD最好
我觉得最好且最快的方式就是 XP中提到的结对编程,一个有TDD经验的坐在&后面&,指导另一个不大熟悉的人,两人一起来完成一个类或模块的功能
几个关键点
记得你是做单元测试,不是集成测试,你要测得仅仅是你的类的功能,不要去测别人类的功能,一定要知道测到什么程度就好了,剩下的可能是别人需要测的 每次都是一小步,目的只是用最简单的方法让新加的test case过掉而已 在改/加任何功能代码前,一定要先想是不是要改或加test case。 测试驱动产生的单元测试代码是代替不了集成测试的,它还是单元测试 测完记得清理测试环境,还原到测试之前的样子
后面的文章我准备用VS2008来举简单的例子,还有一些测试的模式,测试的辅助工具...
关于TDD的观点:质量是反复思考的结果,仅靠解决Bug无法获得
 “通过单元测试可以改善代码质量”这一观点已经得到广泛认可。培训师、顾问兼咨询师Michael Feathers在最近的帖子中对其提出了质疑。他谈及单元测试、集成测试、TDD和净室软件开发(Clean Room Software Development),认为代码质量是反复思考的结果,仅靠解决bug无法获得。M3P的独立咨询师Steve Freeman进一步阐述了Michael的观点,从“认知方面对TDD进行了分析”,并解释了TDD的好处从何而来。
  Michael认为,利用测试找Bug来改善质量的想法是有不足之处的:
  对于单元测试,最常见的理论就是“通过解决测试找到的bug,软件的质量得以提升”。乍听起来,好象没错儿。测试有通过或失败两种结果,一旦失败,我们就知道肯定是有什么地方出了问题,就要修复它。假如你赞同这个说法,你就会预期在做集成测试时发现更少的集成错误,在做单元测试时也是一样。这个观点貌似挺好,不过它是错误的。能够证明这一点的最佳方法就是:将单元测试与另一种提高质量的方法相比较,而且这种方法有着很好的度量效果。
  为了证明他的观点,Michael提到净室软件开发(Clean Room Software Development),这是一种在上个世纪八十年代曾被使用的开发方法。根据Michael所述,净室方法不包括任何单元测试过程:
  净室方法背后的观念,就是要通过更严格的开发纪律来提高质量;在净室中,你要为每一小短代码写逻辑断言;在代码复查时,你还要证明代码的功能和你写的断言完全符合,功能不多也不少。这种方法非常严格,甚至比我所说还要极端,因为净室方法的另一个宗旨是:不能有单元测试。一个都没有。毫无必要。代码开发完成之后,只要被复查过就被认为是完全正确的。唯一的测试就是在功能层面的随机测试。
  使用净室方法的结果很有趣:不经任何单元测试,代码质量也提高了。净室方法和TDD方法的相似之处在于:迫使开发人员不断复查、重构并改进他的代码。Michael的结论就是:
  我认为,我们不能机械地看待测试。单元测试并不能在“单元”这个层次上通过抓到错误来改进质量。而且,集成测试也不能在“集成”这个层次上通过抓到错误来提高质量。实际上背后的道理难以言说。质量是反复思考的结果——严谨的反复思考。这就是关键。强化纪律的技术一定会提高质量。
  从Michael的帖子出发,M3P的独立咨询师Steve Freeman进一步阐述了这个观点,并谈到“对TDD在认知上的分析”。开发人员的某些决定会影响他们的代码:
  事实证明,人们并没有真正花时间从各种可行的方案中进行权衡,而是使用了“首先契合(first-fit)”的方法,即将已知的解决方案按序排列,然后选择第一个看上去最好的方案。所有这些都是在潜意识下发生的。在这之后,我们迟钝的理性思维才会想办法证明这个已成事实的决定——我们甚至都不知道这些是如何发生的。
  关键在于不要直接采纳第一个在我们脑海里出现的解决方案,而是要评估不同的可选方案,这就是Steve认为TDD有益的原因:
  测试驱动开发打破“首先契合”这种模式匹配,从而发挥了(或应该发挥)作用。通过TDD,我们不再强制用脑海中出现的第一方案来解决问题。我们也不得不远离自己的“安全地带(comfort zone)”来考虑真正需要实现的需求。更重要的是,从“写一个测试开始”迫使我们首先去想真正需要的是什么(要测试什么),然后再用我们专家般敏锐的大脑来得出解决方案。
  Steve举了一个例子来证明他的观点:
  最有力的证据就是Arlo Belshee所在的小组,他们实现了无序结对编程(Promiscuous Pairing)。他们从经验中发现:相对于成员自己决定结对时间,强制他们每隔几个小时就切换结对,这样的生产率最高。他们认为,这样可以保持每个人处于“初学者”的心态,也就可以像“初学者”那样思考。
:转载时请以超链接形式标明文章原始出处和作者信息及
咨询的过程中,经常会与人讨论TDD。初时,我会很耐心的跟人解释TDD的种种好处,试图让他们能够皈依TDD,结果总不尽如人意,争论者总是可以抛出一些新的观点,逼迫着我重新认识TDD,甚至最低落时,我会怀疑TDD是不是真的有效。
通过反思,我发现,所有和我们直接在一起写代码的人,都没有质疑过TDD,而且一旦真正进入节奏,便乐此不疲。而与我们争论的人中,为数不少的对于TDD,或是浅尝辄止,或是压根没有碰过。换句话说,他们的问题都是“想”出来的。真正做起来是什么样子,他们自己也不知道。
网上的某些讨论也有着这种倾向,想出一个问题吓唬自己,还试图让别人认同自己,比如。对于这些人,着实没有必要浪费口舌。连电都没有,我怎么给你解释灯的都好处都是白搭的。况且,欲加之罪,何患无辞!
争论的人里面,有些人是实践过的,但是,结果很糟糕。我们的沟通常常是这样:
我:你怎么理解TDD?
对方:不就是先写测试后写代码吗?
原来TDD也可以没有重构啊!打开他们的测试,几屏都翻不完的测试,让人目眩神晕。
我:这么长的测试你怎么保证它的正确性呢?
对方:哦?没有想过。
测试错了,但无法证明究竟是测试写错了,还是代码写错了,我合作过的不少团队都出现过这样的情况。
问题到底出在哪?我想了很久。
通过与不同的团队的合作,我逐渐意识到,这些团队欠缺的根本不是TDD,他们压根不知道如何写好代码。对于这些人而言,即便他们知道TDD有着“红——绿——重构”的节奏,也不知道代码应该重构成什么样子。在他们眼里,重构和不重构,没有任何差别。
在他们原有的认识中,写代码就是完成功能。在这样的背景下,很多人每天都忙碌于在原有的代码上堆叠更多的代码。在合作团队里,有不少人工作才一两年,更有甚者,是工作后才开始写代码,他们对于写代码的认知仅仅停留在照猫画虎的阶段,甚至连最基本的编程技巧都还不了解。更可怕的是,他们的代码风格还在不断被后来者模仿。对于这些人来说,如果不改变他们对代码的认知,指望“所谓的TDD”改变一切无异于痴人说梦。
想TDD吗?先学学怎么写好代码吧!
历史上的今天:
引用地址:
在杂志上首次发表的一篇研究报告声称:“看来TDD可以应用在多个领域中,并显著降低软件的缺陷密度,同时也不会明显降低开发团队的工作效率。”研究对比了4个在微软和IBM执行的项目,这些项目使用了TDD方式开发,并与没有使用TDD开发的类似项目进行了对比。
的作者包括:来自微软的和Thirumalesh
Bhat 、IBM的,以及北卡罗来纳大学的,并发布在Empirical
Software Engineering杂志的上。读者也可以在找到该报告。
报告中研究的4个案例,1个来自IBM,3个来自微软。每个案例研究都对比了开发同一个产品的两个团队,他们使用同样的开发语言和技术,处于同一级别的管理之下,唯一不同之处在于:一个团队使用TDD,另一个不用。在开发过程中,这些团队都不知道自己处于研究之下。IBM案例中的团队在开发设备驱动程序,微软的团队在开发Windows、MSN和Visual Studio的相关应用。
报告中讲述了团队使用的TDD实践,包括分钟级别的工作流程(minute-to-minute workflow)和任务级别的工作流程(task-level workflow)。
分钟级别的工作流程如下:
编写一些新的小单元测试用例 运行测试,看着它们失败 编写实现代码以满足测试 重新运行单元测试用例,确保它们现在可以通过
任务级别的工作流程是这样子的:
将新的实现代码和单元测试集成到现有的代码库中 重新运行所有的测试用例,确保新的代码不会导致任何测试失败 重构实现代码和测试代码 重新运行所有的测试用例,确保重构后的代码不会导致任何测试失败
缺陷密度是通过每千行代码的缺陷数目来衡量的。相较于不使用TDD的项目而言,这四个产品在发布前的缺陷密度降低了40%到90%。从团队管理层的主观报告看来,在开发的初始阶段,使用TDD的团队要多花15%到35%的时间;不过团队都同意一点:这个时间被减少的产品维护时间抵消掉了。
报告中的结果可以与Maria Siniaalto在2006年发布的一篇文章相对比。该文章中试图复审并总结其他13项有关TDD的研究,这些研究包括在纯商业背景、半商业背景和学院背景中进行的研究。在文章的结论中,作者写道:
基于这些现有研究的发现,可以得出结论:TDD看来可以提升软件质量,特别是在纯商业背景中。对于半商业背景或学院环境中的研究来说,结论不是那么明显,可这些研究没有提到任何软件质量的降低。TDD给工作效率带来的效果不是十分明显,而且结果会根据研究的环境发生变化。然而,有证据证明:TDD不一定会降低开发人员的工作效率,或是增加项目的交付时间。某些情况下,TDD会带来显著的工作效率提升;同时,在提到的13个案例研究中,只有两个案例指出工作效率降低了,不过这两个案例同时指明质量的提升。
您使用TDD有哪些经验?见到质量的提升了么?对于开发人员的工作效率和开发时间,您看到了哪些影响?请在文后留下您的评论,分享您的经验。
查看英文原文:
曾任职《程序员》杂志副主编,《项目管理修炼之道》译者。
发表人 Zhang Charlie 发表于
&!-- ww:date name=&%{top.creationDate}& format=&%{#request['postDateTimeFormat']}& /& --&
发表人 .H.Fu James 发表于
&!-- ww:date name=&%{top.creationDate}& format=&%{#request['postDateTimeFormat']}& /& --&
发表人 Zhang Charlie 发表于
&!-- ww:date name=&%{top.creationDate}& format=&%{#request['postDateTimeFormat']}& /& --&
发表人 guan jayden 发表于
&!-- ww:date name=&%{top.creationDate}& format=&%{#request['postDateTimeFormat']}& /& --&
发表人 Zhang Charlie 发表于
&!-- ww:date name=&%{top.creationDate}& format=&%{#request['postDateTimeFormat']}& /& --&
发表人 He Yiding 发表于
&!-- ww:date name=&%{top.creationDate}& format=&%{#request['postDateTimeFormat']}& /& --&
发表人 Zhang Charlie 发表于
&!-- ww:date name=&%{top.creationDate}& format=&%{#request['postDateTimeFormat']}& /& --&
发表人 Lee Vincent 发表于
&!-- ww:date name=&%{top.creationDate}& format=&%{#request['postDateTimeFormat']}& /& --&
发表人 一 刀 发表于 &!-- ww:date name=&%{top.creationDate}& format=&%{#request['postDateTimeFormat']}& /& --&
本文已收录于以下专栏:
相关文章推荐
在Maven项目的开发中,当需要读取src/下的配置文件时,该怎么做?
我们假设Resources下有一个文件名为kafka.properties的配置文件(为什么用kafka.properties...
处理Properties文件的另一更佳解决方案:见http://blog.csdn.net/softwave/article/details/6873227《Java的Properties文件操作类》...
最近项目赶的紧,歇了一个星期没写博客了,趁周末继续写这个系列。
     先前我们讲的都是“线性结构”,他的特征就是“一个节点最多有一个”前驱“和一个”后继“。那么我们今天讲的树会是怎样的呢?...
校招秋招360、滴滴、美团测试开发面经
1. 使用redis有哪些好处?
(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
(2) 支持丰富数据类型,支持string,...
maven工程下 读取resource下配置文件
CSS Flex 新旧法语对比FlexBox 模型图解老版本的语法定义容器的display属性.box{
display: -moz- /*Firefox*/
display:...
目前我正在教授一个为期两周的“敏捷开发实践”速成课,参加培训的团队成员都是非常传统的企业级Java开发者。要将社区中15年的进展浓缩到8个半天的实践课程中非常具有挑战性:在严格地时间约束下,教授什么思...
他的最新文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 lte tdd切换流程 的文章

 

随机推荐