archpr pro4.54怎么如何破解压缩文件密码

10177人阅读
基于数字证书的UKEY安全登录
与身份认证技术研究
&&& 摘& 要 本文在研究身份认证技术、uKey技术及Windows系统登录原理基础上,提出了基于数字证书的uKey身份认证与安全登录方案,设计了自定义登录模块,从而实现了使用uKey进行主机安全登录的功能。
&&& 关键词 uKey;安全登录;身份认证
&&& 用户在访问安全系统之前,首先经过身份认证系统识别身份,然后访问监控模块,系统根据用户身份和授权情况决定用户是否能够访问某个资源。因此系统安全登录与身份认证是安全系统中的第一道关卡,也是实施访问控制的基础,在系统安全领域具有十分重要的作用。本文提出了基于数字证书的uKey安全登录与身份认证方案,采用将第三方开发的uKey与用户身份信息相结合的认证方式,保证每个用户在登录时具有证明其身份的唯一标志,从而使系统通过这个惟一标志验证用户身份合法性。
2& 身份认证技术
&&& 身份认证是网络安全技术的一个重要方面。用户在访问安全系统之前,首先经过身份认证系统识别身份,然后访问监控模块,系统根据用户身份和授权情况决定用户是否能够访问某个资源,常用的口令认证方式有以下几种:
&&& 1)基于口令的认证方式
&&& 基于口令的认证方式是目前在互联网和计算机领域中最简单、最容易实现的一种身份认证技术,也是目前应用最广泛的认证方法。例如:操作系统及诸如邮件系统等一些应用系统的登录和权限管理都基于口令[1],当用户登录计算机网络时,需要输入口令。计算机系统将其认证机制建立在用户名和口令的基础上,如果用户将用户名和口令告诉其它人,则计算机也将给予那个人以访问权限[2]。
&&& 2)基于智能卡的认证方式
&&& 智能卡(Smart Card)是法国人Roland Moreno于1970年发明的[3]。法国BULL公司首创智能卡产品,并将这项技术应用到金融、交通、医疗、身份认证等多个方面。基于智能卡的身份认证属于通过物理设备进行身份认证的机制,该机制结合电子技术和现代密码学知识,大大提高了基于物理设备机制的安全性。每个用户持有一张智能卡,智能卡存储用户秘密信息,同时在验证服务器中也存放该秘密信息。进行认证时,用户输入PIN码(个人身份认证码),服务器认证PIN码,成功后即可读出智能卡中的秘密信息,进而利用该秘密信息与主机之间进行认证。基于智能卡的认证方式是一种双因素认证方式(PIN+智能卡),即使PIN码或智能卡单独被窃取,合法用户的身份仍不会被冒充(即不能获得访问权)。
&&& 3)基于生物特征的认证方式
&&& 生物特征识别是一种根据人体自身所固有的生理特征和行为特征来识别身份的技术,即通过计算机与光学、声学、生物传感器和生物统计学原理等高科技手段的密切结合,利用人体固有生理特征(如手形、指纹、面部特征、虹膜、视网膜等)和行为特征(如笔迹、声音、步态等)来进行个人身份鉴定[4]。
&&& 生物特征认证技术的主要应用有辨识和验证两种。辨识(Identification)指的是确定用户身份,通常是在生物特征模版库中进行一对多匹配(One-to-Many Matching)或基于知识判别;验证(Verification)指的是验证用户是否为他所声明的身份,通常是用单模板进行一对一匹配[5](One-to-One)。
&&& 4) 基于数字证书的认证方式
&&& 数字证书(Digital Certificate)是标志一个用户身份的一系列特征数据,其作用类似于现实生活中的身份证[6]。国际电信联盟的X.509建议定义了一种提供认证服务的框架。采用基于X.509证书的认证技术依赖于共同信赖的第三方来实现认证,所不同的是其采用非对称密码体制,实现上更加简单明了。这里的第三方是指称为CA(Certificate Authority)的认证机构,该认证机构负责认证用户身份并向用户签发数字证书。数字证书遵循X.509标准所规定的格式,因此称为X.509证书。持有此证书的用户就可以凭此证书访问那些信任的CA服务器,通过CA服务器实现用户身份的验证。
3& 基于数字证书的uKey安全登录与身份认证
&&& Windows 2000操作系统以及微软后续的操作系统,如Windows XP都内置了对智能卡用户认证的支持,计算机用户可以选择使用传统的用户名、口令验证方式进行域内用户身份验证,也可使用智能卡来自动完成用户身份验证。
3.1& uKey技术
&&& uKey又名智能电子密码钥匙,既完全继承了已有智能卡技术的安全性,又结合了新型USB接口的数据传输能力。
&&& 1)uKey简介
&&& uKey是集智能卡与读卡器于一体的USB设备,支持热插热拔和即插即用,体积小、重量轻、便于携带[7]。uKey本身作为密钥存储器,自身硬件结构决定了用户只能通过厂商编程接口访问数据,这就保证了保存在uKey中的数字证书无法被复制,并且每一个uKey都带有PIN码保护,这样uKey的硬件与PIN码就构成了使用uKey进行身份认证的双因子。如果用户uKey丢失,获得者由于不知道该硬件的PIN码,就无法冒充合法用户身份;如果用户PIN码泄露,只要保存好uKey硬件就可以保证自己的身份不被冒充。
&&& 安全性是众多应用(特别是网络应用)的基础,而实现安全性的手段一般都是通过加密算法来达到,因为加密算法可以更好地实现数据保密性、数据完整性、身份可鉴别性以及交易不可抵赖性。加密算法安全性主要取决于密钥的秘密性,而不必对算法保密。智能卡作为一种有效的安全保障设备,是保存密钥信息的最可靠手段。传统智能卡的封装形式需要额外的读卡器设备,因为设备体积较大且不便于携带,所以使用很不方便,另外读卡器设备也增加了整体的成本[8]。如表1所示:uKey系列产品在完全继承智能卡优点的同时很好地解决了传统封装形式的诸多不足。
表1& uKey与传统智能卡的比较
读卡器+PK卡
远低于读片器+PK卡的成本之和。
虽然PK卡成本较低,但读卡器成本通常很高。
体积小、重量轻,方便随身携带,非常适用于移动办公。
读卡器体积大,也比较重,不便随身携带。
连接电脑主机的USB 口,通讯速率为12M bps,是高速设备。
通讯速率一般在9600bps~115200bps之间。
USB设备,共享方式,支持多用户访问。USB级联设备,通过级联方式,一台电脑可以接多个uKey。
对于串口读写器,串口资源是独占的且主机串口数量有限,如果串口已经被其它设备占用,将不能使用读卡器。USB接口读写器可支持多用户。
操作方便性
直接插在电脑主机的USB口或延长线接口上,操作极为简单。热插拔设备,可以随时插/拔uKey而不必担心损坏。
对于串口读写器,电脑主机串口不支持热插拔,经常插拔、操作不当时容易烧坏主机串口。USB读写器操作方便性同uKey。
&&& 2) uKey特点
&&& (1)高安全性。uKey通过了国家安全管理权威部门—国密办的技术鉴定和认可,支持国密办认证的分组算法SSF33,也是国内唯一能同时支持ECC、RSA密码算法的同类产品。使用基于硬件RSA算法的uKey比单纯软件实现RSA的应用更加安全可靠。敏感数据都被保存在uKey的安全存储区域中,未授权用户将无法接触到这些信息。uKey的安全性还在于uKey所使用的加密算法都是被广泛公开、业界公认并经受了多年考验的算法。
&&& (2)灵活易用。使用uKey无需任何附加外部设备。用户只需简单地将uKey插入任何带有USB接口的设备就可以使用uKey,使用完毕后直接拔下uKey就可以了。
&&& (3)造价低廉。uKey比任何传统基于硬件的安全系统都节省开支。由于使用uKey无需任何附加设备,因此很适合大范围发行。uKey能够实现智能卡提供的所有功能,但是不需要智能卡读卡器。
&&& (4)携带方便。uKey体积小,重量轻,精美时尚,可以随身携带。
&&& (5)无缝集成。uKey提供符合业界广泛认可的PKCS#11和Microsoft CryptoAPI两种标准接口。任何兼容这两种接口的应用程序,都可以立即集成uKey进行使用。uKey内置大容量智能卡安全芯片,可以同时存储多个数字证书和用户私钥及其它数据。也就是说,多个PKI应用程序可以共用同一个uKey。
&&& (6)高可靠性。uKey使用严格工艺制造,可长期安全的保存用户数据。
3.2& Windows登录原理
&&& Windows 2000的登录方式分为两种:一种是交互式登录(Interactive Logon),另一种是远程登录[9] (Remote Logon)。交互式登录是最典型的登录方式,并且由大部分访问域的用户所使用。当用户第一次登录到某台计算机时将发生交互式登录,该过程使用登录用户的用户名和密码来确切验证用户真实身份。
&&& Windows操作系统的身份认证机制可以用Windows登录模块体系图来说明。如图1所示,Winlogon进程是Windows 2000及以上版本提供的一个支持交互式操作的组件,用于负责管理与承担登录相关的安全工作,包括处理用户的登录与注销、启动用户SHELL、输入密码、更改密码、锁定与解锁计算机等。GINA(Graphical Identification and Authentication)是一个图形动态链接库,在Winlogon进程中运行,用于提供可定制的登录界面并对用户进行身份验证。LSA(Local
Security Authority,本地安全认证)是在用户模式下运行/Winnt/ System32/Lsass.exe映像的进程,负责本地系统安全策略。
图1& Windows登录模块体系结构图
&&& 在Windows登录过程中,如果用户在Windows系统启动后按下“Ctrl+Alt+Del”组合键,则会引起硬件中断,该中断信息被系统捕获后,操作系统立即激活Winlogon进程。Winlogon进程通过调用GINA.DLL将登录窗口(账户名和口令登录提示符)展示在用户面前。GINA.DLL在收集好用户登录信息后,就调用LSA的LsaLogonUser命令,将用户登录信息传递给LSA。实际上认证部分的功能是通过LSA来实现的,这三部分相互协作实现了Windows的登录认证功能。
&&& 缺省状态下,Windows系统提供微软公司自己实现的GINA.DLL—msgina.dll供Winlogon进程调用。用户登录前后计算机的状态有3个,分别是LOGGED_OFF(未登录)、LOGGED_ON(已登录)、LOCKED(锁定)。
3.3& msgina.dll的状态流程
&&& msgina.dll的状态流程如图2所示,图中部分英文是调用的函数名称。
图2& msgina.dll状态流程图
&&& (1)系统启动后,首先调用WlxNegotiate函数确认该DLL是否支持当前版本的Winlogon.exe,接着调用函数WlxInitialize进行相关函数初始化。完成初始化工作后,Winlogon进程调用函数WlxDisplaySASNotice显示欢迎用户登录界面,该函数还会检测是否有自定义的SAS(Secure Attention Sequence,安全提示码序列)出现。如果出现则通知Winlogon进程有登录请求发出。SAS在Windows 2000下缺省为“Ctrl+Alt+Del”,用户也可以定义自己的SAS。
&&& (2)当发现有SAS事件发生时,Winlogon进程调用WlxLoggedOutSAS函数,并向下调用WlxDialogBoxParam显示用户登录对话框,然后调用LSA进行验证,如果验证通过,Winlogon进程调用函数WlxActivateUserShell启动用户外壳程序。
&&& (3)当系统处于登录成功且没有锁定状态(LOGGED_ ON state)时,Winlogon进程接收到SAS事件时,就调用函数WlxLoggedOnSAS。
&&& (4)当系统处于锁定的状态(LOCKED state)时,Winlogon进程则调用函数WlxDisplayLockedNotice显示一些信息,如锁定者、锁定时间等。当其接收到SAS事件时就调用函数WlxWkstaLockedSAS,该函数的返回值将确定工作站的状态:仍然锁定、解锁或用户注销。
&&& (5)当用户注销时,Winlogon进程调用函数WlxLogoff,通知msgina.dll用户的注销操作,msgina.dll做出相应处理。当用户需要关闭计算机时,Winlogon进程调用函数WlxShutdown,允许msgina.dll进行系统关闭前的处理。
&&& (6)缺省状态下,Winlogon进程在注册表中查找键值HKEY_LOCAL_MACHINE /Software/ Microsoft/Windows NT/CurrentVersion/Winlogon,如果存在GINA.DLL键,则Winlogon使用该键;如果不存在GINA.DLL键,则Winlogon就使用默认值msgina.dll。由于GINA动态链接库可以替换,因此只要通过一个自定义GINA来替换GINA.DLL,即可实现用其它认证方式代替Windows所默认的登录方式,例如:eKey、指纹识别等[10]。
3.4& 安全登录实现原理
&&& 利用uKey提供的安全机制,将数字证书存储在uKey中,以实现用户登录及身份认证。由Windows系统登录原理可知,要实现基于数字证书的uKey安全登录及身份验证,需要完成两项工作:一是编写自定义GINA,二是与uKey进行交互。
&&& 1) 自定义GINA—Ginamy.dll的实现
&&& 在GINA中,由Winlogon进程进行函数调用,通过自定义SAS可以实现对uKey设备的登录支持。GINA中有两个地方需要验证用户身份:一是系统启动时需要验证用户身份;二是系统锁定后解除锁定时需要验证用户身份,其对应函数分别是WlxLoggedOutSAS和WlxWkstaLocked SAS。
&&& 系统在没有用户登录之前,Winlogon进程接收到SAS事件时调用函数WlxLoggedOutSAS,因此可在该函数中对uKey的存在与否进行判断。
&&& 当插入uKey时,uKey检测窗口发现后向Winlogon进程发出登录SAS事件,调用LogonUser函数登录系统。在返回几个必要的参数后,Winlogon进程调用WlxActivateUserShell函数激活用户桌面,这样用户就可成功登录到Windows系统中进行正常操作。
&&& 在Windows使用过程中,如果用户有事需要离开现场而拔下uKey,则应用系统获得uKey断开的消息,通过调用WlxSasNotify函数发送一个自定义的SAS事件;随后Winlogon进程就调用WlxLoggedOnSAS函数进行相应的处理,通过发送返回值:WLX_SAS_ACTION_LOCK_ WKSTA实现对Windows系统桌面的锁定。
&&& 系统锁定后,如果用户重新插入uKey时,则系统通过调用WlxSasNotify函数发出一个自定义解除锁定的SAS事件;Winlogon进程调用WlxWkstaLockedSAS函数,在验证PIN正确后通过发送返回参数:WLX_SAS_ACTION_UNLOCK_ WKSTA即可对Windows系统桌面解锁,允许用户重新登录。
&&& 2) 与uKey进行交互
&&& 如图3所示,在办公局域网中可以采用集中式的管理方案,集中配置一个身份验证服务器,客户端所有登录请求都将被发送到验证服务器进行验证。
图3& 身份验证的集中式管理方案
&&& 使用uKey进行身份认证与安全登录主要包括以下步骤:
&&& 1)初始化uKey
&&& 当新用户提出登录申请时,管理员根据用户需求生成数字证书,同时将数字证书和对应的密钥对写入一个全新的uKey中,然后将此uKey发放给用户。密钥存储在uKey中特殊的文件分区里,不能向外读出,以保证其私密性,但可以使用该私钥进行加密或签名。用户获得自己的uKey后就可以登录指定的机器。
&&& 2)用户注册
&&& 当客户端第一次使用uKey进行登录时,需要向身份认证服务器进行注册。客户端读出uKey中的数字证书,同时在本地创建本地账户名(机器名+硬盘序列号)和密码,经过私钥加密后一起发送给身份验证服务器。服务器接收到后,验证证书的合法性,如果合法,就认为此用户是合法用户,然后检查身份信息数据库。如果没有此账户名,服务器则认为这台机器是第一次被登录,需要进行注册,就把此账户名和密码加入身份信息数据库,接着服务器向客户端发回确认信息,客户端收到后则认为注册成功。
&&& 3)安全登录
&&& 用户登录客户端时,首先插入uKey并将用户信息提交到身份验证服务器,服务器生成随机数发回到客户端;然后客户端利用uKey对随机数进行签名并发回服务器端;最后服务器利用对应的用户公钥进行验证,如果有效就认为是合法用户,否则拒绝登录。具体登录验证流程如图4所示。
图4& 基于uKey的安全登录与身份认证流程
&&& a.用户登录客户端,开启计算机。
&&& b.Winlogon进程调用自定义的Ginamy.dll替换默认的msgina.dll,实现自己的身份验证过程。
&&& c.Ginamy.dll通过调用uKey的API函数来检测uKey是否插上,如未发现uKey,则提示用户插入uKey,并拒绝登录。
&&& d.一旦检测到uKey,则弹出自定义对话框,要求用户输入个人PIN码,这一过程是对持卡人身份的确认。
&&& e.如果验证PIN码正确,则可启动认证过程(如图4中虚线框中的认证算法)。
&&& f.自定义的Ginamy.dll模块将根据认证结果返回允许或禁止用户登录系统。
&&& g.若用户有事暂时离开而拔下uKey,则计算机被锁定,直到用户重新插入合法的uKey,输入正确PIN码,经过验证成功后就可以重新登录系统。
3.5 安全性分析
&&& 安全系统自身的安全性是首先要考虑的问题,以下从四个方面对采用uKey实现身份认证的安全性进行分析:
&&& 1)用户私钥的双重保护
&&& 用户数字证书及个人密钥保存在uKey中。身份验证时,使用对称加密算法对用户私钥进行加密处理。由于私钥不通过网络传输,因此攻击者不可能从截获的数据中获得用户私钥。此外,uKey的访问密码只在客户端出现,也不通过网络传输。
&&& 2)认证过程的安全性
&&& 由于对随机数进行签名在uKey内部完成,用于签名的私钥保存在卡内固定区域,并且在签名过程中私钥不会被读出到内存,任何人都无法获得uKey私钥,因此保证了认证过程的安全性。
&&& 3)能抵抗重放攻击
&&& 由于每次身份验证时,服务器都要发送不同的随机数给客户端,因此,如果攻击者将以前截获的签名信息重放,则不可能认证成功;如果服务器发送的随机数被截获,由于攻击者不能得到用户私钥也不可能将随机数正确签名,因此也不可能认证成功。
&&& 4)能抵抗假冒攻击
&&& 由于攻击者无法获取用户私钥以及用户uKey的PIN码,因此无法向服务器端发送验证请求,从而无法通过服务器的认证。
&&& 本文论述了身份认证技术,在研究uKey技术及Windows系统登录原理的基础上,提出了一种基于数字证书的uKey安全登录与身份认证方案,完成了自定义GINA的开发,实现了基于uKey的身份认证与系统安全登录功能。经调试运行,系统达到了对安全登录与身份认证的目标要求。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:714501次
积分:7672
积分:7672
排名:第2396名
原创:57篇
转载:105篇
评论:64条
(1)(2)(16)(8)(1)(37)(40)(31)(1)(20)(5)java代码怎么读取UKEY的信息呢 - Java Web开发当前位置:& &&&java代码怎么读取UKEY的信息呢java代码怎么读取UKEY的信息呢&&网友分享于:&&浏览:741次java代码如何读取UKEY的信息呢?需要客户端插入ukey,读取并验证信息,和数据库中的记录比较,有此用户则通过,没有提示ukey信息不对。这个读取USBKEY用java代码如何实现呢?哪位有经验的提供下帮组哦!------解决方案--------------------
咨询ukey厂商,他们有读写ukey的开发包和API说明。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有本帖子已过去太久远了,不再提供回复功能。Java开发的eeb工程,在打开登陆页面时,检测电脑u口是否插入key,插入能打-百谷歌3449人阅读
Java(10)
开发经验分享
1.&约束自己,规范编码习惯
充足的代码注释、标准缩进的格式、注意命名规范。参考《开发管理规范》
&看上去&专业能促进代码质量。越是难看的代码,在它的演化过程中会越来越差。因为当你看到你要bugfix的代码很乱,那么在bugfix的时候一般也会草草了事。一个方法有400行,在修改这个方法的时候大家不会在意再加上几十行代码。因为它看起来很差,它就是很差,我没必要美化它。反过来说,如果待改的代码很整洁很规范,那么修改者也会比较小心。
2.&避免冗长的方法和类
应将方法设计成简要的、功能性单元,用它描述和实现一个不连续的类接口部分。理想情况下,方法应简明扼要。若长度很大,可考虑通过某种方式将其分割成较短的几个方法。这样做也便于类内代码的重复使用(有些时候,方法必须非常大,但它们仍应只做同样的一件事情)。
3.&不要向标准输出写无用数据
System.out.println();&此语句在程序中随处可见,都是在调试时使用的,在程序正式运行时也没有将其去掉,结果就是日志中有大量的无用数据,不仅使得日志不易分析,也增加了系统的开销。
如要调试可用LogWriter,将WEB-INF/ini/merpserver.ini中loglevel设为4
4.&调用方法前注意参数校验,判断参数是否为空或无意义的值
5.&使用对象前,检查对象是否为空
if(names!=null&&names.length&0){
String[]&nameArray&=&names.split(‘,’);
if(userEn!=null){
String&name&=&userEn.getName();
6.&避免过多过常的创建java对象
尽量避免在经常调用的方法、循环中new对象,由于系统不仅要花费时间来创建对象,而且还要花时间对这些对象进行垃圾回收和处理,在我们可以控制的范围内,最大限度的重用对象,最好能用基本的数据类型或数组来替代对象。
7.&尽量避免随意使用类成员变量
当某个对象被定义为stataic变量所引用,那么gc通常是不会回收这个对象所占有的内存的。此时类成员变量的生命周期与类同步,如果类不卸载,那么该对象会常驻内存,直到程序终止
8.&减少对变量的重复计算
for(int&i=0;i&list.size();i++)
for(int&i=0,len=list.size();i&i++)
并且在循环中应该避免使用复杂的表达式,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快
9.&避免不必要的创建对象
A&a&=&new&A();
list.add(a);
A&a&=&new&A();
list.add(a);
10.&原则上循环里面不要声明对象,一律在循环外面声明
for(int&i=0;i&i++){
String&title&=&“标题”;
String&title&=&
for(int&i=0;i&i++){
title&=&“标题”;
11.&尽量在finally块中释放资源
程序中使用到的资源应当被释放,以避免资源泄漏。这最好在finally块中去做。不管程序执行的结果如何,finally块总是会执行的,以确保资源的正确关闭。
12.&使用StringBuilder和StringBuffer进行字符串连接
StringBuffer提供了同步机制,所以并发线程访问是线程安全的,适合多线程。
StringBuilder没有提同步机制,所以线程不安全,适合单线程,但如果是单线程的话,要比StringBuffer快。
13.&遍历HashMap使用entrySet
当需要遍历HashMap的时候,请尽量使用entrySet,而不要用keySet,entrySet的效率要比keySet高,实际上使用entrySet是只需要遍历一次hash,即将key和value的映射关系放入到entry中,再取之;而keySet需要两次遍历hash,第一次取所有的key,第二次用key去取出对应的value。
Iterator&iter&=&hashMap.entrySet().iterator();
while&(iter.hasNext())&{
Map.Entry&entry&=&(Map.Entry)&iter.next();
String&key&=&String.valueOf(entry.getKey());
String&val&=&String.valueOf(entry.getValue());
14.&尽量缓存经常使用的对象
尽可能将经常使用的对象进行缓存,可以使用数组,或HashMap的容器来进行缓存,但这种方式可能导致系统占用过多的缓存,性能下降。
推荐参考《开发指南》,使用EHCache
15.&使用统一的工具类
使用hanwebcommon.jar中的通用方法,具体参考《开发指南》
使用项目中已经存在的工具类,不要重复创造功能近似的类和方法,如果必要可进行扩展
如:接收参数使用Convert.getParameter(request,&参数名);
16.&减少不必要的空格和空行,参考《开发管理规范》
17.&java代码中不要出现黄色警告。注释或删除未使用的变量;保存时去掉多余的import;…
18.&前台接收Stirng类型参数,要进行跨站脚本和sql注入过滤
Convert.getParameter(request,&keyword&,&&,true,true);
19.&不要在jsp中实现业务逻辑,放到类中去完成
分层设计实现了软件之间的解耦;便于进行分工;便于维护;提高软件组件的重用;便于替换某种产品,比如持久层用的是hibernate,需要更换产品用toplink,就不用改其他业务代码,直接把配置一改;便于产品功能的扩展;便于适用用户需求的不断变化。
20.&避免在循环体中使用try-catch&块,最好在循环体外使用try--catch&块以提高系统性
21.&oracle大字段操作
先插入一个空的clob类型&empty_clob(),然后再单独更新clob字段
InsertSql&insql&=&new&InsertSql(&strTableName&);&
&&&&insql.addString(&vc_name&,&name);
&&&&if&((&oracle&).equals(SysInit.getM_strDB_Type())){
&&&& insql.addClob(&vc_adress&);
&&&& insql.addClob(&vc_path&);
&&&&}else{
&&&&&&&&insql.addString(&vc_adress&,&address);
&&&&&&&&insql.addString(&vc_path&,&path);
boolean&bl&=&Manager.doExcute(strAppID&,&insql.getSql());
if&((&oracle&).equals(SysInit.getM_strDB_Type())){
String[]&strFieldValue&=&{address,&path};
String[]&strFieldName&={&vc_adress&,&vc_path&};
Manager.doClob(strAppID,&strFieldName,&strFieldValue,&strTableName,&&&WHERE&i_id&=&&&+&getMaxId());
22.&使用统一的&!DOCTYPE&,保证不同浏览器下的页面兼容
建议使用:
&!DOCTYPE&html&PUBLIC&&-//W3C//DTD&XHTML&1.0&Transitional//EN&&&http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&&
23.&HTML结构要完整、正确
标准的HTML文档结构:
&!DOCTYPE&html&PUBLIC&&-//W3C//DTD&XHTML&1.0&Transitional//EN&&&http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&&
&meta&http-equiv=&Content-Type&&content=&text/&charset=UTF-8&&/&
&title&Insert&title&here&/title&
&li&……&/li&
&li&……&/li&
&td&……&/td&
24.&HTML标签要完整
标签名称及属性统一使用小写,标签要成对出现,如:
&div&id=”search”&………&/div&
不用于包含内容的标签,可在标签结尾使用“/”标记结束,如:
&input&type=”text”&name=”username”&value=”tony”&/&
25.&标签属性值必须用双引号包住
26.&HTML代码使用标准缩进
27.&脚本每一条语句都要以分号结尾
28.&具有独特性、不需要重复使用的样式,使用内嵌样式:
&div&style=”title”&标题&div&
能够重复使用的样式,在样式表中定义:
&li&class=”menu”&菜单&/li&
页面内使用的样式,使用内嵌样式表:
&style&type=&text/css&&
font-size:13
多个页面公用的样式使用链入外部样式表:
&link&href=&../global.css&&rel=&stylesheet&&type=&text/css&&/&
29.&页面内使用的脚本函数,在head中定义:
&script&type=”text/javascript”&
function&checkForm(){
重复使用的脚本函数或代码较多的脚本,写到外本脚本文件中,在head中链接:
&script&type=”text/javascript”&src=”../checkform.js”&/&
不影响页面本身展示的脚本可考虑放在body结束的位置调用,如广告代码:
&script&type=”text/javascript”&src=”../adv.js”&/&
30.&风格统一,保存时要对代码进行格式化,Ctrl+Shift+F
31.&养成程序优化的意识
现在我们经常遇到的一个问题是,程序在开发阶段,执行的完全正常,找测试人员测试也没问题,但是一到上线后,性能马上出问题了,运行速度像蜗牛,客户不堪忍受,为什么?简单的说,开发人员自测,估计也就几条数据,测试人员测试,估计也就几十上百条数据,一般的程序代码,在这个数量级,性能瓶颈根本就表现不出来。但是上线后,客户的数据一般都上升到10000级别的,如果程序代码中没有做到细微之处都很严谨的话,问题就马上暴露出来了。
二、&数据库
1.&SQL语句中保留字、函数名要大写,表明、字段名全部小写
如:SELECT&vc_name,vc_sex,i_age&FROM&user&WHERE&i_id&=&100&AND&i_type&=&2
2.&使用标准SQL语句,防止数据库兼容问题
3.&循环里面(包括循环调用方法内)避免过多操作数据库
4.&选择最有效率的表名顺序
ORACLE&的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表&driving&table)将被最先处理,在FROM子句中包含多个表的情况下,必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询,&那就需要选择交叉表(intersection&table)作为基础表,&交叉表是指那个被其他表所引用的表
5.&注意WHERE子句中的连接顺序
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,&那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾
6.&SELECT子句中避免使用*
ORACLE在解析的过程中,&会将'*'&依次转换成所有的列名,&这个工作是通过查询数据字典完成的,&这意味着将耗费更多的时间
7.&减少访问数据库的次数,尽量批量操作数据库,如批量删除
ORACLE在内部执行了许多工作:&解析SQL语句,&估算索引的利用率,&绑定变量&,&读数据块等
8.&避免在WHERE子句中使用in,not&&in,or&或者having
可以使用&exist&和not&exist代替&in和not&in
9.&用WHERE子句替换HAVING子句
避免使用HAVING子句,&HAVING&只会在检索出所有记录之后才对结果集进行过滤.&这个处理需要排序,总计等操作.&如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销。
10.&用好数据库事务
事务是指作为单个逻辑工作单元执行的一系列操作。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。
Transaction&ts&=&
ts&=&new&Transaction(appId);
boolean&bl&=&ts.execute(sql);
bl&=&mit();
throw&new&Exception();
}catch(Exception&e){
if(ts!=null)
ts.roolback();
11.&注意SQL执行效率,考虑单表记录10W以上的运行效果
setup中,日志显示级别为警告以上时,执行时间超过300ms的SQL语句,会在日志中输出warning
参考《开发管理规范》
三、&项目开发
1)&需求最终需要开发人员在产品中实现,开发不合理的设计会浪费时间,开发技术无法实现的设计带来最大的痛苦:失败。所以,开发人员要重视需求以及需求评审,提出自己能够想到的所有异议;
2)&开发人员不但要做好需求分析,还要做出精确的估计。因为编码工作保质保量的按时完成需要多方的准备工作,技术难点需要进行充分的技术预言,不熟悉的依赖平台或类库要进行熟悉;
2.&计划:一栋楼很难估算重量,但是一块砖头可以精确估算重量。一个项目的时间很难准确的估计,但把项目开发划分为不能再进行分割的模块功能点,对每个点的估计是可以更精准的估时的,由此由上至下,由下至上,可以得出近乎准确的开发时间。
1)&一图胜万言,模块结构以及流程等很难用用文字描述,即使用文字描述出来也很难看懂,所以在设计中,要善用用图;
2)&详细设计过程中有思考的痛苦,繁琐的痛苦,但是绕过这些痛苦,编码期间将会面临更大的痛苦,要以快乐的心态面对。
1)&对于一个实现可以有很多解决方案,花些时间精力选取你认为最好的解决方案可以总体上提高工作成效,往往还可以得到用户更好的体验效果;
2)&细致认真严谨的工作即是对工作负责,更是对自己负责,让这些成为习惯。任何一次,任何时候所进行的编码工作,在逻辑、风格、简单有效等方面都尽可能的做到最好,既能更好为公司实现价值,同时更有利自己在技能,岗位的进步;
3)&简单是美,在有效的前提下,越是简单的处理方法越是珍贵的,代码编写也是,简单的代码便于理解维护,同时不容易产生错误
4)&慎做改动,当然不是说不做改动或不鼓励改动,而是不做仓促、草率的代码改动。没有洞察全局,考虑全面,而仓促进行的改动往往没有达到改动的目的却带来了其他问题
5)&模块的性能不是减少一行或几行执行代码所能提高的,性能的优化首先是从算法上考虑,降低时间复杂度,然后从执行逻辑入手,减少循环执行代码的执行次数
6)&关键地方要打印日志输出到文件中,在运行过程中不断检查日志,发现任何异常都要检查原因并修改
1)&事出有因,任何bug都是由于代码的疏漏造成的,利用排除法或跟踪调试代码等方法找到疏漏所在;
2)&遇到自身模块相关问题首先检查自己,相互推诿只会浪费时间以及减弱在其他同事对你的信任;
3)&站的高看得远,不同的视角有不同的风景。遇到比较难解决的问题而苦苦没有思路时,转换思路或把问题的考虑范围放的更广一点,往往可以找到解决方案
4)&功能提交测试前或bug修复提交验证前,开发人员都要自己详细的测试一下,验证无误再提交。(参考附录2--测试常见问题)
1)&善于及时的沟通。在项目的整个流程过程中,遇到他人的问题或自己解决不了的问题,切忌堆在自己心里,要及时找问题解决方进行沟通,寻求解决方案
2)&善于发现并学习别人的长处。作为开发人员,我们在追求接近完美的同时,也需要学会欣赏别人的长处,发现别人的优点,并学习别人的优点,转化为自己的潜质,这样,我们才可以进步的更快,更全面
3)&善于帮助他人解决问题以及进行知识经验的分享,更有利于自己的提高,同时还可以获得他人的尊重
四、&关于测试
1.&在整个项目计划中,测试时间安排的合理性,对测试阶段的情况应作充分预计,不可为了赶发布点而忽略质量。
2.&务必清楚产品包、更新包、bug包的提交规范。具体请参照《开发规范手册》。不要出现测试过程中提交多个bug包,或者提交安装包给测试人员更新的情况。
3.&提包时请先检查,路径是否正确、文件是否完整、配置文件是否应该提交,源代码修改记录描述是否完善。之前经常出现,提包不检查就直接提交来测试,导致出错后环境不断地还原或者重建新的环境。CVS使用不熟悉,提交文件反复出错。
4.&产品质量需要严格控制,自己承认是问题的情况下,请不要试图和测试商谈希望可以不被追究。
5.&请注意提高修改bug的质量,目前,修改一个bug而引发更多的bug的情况特别多。
6.&bug修改完成后,在提交测试前请自己先验证通过后再提交,请不要修改完成后不验证就直接提交给测试人员,防止导致bug被反复reopen的情况。
7.&原则上不允许不通过CVS而直接提交文件给测试人员调试问题、寻找原因。如果确有必要,测试人员可以协助调试,但次数不宜过多,防止测试环境版本难以控制。
8.&bug是否存在的衡量标准以测试环境为准,不建议出现“我这边是好的”这样的解释。
9.&修改bug时请修改完整,可能会有多个小问题提交在一个BUG里面,BUG修改时多个小问题的地方均需修改。
10.&更新文件必须通过配置发布,无论是否经过测试都不允许直接发给项目或直接更新客户服务器
五、&开发环境
1.&Eclipse内存溢出、崩溃、无响应、启动慢
1)&建立多个workspace
2)&将workspace中暂时不用的工程close
3)&修改eclipse配置文件eclipse.ini,参考知识库:
-XX:PermSize=96m
-XX:MaxPermSize=96m
2.&Eclipse统一字符集为UTF-8
1)&进入Eclipse-&Window-&Preferences-&General-&Workspace界面,在“Text&file&encoding”中选择“other”并在下拉列表中选择“UTF-8”,并点击【Apply】后,点击【OK】确认保存
2)&修改jsp文件头部
&%@&page&language=&java&&contentType=&text/&charset=ISO-8859-1&&pageEncoding=&ISO-8859-1&%&
将字符集改为“UTF-8”
3)&进入Eclipse-&Window-&Preferences-&Web-&JSP&Files界面,将“Encoding”属性修改为“ISO&10646/Unicode(UTF-8)”
4)&已建立的项目,右键点击项目名称,进入Properties-&Resource界面,选择“Text&file&encoding”编码为“UTF-8”
3.&打开Eclipse内存监视及回收插件
进入Eclipse-&Window-&Preferences-&General界面,勾选“Show&heap&status”,点击【Apply】后,点击【OK】确认保存。Eclipse右下角,会显示JVM内存使用情况。
点击垃圾桶图标,可进行手动回收
4.&设置断点,进行调试
行断点是最普通的断点。只要在Eclipse&Java&编辑区的行头双击就会得到一个断点,代码会运行到此处时停止
2)&条件断点
条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才会在运行到断点处时停止。
在断点处点击鼠标右键,选择最后一个&Breakpoint&Properties&
断点的属性界面及各个选项的意思如下图,
3)&变量断点
断点不仅能打在语句上,变量也可以接受断点
下图就是一个变量的打的断点,在变量的值初始化,或是变量值改变时可以停止,当然变量断点上也是可以加条件的,和条件断点的设置是一样的
4)&方法断点
方法断点就是将断点打在方法的入口处,方法断点的特别之处在于它可以打在&JDK的源码里,由于&JDK&在编译时去掉了调试信息,所以普通断点是不能打到里面的,但是方法断点却可以,可以通过这种方法查看方法的调用栈
5)&类型载入断点
可以查看什么时候载入的类
6)&异常断点
当异常发生时,代码会停在异常发生处,定位问题时应该比较有帮助
打开Breakpoints视图,点击按钮,增加异常断点
5.&修改代码字体
进入Eclipse-&Window-&Preferences-&General-&Appearance-&Colors&and&Fonts界面,选择Basic-&Text&Font,点击右侧【Edit…】,选择。点击【Apply】后,点击【OK】确认保存
6.&Eclipse快捷键,见“附录1—Eclipse快捷键”
六、&Linux
见《Linux_命令详解》
常用命令:
cd 变换工作目录
cd&/&返回根目录 cd&../&返回上层目录
ls 显示指定工作目录下的内容
mv 将一个档案移至另一个档案,或将数个档案移至另一个目录
mv&/data/m3 /root 将/data/m3转移到/root目录下
mkdir 创建指定的目录名
mkdir&/root/temp 在root目录下创建temp目录
rm 删除档案及目录
rm&–rf&文件/文件夹 彻底删除文件/文件夹
rmdir 删除空的目录
kill 终止进程
kill&-9&2342 杀掉进程标识号PID为2342的进程
ps 报告进程状况
ps&–ef|grep&java&查看java进程
tail 从指定点开始将指定的文件写到标准输出
tail&–f&nohup.out 实时读取日志nohup.out的更新内容
su 变更为其它使用者的身份
su&–&user1 切换到用户user1
cp&config.xml&/data/ 将config.xml文件复制到/data/目录下
reboot 重启服务器
halt 关闭服务器
top 显示目前正在系统中执行的程序
free 显示系统内存与swap使用的情况
java&–version&查看JDK版本
chromd&777&/temp/runthread.sh 赋予用户/temp/runthread.sh最大权限
cat&/dev/null&&&nohup.out 清空日志nohup.out文件内容
df&–hl 查看磁盘空间与使用情况
du 显示目录下所有文件并列出文件大小
pwd 查看当前所在路径
export&lang=zh_CN 修改环境变量lang值,解决linux乱码
./startup.sh&tomcat启动
nohup&./startWeblogic.sh&&&weblogic启动(不挂断运行,防止注销后weblogic停止)
./startServer.sh&server1&&websphere启动
七、&常见问题
1.&jsp出现getOutputStream()&has&already&been&called&for&this&response
jsp中出现此错误一般都是在jsp中使用了输出流(如输出图片验证码,文件下载等),没有妥善处理好造成的。
jsp编译成servlet之后在函数_jspService(HttpServletRequest&request,&HttpServletResponse&response)的最后有一段这样的代码
&&&&if&(_jspxFactory&!=&null)&_jspxFactory.releasePageContext(_jspx_page_context);
这里是在释放在jsp中使用的对象,会调用response.getWriter(),因为这个方法是和response.getOutputStream()相冲突的!所以会出现以上这个异常。
out.clear();
out&=&pageContext.pushBody();
2.&xml加载错误
1)&weblogic下,xml没有以xml文档方式加载,而是按照文本方式展现,导致出错,例如高级编辑器或树会出现加载错误
解决方法:在web.xml文件中增加
&mime-mapping&
&&&&&extension&xml&/extension&
&&&&&mime-type&text/xml&/mime-type&
&/mime-mapping&
2)&网络问题,导致无法访问DTD(文档类型定义,作用是定义&XML&文档的合法构建模块)
解决方法:删除DTD声明,或者指向服务器本地DTD
3)&XML&声明通常在&XML&文档的第一行出现。XML&声明不是必选项,但是如果使用&XML&声明,必须在文档的第一行,前面不得包含任何其他内容或空白。动态产生的xml文档。
解决方法:输出xml内容之前,用&out.clear();&清空缓存
3.&中文乱码
1)&jsp页面乱码,头部指定字符集为UTF-8
&%@page&language=&java&&contentType=&text/&charset=utf-8&%&
2)&数据库乱码,指定数据库字符集为UTF-8,同时dbconfig.xml的连接字符串中设置字符集为UTF-8
3)&中文参数乱码。tomcat下修改server.xml中HTTP的Connector的URIEncoding属性为UTF-8;js传递中文参数,用encodeURI()&进行编码
4.&jPage脚本错误,检查proxyUrl指定的jsp页面的输出内容。输出的内容为脚本片段,要符合javascript语法。
dataStore为字符串数组,需要过滤dataStore中元素里的单引号
replaceAll(&\'&,&\\\\'&).replaceAll(&\r\n&,&&);
输出形式如下:
dataStore&=&['第一条\'记录\'内容',&'第二条”记录”内容',&'第三条记录内容'];
5.&Apache与Tomcat整合,session丢失
参考知识库:
6.&zip文件解压错误,提示找不到方法
应用中的ant.jar同中间件自带的文件冲突,将/WEB-INF/lib/ant-1.7.0.jar改名为ant.jar&覆盖到中间件的目录下
weblogic:weblogic/bea/weblogic81/server/lib/ant
websphere:WebSphere/AppServer/lib
7.&脚本错误,使用浏览器调试工具
IE8及以上版本,使用浏览器自带的开发人员工具,按F12进行脚本调试
FireFox使用Firebug插件进行调试,按F12进行脚本调试
8.&中间件报错如下:java.sql.SQLException:&IO异常:The&Network&Adapter&could&not&establish&the&connection,先后重启数据库和中间件无效
1) 用“telnet&数据库IP&数据库端口”命令检查网络是否畅通
2) 检查是否超过了数据库最大连接数
3) 检查是否有防火墙
4) 数据库监听日志大小是否超过2G(/data/oracle/product/版本号/network/log/listener.ora)
9.&日志中报too&many&open&files错误
linux默认打开文件的最大数是1024,解决方法:
用cat&/proc/sys/fs/file-max&命令查看打开文件的最大限制数
用echo&65536&&&/proc/sys/fs/file-max&命令修改
编辑/etc/sysctl.conf文件,编辑行fs.file-max=65536
编辑/etc/security/limits.conf,增加行*&-&nofile&65536
10.&导入XML文件失败
Editplus检查xml文件是否是UTF-8编码
八、&附录1(Eclipse快捷键)
Ctrl+1
Ctrl+D
删除当前行
Ctrl+Alt+↓
复制当前行到下一行(复制增加)
Ctrl+Alt+↑
复制当前行到上一行(复制增加)
Alt+↓
当前行和下面一行交换位置
Alt+↑
当前行和上面一行交换位置
Alt+←
前一个编辑的页面
Alt+→
下一个编辑的页面
Alt+Enter
显示当前选择资源的属性
Shift+Enter
在当前行的下一行插入空行
Shift+Ctrl+Enter
在当前行插入空行
Ctrl+Q
定位到最后编辑的地方
Ctrl+L
定位到某行
Ctrl+M
最大化当前的Edit或View
Ctrl+/
注释当前行,再按则取消注释
Ctrl+O
快速显示&OutLine
Ctrl+T
快速显示当前类的继承结构
Ctrl+W
关闭当前Editer
Ctrl+K
参照选中的Word快速定位到下一个
Ctrl+E
快速显示当前Editer的下拉列表
Ctrl+/(小键盘)
折叠当前类中的所有代码
Ctrl+×(小键盘)
展开当前类中的所有代码
Ctrl+Space
代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)
Ctrl+Shift+E
显示管理当前打开的所有的View的管理器
Ctrl+J
正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes&line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)
Ctrl+Shift+J
反向增量查找
Ctrl+Shift+F4
关闭所有打开的Editer
Ctrl+Shift+X
把当前选中的文本全部变为大写
Ctrl+Shift+Y
把当前选中的文本全部变为小写
Ctrl+Shift+F
格式化当前代码
Ctrl+Shift+P
定位到对应的匹配符(譬如{})&(从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)
Alt+Shift+R
Alt+Shift+M
Alt+Shift+C
修改函数结构
Alt+Shift+L
抽取本地变量(可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)
Alt+Shift+F
把Class中的local变量变为field变量
Alt+Shift+I
Alt+Shift+V
移动函数和变量
Alt+Shift+Z
重构的后悔药
Ctrl+F
查找并替换
Ctrl+Shift+K
查找上一个
文本编辑器
Ctrl+K
查找下一个
文本编辑器
Ctrl+Z
Ctrl+C
Alt+Shift+↓
恢复上一个选择
Ctrl+X
Ctrl1+1
Ctrl+A
Alt+Shift+?
Ctrl+Shift+Space
上下文信息
显示工具提示描述
Java编辑器
Alt+Shift+↑
选择封装元素
Java编辑器
Alt+Shift+←
选择上一个元素
Java编辑器
Alt+Shift+→
选择下一个元素
Java编辑器
Ctrl+J
文本编辑器
Ctrl+Shift+J
增量逆向查找
文本编辑器
Ctrl+V
Ctrl+Y
Ctrl+=
Ctrl+-
激活编辑器
Ctrl+Shift+W
切换编辑器
Ctrl+Shift+F6
上一个编辑器
Ctrl+Shift+F7
上一个视图
Ctrl+Shift+F8
上一个透视图
Ctrl+F6
下一个编辑器
Ctrl+F7
下一个视图
Ctrl+F8
下一个透视图
Ctrl+W
显示标尺上下文菜单
文本编辑器
Ctrl+F10
显示视图菜单
显示系统菜单
Ctrl+F3
Java编辑器
Ctrl+Shift+T
打开类型层次结构
Shift+F2
打开外部javadoc
Ctrl+Shift+R
Alt+←
后退历史记录
Alt+→
前进历史记录
Ctrl+,
Ctrl+.
Ctrl+O
Java编辑器
Ctrl+Shift+H
在层次结构中打开类型
Ctrl+Shift+P
转至匹配的括号
Ctrl+Q
转至上一个编辑位置
Ctrl+Shift+↑
转至上一个成员
Java编辑器
Ctrl+Shift+↓
转至下一个成员
Java编辑器
Ctrl+L
文本编辑器
Ctrl+Shift+U
出现在文件中
Ctrl+H
打开搜索对话框
Ctrl+G
工作区中的声明
Ctrl+Shift+G
工作区中的引用
文本编辑器
Ctrl+↑
文本编辑器
Ctrl+↓
文本编辑器
Ctrl+S
Ctrl+P
Ctrl+F4
Ctrl+Shift+S
Ctrl+Shift+F4
Alt+Enter
Ctrl+N
Ctrl+B
Ctrl+Shift+F
格式化
Java编辑器
Ctrl+\
Java编辑器
Ctrl+/
Java编辑器
Ctrl+Shift+M
Java编辑器
Ctrl+Shift+O
Java编辑器
Ctrl+F5
单步跳入选择
调试上次启动
Shift+F5
使用过滤器单步执行
Ctrl+Shift+B
添加/去除断点
Ctrl+D
Ctrl+F11
运行上次启动
Ctrl+R
Ctrl+U
Alt+Shift+Z
Alt+Shift+M
Alt+Shift+L
抽取局部变量
Alt+Shift+I
Alt+Shift+V
Alt+Shift+R
Alt+Shift+Y
九、&附录2(测试常见问题)
1.&表和触发器的创建等sql语句更新执行问题,即sql语句不正确;
2.&新增、编辑信息时,对字段输入的类型(数字、字母、日期等)、长度、范围不作校验,如果校验不对需要在处理之前要有相关的提示信息;
3.&新增、编辑信息时,当某一字段输入有问题,提交时,系统作出错误提示,但是其他正确的字段信息均被清空;
4.&新增和编辑修改信息的要求不一致;例如添加要求必填的项,修改也应该必填;添加规定为整型的项,修改也必须为整型.
5.&对新建完成的信息记录打开编辑时显示不正确;
6.&新建信息时新增的空记录错误地保存成功;
7.&新增信息列表后,信息列表排序没有规律,如正序或者倒序,而是无序地插入;
8.&录入后自动计算的字段要随着别的字段修改更新(如单科成绩变后,总成绩也变);
9.&输入较长的信息后,导致界面变形,浏览器分辨率大小撑大或者内容被遮挡
10.&信息输入开头、结尾的空格、null值判断显示;
11.&删除信息时,勾选部分信息记录进行删除时,系统错误删除了其他未勾选的信息记录;选择性删除一条信息记录和删除所有信息记录效果一样;
12.&删除信息时,没有“删除确认”对话框直接删除了所有信息记录;
13.&没有选择记录直接点击删除/修改按钮需要提示“请先选择记录”;
14.&需要考虑删除的关联性,即删除某一个内容需要同时删除其关联的某些内容;
15.&高级检索中的条件检索无论什么条件均可以检索出所有信息列表;
16.&高级检索完成后条件仍然存在,影响了外面的空检索不能正确检索出所有信息;
17.&查询条件名称与信息列表及信息编辑页面相应的字段名称完全统一;
18.&一个模块的excel表格错误地被导入另一个模块;
19.&新增和导入的文件内容字段判断不一致,或者导入时不作判断;
20.&功能实现时,隐性需求未能实现,例如:用户输入四科成绩后,总成绩还是需要用户手动输入;&
21.&返回按钮不能实现返回功能;
22.&信息保存提交后系统给出“保存/提交成功”提示信息,但是系统不能自动更新列表显示;
23.&上传图片、文件系统未正确更新;
24.&上传文件、图片时,对文件、图片的类型、大小系统没有正确作控制;
25.&对于范围的查询应该采用全闭的形式,例如选择范围是1-3,应该表示大于等于1并且小于等于3;
26.&操作完成后系统没有正确提示,不知道是成功了还是失败了,不知道操作完成的情况;
27.&系统显示的提示信息描述不正确、与实际结果不一致;例如系统弹出错误提示信息但是操作成功;
28.&信息列表中如果某个字段显示过长用“…”或者分行显示;
29.&大文本框输入应该可以自动换行显示、控制字数等;
30.&界面只读的时候(查询、统计、导入)等,应当不能编辑;
31.&对于添加的时间控件,未根据实际情况作出控制,即选择的时间应当符合实际条件;并且从**至**时间控件选择时没有先后顺序;
32.&文本框等控件的控制禁止了键盘的输入,但是没有阻止鼠标及快捷键的操作,例如测试的时候可以将一段代码或非法输入使用鼠标操作进行复制粘贴操作;
33.&用户注销或者cookie失效后,有页面正常显示导致的错误操作;
34.&与实际常识逻辑上不符合;例如:大小月、二月各自的实际天数;
35.&多种条件冲突而导致结果矛盾,例如:考勤系统中出现过的,又缺勤又迟到的情况;
36.&调试信息遗留(后台打印与文件开发环境配置,多余文件等)
37.&用户、机构与角色的关联关系没有控制正确,例如系统没有给用户a分配相应角色权限时,但是此用户a在系统中错误地有操作权限;
38.&用户登录后自己可以错误地删除自己的账号;
39.&时间控件需作判断时以服务器时间为基准界面显示,字体样式、对齐方式、按钮风格和布局,和公司其他产品统一;
40.&界面风格、布局和公司其他产品保持统一,遵守以下规则:易用性、规范性、帮助设施、合理性、美观与协调性、菜单位置、快捷键组合、安全性考虑,例如:
1) 按钮风格、对齐方式不一致;
2) 文本框的样式、对齐方式不整齐;
3) 界面排版上下不对齐、左右按钮大小不一致;
4) “当前位置”界面中显示的模块名称和实际模块名称不一致;
5) 界面中信息列表新增、删除、排序后,左侧栏目树不能自动刷新;
6) “当前位置”界面中显示的当前模块位置不正确,模块层次丢失,表示上下层关系的箭头多个界面不一致;
7) 界面风格、样式不一致;
8) 界面完全展现后,滚动条使用的不恰当;
41.&功能按钮名称与其页面中的导航要一致,如图8-1中这种显示是错误的,应该两处的叫法一致。
42.&弹出对话框的背景色不能是白色,如图8-2中这种显示是错误的。
43.&滚动条的显示,如图8-3所示,有横着的滚动条,却没有竖着的滚动条,是错误的。
44.&页面样式显示,如图8-4所示,是错误的录入日期列所占宽度应该减小,标题列加宽,录入日期只需显示日期不需显示时间,显示内容与实际描述不一致。
45.&页面折行显示,如图8-5所示,。是错误的
46.&边框线条粗细一致,如图8-6所示,是错误的,整体效果中线条有粗有细。
47.&页面中的空行过多,如图8-7所示,错误的。
48.&页面中的中英文状态下的符号混用,如图8-8所示,是错误的。
49.&页面中的文本框尽量对齐显示,文字部分尽量对齐显示,如图8-8所示,是错误的。
50.&两行内容不要靠太紧凑,如图8-9所示,是错误的。
51.&前台固定必须要显示的图片,当后台未上传图片时,需要默认给一个图片显示。
52.&随着分辨率不同页面不折行显示。
53.&表格框上下要对齐,如图8-10所示,是不正确的。
54.&页面按钮显示名称,与鼠标放在按钮上显示的名称要一致。
55.&按钮位置要对齐,如图8-11所示,是错误的。
56.&必填项要用红色的*标注。
57.&tab键对文本框有效。
58.&查询结果为空时,如图8-12显示是错误的。建议有友好提示信息。
59.&页面文字描述,如图*.zip文件描述不准确。正确描述为:&zip压缩文件
60.&两层滚动条,如图8-14所示,是错误的
61.&如图8-15的表现方式是正确的。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:128955次
积分:1422
积分:1422
排名:千里之外
原创:28篇
转载:51篇
(1)(1)(1)(12)(64)

我要回帖

更多关于 archpr 4.54破解版 的文章

 

随机推荐