1.什么是泥潭d泥系统
2.国内首款网游是什么?
3.软件测试的方法有哪些?
4.å¦ä½è®¾è®¡èªå®ä¹çDIrectShow transform filter
什么是系统
系统是什么
尽管系统一词频繁出现在社会生活和学术领域中,但不同的源码人在不同的场合往往赋予它不同的含义。长期以来,潭源系统概念的泥潭d泥定义和其特征的描述尚无统一规范的定论。一般我们采用如下的源码定义:系统是由一些相互联系、相互制约的潭源vb 网络限速器源码若干组成部分结合而成的、具有特定功能的泥潭d泥一个有机整体(集合)。
我们可以从三个方面理解系统的源码概念:
(1)系统是由若干要素(部分)组成的。这些要素可能是潭源一些个体、元件、泥潭d泥零件,源码也可能其本身就是潭源一个系统(或称之为子系统)。如运算器、泥潭d泥控制器、源码存储器、潭源输入/输出设备组成了计算机的硬件系统,而硬件系统又是计算机系统的一个子系统。
(2)系统有一定的结构。一个系统是其构成要素的集合,这些要素相互联系、相互制约。系统内部各要素之间相对稳定的****、组织秩序及失控关系的内在表现形式,就是系统的结构。例如钟表是由齿轮、发条、指针等零部件按一定的方式装配而成的,但一堆齿轮、发条、指针随意放在一起却不能构成钟表;人体由各个器官组成,单个各器官简单拼凑在一起不能成其为一个有行为能力的人。
(3)系统有一定的功能,或者说系统要有一定的目的性。 系统的功能是指系统与外部环境相互联系和相互作用中表现出来的性质、能力、和功能。例如信息系统的功能是进行信息的收集、传递、储存、加工、维护和使用,辅助决策者进行决策,帮助企业实现目标。
与此同时,我们还要从以下几个方面对系统进行理解:系统由部件组成,部件处于运动之中;部件间存在着联系;系统各主量和的贡献大于各主量贡献的和,即常说的1+1〉2;系统的状态是可以转换、可以控制的。
系统在实际应用中总是以特定系统出现的,如消化系统、生物系统、教育系统等,其前面的修饰词描述了研究对象的物质特点,即“物性”, 而“系统”一词则表征所述对象的整体性。
对某一具体对象的研究,既离不开对其物性的描述,也离不开对其系统性的描述。系统科学研究将所有实体作为整体对象的特征,如整体与部分、结构与功能、稳定与演化等等。
[编辑本段]计算机系统
以下是有关现在关于操作系统的文章。
我们常说的系统通常是指操作系统。
一、计算机软件与操作系统
功能强大的计算机自从走进了人类的生活就发挥着越来越重要的作用,随着时代的发展,计算机已与人们的日常生活息息相关。不能不说计算机软件日新月异的发展在此起着关键作用。可以这么说,离开了软件,计算机就成了废铜烂铁。
计算机机软件大致可以分为两类:系统软件和应用软件。
系统软件用于管理计算机资源,并为应用软件提供一个统一的平台。
应用软件则在系统软件的基础上实现用户所需要的功能。
而操作系统(Operating System,简称os)则是最基本的系统软件,它控制计算机的所有资源并提供应用程序开发的基础。
二、操作系统诞生的原因
计算机是由CPU、内存、磁盘、显卡、声卡等许许多多设备组成的,而且这些设备的厂商众多,品种繁多,而且不同厂商生产的同种设备虽然完成同种功能,但是具体细节却存在千差万别。
为了正确地管理和使用这些设备来实现具体的应用,这样程序员就得了解和掌握各种设备的工作原理。
而且对于同种设备,由于不同的硬件厂商在实现细节上的差异使得程序员再次陷入了复杂的硬件控制的深渊。
必须找到一种方法使得程序员从苦海中脱离出来!多年的研究与发展终于使得这个愿望成为现实。这个解决方法就是在硬件的基础上加载一层软件来管理整个系统。
这个软件通过设备驱动程序来与计算机硬件打交道,通过一系列的功能模块将整个计算机硬件系统抽象成为一个公共、统一、开放的接口—虚拟机,从而使得程序员不必再陷入各种硬件系统的具体细节!
这一层软件就是操作系统。
三、什么是操作系统
操作系统是一个大型的软件系统,其功能复杂,体系庞大。
从不同的角度看的结果也不同,正是“横看成岭侧成峰”,下面我们通过最典型的两个角度来分析一下。
1。从程序员的角度看
正如前面所说的,如果没有操作系统,程序员在开发软件的时候就必须陷入复杂的硬件实现细节。程序员并不想涉足这个可怕的领域,而且大量的精力花费在这个重复的、没有创造性的工作上也使得程序员无法集中精力放在更具有创造性的程序设计工作中去。
程序员需要的是一种简单的,高度抽象的可以与之打交道的设备。
将硬件细节与程序员隔离开来,这当然就是操作系统。
从这个角度看,操作系统的作用是为用户提供一台等价的扩展机器,也称虚拟机,小程序商城分类源码它比底层硬件更容易编程。
2。从使用者的角度看
从使用者的角度来看,操作系统则用来管理一个复杂系统的各个部分。
操作系统负责在相互竞争的程序之间有序地控制对CPU、内存及其它I/O接口设备的分配。
比如说,假设在一台计算机上运行的三个程序试图同时在同一台打印机上输出计算结果。那么头几行可能是程序1的输出,下几行是程序2的输出,然后又是程序3的输出等等。
最终结果将是一团糟。这时,操作系统采用将打印输出送到磁盘上的缓冲区的方法就可以避免这种混乱。在一个程序结束后,操作系统可以将暂存在磁盘上的文件送到打印机输出。
从这种角度来看,操作系统则是系统的资源管理者。
四、操作系统发展历史
下面我们结合计算机的发展历史来回顾一下操作系统的发展历程。
1。第一代计算机(-):真空管和插件板
年代中期,美国哈佛大学、普林斯顿高等研究院、宾夕法尼亚大学的一些人使用数万个真空管,构建了世界上第一台电子计算机。开启计算机发展的历史。这个时期的机器需要一个小组专门设计、制造、编程、操作、维护每台机器。
程序设计使用机器语言,通过插板上的硬连线来控制其基本功能。
这个时候处于计算机发展的最初阶段,连程序设计语言都还没有出现,操作系统更是闻所未闻!
2。第二代计算机(-):晶体管和批处理系统
这个时期计算机越来越可靠,已从研究院中走出来,走进了商业应用。
但这个时期的计算机主要完成各种科学计算,需要专门的操作人员维护,并且需要针对每次的计算任务进行编程。
第二代计算机主要用于科学与工程计算。使用FORTRAN与汇编语言编写程序。在后期出现了操作系统的雏形:FMS(FORTRAN监控系统)和IBMSYS(IBM为机配备的操作系统)
3。
第三代计算机(-):集成电路芯片和多道程序
年代初,计算机厂商根据不同的应用分成了两个计算机系列,一个针对科学计算,一个针对商业应用。
随着计算机应用的深入,对统一两种应用的计算机需求出现了。这时IBM公司试图通过引入System/来解决这个问题。
与这个计划配套,IBM公司组织了OS/操作系统的开发,然后复杂的需求,以及当时软件工程水平低下使得OS/的开发工作陷入了历史以来最可怕的“软件开发泥潭”,诞生了最著名的失败论著----《神秘的人月》。
虽然这个开发计划失败了,但是这个愿望却成为了计算机厂商的目标。
此时,MIT、Bell Lab(贝尔实验室)和通用电气公司决定开发一种“公用计算机服务系统”----MULTICS,希望其能同时支持数百名分时用户的一种机器。结果这个计划的研制难度超出了所有人的预料,最后这个系统也以失败结束。不过,MULTICS的思想却为后来的操作系统很多提示。
年代未,一位贝尔实验室曾参加过MULTICS研制工作的计算机科学家Ken Thompson,在一台无人使用的PDP-7机器上开发出了一套简化的、单用户版的MULTICS。后来导致了UNIX操作系统的诞生。
目前UNIX操作系统主导了小型机、工作站以及其他市场。
也是至今最有影响力的操作系统之一,而Linux也是UNIX系统的一种衍生。
4。第四代计算机(-今):个人计算机
随着计算机技术的不断更新与发展,计算机神奇般地闯入了人们的生活,现在以低廉的价格就可以获得强大计算能力的计算机。
价格不再是阻拦计算机普及的门槛时,降低计算机的易用性就显得十分重要!由于UNIX系统的本身特点,使得其不太适合于在运行在个人计算机上,这时就需要一种新的操作系统。
在这一历史关键时候,IBM公司由于低估了PC机的市场,并未使用最大的力量角逐这一市场,这时Intel公司趁机进入,成为了当今微处理器的老大。
同时善于抓住时机的微软公司的总裁比尔·盖茨适时地进入了这一领域,用购买来的CP/M摇身一变成为MS-DOS,并凭借其成为个人计算机操作系统领域的霸主。
虽然是苹果公司在GUI方面先拔头筹,但由于苹果公司的不兼容、不开放的市场策略,未能扩大战果,这时微软又适时地进入了GUI方面,凭借WINDOWS系统再次称雄!
五、操作系统构成
一般来说,操作系统由以下几个部分组成:
1)进程调度子系统:
进程调度子系统决定哪个进程使用CPU,对进程进行调度、管理。
2)进程间通信子系统:
负责各个进程之间的通信。
3)内存管理子系统:
负责管理计算机内存。
4)设备管理子系统:
负责管理各种计算机外设,主要由设备驱动程序构成。
5)文件子系统:
负责管理磁盘上的各种文件、目录!
6)网络子系统:
负责处理各种与网络有关的东西。
六、操作系统结构设计
操作系统有多种实现方法与设计思路,下面仅选取最有代表性的三种做一简单的叙述。
1。整体式系统结构设计
这是最常用的一种组织方式,它常被誉为“大杂烩”,也可说,整体式系统结构就是“无结构”。
这种结构方式下,anroid源码重新编译开发人员为了构造最终的目标操作系统程序,首先将一些独立的过程,或包含过程的文件进行编译,然后用链接程序将它们链接成为一个单独的目标程序。
Linux操作系统就是采用整体式的系统结构设计。但其在此基础上增加了一些形如动态模块加载等方法来提高整体的灵活性,弥补整体式系统结构设计的不足。
2。层次式系统结构设计
这种方式则是对系统进行严格的分层,使得整个系统层次分明,等级森严!这种系统学术味道较浓!实际完全按照这种结构进行设计的操作系统不多,也没有广泛的应用。
可以这么说,现在的操作系统设计是在整体式系统结构与层次式系统结构设计中寻求平衡。
3。微内核系统结构设计
而微内核系统结构设计则是近几年来出现的一种新的设计理念,最有代表性的操作系统有Mach和QNX。
微内核系统,顾名思义就是系统内核很小!比如说QNX的微内核只负责:
¨ 进程间的通信
¨ 低层的网络通信
¨ 进程调度
¨ 第一级中断处理
七、操作系统横向比较
计算机历史中出现了许许多多的操作系统,然后大浪淘沙,无情地淘汰了许多,只留下一些经历过市场考验的:
1。
桌面操作系统:
1)MSDOS:Intel x系列的PC机上的最早的操作系统,微软公司产品,曾经统治了这个领域,现在已逐渐被自家兄弟WINDOWS 9x系列所代替,现在除了一些低档机外已不多见。
2)Windows 9x:微软公司产品,从Windows 3。
x发展而来,现在是基于Intel x系列的PC机上的主要操作系统,也是现然个人电脑中装机量最大的操作系统。面向桌面、面向个人用户。
3)Mac OS:苹果公司所有,界面友好,性能优异,但由于只能运行在苹果公司自己的电脑上而发展有限。
但由于苹果电脑独特的市场定位,现在仍存活良好。
[1]4)linux:Linux是一种计算机操作系统和它的内核的名字。它也是自由软件和开放源代码发展中最著名的例子。
严格来讲,Linux这个词本身只表示Linux内核,但在实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统(也被称为GNU/Linux)。
基于这些组件的Linux软件被称为Linux发行版。一般来讲,一个Linux发行套件包含大量的软件,比如软件开发工具,数据库,Web服务器(例如Apache),X Window,桌面环境(比如GNOME和KDE),办公套件(比如 ),等等。
2。
服务器操作系统:
1)UNIX系列:UNIX可以说是源远流长,是一个真正稳健、实用、强大的操作系统,但是由于众多厂商在其基础上开发了有自己特色的UNIX版本,所以影响了整体。在国外,UNIX系统可谓独树一帜,广泛应用于科研、学校、金融等关键领域。
但由于中国的计算机发展较为落后,UNIX系统的应用水平与国外相比有一定的滞后。
2)Windows NT系列:微软公司产品,其利用Windows的友好的用户界面的优势打进服务器操作系统市场。但其在整体性能、效率、稳定性上都与UNIX有一定差距,所以现在主要应用于中小企业市场。
3)Novell Netware系列:Novell公司产品,其以极适合于中小网络而著称,在中国的证券行业市场占有率极高,而且其产品特点鲜明,仍然是服务器系统软件中的长青树。
系统 xìtǒng [system]∶按一定的关系组成的同类事物
[编辑本段]人体系统
由各个器官按照一定的顺序排列在一起,完成一项或多项生理活动的结构叫系统。
人体共有八大系统:运动系统、神经系统、内分泌系统、循环系统、呼吸系统、消化系统、泌尿系统、生殖系统。这些系统协调配合,使人体内各种复杂的生命活动能够正常进行。
例如:口 - 咽 - 食管 - 胃 - 肠(小肠 - 大肠 - 直肠)- 肛门(其中包括:肝、胰和唾液腺等器官)
系统:是指相互联系又相互作用着的对象的有机组合。
系统:是由相互作用和相互依赖的若干组成部分结合而成的,具有特定功能的有机整体,而且这个有机整体又是它从属的更大系统的组成部分
★八大系统的作用:
一、运动系统:运动系统由骨、软骨、关节和骨骼肌等构成。起支架、保护和运动的作用。
二、神经系统:神经系统由神经元组成,是由中枢神经系统和遍布全身的周围神经系统而组成。在体内起主导作用;一方面它控制和调节个器官、系统的活动;另一方面通过神经系统的分析与综合,使人体对环境变化的刺激作出相应的反应,达到人体环境的统一。
三、内分泌系统:内分泌系统由多种腺体组成。
通过分泌不同的激素(雄性、雌性激素、胰岛素、肾上腺素)对整个人体的生长、发育、新陈代谢和生殖起到调节作用。服务器代理源码
四、循环系统:循环系统由心脏、血管和淋巴管组成。它将消化系统的吸收的营养物质和肺吸收的氧送到全身器官的组织和细胞,同时将他们的代谢产物及CO2运送到肾、肺、皮肤排出体外。
以保证人体的新陈代谢不断。
五、呼吸系统:由呼吸道和肺组成。吸入新鲜空气,通过肺泡内的气体交换,使血液得到氧并排除Co2。
六、消化系统:有口腔、咽、食管、小肠、大肠等组成。是食物的消化和吸收的功能。供人体所需要的书屋和能量。
七、泌尿系统:由肾脏、输尿管、膀胱、尿道等组成。
排出体内多余的水分及代谢产物或毒素。
八、生殖系统:产生生殖细胞,繁殖后代。
[编辑本段]网络操作系统
网络操作系统严格来说应称为软件平台,因为目前并非单一的网络操作系统一统天下,而是存在着多种网络操作系统并存的情况,这种情况是由以下两方面的原因造成的:
1 。
以目前常用的酶来说,主要有UNIX的系统,网络系统和Windows NT的系统。以推出的时间来说, UNIX的为最早,网络为第二, Windows NT的最晚。除去技术上的原因,依靠推出时间早的优势, UNIX的几乎独霸了最早具有连网需求的邮电,银行,铁路,军事等领域,而随着网络技术的发展,虽然出现了像视窗新技这样界面更友好的操作系统,但用户出于保护投资及使用习惯上的原因不情愿完全抛弃一种操作系统,从而导致了操作系统的共存与混用。
2 。各种操作系统在网络应用方面都有各自的优势,而实际应用却千差万别,这种局面促使各种操作系统都极力提供跨平台的应用支持。由于以互联网的TCP / IP协议为基础,而的TCP / IP协议正是的UNIX的标准协议,互联网的高速发展自然就为的UNIX提供了极大的机遇,微软早在Windows 中里就提供了内嵌的TCP / IP的协议,其的Windows NT网络操作系统当然更是把对TCP / IP协议的支持作为其重要的开发策略;而随着视窗客户的日益增多,使得UNIX的,均提供对网络的Windows的支持。
国内首款网游是什么?
1. 年3月日,天神(Admin)Annihilator在中文MUD史上第一份系统性的管理者指南中写下以上内容,这份指南的出现已经是在第一个MUD诞生年之后。年,在英国塞克斯大学(Essex)的DEC system-主机上,运行着Richard Barthl和Roy Trubshaw开发的第一个可供多人参与的纯文字界面的游戏,他们将这个游戏称为MUD1,刚开始这个游戏只允许在校学生参与,随后发展到在家也可以使用调制解调器连接至服务器参与游戏。而从MUD1中进化出的LPmud系统在未来多年的时间中支持了上千种语言MUD游戏的运行,虽然现在已经无法统计到有多少人参与过MUD,更无法统计到从MUD的开发和管理过程中诞生了多少程序员和平衡设计师,但可以断言:正是这些早期接触过MUD的程序员和平衡设计师们造就了今天网络游戏产业,如果说网络游戏是浮在水面上的冰山,那么他们就是冰山隐藏在水中的巨大部分,支持着人们所看到的网络游戏产业。
2. 中文MUD游戏的发展步伐非常缓慢,主要的原因还是硬件方面资源的缺乏,一个网络环境首先只能是在科研单位、学校或者电信部门产生。当MUD被汉化后,首先是在美国的华人学生将它们放置在学校供使用汉语的同学使用,在这个时期主要诞生了概念型MUD游戏《东方故事》、《东方故事2》和在后来被广为流传的《风云》系列、《西游记》系列等。然后这些游戏的源代码开始流传到我国台湾省和香港等院校网络设施较为发达的地区,随后再被厦门大学等内地院校的爱好者进行简体中文化和在校园内部网络测试后,再逐步散发到电信部门的爱好者手中。
3. 年后内地的MUD游戏才逐步发展起来,以《侠客行》为主的MUD游戏开始大量采用金庸、古龙等大师小说中的人物、场景、武功、情节等赢得了大量玩家的青睐。随着国内互联网接入条件的改善,越来越多的玩家加入到MUD的潮流中,并给MUD取了一个带有中国气息的名字“泥潭”。所谓“泥潭一入深似海”便是当时MUD游戏的写照。
4. 比现在网络游戏练功更枯燥千百倍的MUD在游戏性上并没有什么长处。其纯文字加ASCII代码的表现形式也谈不上什么美感,操作基本上依靠英文指令也让玩家不容易上手。但在当时QQ尚不流行,网络聊天室人满为患的情况下,MUD却成了一个玩家们发泄自己情感,相互交流的场所。随着玩家的增多,MUD逐渐有了自己的文化。从现在网络游戏的角度来看,关于玩家道德水准的争论,拉帮结伙闯天下,玩家间的感情交错等等都在每个MUD服务器上的玩家身上展现,而对于PK这个敏感的话题,在MUD的世界更是一刻都未曾停止。凯散瞎在年后,MUD在国内并没有发展几年就被图形化网络游戏所取代。MUD在中国的网络游戏虽然只占有短暂的史前部分,但图形网络游戏并不能算是MUD的下一代,而是成长起来的MUD。国内网络游戏在MUD时期属于呀呀学语的童年,目前的ryu控制器源码图形网络游戏则是属于朝气蓬勃的青年。MUD时期所积累下的人才,电信方面的运作经验都在这个阶段被充分利用起来,而MUD时期所遗留下来的没有解决的问题,还没有结果的争论同样在这个阶段延续着。
5. 公元年,一名在中国软件史上颇有名气的技术人员离开了公司。这时的他除了有点名气外,什么都没有。这个有点小名气的人叫鲍岳桥。鲍岳桥本人不怎么爱玩游戏,可是天意弄人,不喜爱电脑游戏的鲍岳桥却和两个朋友办了中国最大的大众游戏网站——联众游戏网。
6. 和鲍岳桥一起搞联众的朋友叫简晶、王健华。年,他们三人就开始上网,当时,文字MUD吸引了很多中国的第一代网民。鲍岳桥喜欢下围棋,对MUD没有兴趣,而简晶喜欢玩MUD。玩了两年的游戏后,年简晶提出做在线棋牌游戏。三人说干就干:写程序,买服务器架网。三人用了2个月时间,在NT平台上设计了联众的框架。年2月,鲍岳桥他们拼装了一台8千多元的服务器,将服务器架设好之后,联众游戏网算是正式诞生了。
7. 年初,刚诞生的联众没钱打广告,而且由于当时网络线路不好,造成打牌的玩家经常玩着玩着就断线,所以刚来时联众吸引的用户并不多。到6月日,东方网景在首页给联众做了一条新闻,一些新闻媒体也开始报道联众。同年月,联众同时在线人数突破一千人。这在当时是一个了不起的成绩,当时微软Zone的同时在线人数有五六千人,台湾宏基一千多人同时在线。后来除了微软,其它类似的站点都没有联众发展得那么好。
8. 年9月,马晓春、方天丰等围棋名人在联众下棋,结果造成当时的比赛气氛相当浓烈。从那时起,鲍岳桥他们认识到名人对联众的重要性。名人在联众下棋,能使联众人气兴旺,大家再口碑相传,到联众下棋的人自然就多了。
9. 年5月日,已经一年半没有给自己开工资的鲍岳桥们,将联众作价万,将%的股份卖给了中公网。在度过艰难的两年后,年、年联众开始形成良性循环的商业模式。当正统的大型电脑网络游戏开始兴起发展之时,联众已经在这个领域里默默地耕耘了数载。
. 今天,联众的注册人数已经高达万人,用户在联众上能选择多达多款游戏。联众已经成为世界上知名的棋牌游戏网站。
. 联众不是通常意思上我们所指的网络游戏。但是在中国的游戏发展进程中,谁都无法忽视联众的存在。电脑游戏玩家知道它,不是电脑游戏玩家的普通人也知道它。记者很多刚学会用电脑上网的亲戚朋友,第一个接触的游戏娱乐网站便是联众。网上还能玩桥牌、围棋和麻将!随时随地都有对手参与棋局,这对喜欢棋牌的普通大众来说是一种难以抵抗的诱惑。论同时在线之多,注册会员之多,最热门的网络游戏《传奇》也难与联众相比。
. 在网站烧钱的时代,在所有人都重视门户网站的时代,在还没有多少人意识到网络游戏娱乐能带来赢利的时代,联众作为一个另类顽强地生存下来。联众能生存下来是靠鲍岳桥等三个创始人的倔强,搞技术的鲍岳桥他们一开始就认定游戏网站能吸引用户,围棋、桥牌这类游戏也会长盛不衰。
. 联众一开始是完全免费的,吸引到足够的人后开始推出收费服务。这种经营模式和现在的网络游戏并无二致。网络游戏也是先免费公测,让玩家先玩,等到参加公测的玩家到达一定数量时就开始收费。年6月,联众开始收取会员费,会员可以接受专业人员指导下棋。联众发展起来后,还与其它大型门户网站合建棋牌频道,收入分成。以前联众上的banner广告较廉价,现在这一块广告收入也很丰厚。从弱小到强大,联众模式让后来的网络运营商学到了很多的东西。
. 联众是一个另类的,与众不同的在线游戏娱乐运营商。当联众历经磨难在年找到赢利模式后,一款名叫《万王之王》的网络游戏同年开始进入中国大陆。从那时起,联众不再被人视为不能赢利的游戏网络。在线网络娱乐市场的淘金时代开始到来了。
. 时光不知不觉已经跨入了年,此时的中国网络游戏虽然还是以文字MUD为主,但是文字MUD的缺点已经显得越来越突出。纯文字的MUD虽然能够满足玩家们一时的连网游戏的需求,但时间一长就难免变得乏味起来,于是国际化的图形MUD大潮正迫不及待地涌入中国。就在这个千载难逢的机遇出现时,一款介于文字MUD与图形MUD之间的游戏出现了,这就是当年曾红遍全国的准图形MUD——《笑傲江湖之精忠报国》。
. 年4月,乐斗士工作小组在北京正式成立,笑傲江湖游戏网也于同期正式推出。一个月之后,乐斗士工作小组推出了国内第一款简易的图形文字MUD游戏——《笑傲江湖之精忠报国》。在这款游戏中,制作者将抗击倭寇和江湖门派的概念较好地引入游戏之中,并设定了较为公正的NPC系统和PK系统,使得游戏的发展掌握在玩家手中。此外,这款游戏还以其简便的操作系统和直观的游戏界面吸引了众多网络游戏玩家的加入。到年2月日为止,已经有万名玩家在《笑傲江湖之精
软件测试的方法有哪些?
一下来自百度百科相当全面的资料。或者你可以看看testing测试论坛,上面很多资料都是免费下载的。
β测试_Beta测试 β测试,英文是Beta testing。又称Beta测试,用户验收测试(UAT)。 β测试是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,Beta测试不能由程序员或测试员完成。 当开发和测试根本完成时所做的测试,而最终的错误和问题需要在最终发行前找到。这种测试一般由最终用户或其他人员员完成,不能由程序员或测试员完成。 α测试_Alpha测试 α测试,英文是Alpha testing。又称Alpha测试. Alpha测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,Alpha测试不能由该系统的程序员或测试员完成。 在系统开发接近完成时对应用系统的测试;测试后,仍然会有少量的设计变更。这种测试一般由最终用户或其他人员来完成,不能由程序员或测试员完成。 可移植性测试 可移植性测试,英文是Portability testing。又称兼容性测试。 可移植性测试是指测试软件是否可以被成功移植到指定的硬件或软件平台上。 用户界面测试-UI测试 用户界面测试,英文是User interface testing。又称UI测试。 用户界面,英文是User interface。是指软件中的可见外观及其底层与用户交互的部分(菜单、对话框、窗口和其它控件)。 用户界面测试是指测试用户界面的风格是否满足客户要求,文字是否正确,页面是否美观,文字,组合是否完美,操作是否友好等等。UI 测试的目标是确保用户界面会通过测试对象的功能来为用户提供相应的访问或浏览功能。确保用户界面符合公司或行业的标准。包括用户友好性、人性化、易操作性测试。 用户界面测试用户分析软件用户界面的设计是否合乎用户期望或要求。它常常包括菜单,对话框及对话框上所有按钮,文字,出错提示,帮助信息 (Menu 和Help content)等方面的测试。比如,测试Microsoft Excel中插入符号功能所用的对话框的大小,所有按钮是否对齐,字符串字体大小,出错信息内容和字体大小,工具栏位置/图标等等。 冒烟测试 冒烟测试,英文是Smoke testing。 冒烟测试的名称可以理解为该种测试耗时短,仅用一袋烟功夫足够了。也有人认为是形象地类比新电路板功基本功能检查。任何新电路板焊好后,先通电检查,如果存在设计缺陷,电路板可能会短路,板子冒烟了。 冒烟测试的对象是每一个新编译的需要正式测试的软件版本,目的是确认软件基本功能正常,可以进行后续的正式测试工作。冒烟测试的执行者是版本编译人员。 随机测试 随机测试,英文是Ad hoc testing。 随机测试没有书面测试用例、记录期望结果、检查列表、脚本或指令的测试。主要是根据测试者的经验对软件进行功能和性能抽查。随机测试是根据测试说明书执行用例测试的重要补充手段,是保证测试覆盖完整性的有效方式和过程。 随机测试主要是对被测软件的一些重要功能进行复测,也包括测试那些当前的测试样例(TestCase)没有覆盖到的部分。另外,对于软件更新和新增加的功能要重点测试。重点对一些特殊点情况点、特殊的使用环境、并发性、进行检查。尤其对以前测试发现的重大Bug,进行再次测试,可以结合回归测试 (Regressive testing)一起进行。 本地化测试 本地化测试,英文是Localization testing。 本地化就是将软件版本语言进行更改,比如将英文的windows改成中文的windows就是本地化。本地化测试的对象是软件的本地化版本。本地化测试的目的是测试特定目标区域设置的软件本地化质量。本地化测试的环境是在本地化的操作系统上安装本地化的软件。从测试方法上可以分为基本功能测试,安装/卸载测试,当地区域的软硬件兼容性测试。测试的内容主要包括软件本地化后的界面布局和软件翻译的语言质量,包含软件、文档和联机帮助等部分。 本地化能力测试 本地化能力测试,英文是Localizability testing。 本地化能力测试是指不需要重新设计或修改代码,将程序的用户界面翻译成任何目标语言的能力。为了降低本地化能力测试的成本,提高测试效率,本地化能力侧是通常在软件的伪本地化版本上进行。 本地化能力测试中发现的典型错误包括:字符的硬编码(即软件中需要本地化的字符写在了代码内部),对需要本地化的字符长度设置了国定值,在软件运行时以控件位置定位,图标和位图中包含了需要本地化的文本,软件的用户界面与文档术语不一致等。 国际化测试 国际化测试,英文是International testing。又称国际化支持测试。 国际化测试的目的是测试软件的国际化支持能力,发现软件的国际化的潜在问题,保证软件在世界不同区域都能正常运行。国际化测试使用每种可能的国际输入类型,针对任何区域性或区域设置检查产品的功能是否正常,软件国际化测试的重点在于执行国际字符串的输入/输出功能。国际化测试数据必须包含东亚语言、德语、复杂脚本字符和英语(可选)的混合字符。 国际化支持测试是指验证软件程序在不同国家或区域的平台上也能够如预期的那样运行,而且还可以按照原设计尊重和支持使用当地常用的日期,字体,文字表示,特殊格式等等。比如,用英文版的 Windows XP 和 Microsoft Word 能否展示阿拉伯字符串?用阿拉伯版的 Windows XP 和 阿拉伯版的Microsoft Word 能否展示阿拉伯字符串?又比如,日文版的Microsoft Excel对话框是否显示正确翻译的日语?一旦来说执行国际化支持测试的测试人员往往需要基本上了解这些国家或地区的语言要求和期望行为是什么。 安装测试 安装测试,英文是Installing testing。 安装测试是确保软件在正常情况和异常情况下,例如,进行首次安装、升级、完整的或自定义的安装都能进行安装的测试。异常情况包括磁盘空间不足、缺少目录创建权限等场景。核实软件在安装后可立即正常运行。安装测试包括测试安装代码以及安装手册。安装手册提供如何进行安装,安装代码提供安装一些程序能够运行的基础数据。 白盒测试-结构测试-逻辑驱动测试 白盒测试,英文是White Box Testing。又称结构测试或者逻辑驱动测试。 白盒测试是把测试对象看作一个打开的盒子。利用白盒测试法进行动态测试时,需要测试软件产品的内部结构和处理过程,不需测试软件产品的功能。 白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。 白盒测试是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。 白盒测试常用工具有:Jtest、VcSmith、Jcontract、C++ Test、CodeWizard、logiscope。 黑盒测试-功能测试-数据驱动测试 黑盒测试,英文是Black Box Testing。又称功能测试或者数据驱动测试。 黑盒测试是根据软件的规格对软件进行的测试,这类测试不考虑软件内部的运作原理,因此软件对用户来说就像一个黑盒子。 软件测试人员以用户的角度,通过各种输入和观察软件的各种输出结果来发现软件存在的缺陷,而不关心程序具体如何实现的一种软件测试方法。 黑盒测试常用工具有:AutoRunner、winrunner、loadrunner。 自动化测试 自动化测试,英文是Automated Testing。 使用自动化测试工具来进行测试,这类测试一般不需要人干预,通常在GUI、性能等测试和功能测试中用得较多。通过录制测试脚本,然后执行这个测试脚本来实现测试过程的自动化。国内领先的自动化测试服务提供商是泽众软件。自动化测试工具有AutoRunner和TAR等。 回归测试 回归测试,英文是Regression testing。 回归测试是指在发生修改之后重新测试先前的测试以保证修改的正确性。理论上,软件产生新版本,都需要进行回归测试,验证以前发现和修复的错误是否在新软件版本上再次出现。 根据修复好了的缺陷再重新进行测试。回归测试的目的在于验证以前出现过但已经修复好的缺陷不再重新出现。一般指对某已知修正的缺陷再次围绕它原来出现时的步骤重新测试。通常确定所需的再测试的范围时是比较困难的,特别当临近产品发布日期时。因为为了修正某缺陷时必需更改源代码,因而就有可能影响这部分源代码所控制的功能。所以在验证修好的缺陷时不仅要服从缺陷原来出现时的步骤重新测试,而且还要测试有可能受影响的所有功能。因此应当鼓励对所有回归测试用例进行自动化测试。 验收测试 验收测试,英文是Acceptance testing。 验收测试是指系统开发生命周期方法论的一个阶段,这时相关的用户或独立测试人员根据测试计划和结果对系统进行测试和接收。它让系统用户决定是否接收系统。它是一项确定产品是否能够满足合同或用户所规定需求的测试。 验收测试一般有三种策略:正式验收、非正式验收活Alpha 测试、Beta 测试。 动态测试 动态测试,英文是Moment Testing。 动态测试是指通过运行软件来检验软件的动态行为和运行结果的正确性。 根据动态测试在软件开发过程中所处的阶段和作用,动态测试可分为如下几个步骤: 1、单元测试 2、集成测试 3、系统测试 4、验收测试 5、回归测试 探索测试 探索测试,英文是Exploratory Testing。 探索测试是指通常用于没有产品说明书的测试,这需要把软件当作产品说明书来看待,分步骤逐项探索软件特性,记录软件执行情况,详细描述功能,综合利用静态和动态技术来进行测试。探索测试人员只靠智能、洞察力和经验来对bug的位置进行判断,所以探索测试又被称为自由形式测试。 单元测试 单元测试,英文是Unit Testing。 单元测试是最微小规模的测试;以测试某个功能或代码块。典型地由程序员而非测试员来做,因为它需要知道内部程序设计和编码的细节知识。这个工作不容易做好,除非应用系统有一个设计很好的体系结构; 还可能需要开发测试驱动器模块或测试套具。 集成测试 集成测试,英文是Integration Testing。 集成测试是指一个应用系统的各个部件的联合测试,以决定他们能否在一起共同工作并没有冲突。部件可以是代码块、独立的应用、网络上的客户端或服务器端程序。这种类型的测试尤其与客户服务器和分布式系统有关。一般集成测试以前,单元测试需要完成。 集成测试是单元测试的逻辑扩展。它的最简单的形式是:两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。此外,如果程序由多个进程组成,应该成对测试它们,而不是同时测试所有进程。 集成测试识别组合单元时出现的问题。通过使用要求在组合单元前测试每个单元,并确保每个单元的生存能力的测试计划,可以知道在组合单元时所发现的任何错误很可能与单元之间的接口有关。这种方法将可能发生的情况数量减少到更简单的分析级别 系统测试 系统测试,英文是System Testing。 系统测试是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件。系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不相符合或与之矛盾的地方。 系统测试的对象不仅仅包括需要测试的产品系统的软件,还要包含软件所依赖的硬件、外设甚至包括某些数据、某些支持软件及其接口等。因此,必须将系统中的软件与各种依赖的资源结合起来,在系统实际运行环境下来进行测试。 端到端测试 端到端测试,英文是End to End Testing。 端到端测试类似于系统测试,测试级的“宏大”的端点,涉及整个应用系统环境在一个现实世界使用时的模拟情形的所有测试。例如与数据库对话,用网络通讯,或与外部硬件、应用系统或适当的系统对话。端到端架构测试包含所有访问点的功能测试及性能测试。端到端架构测试实质上是一种"灰盒"测试,一种集合了白盒测试和黑盒测试的优点的测试方法。 健全测试 健全测试,英文是Sanity testing。 健全测试是指一个初始化的测试工作,以决定一个新的软件版本测试是否足以执行下一步大的测试努力。例如,如果一个新版软件每5分钟与系统冲突,使系统陷于泥潭,说明该软件不够“健全”,目前不具备进一步测试的条件。 衰竭测试 衰竭测试,英文是Failure Testing。 衰竭测试是指软件或环境的修复或更正后的“再测试”。可能很难确定需要多少遍再次测试。尤其在接近开发周期结束时。自动测试工具对这类测试尤其有用。 接受测试 接受测试,英文是Accept Testing。 接受测试是基于客户或最终用户的规格书的最终测试,或基于用户一段时间的使用后,看软件是否满足客户要求。一般从功能、用户界面、性能、业务关联性进行测试。 负载测试 负载测试,英文是Load testing。 负载测试是测试一个应用在重负荷下的表现。例如测试一个 Web 站点在大量的负荷下,何时系统的响应会退化或失败,以发现设计上的错误或验证系统的负载能力。在这种测试中,将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。 负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。此外,负载测试还要评估性能特征,例如,响应时间、事务处理速率和其他与时间相关的方面。 强迫测试 强迫测试,英文是Force Testing。 强迫测试是在交替进行负荷和性能测试时常用的术语。也用于描述象在异乎寻常的重载下的系统功能测试之类的测试,如某个动作或输入大量的重复,大量数据的输入,对一个数据库系统大量的复杂查询等。 压力测试 压力测试,英文是Stress Testing。和负载测试差不多。 压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网络带宽等。一般用并发来做压力测试。 性能测试 性能测试,英文是Performance Testing。 性能测试是在交替进行负荷和强迫测试时常用的术语。理想的“性能测试”(和其他类型的测试)应在需求文档或质量保证、测试计划中定义。性能测试一般包括负载测试和压力测试。 通常验证软件的性能在正常环境和系统条件下重复使用是否还能满足性能指标。或者执行同样任务时新版本不比旧版本慢。一般还检查系统记忆容量在运行程序时会不会流失(memory leak)。比如,验证程序保存一个巨大的文件新版本不比旧版本慢。 可用性测试 可用性测试,英文是Practical Usability Testing。 可用性测试是对“用户友好性”的测试。显然这是主观的,且将取决于目标最终用户或客户。用户面谈、调查、用户对话的录象和其他一些技术都可使用。程序员和测试员通常都不宜作可用性测试员。 卸载测试 卸载测试,英文是Uninstall Testing。 卸载测试是对软件的全部、部分或升级卸载处理过程的测试。主要是测试软件能否卸载,卸载是否干净,对系统有无更改,在系统中的残留与后来的生成文件如何处理等。还有原来更改的系统值是否修改回去 恢复测试 恢复测试,英文是Recovery testing。 恢复测试是测试一个系统从如下灾难中能否很好地恢复,如遇到系统崩溃、硬件损坏或其他灾难性问题。恢复测试指通过人为的让软件(或者硬件)出现故障来检测系统是否能正确的恢复,通常关注恢复所需的时间以及恢复的程度。 恢复测试主要检查系统的容错能力。当系统出错时,能否在指定时间间隔内修正错误并重新启动系统。恢复测试首先要采用各种办法强迫系统失败,然后验证系统是否能尽快恢复。对于自动恢复需验证重新初始化(reinitialization)、检查点(checkpointing mechanisms)、数据恢复(data recovery)和重新启动 (restart)等机制的正确性;对于人工干预的恢复系统,还需估测平均修复时间,确定其是否在可接受的范围内。 安全测试 安全测试,英文是Security Testing。 安全测试是测试系统在防止非授权的内部或外部用户的访问或故意破坏等情况时怎么样。这可能需要复杂的测试技术。安全测试检查系统对非法侵入的防范能力。安全测试期间,测试人员假扮非法入侵者,采用各种办法试图突破防线。例如: ①想方设法截取或破译口令; ②专门定做软件破坏系统的保护机制; ③故意导致系统失败,企图趁恢复之机非法进入; ④试图通过浏览非保密数据,推导所需信息,等等。理论上讲,只要有足够的时间和资源,没有不可进入的系统。因此系统安全设计的准则是,使非法侵入的代价超过被保护信息的价值。此时非法侵入者已无利可图。 兼容性测试 兼容测试,英文是Compatibility Testing。 兼容测试是测试软件在一个特定的硬件/软件/操作系统/网络等环境下的性能如何。向上兼容向下兼容,软件兼容硬件兼容。软件的兼容性有很多需要考虑的地方。 比较测试 比较测试,英文是Compare Testing。 比较测试是指与竞争伙伴的产品的比较测试,如软件的弱点、优点或实力。来取长补短,以增强产品的竞争力。 可接受性测试 可接受性测试,英文是Acceptability Testing。 可接受性测试是在把测试的版本交付测试部门大范围测试以前进行的对最基本功能的简单测试。因为在把测试的版本交付测试部门大范围测试以前应该先验证该版本对于所测试的功能基本上比较稳定。必须满足一些最低要求。比如不会很容易程序就挂起或崩溃。如果一个新版本没通过可测试性的验证,就应该阻拦测试部门花时间在该测试版本上测试。同时还要找到造成该版本不稳定的主要缺陷并督促尽快加以修正 边界条件测试 边界条件测试,英文是Boudary Testing。又称边界值测试。 一种黑盒测试方法,适度等价类分析方法的一种补充,由长期的测试工作经验得知,大量的错误是发生在输入或输出的边界上。因此针对各种边界情况设计测试用例,可以查出更多的错误。 边界条件测试是环绕边界值的测试。通常意味着测试软件各功能是否能正确处理最大值,最小值或者所设计软件能够处理的最长的字符串等等。 强力测试 强力测试,英文是Mightiness Testing。 强力测试通常验证软件的性能在各种极端的环境和系统条件下是否还能正常工作。或者说是验证软件的性能在各种极端环境和系统条件下的承受能力。比如,在最低的硬盘驱动器空间或系统记忆容量条件下,验证程序重复执行打开和保存一个巨大的文件次后也不会崩溃或死机。 装配/安装/配置测试 装配/安装/配置测试是验证软件程序在不同厂家的硬件上,所支持的不同语言的新旧版本平台上,和不同方式安装的软件都能够如预期的那样正确运行。比如,把英文版的 Microsoft Office 安装在韩文版 的Windows Me 上,再验证所有功能都正常运行。 静态测试 静态测试,英文是Static Testing。 静态测试指测试不运行的部分,例如测试产品说明书,对此进行检查和审阅.。静态方法是指不运行被测程序本身,仅通过分析或检查源程序的文法、结构、过程、接口等来检查程序的正确性。静态方法通过程序静态特性的分析,找出欠缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。静态测试结果可用于进一步的查错,并为测试用例选取提供指导。 静态测试常用工具有:Logiscope、PRQA; 隐藏数据测试 隐藏数据测试在软件验收和确认阶段是十分必要和重要的一部分。程序的质量不仅仅通过用户界面的可视化数据来验证,而且必须包括遍历系统的所有数据。 假设一个应用程序要求用户两条信息-----用户名和密码来创建帐户。这个用户输入这两条数据后保存。最后,一个确认窗口将通过数据库中找到这条数据来显示用户名和密码给用户。为了验证所有的数据保存是否正确,一个QA测试人员会在这个确认窗口简单的查看下用户名和密码。如果他们成功了?假设数据库记录了第三条信息----创建日期,它可能不会出现在确认窗口,而只在存档中才出现。如果创建日期保留的不正确,而QA测试人员只验证屏幕上的数据,那么这个问题就不可能被发现。创建日期可能就是一个bug,由于一个用户帐户保存了一个错误的日期到数据库中,这个问题也不可能会被引起注意,因为它被用户界面所隐藏。这只是一个简单的例子,但是它却演化出了一点:隐藏数据测试的重要性。 等价划分测试 等价划分测试的英文是equivalence partition testing。 等价划分测试是根据等价类设计测试用例的一种技术。是黑盒测试的典型方法之一,通过把被测试程序所有可能的输入数据域划分成若干部分。从每一部分中选取少数有代表性的数据作为测试用例,可有效减少测试次数,极大提高软件测试效率,缩短软件开发周期.等价类划分测试的目的就是为了在有限的测试资源的情况下,用少量有代表性的数据得到比较好的测试效果。有效等价类盒无效等价类。有效等价类中的数据代表的是一组符合需求文档的正确的有意义数据。无效等价类则正相反。 判定表 判定表的英文是decision table,是指一个表格,用于显示条件和条件导致动作的集合。 定义:判定表是分析和表达多逻辑条件下执行不同操作的情况的工具。 判定表的优点:能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用判定表能够设计出完整的测试用例集合。 在一些数据处理问题当中,某些操作的实施依赖于多个逻辑条件的组合,即:针对不同逻辑条件的组合值,分别执行不同的操作。判定表很适合于处理这类问题 深度测试 深度测试的英文Depth test ,是指执行一个产品的一个特性的所有细节,但不测试所有特性。 当比较函数返回真的时候才显示出效果来。必须启用“#深度测试”,才能执行测试。不使用的时候需要关闭。 基于设计的测试 基于设计的测试的英文是design-based testing,是根据软件的构架或详细设计引出测试用例的一种方法。 一种基于设计模型的测试方法(Model Based TestIng System,MATIS).该方法利用用户界面自动生成方法,把设计模型中的类属性定义和实现中的控件属性组织在一起,构建描述界面的逻辑对照表,辅助测试脚本引擎执行自动测试脚本.借助设计模型中扩展的类定义,MATIS方法可以自动生成测试用例和测试数据。 文档测试 文档测试的英文是documentation testing,测试关注于文档的正确性。 文档测试有三大类分别是开发文件、用户文件、管理文件。 1. 开发文件:可行性研究报告、软件需求说明书、数据要求说明书、概要设计说明书、详细设计说明书、数据库设计说明书、模块开发卷宗。 2.用户文件:用户手册、操作手册。 3.管理文件:项目开发计划、测试计划、测试分析报告、开发进度月报、项目开发总结报告。 软件测试中的文档测试主要是对相关的设计报告和用户使用说明进行测试,对于设计报告主要是测试程序与设计报告中的设计思想是否一致;对于用户使用说明进行测试时,主要是测试用户使用说明书中对程序操作方法的描述是否正确,重点是用户使用说明中提到的操作例子要进行测试,保证采用的例子能够在程序中正确完成操作。 域测试 域测试的英文是domain testing,定义参考等价划分测试(equivalence partition testing); 一般分为单域测试和多域测试,其中单域测试包括设备测试和业务测试,设备测试包括测试某个系统的软交换设备、中继媒体网关设备、信令网关设备、接入媒体网关和IAD等设备。 等价类划分有两种不同的情况:有效等价类和无效等价类。设计时要同时考虑这两种等价类,因为软件不仅要能接收合理的数据,也要能经受意外的考验。 一有效等价类:是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。 二无效等价类:与有效等价类的定义恰巧相反。
å¦ä½è®¾è®¡èªå®ä¹çDIrectShow transform filter
对äºDIrectShowçåå¦è èè¨ï¼æ大çå°é¾è«è¿äºå°è¯è®¾è®¡èªå®ä¹çfilterã
设计èªå®ä¹çtransform filteræ¯å°é¾ç
å 为 é¦å filteræ¯ä¸ç§dll ï¼åç¼å为.axï¼èç¼ådllå·¥ç¨éè¦ä¸å®çVCåºç¡ æ以建议å è¡¥å ä¸ç¹dllçç¥è¯
å ¶æ¬¡ dllç注åï¼GUIDççæåå·¥ç¨çé ç½®é½å¾éº»ç¦ã
å次 ç½ä¸ç¼ºä¹ç°æçtransform filterçä¾åãDirectShowç»çæºç æ¯å¦NULLINPLACE åCONTRASTé½å¤ªå¤æï¼é½å¸¦æ对è¯æ¡åå±æ§é¡µï¼ä¸éååå¦è ï¼èä¸è¿äºä¾å 没æä¸ä¸ªæ¶åå°å¾åæ ¼å¼ç转æ¢ï¼ètransform filteræ大çå ¬ç¨å°±æ¯åªä½ç±»åç转æ¢ï¼å æ¤è¿äºä¾åä¸éç¨
ä½ä¸ºä¸ä¸ªåå¦è ï¼æ深深åå°è¿äºé®é¢çå°æ°ï¼ç»è¿å»è¦é»ç ç»äºèµ°åºäºè¿ä¸ªæ³¥æ½ï¼è±ç¶å¼æãäºæ¯æå®è®°å½ä¸æ¥ï¼å¸æå¯ä»¥å¯¹å ¶ä»äººæ帮å©ï¼ä¹ä½ä¸ºå¯¹å¹´çä¸ä¸ªå°ç»ã
æçä¾åæ¯ è®¾è®¡ä¸ä¸ª transform filter æ YUY2 bit çåªä½è½¬å为RGB bitçç±»åã
åå æ¯æçæå头åªæ¯æYUY2 bitè¿ç§æ ¼å¼ï¼ ææ³å¾å°ä½å¾ãã顺便å¦ä¹ ä¸ä¸Filterç设计
以ä¸ä¸ºå ·ä½æ¥éª¤ï¼
ä¸ é ç½®å¼åç¯å¢
1. VCä¸å¨Tools->Options->Directories 设置好DirectX SDKç头æ件ååºæ件路å¾
2. ç¼è¯äºåºç±»æºç ,çæstrmbasd.lib (debugç), strmbase.lib(releaseç)
3. VCå导æ°å»ºä¸ä¸ªwin DLLï¼emptyï¼å·¥ç¨
4. Setting->Link->Output file name: YUV2RGBfilter.ax
5. Setting->Linkå å ¥strmbasd.lib winmm.lib quartz.lib vfw.lib (注æè·¯å¾)
6. å®ä¹ä¸ä¸ªåå.defæ件ï¼å å ¥å°å·¥ç¨ï¼å 容å¦ä¸ï¼
LIBRARY YUV2RGBfilter.ax
EXPORTS
DllMain PRIVATE
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
7.建ç«ä¸ä¸ªç±» YUV2RGBfilter 建ç«ä»çcppæ件åhæ件
8. å¨YUV2RGBfilter.cppä¸å®ä¹DLLçå ¥å£å½æ°å注å æ¾å¨cppæ件çæå
//
// DllEntryPoint
//
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
BOOL APIENTRY DllMain(HANDLE hModule,
DWORD dwReason,
LPVOID lpReserved)
{
return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved);
}
////////////////////////////////////////////////////////////////////////
//
// Exported entry points for registration and unregistration
// (in this case they only call through to default implementations).
//
////////////////////////////////////////////////////////////////////////
STDAPI DllRegisterServer()
{
return AMovieDllRegisterServer2( TRUE );
}
STDAPI DllUnregisterServer()
{
return AMovieDllRegisterServer2( FALSE );
}
9. cppæ件ä¸è¦å å«ç头æ件
#include <streams.h>
#include <windows.h>
#include <initguid.h>
#include <olectl.h>
#if ( > _MSC_VER)
#include <olectlid.h>
#endif
#include "Y2Ruids.h" // our own public guids
#include "YUV2RGBfilter.h"
äº å¼åFilter
1. çæGUID( å½ä»¤è¡æ¨¡å¼ä¸è¿è¡guidgenå·¥å ·) 为ä»å»ºç«ä¸ä¸ªæ件Y2Ruids.h åç¬å¼ç¨
#include <initguid.h>
// YUV2toRGB Filter Object
// { FFC8FD-B1A6-b0-A-D6EDEAFDA}
DEFINE_GUID(CLSID_YUV2toRGB,
0xffc8fd, 0xb1a6, 0xb0, 0xa3, 0x8, 0xd6, 0xed, 0xea, 0xf4, 0x5, 0xda);
2. æé CYUV2RGBfilterç±» 继æ¿èªCTransformFilter åå¨TransformFilter.hä¸
// ----------------------------------------------------------------------------
// Class definitions of CYUV2RGBfilter
// ----------------------------------------------------------------------------
//
//
class CYUV2RGBfilter : public CTransformFilter
{
public:
static CUnknown * WINAPI CreateInstance(LPUNKNOWN punk, HRESULT *phr);
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void ** ppv);
DECLARE_IUNKNOWN;
// override pure virtual function
HRESULT CheckInputType(const CMediaType *mtIn);
HRESULT CheckTransform(const CMediaType *mtIn, const CMediaType *mtOut);
HRESULT DecideBufferSize(IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *pProp);
HRESULT GetMediaType(int iPosition, CMediaType *pMediaType);
HRESULT Transform(IMediaSample *pIn, IMediaSample *pOut);
private:
//Constructor
CYUV2RGBfilter(TCHAR *tszName, LPUNKNOWN punk, HRESULT *phr);
// member function
VOID ChangeFormat(AM_MEDIA_TYPE* pAdjustedType);
DWORD ConvertYUV2toRGB(BYTE* yuv, BYTE* rgb, DWORD dsize);
// member variable
const long m_lBufferRequest;
CCritSec m_Y2RLock; // To serialise access.
};
3. ææ ¼å¼æ¹åæé å½æ°
//
// CNullInPlace::Constructor
//
CYUV2RGBfilter::CYUV2RGBfilter(TCHAR *tszName,LPUNKNOWN punk,HRESULT *phr) :
CTransformFilter(tszName, punk, CLSID_YUV2toRGB),
m_lBufferRequest(1)
{
ASSERT(tszName);
ASSERT(phr);
} // CYUV2RGBfilter
4. æ¹åCTransformFilteräºä¸ªçº¯èå½æ°ï¼æéè¦çå°æ¹ï¼
HRESULT CheckInputType(const CMediaType *mtIn);
HRESULT CheckTransform(const CMediaType *mtIn, const CMediaType *mtOut);
HRESULT DecideBufferSize(IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *pProp);
HRESULT GetMediaType(int iPosition, CMediaType *pMediaType);
HRESULT Transform(IMediaSample *pIn, IMediaSample *pOut);
5. 设计èªå·±çç§æå½æ° å®æä¸å®çåè½
6. 注åFilterä¿¡æ¯
// 注åä¿¡æ¯
//setup data
const AMOVIESETUP_MEDIATYPE
sudPinTypes = { &MEDIATYPE_Video // clsMajorType
, &MEDIASUBTYPE_NULL } ; // clsMinorType
const AMOVIESETUP_PIN
psudPins[] = { { L"Input" // strName
, FALSE // bRendered
, FALSE // bOutput
, FALSE // bZero
, FALSE // bMany
, &CLSID_NULL // clsConnectsToFilter
, L"Output" // strConnectsToPin
, 1 // nTypes
, &sudPinTypes } // lpTypes
, { L"Output" // strName
, FALSE // bRendered
, TRUE // bOutput
, FALSE // bZero
, FALSE // bMany
, &CLSID_NULL // clsConnectsToFilter
, L"Input" // strConnectsToPin
, 1 // nTypes
, &sudPinTypes } }; // lpTypes