GUI测试之通用测试篇不管是Windows的应用程序,还是Java的应用程序,或者其他语言类的应用程序,在其开放之前都应该遵从一定的GUI开发规范(这个大多SDK供应商都有)。那么测试也主要依据其进行GUI测试。虽然有些差异,但共同点还是很多的,这篇文章就是尝试着对这些共同点的一些总结。
在同一个应用程序中的
GUI应该一致,这是最重要的,也是最基本的。 在视觉效果上应该和其他标准的
Windows应用程序相同
采用标准的键集(快捷键),在同一系统中,同样的操作,特别是名称相同的操作就好使用一致的快捷键。例如浏览(
Browse。。。)按钮如果在一个窗口中快捷键是
Alt+B,在另一个窗口最好采用同样的快捷键,这样可以方便用户的操作,不至于让用户混淆快捷键。除非在另一个窗口有比其更重要的操作已占用了一个快捷键,否则最好不要改变。
应用程序启动或进入系统的第一个界面应该显示“关于系统”或有关系统相关信息的屏幕
一般来说,应用程序应该保持为最大化。
应用程序可以在
Windows的任务条和状态条中显示,如需要在系统托盘中显示的,在缩写至系统托盘和用户移动光标至应用程序的图标上时,最好给予相关的信息。
在系统中使用统一的代表应用程序的图标。
所有的窗口
/对话框应具有可以和其他应用程序区分开的一致外观。
应用程序中使用的颜色组合应该有吸引力,且风格一致,搭配合理,色彩的跳跃不要太大。避免使用深色系,特别是红色和绿色,有些客户可能是色盲
登录界面上要有产品信息,如标志和版本,同时包含公司图标。
帮助菜单的“关于”中应有版权和产品信息。
应用程序中应按功能将界面划分局域块,将完成相同或相近功能的按钮框起来
, 并配有相应的功能说明
允许使用
Tab键切换,且顺序与控件排列顺序要一致,目前流行总体从上到下,同时行间从左到右的方式;
Tab不能定位在不可见的控件上;
在不同的分辨率下显示正常(不出现水平和垂直滚动条,无截断的组件),特别是在应用程序推荐的分辨率下显示完全正常,一般为1024*768和
800*600。
系统中所有的文字应该没有拼写
/文字错误,句子没有语法错误,最好贴近用户的使用习惯。
使用用户知道的术语,而不是深奥的技术术语,特别是在错误提示的消息框中,让用户可以很快的知道问题的所在,而不是揣摩错误信息的意思。尽可能的少用缩写。
英文系统中注意不要使用中文或其他语系字符。
在标识控件用途的标签文本和提示信息中,应使用半角符号。如果是指导性标签文本(如解释按钮功能的句子),则使用全角符号,并且句子应遵循中文标点符号标准。
在提示信息中,避免使用主语,尽可能的使用被动语态。提示信息应简洁明了,没有侵犯性词语。使用一致的大小写规则,避免全大写和复杂的符号。
系统使用统一的字体,不要使用需要另外安装的或操作系统特定的字体库。注意斜体和粗体的使用。
系统目前不提供,以后版本才提供的功能最好隐藏,同一版本不同级别的系统中的不允许使用的功能变灰,或操作提交时给予提示。
系统的帮助文件应该和当前的系统版本相一致
使用
"退出"命令终止程序;使用
"关闭"移走主窗口和非模式对话框;使用
"取消"移走模式对话框。当关闭主窗口并不表示终止进程时,对于主窗口使用
"关闭"来代替使用
"退出"。例如:关闭打印机状态窗口不会取消打印任务
退出系统后应该彻底的关闭程序,而不要在系统托盘或任务条中继续保留系统的某个窗口。如果要保留,在退出系统时应该给予用户提示。
程序应该能够能够保存而恢复到用户最后退出的状态。
MDI程序应该能够恢复文档窗口的大小和位置。对话框,下拉框通常应该使用最后输入的值作为默认值。
不同界面中的同一功能应该使用同样的图标和图片。
公司的系列产品要保持一直的界面风格,如背景色、字体、菜单排列方式、图标、安装过程、按钮,用语等应该大体一致。
GUI测试之按钮篇
在同一窗口中实现某一功能的按钮是唯一的。
OK按钮总是在上方或者左方
,而Cancel按钮总是在下方或右方。
Cancel按钮的等价按键通常是
Esc,而选中按钮的等价按钮通常是
Enter保持一致。
测试按钮能否正常的实现功能,常用按钮的功能为:
OK接受输入的数据或显示的响应信息,关掉窗口
Cancel 不接受输入的信息,关掉窗口。取消时最好给予提示,尤其时有大量输入的窗口。
Close 结束当前的任务,让程序继续进行;关掉数据窗口
Help 调出程序的帮助信息
Save 保存数据,停留在当前窗口。如过保存耗时长的话,最好显示类似沙漏,进度条之类的提示。注意验证能否重复保存。如在
IE中由于网速慢而导致的重复保存。
Add 新增记录。新增的记录必须排在首页首行。提交失败后必须保留用户已输入的内容,以便再次提交。提交时需对主要标识字段进行重复值、空值(空格)判断。
Update/Edit 修改
/编辑记录。如界面存在复选按钮,勾选多条记录进行修改时,需给予只能对一条记录进行修改,默认为第一条的提示信息。修改时加载的内容都为该记录的实际内容,而不再为默认值。修改完成后必须回到原记录所在位置,且刷新显示修改后的值。提交失败后必须保留用户已修改的内容,以便再次提交。在查询条件下修改返回后如不满足查询条件则不显示。需对主要标识字段进行重复值、空值(空格)判断。
Delete 删除记录。在删除之前必须有确认删除的提示信息。删除成功后刷新不显示被删除的记录。删除成功后返回到原记录所在页面;而当原记录所在页不存在时,则返回上一页。当被删除的记录与其它记录存在关联时,应给予不允许删除及更明细提示等信息。针对大批量的删除应提供全选复选框,方便用户删除。
Search 查询记录。每次查询应显示返回的结果数。每次查询应定位到首页。保留前一次的查询条件。当查询条件较多时,需配以重置按钮。当未查询到任何记录时,需给予未查找相关记录的提示信息。除用户明确要求不需要外,需提供模糊查询及组合查询功能。当查询返回的结果大于默认的一页大小时,最好采用分页或者根据系统默认或用户定义的一页显示的记录数量来分页。如有多页,需要提供首页,下一页,上一页,尾页和跳至功能。每页的记录不能重复,但也可以根据用户需要显示上一页的最后一条数据。
Reset 重置。应回到打开窗口时的最初状态。多次点击是否还能正常显示。
Return 返回。如果一个窗口或页面不能通过菜单,工具栏到达,而是必须通过前一个窗口完成才到达,应提供返回按钮或导航条让用户可以返回。
如果点击按钮后还需要用户的进一步的操作,按钮的名称应加上省略号。如
Browse。。。
OK/Cancel/Apply/Help键的排放最好遵从
Windows的标准排放。
按钮最好都给予浮动提示,特别是图片按钮,可以避免由于网络太慢而导致的太长时间不能往下操作
GUI测试之窗口篇
窗口是
Windows本身以及Windows 环境下的应用程序的基本界面单位,就是显示在屏幕上的一个矩形区域。一般来说窗口是具有标题栏、菜单/菜单栏、工具栏、工作区、状态栏、最大化、最小化按钮和滚动条的标准方框,应用程序通过它和用户进行交互。但是如果没有标题栏、状态栏、最大化、最小化按钮是不是就不叫窗口呢。其实不然,窗口的概念很广,例如按钮和对话框等也是窗口,只不过是一种特殊的窗口罢了。这里我主要将的还是标准意义上的窗口。
窗口主要有进入、移动、改变窗口大小;最大化、最小化和还原;使用滚动条和关闭窗口等操作。
因此可以通过如下来测试窗口:
大多数的窗口、屏幕
/对话框应该有最小化,恢复和关闭按钮。
所有的窗口、屏幕
/对话框应该有和内容相一致对应的标题。
只有主窗口才有标题栏图标、菜单栏、工具栏和状态栏。二级窗口不要使用菜单栏、工具栏或状态栏。
每一个窗口
/屏幕都应有功能匹配的
OK和Cancel按钮。窗口
/对话框的缺省
键应该设置在
OK按钮上;窗口
/对话框的缺省
键应该设置在
Cancel按钮上。
a.Escape键取消对话框,焦点重新定位回到父窗口先前的焦点上,
b.Alt+F4关闭窗口,和
Escape键相似,但它可以在即使没有
Cancel按钮的对话框中工作
c.Alt+Space打开窗口的菜单Restore, Move, Size, Minimize, Maximize, Close
d.Shift+
F10和右击效果一样。
e.可以用键盘上的箭头按钮实现Move和
Size功能
一个窗口每个组件的访问键必须是唯一的。
父窗体或主窗体的中心位置应该在对角线焦点附近
;子窗体位置应该在主窗体的左上角或正中
;多个子窗体弹出时应该依次向右下方偏移,以显示窗体出标题为宜。
二级窗口最好不要显示在任务栏中,因为单击主窗口的任务栏按钮也会激活二级窗口。
如果子窗体的任何操作会影响了父窗体的数据时,关闭子窗体同时必须刷新父窗体的数据。
关闭父窗体时必须关闭所有打开的子窗体。如果由于子窗口没有关闭而无法关闭父窗口,必须给予提示信息框。在关闭提示信息框后显示必须关闭的子窗口。
子窗体的大小最好不要超过父窗体,且最好不要遮住父窗体的主要信息。如果存在多层嵌套窗口,每层窗口弹出时都自动往右下移动一点点,以保证不遮盖上层窗口标题为准。
窗口嵌套层次最好不超过3层。
点击窗口中的帮助按钮或
F1必须带出和窗口内容相一致的帮助。
窗口可以被多次打开和关闭。但窗口未关闭或被其他窗口覆盖时,再次点击菜单或按钮,测试窗口是否可以被激活。
如果窗体可以最小化,最大化或可调整大小时,窗体上的控件也要随着窗体而缩放;对于含有按钮的界面一般不应该支持缩放,即右上角只有关闭功能。
工具栏按钮应该有浮动的提示,可以根据用户的要求自己选择定制;
:相同或相近功能的工具栏放在一起;
:一条工具栏的长度最长不能超出屏幕宽度;工具栏的图标能直观的代表要完成的操作;系统常用的工具栏设置默认放置位置;
:工具栏太多时可以考虑使用工具厢;
:工具厢要具有可增减性,由用户自己根据需求定制。
:工具厢的默认总宽度不要超过屏幕宽度的
1/5
状态条要能显示用户切实需要的信息,常用的有: 目前的操作、系统状态、用户位置、用户信息、提示信息、错误信息等,如果某一操作需要的时间较长,还应该显示进度条和进程提示。 状态条的高度以放置五好字为宜,滚动条的宽度比状态条的略窄。
菜单和工具条应有清楚的界限,菜单和状态栏中使用统一大小的字体(通常使用
5号字体)
菜单应采用“常用
--主要--次要--工具--帮助”的位置排列。提供常用的菜单项,如“文件”、“编辑”,“查找”,“打印”等。对常用的菜单项提供快捷命令方式。快捷方式唯一。
主菜单数目不太多时最好为单排布置。如果菜单选项较多,应该采用加长菜单的长度而减少深度的原则排列。菜单深度一般要求最多控制在三层以内。
下拉菜单要根据菜单选项的含义进行分组,並且按照一定的规则进行排列,用横线隔开。一组菜单的使用有先后要求或有向导作用时,应该按先后次序排列。没有顺序要求的菜单项按使用频率和重要性排列,常用的放在开头, 不常用的靠后放置;重要的放在开头,次要的放在后边。对与进行的操作无关的菜单要用屏蔽的方式加以处理,如果采用动态加载方式——即只有需要的菜单才显示——最好。
菜单前的图标不宜太大,与字高保持一直最好。主菜单的宽度要接近,字数不应多于四个,每个菜单的字数能相同最好。
状态栏中的信息应该根据窗口的内容的变化而变化,如在初始状态时,系统有多少条数据,经过查询后状态栏的数据应该发生变化。
滚动条的长度根据显示信息的长度或宽度及时变换,这样有利于用户了解显示信息的位置和百分比;拖动滚动条,检查屏幕刷新情况,并查看是否有乱码;单击滚动条和滚动条的上下按钮;用滚轮控制滚动条;
如果系统的模块较多,较深,经常会多级菜单,最好在窗口上加上导航条,以方便用户可以快速返回。
GUI测试之对话框、消息框篇
对话框
/消息框的缺省键应该设置在OK按钮上;对话框/消息框的缺省键应该设置在Cancel按钮上。
一般来说重要的或复杂操作成功后应该给予提示,根据系统的特性选择弹出信息框或文字显示。需要后续操作的操作在成功后应给予提示。
非法的输入或操作应给出足够的提示说明。
对可能造成数据无法恢复的操作应该给予确认信息,给用户放弃选择的机会。如删除操作。
提示信息不宜太长,宽度不能超过当前窗口的
1/2;当超过此比例时,请视具体情况进行换行。有多行提示信息的,请选择对齐方式(一般为左对齐)。
静态文本标签一般采用左对齐,这样显得更有条理且易于浏览。静态文本标签一般置于相关控件的左边,有时选项过多过长时放在上面。
复杂或带有专业性的操作或输入最好在输入项下面给予提示。
提示信息不宜太长,宽度不能超过当前窗口的
1/2;当超过此比例时,请视具体情况进行换行。
通用对话框控件,如
Open…,Save As…,Color…,Fonts…,Print…,Page SetUp…等调用系统的对话框只需要是否调用正确,能否实现正常功能就可以了,里面的具体功能可以不用测试。
消息框中的图标必须根据需要选择正确的使用,一般来说
X 表示有很重要的问题需要提醒用户;? 增亮没有危险的问题; ! 强调警告用户必须知道的事情; i 一般信息,可以使乏味的信息变得有趣。
正在进行的操作提示框应使用省略号,如“删除中。。。”。
对话框标题文本中不要出现省略号。如选择
"打印选项..."命令结果而显示的对话框的标题应该为"打印",而不是“打印。。。”。但是,表示命令正在执行过程中菜单对话框(如"连接到Internet..."对话框)是一种例外情况。
对于耗时的操作都应给出类似等待光标、进度表或其他的可视反馈。用户可以取消长时间的操作。如果可以取消未完成的操作,那么将按钮标记为
"取消",否则将按钮标记为"停止"。
GUI测试之信息处理类篇
在这篇文章中,我将文本框(
Text Box),列表框(List Box),组合框(Combo Box)、下拉列表框(
Drop-down List Box),复选框(Check Box),单选框(Radio box)
/(option box),选项框(Option box)、滑动条(Slider)、旋转按钮(Spin Button)等都作为信息处理类来统一总结。
窗口
/屏幕上的每一个字段都应有相应的标签。
根据文本框可以接受的类型测试文本框:1)输入正常的字母或数字2)输入已存在的信息3)输入超过允许长度的字符或边界数字4)输入空白,空格5)输入不同类型或不同日期格式的数据,6)复制/粘贴等操作强制输入程序不允许的输入数据7)输入数据库或特殊字符集,例如NULL及
/n等
测试文件选择框的正确性。使用空文件,只有空格的文件,不同类型的文件,同名文件,内容相同名称不同的文件,大文件等。
测试强制性字段的正确性。强制性字段必须用红色的星号*标识,最好是必填项没有输入时,在光标移走时在相应的文本框后显示需要用户输入的红色信息。一般也可以在提交时用弹出消息框提示未填的必填项,关闭消息框后必须停留在第一个待输入的文本框中。
每一个新窗口/屏幕中,光标默认停留在第一个待输入的文本框中。
一般下拉框中应显示一个默认值,列表框中高亮度显示一个默认值。如果不需要默认值时,一般默认值未“请选择。。。”。
一般来说系统应记忆以前输入或选择的信息,但是当涉及安全时,最好不要保留用户的信息。有些地方可以使用复选框让用户决定是否要保留信息。如登录界面。
对输入信息类型有限制的文本框应在输入非法值后给予提示,对于日期型的输入框,最好在标签上就给予提示
当输入的内容达到了字段的长度限制时,一般应控制不允许再输入,或者在提交后提示具体的允许输入的长度,而不是自动截断。
系统中不允许的非法字符,最好是在输入时不允许输入,或在提交时给予具体系统不允许的非法字符列表提示。(如’、”、
<、<>)
正确使用复选框或单选框。如果结果只有一个的,则使用单选框,如性别。验证单选按钮不能同时选中只能选中一个,而可以选择多个复选框。
一组单选按钮在初始状态时必须有一个被默认选中,不能同时为空。
分别测试多个复选框可以被逐一选中;同时选中,部分选中;都不被选中。
通过输入数字或用点击上下箭头来测试旋转按钮,测试其自动循环性,如范围为(0~
999)先输入为999,在点击向下键,看是否会跳到0。输入字符或超过边界的数值,系统应该提示错误且重新输入;
验证列表框中的条目内容显示正确;允许多选的列表框,要分别检查shift和
ctrl选中条目情况
避免使用水平滚动条,因为它会使项目阅读起来比较困难。解决的办法有:尽量使用垂直滚动条、加宽窗口、减小文本的宽度,或者使文本自动换行等。当然,如果确实需要,还可以使用水平滚动条。
全选框勾中时应该选中当页所有记录,去掉当页某个记录的勾选,则全选也不选中。翻页后,自动去掉已勾选的记录及全选的勾选。
复选框可以通过Space可以控制选中/不选中
F4, Alt+down或
alt+up控制combobox打开和关闭
对于combobox,
Escape键等同于Cancel,
Up/down箭头按钮控制向上或向下,Shift+up和
shift+down可以多选,Ctrl实现多选
嵌入式系统与嵌入式操作系统
嵌入式系
统
嵌入式系统是以嵌入式计算机为技术核心,面向用户、面向产品、面向应用,软硬件可裁减的;适用于对功能、可靠性、成本\体积、功耗等综合性能有严格要求的专用计算机系统。
嵌人式系统应具有的特点是:高可靠性;在恶劣的环境或突然断电的情况下,系统仍然能够正常工作;许多嵌人式应用要求实时性,这就要求嵌入式操作系统具有实时处理能力;嵌入式系统和具体应用有机地结台在一起,它的升级换代也是和具体产品同步进行;嵌入式系统中的软件代码要求高质量、高可靠性;一般都固化在只读存储器中或间存中,也就是说软件要求固态化存储,而不是存储在磁盘等载体中。
嵌入式操作系统
嵌入式操作系统
EOS(Embedded OperatingSystem)是一种用途广泛的系统软件,过去它主要应用于工业控制和国防系统领域。EOS负责嵌人系统的全部软、硬件资源的分配、调度工作,控制。协调并发活动;它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。目前,已推出一些应用比较成功的
EOS产品系列。随着Internet技术的发展、信息家电的普及应用及EOS的微型化和专业化,EOS开始从单一的弱功能向高专业化的强功能方向发展。嵌人式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。EOS是相对于一般操作系统而言的,它除具备了一般操作系统最基本的功能,如任务调度、同步机制、中断处理、文件功能等外,还有以下特点:
(1)可装卸性。开放性、可伸缩性的体系结构。
(2)强实时性。
EOS实时性一般较强,可用于各种设备控制当中。
(3)统一的接口。提供各种设备驱动接日。
(4)操作方便、简单、提供友好的图形GUI,图形界面,追求易学易用。
(5)提供强大的网络功能,支持
TCP门P协议及其它协议,提供TCP/UDP/IP/PPP协议支持及统一的MAC访问层接口,为各种移动计算设备预留接口。
(6)强稳定性,弱交互性。嵌入式系统一旦开始运行就不需要用户过多的干预,这就要负责系统管理的EOS臭有较强的稳定性。嵌入式操作系统的用户接日一般不提供操作命令,它通过系统调用命令向用户程序提供服务。
(7)固化代码。在嵌入系统中,嵌入式操作系统和应用软件被固化在嵌入式系统计算机的ROM中。辅助存储器在嵌入式系统中很少使用,因此,嵌入式操作系统的文件管理功能应该能够很容易地拆卸,而用各种内存文件系统。
(8)更好的硬件适应性,也就是良好的移植性。国际上用于信息电器的嵌入式操作系统有40种左右。现在,市场上非常流行的
EOS产品,包括3Corn公司下属子公司的Palm OS,全球占有份额达50%,MicroS。fi公司的Wind。ws CE不过29%。在美国市场,Palm OS更以80%的占有率远超Windows CE。开放源代码的Linux很适于做信息家电的开发。
比如:中科红旗软件技术有限公司开发的红旗嵌入式Linux和美商网虎公司开发的基于Xlinux的嵌人式操作系统“夸克"。“夸克”是目前全世界最小的Linux,它有两个很突出的特点,就是体积小和使用GCS编码。
三
种
常用的嵌入式操作系
统
PALM OS
Palm是
3Corn公司的产品,其操作系统为Palm OS。Palm OS是一种32位的嵌入式操作系统。Palm提供了串行通信接口和红外线传输接口;利用它可以方便地与其它外部设备通信、传输数据;拥有开放的OS应用程序接口,开发商可根据需要自行开发所需的应用程序。Palm OS是一套具有极强开放性的系统,现在有大约数千种专门为Palm OS编写的应用程序,从程序内容上看,小到个人管理、游戏,大到行业解决方案,Palm OS无所不包。在丰富的软件支持下,基干Palm OS的掌上电脑功能得以不断扩展。
Palm OS是一套专门为掌上电脑开发的OS。在编写程序时,Palm OS充分考虑了掌上电脑内存相对较小的情况,因此它只占有非常小的内存。由于基干Palm OS编写的应用程序占用的空间也非常小(通常只有几十KB),所以,基于Palm OS的掌上电脑(虽然只有几MB的RAM)可以运行众多应用程序。由于Palm产品的最大特点是使用简便、机体轻巧;因此决定了Palm
OS
应
具有以下特点。
(1)操作系统的节能功能。由于掌上电脑要求使用电源尽可能小,因此在
Palm OS的应用程序中,如果没有事件运行,则系统设备进人半休眠(doze)的状态;如果应用程序停止活动一段时间,则系统自动进人休眠(sleep)状态。
(2)合理的内存管理。
Palm的存储器全部是可读写的快速RAM,动态RAM(Dynamic RAM)类似于PC机上的RAM,它为全局变量和其它不需永久保存的数据提供临时的存储空间;存储RAM(Storage RAM) 类似于PC机上的硬盘,可以永久保存应用程序和数据。
(3)Palm OS的数据是以数据库(
database)的格式来存储的。数据库是由一组记录(records)和一些数据库头信息组成的。为保证程序处理速度和存储器空间,在处理数据的时候,Palm OS不是把数据从存储堆(Storage Heap)拷贝到动态堆(Dynamic Heap)后再进行处理,而是在存储堆中直接处理。为避免错误地调用存储器地址,Palm OS规定,这一切都必须调用其内存管理器里的API来实现。
Palm OS与同步软件(Hotsync)结合可以使掌上电脑与PC机上的信息实现同步,把台式机的功能扩展到了掌上电脑。Palm应用范围相当广泛,如:联络及工作表管理、电子邮件及互联网通信。销售人员及组别自动化等等。
Palm外围硬件也十分丰富,有数码相机、GPS接收器、调制解调器、GSM无线电话、数码音频播放设备、便携键盘、语言记录器、条码扫描、无线寻呼接收器、探测仪。其中Palm与GPS结合的应用,不但可以作导航定位,还可以结合GPS作气候的监测、地名调查等。
Windows CE
WINDOWS CE是微软开发的一个开放的、可升级的
32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统。它是精简的Windows 95。Windows CE的图形用户界面相当出色。其中CE中的C代表袖珍(Compact)、消费(Consumer)、通信能力(Connectivit)和伴侣(Companion);E代表电子产品(Electronics)。与 Windows 95/98、Windows NT不同的是,Windows CE是所有源代码全部由微软自行开发的嵌入式新型操作系统,其操作界面虽来源于Windows 95/98,但Windows CE是基于Win32 API重新开发的、新型的信息设备平台。Windows CE具有模块化、结构化和基干Win32应用程序接日以及与处理器无关等特点。Windows CE不仅继承了传统的Windows图形界面,并且在Windows CE平台上可以使用Windows 95/98上的编程工具(如 Visual Basic、Visual+十等)、使用同样的函数、使用同样的界面风格,使绝大多数的应用软件只需简单的修改和移植就可以在WindowsCE平台上继续使用。Windows CE的设计目标是:模块化及可伸缩性、实时性能好,通信能力强大,支持多种CPU。它的设计可以满足多种设备的需要,这些设备包括了工业控制器、通信集线器以及销售终端之类的企业设备,还有像照相机、电话和家用娱乐器材之类的消费产品。一个典型的基于
Willd。WS CE的嵌人系统通常为某个特定用途而设计,并在不联机的情况下工作。它要求所使用的操作系统体积较小,内建有对中断响应功能。
WINDOWS CE的特点有:
(1)具有灵活的电源管理功能,包括睡眠/唤醒摸式。
(2)使用了对象存储(
object store)技术,包括文件系统、注册表及数据库。它还具有很多高性能。高效率的操作系统特性,包括按需换页、共享存储、交叉处理同步、支持大容量堆(heaP)等。
(3)拥有良好的通信能力。广泛支持各种通信硬件,亦支持直接的局域网连接以及拨号连接,并提供与
PC、内部网以及Internet的连接,还提供与Windows gx/NT的最佳集成和通信。
(4)支持嵌套中断。允许更高优先级别的中断首先得到响应,而不是等待低级别的
ISR完成。这使得该操作系统具有嵌入式操作系统所要求的实时性。
(5)更好的线程响应能力。对高级别
IST(中断服务线程)的响应时间上限的要求更加严格,在线程响应能力方面的改进,帮助开发人员掌握线程转换的具体时间,并通过增强的监控能力和对硬件的控制能力帮助他们创建新的嵌入式应用程序。
(6)256个优先级别。可以使开发人员在控制嵌人式系统的时序安排方面有更大的灵活性。
(7)Windows CE的API是Win32 API的一个子集,支持近1500个Win32 API。有了这些API,足可以编写任何复杂的应用程序。当然,在Windows CE系统中,所提供的API也可以随具体应用的需求而定。在掌上型电脑中Windows CE包含如下一些重要组件:Pocket Outlook及其组件、语音录音机、移动频道、远程拨号访问、世界时钟、计算器、多种输入法、GBK字符集、中文TTF字库、英汉双向词典、袖珍测览器、电子邮件、Pocket Office、系统设置、Windows CE Services软件。
2.
3 Linux
Linux是一个类似于Unix的操作系统。它起源于芬兰一个名为Linus Torvalds的业余爱好,但是现在已经是最为流行的一款开放源代码的操作系统。Linux从1991年问世到现在,短短10年的时间内已发展成为一个功能强大、设计完善的操作系统,伴随网络技术进步而发展起来的Linux OS已成为Microsoft公司的DOS和Windows 95/98的强劲对手。Linux系统不仅能够运行于PC平台,还在嵌入式系统方面大放光芒,在各种嵌人式Linux OS迅速发展的状况下,Linux OS逐渐形成了可与Windows CE等EOS进行抗衡的局面。目前正在开发的嵌人式系统中,49%的项目选择Linux作为嵌入式操作系统。
Linux现已成为嵌入式操作系统的理想选择。
中科红旗软件技术有限公司开发的红旗嵌入式
Linux正在成为许多嵌人式设备厂商的首选。在不到一年的时间内,红旗公司先后推出了PDA、机预盒、瘦客户机、交换机用的嵌入式Linux系统,并且投入了实际应用。现以红旗嵌入式Linux为例来讲解嵌入式Linux OS的特点:
(1)精简的内核,性能高、稳定,多任务。
(2)适用于不同的CPU,支持多种体系结构,如X86、ARM、MIPS、ALPHA,SPARC等。
(3)能够提供完善的嵌人式GUI以及嵌入式X.Wifld。WS。
(4)提供嵌人式测览器、邮件程序、MP3 M放器、MPEG播放器、记事本等应用程序。
(5)提供完整的开发工具和SDK,同时提供PC上的开发版本。
(6)用户可定制,可提供图形化的定制和配置工具。
(7)常用嵌入式芯片的驱动集,支持大量的周边硬件设备,驱动丰富。
(8)针对嵌人式的存储方案,提供实时版本和完善的嵌入式解决方案。
(9)完善的中文支持,强大的技术支持,完整的文档。
(10)开放源码,丰富的软件资源,广泛的软件开发者的支持,价格低廉,结构灵活,适用面广。
三
种
嵌入式操作系
统
的比
较
3.
1 Linux OS与 Windows CE的比较
嵌入式Linux OS与Windows CE相比的优点:
第一,Linux是开放源代码的,不存在黑箱技术,遍布全球的众多Linux爱好者都是Linux开发者的强大技术支持者;而Windows CE是非开放性OS;使第三方很难实现产品的定制。第二,Linux的源代码随处可得,注释丰富,文档齐全,易干解决各种问题。第三,Linux的内核小、效率高;而 Windows CE在这方面是笨拙的,占用过多的RAM,应用程序庞大。第四,Linux是开放源代码的OS,在价格上极具竞争力,适合中国国情。Windows CE的版权费用是厂家不得不考虑的因素。第五,Linux不仅支持X86芯片,还是一个跨平台的系统。到目前为止,它可以支持20~30种CPU,很多CPU(包括家电业的芯片)厂商都开始做Linux的平台移植工作,而且移植的速度远远超过Java的开发环境。如果今天采用Linux环境开发产品,那么将来更换CPU时就不会遇到更换平台的困扰。第六,Linux内核的结构在网络方面是非常完整的,它提供了对包括十兆位、百兆位及千兆位的以太网,还有无线网络、Token ring(令牌环)和光纤甚至卫星的支持。
第七,Linux在内核结构的设计中考虑适应系统的可裁减性的要求,windows CE在内核结构的设计中并未考虑适应系统的高度可裁减性的要求。
嵌入式Linux OS与 Windows CE相比的弱点:第一,是开发难度较高,需要很高的技术实力;第二,是核心调试工具不全,调试不太方便,尚没有很好的用户图形界面;第三,与某些商业OS一样,嵌人式Linux占用较大的内存;当然,人们可以去掉部分无用的功能来减小使用的内存,但是如果不仔细,将引起新的问题;第四,有些Linux的应用程序需要虚拟内存,而嵌入式系统中并没有或不需要虚拟内存,所以并非所有的Linux应用程序都可以在嵌人式系统中运行。
3.2 Palm OS与 windows CE的比较
3Com公司的Palm OS是掌上电脑市场中较为优秀的嵌人式操作系统,是针对这一市场专门设计的系统。它有开放的操作系统应用程序接口(API),支持开发商根据需要自行开发所需的应用程序,具有十分丰富的应用程序。在掌上电脑市场上独占其霸主地位已久。从技术层面上讲,Palm OS是一套专门为掌上电脑开发的操作系统,具有许多Windows CE无法比拟的优势;Windows CE过干臃肿,不适合应用在廉价的掌上电脑中。
Palm OS是一套具有极强开放性的系统。开发者向用户免费提供Palm OS的开发工具,允许用户利用该工具在Palm OS基础上方便地编写、修改相关软件。与之相比,Windows CE的开发工具就显得复杂多了,这使得一般用户很难掌握。这也是Palm OS与Windows CE的另一个主要区别
CodeTEST嵌入式软件在线测试与分析工具在嵌入式系统开发中的应用
随着嵌入式技术的发展,嵌入式应用的不断增长以及嵌入式系统复杂性不断提高,要求嵌入式软件的规模和复杂性也不断提高,嵌入式软件的质量和开发周期对产品的最终质量和上市时间起到决定性的影响,嵌入式软件的开发、分析与测试成为了研究的热点。针对这一变化,本文提出了一种为嵌入式软件的开发、分析与测试特别设计的一种测试方法。
嵌入式软件分析与测试的重要性
随着计算机硬件技术的进步和元件质量逐步提高,元件的集成量也大大增加,从而使嵌入式设备的硬件性能得到了极大的提高;与此同时,通过采用成熟的商用操作系统,使系统运行在一个高性能的、可靠的软件平台上,为实现各种大型的复杂的应用打下了良好的基础。面对系统复杂性的增加,自然需要功能强大、性能稳定的应用软件与之相适应。所以,在嵌入系统开发中软件的代码量也越来越大,电子类产品的代码量以每两年就翻一翻的速度增长。同时,系统又要求应用也要精简高效、稳定可靠,使软件的开发在整个系统开发中所占的时间也越来越长,软件的质量对产品的最终质量起到了决定性的作用。但是事实上由于软件的开发缺乏科学的管理手段,开发的软件得不到很好的测试与分析,所编写的程序没有得到有效的测试就交付给用户使用。那些没有运行过的代码带着潜在的危险交付到客户手中,经常会给用户带来巨大的经济损失、为产品供应商带来信誉上的损失,在一些特殊的领域甚至会危及人的生命安全。
综上所述,随着嵌入式系统的发展,我们迫切需要一种工具能够在软件开发的单板阶段、集成阶段、系统阶段等各阶段对嵌入式系统的软件进行实时在线的测试与分析,以保证系统的性能和可靠性。
市面上流行的测试工具大致分为纯软件的测试工具和纯硬件的测试工具(如逻辑分析仪和仿真器等),下面我们从原理上分析使用传统的测试工具对嵌入式软件进行分析和测试的优缺点。
纯软件的测试工具
纯软件的测试工具采用的是软件打点技术,在被测代码中插入一些函数,用这些函数来完成数据的生成,并上送数据到目标系统的共享内存中。同时在目标系统中运行一个预处理任务,完成这些数据的预处理,将处理后的数据通过目标机的网口或串口上送到主机平台。这一切都需借助于用户的目标处理器完成。通过以上过程,测试者得以知道程序当前的运行状态。 从上述分析可知,纯软件的测试工具的测试原理有两个必然存在的特点——插桩函数和预处理任务。
由于插入插桩函数和预处理任务的存在,使系统的代码增大,更严重的是这些代码会对系统的运行效率有很大的影响(超过
50%)。函数本身要有它的实现过程,它要完成数据的生成和暂存,而且这些函数在它的实现过程中还可能被其他优先级更高的中断程序所中断,预处理任务需要占用目标系统CPU处理时间、共享内存和通信通道完成数据的处理、数据的上送。由于这些弊端的存在,当采用纯软件测试工具对目标系统进行测试时,用户目标系统是在一种不真实的环境下运行的,我们所捕获的数据也是不够精确。
所以采用纯软件的测试工具缺乏性能分析,它不能对用户目标系统中的函数和任务运行的时间指标进行精确的分析。
当做覆盖率分析的时候,因为要大量打点,而打点多于
200时就会影响系统的运行,所以只能做单元覆盖率分析且单元的程序量不能太大。
它不能对内存的动态分配进行动态的观察。
纯硬件的测试工具
纯硬件工具通常用于系统的硬件设计与测试工作。当它用于软件的分析测试时,却无法满足用户的基本要求。
以逻辑分析仪为例,逻辑分析仪是通过监控系统在运行时总线上的指令周期,并以一定的频率捕获这些信号,通过对捕获的信号进行分析来判断程序当前运行的状况。由于它使用的是采样的方式,难免会遗失一些重要的信号;同时,分析的范围也及其有限。以性能分析为例,当使用某种逻辑分析仪进行性能分析时,我们只能以抽样的方式,同时对80个函数做性能分析,得到一个不精确的结果;而若使用
CodeTEST,我们可以同时对128000个函数做性能分析,得到一个精确的结果。
当对程序做覆盖率分析时,因为硬件工具是从系统总线捕获数据的,如当
CACHE打开我们会采用指令预取技术,从外存中读一段代码到一级CACHE中,这时逻辑分析仪在总线上监视到这些代码被读取的信号,就会报告这些代码已经被执行了,但实际上被送到CACHE中的代码可能根本没有被命中。为了避免这种误差必须把CACHE关闭掉,而CACHE关掉就不是系统真实的运行环境了,有时甚至会由于CACHE关闭而导致系统无法正常运行。
而仿真器通常采用内存标记技术,它所关心的也是处理器从外存的代码段读取数据的情况。所以也无法在
CACHE打开的方式下工作。而它的性能分析也是以仿真器的时间系统以抽样的方式进行的,也无法时实对系统进行真实的分析。所以我们所得出的结果也是不精确的。
纯硬件工具根本不能对内存分配进行分析和检查的能力。
CodeTEST对软件分析测试功能的实现原理
AMC公司吸取了纯软件测试工具和纯硬件测试工具的优点,并对它们进行改善和提升后推出了
CodeTEST。
由上图我们可以看出,程序员编写的源代码首先会通过CodeTEST的编译驱动器调用原编译器对进行预编译,然后CodeTEST的插桩器(源代码分析程序)对预编译好的源代码进行自动的插桩,即在需要插桩的关键位置写入一条赋值语句(如:amc_ctrt=0x74100009),并把插入的标记送入一个数据库文件中生成一个符号数据库暂存起来,以备为以后分析时调用。然后,CodeTEST的编译驱动器又会调用原编译器对插桩后的代码进行编译生成可执行目标代码送到目标板上运行。当程序在目标系统运行到插桩点的位置时,目标板的控制总线和地址总线上会出现相应的控制信号和地址信号。当CodeTEST的辅助硬件(信号捕获探头)从控制总线和地址总线上监视到符合以上条件的信号时,CodeTEST会主动地从数据总线上把数据捕获回来送到CodeTEST的内存中暂存并对这些数据进行预处理,然后将预处理后的数据通过局域网送到工作平台上。通过与前面生成的符号数据库中的数据进行比较,我们就此得知当前程序的运行状态,借此完成对嵌入式软件的性能分析,高级覆盖率分析,内存分析和大容量的代码跟踪。
由此可知,
CodeTEST是一个硬件辅助软件的测试与分析工具,它一方面吸取软件打点技术,并对这种技术进行了改善,纯软件工具插入的是一个函数,而CodeTEST插入的是一条赋值语句, 它在汇编级也是一条语句,所以它执行的时间非常短,同时避免了被其它的中断所中断,所以它对目标系统的影响非常小(1%-15%)。另一方面,CodeTEST从纯硬件的测试工具那里吸取了从总线捕获数据的技术并且对它进行了改善,CodeTEST不再是采样的方式,它是通过监视系统总线,当程序运行到插入的特殊的点的时候才会主动的到数据总线上把数据捕获回来,借此,在同样的处理能力下,CodeTEST可以做到精确的数据观察。
CodeTEST强大的测试分析功能。
由于
CodeTEST对软件打点技术和从总线捕获数据进行了改善和提升,正是这种原理上的优势,所以CodeTEST具有强大的性能分析、内存分析、高级覆盖率分析和代码跟踪功能。
1. 强大的性能分析:
CodeTEST能同时对128000个函数和1000个任务进行性能分析,可以精确的得出每个函数或任务执行的最大时间、最小时间和平均时间,精确度达到50ns;能够精确的显示各函数或任务之间的调用情况,帮助你发现系统瓶颈、优化系统和提升你的系统性能。
2. 强大的覆盖率分析。
CodeTEST可以在系统真实的环境下,可以从单元级、集成级、系统级以及产品终端现场阶段进行嵌入式软件的分析与测试。帮助测试工程师掌握当前的测试覆盖率数据,指导测试用例的编写。
3. 强大的内存分析。
CodeTEST可以动态追踪内存分配,报告内存出错和相应的原始数据。他不仅可以在程序运行时报告为每条语句分配多少字节的内存,而且他可以鉴别20多种内存分配的错误。例如:CodeTEST可以捕捉“释放空指针(
freeing a null pointer)”一样常见的程序错误,报告发生错误的函数和代码行帮,助你尽早发现动态内纯泄漏,而无需到系统崩溃时。
4. 强大的代码跟踪分析。
CodeTEST提供400K的追踪缓冲空间,能追踪150万行的源代码。我们可以设置触发器来追踪自己感兴趣的事件,可以显示运行过程中程序运行的实际情况,帮助你查找程序的BUG所在。
结束语
随着后PC时代的到来,嵌入式应用将会迅速增长,应用的复杂性也急剧增加,传统的软件分析和测试手段已不能满足嵌入式软件分析测试的基本要求,与此相比,
AMC公司以其公司的几项专利技术,为我们提供的针对嵌入式软件分析测试的解决方案,为广大的嵌入式系统开发者提供了新的技术手段,使我们可以以全新的视角审视我们原有的开发过程,发现一切可以变的如此快捷、简单。
嵌入式软件测试策略
在嵌入式
领
域目
标
系
统
的
应
用系
统
日
趋复杂
,而由于
竞
争要求
产
品快速上市,
开发
技
术
日新月异,同
时
硬件
发
展的日益
稳
定,而
软
件故障却日益突出,
软
件的重要性逐
渐
引起人
们
的重
视
,越来越多的人
认识
到嵌入式系
统
的
测试势
在必行。提到嵌入式
软
件
测试
,首先要
简单
介
绍
一些
软
件工程的一些
观
点,
现
在,被普遍接受的
软
件的定
义
是:
软
件
(software)
是
计
算机系
统
中与硬件
(hardware)
相互依存的另一部分,它包括程序
(program)
、相
关
数据
(data)
及其
说
明文档
(document)
。其中程序是按照事先
设计
的功
能和性能要求
执
行的指令序列;数据是是程序能正常操
纵
信息的数据
结
构;文档是与程序
开发维护
和使用有
关
的各
种图
文
资
料。
对
于一般商用
软
件的
测试
,嵌入式
软
件
测试
有其自身的特点和
测试
困
难
。
由于嵌入式系
统
的自身特点,如
实时
性
(Real-timing)
,内存不丰富,
I / O
通道少,
开发
工具昂
贵
,并且与硬件
紧
密相
关
CPU
种类
繁多,等等。嵌入式
软
件的
开发
和
测试
也就与一般商用
软
件的
开发
和
测试
策略有了很大的不同,可以
说
嵌入式
软
件是最
难测试
的一
种软
件。
嵌入式
软
件
测试
使用有效的
测试
策略
是唯一的出路,它可以使
开发
的效率最大化,避免目
标
系
统
的瓶
颈
,使用在
线
仿真器
节
省昂
贵
的目
标资
源。自从出
现
高
级语
言,
开发环
境与最
终
运行
环
境通常都是存在差异的,嵌入式系
统
更是如此。
开发环
境被
认为
是主机平台,
软
件运行
环
境
为
目
标
平台。相
应
的
测试为
host-target
测试
或
cross-testing
。
讨论
嵌入式
软
件
测试
首先就会遇到一个
问题
:
为
什
么
不把所有
测试
都放在目
标
上
进
行呢?因
为
若所有
测试
都放在目
标
平台上有很多不利的因素:
1
)
测试软
件,可能会造成与
开发
者争
夺时间
的瓶
颈
,避免它只有提供更多
的目
标环
境。
2
)目
标环
境可能
还
不可行。
3
)比起主机平台
环
境,目
标环
境通常是不精密的和不方便的。
4
)提供
给开发
者的目
标环
境和
联
合
开发环
境通常是很昂
贵
的。
5
)
开发
和
测试
工作可能会妨碍目
标环
境已存在持
续
的
应
用
从
经济
上和
开发
效率上考
虑
,
软
件
开发
周期中尽可能大的比例在主机系
统环
境中
进
行,
其中包括
测试
。
确定
host-target
测试环
境后,
开发测试
人
员
又会遇到以下的
问题
:
1
)多少
开发
人
员
会卷入
测试
工作(
单
元
测试
,
软
件集成,系
统测试
)
2
)多少
软
件
应该测试
,
测试
会花
费
多
长时间
3
)在主机
环
境和目
标环
境有哪些
软
件工具,价格怎
样
,适合怎
样
4
)多少目
标环
境可以提供
给开发
者,什
么时
候
5
)主机和目
标
机之
间
的
连
接怎
样
6
)被
测软
件下
载
到目
标
机有多快
7
)使用主机与目
标环
境之
间
有什
么
限制(如
软
件安全
标
准)
任何人或
组织进
行嵌入式
软
件的
测试
都
应
深入考
虑
以上
问题
,
结
合自身
实际
情况,
选
定合理
测试
策略和方案。
对
于嵌入式
软
件
测试
或叫交叉
测试
(
cross-test
),在
测试
的各个
阶
段有着通用的策略:
单元测试:
所有
单
元
级测试
都可以在主机
环
境上
进
行,除非少数情况,特
别
具体指定了
单
元
测试
直接在目
标环
境
进
行。最大化在主机
环
境
进
行
软
件
测试
的比例,通
过
尽可能小的目
标单
元
访问
所有目
标
指定的界面。
在主机平台上运行
测试
速度比在目
标
平台上快的多,当在主机平台完成
测试
,可以在目
标环
境上重
复
作一
简单
的确
认测试
,确
认测试结
果在主机和目
标
机上没有被他
们
的不同影响。在目
标环
境上
进
行确
认测试
将确定一些未知的,未
预
料到的,未
说
明的主机与目
标
机的不同。例如,目
标编译
器可能有
bug
,但在主机
编译
器上没有。
集成测试
软
件集成也可在主机
环
境上完成,在主机平台上模
拟
目
标环
境运行,当然在目
标环
境上重
复测试
也是必
须
的,在此
级别
上的确
认测试
将确定一些
环
境上的
问题
,比如内存定位和分配上的一些
错误
。
在主机
环
境上的集成
测试
的使用,依
赖
于目
标
系
统
的具体功能有多少。有些嵌入式系
统
与目
标环
境耦合的非常
紧
密,若在主机
环
境做集成是不切
实际
的。一个大型
软
件的
开发
可以分几个
级别
的集成。低
级别
的
软
件集成在主机平台上完成有很大
优势
,越往后的集成越依
赖
于目
标环
境。
系统测试和确认测试
所有的系
统测试
和确
认测试
必
须
在目
标环
境下
执
行。当然在主机上
开发
和
执
行系
统测试
,然后移植到目
标环
境重
复执
行是很方便的。
对
目
标
系
统
的依
赖
性会妨碍将主机
环
境上的系
统测试
移植到目
标
系
统
上,况且只有少数
开发
者会卷入系
统测试
,所以有
时
放弃在主机
环
境上
执
行系
统测试
可能更方便。
确
认测试
最
终
的
实
施舞台必
须
在目
标环
境中,系
统
的确
认
必
须
在真
实
系
统
之下
测试
,而不能在主机
环
境下模
拟
。
这关
系到嵌入式
软
件的最
终
使用。
包括恢
复测试
、安全
测试
、
强
度
测试
、性能
测试
,已超出了
软
件
测试
的范畴,本文
暂
不
讨论
。
使用有效的
cross-test
测试
策略可极大的提高
嵌入式
软
件
开发测试
的水平和效率,当然正确的
测试
工具使用也是必不可少的:
总结
一下,
应
用以上
测试
工具
进
行
.Cross-test
时
的策略:
A)
使用
测试
工具的插装功能(主机
环
境)
执
行静
态测试
分析,并且
为动态
覆盖
测试
准
备
好一插装好的
软
件代
码
。
B)
使用源
码
在主机
环
境
执
行功能
测试
,修正
软
件的
错误
和
测试
脚本中的
错误
。
C)
使用插装后的
软
件代
码执
行覆盖率
测试
,添加
测试
用例或修正
软
件的
错误
,保
证
达到所要求的覆盖率目
标
。
D)
在目
标环
境下重
复
(
B
),确
认软
件在目
标环
境中
执
行
测试
的正确性。
E)
若
测试
需要达到极端的完整性,最好在目
标
系
统
上重
复
(
C
),确定
软
件的覆盖率没有改
变
。
通常在主机环境执行多数的测试,只是在最终确定测试结果和最后的系统测试才移植到目标环境,这样可以避免发生访问目标系统资源上的瓶颈,也可以减少在昂贵资源如在线仿真器上的费用。另外,若目标系统的硬件由于某种原因而不能使用时,最后的确认测试可以推迟直到目标硬件可用,这为嵌入式软件的开发测试提供了弹性。设计软件的可移植性是成功进行 cross-test 的先决条件,它通常可以提高软件的质量,并且度软件的维护大有益处。以上所提到的测试工具,都可以通过各自的方式提供测试在主机与目标之间的移植,从而使嵌入式软件的测试得以方便的执行。