2018-02-01 17:03:19 zhangdaiscott 阅读数 682
  • 软件测试基础

          主要讲解软件测基础信息,包括如下内容: *  软件测试的发展 * 软件测试定义、目标、原则 * 软件测试模型(V模型、W模型、H模型等)      * 软件测试准入准出的标准(包括缺陷的生命周期、测试用例的相关属性字段) * 测试方法的分类 * 白盒测试(语句、条件、判定、条件/判定、条件组合、路径等覆盖) * 黑盒测试(等价类、边界值、因果图)       通过该系列课程,能达到对软件测试有一个简单的认识,知道通过一些方法来分析需求,编写测试用例,来管理缺陷,有一个简单的测试流程体系,知道如何测试、如何编写测试用例等。

    1792 人正在学习 去看看 王恩龙

1. 数据权限自定义SQL支持表达式


功能介绍


数据规则通过配置自定义sql来实现数据权限的控制,自定义SQL支持表达式取值

 

 

其中自定义sql 条件中字段的名称和数据库表的字段名保持一致。

 


角色授权

 


用户角色授权,权限测试不要用admin账号测试(admin拥有超级权限)

 


功能测试


使用授权用用户登录,本列针对用户列表权限控制,只显示当前登录用户的信息

 

 

2011-09-08 14:27:36 wangpingjing 阅读数 76
  • 软件测试基础

          主要讲解软件测基础信息,包括如下内容: *  软件测试的发展 * 软件测试定义、目标、原则 * 软件测试模型(V模型、W模型、H模型等)      * 软件测试准入准出的标准(包括缺陷的生命周期、测试用例的相关属性字段) * 测试方法的分类 * 白盒测试(语句、条件、判定、条件/判定、条件组合、路径等覆盖) * 黑盒测试(等价类、边界值、因果图)       通过该系列课程,能达到对软件测试有一个简单的认识,知道通过一些方法来分析需求,编写测试用例,来管理缺陷,有一个简单的测试流程体系,知道如何测试、如何编写测试用例等。

    1792 人正在学习 去看看 王恩龙
用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序。调用时如同系统函数一样,如max(value)函数,其中,value被称为参数。函数参数有3种类型。
IN 参数类型:表示输入给函数的参数。
OUT 参数类型:表示参数在函数中被赋值,可以传给函数调用程序。
IN OUT参数类型:表示参数既可以传值也可以被赋值。
1、语法格式:
SQL语法方式创建的语法格式为:
CREATE OR REPLACE FUNCTION function_name         /**//*函数名称*/
(
Parameter_name1,mode1 datatype1,           
/**//*参数定义部分*/
Parameter_name2,mode2 datatype2,
Parameter_name3,mode3 datatype3

)
RETURN return_datatype                /**//*定义返回值类型*/
IS/AS
BEGIN
       Function_body                 
/**//*函数体部分*/
      
RETURN scalar_expression                        /**//*返回语句*/
END function_name;
  
说明:
function_name::用户定义的函数名。函数名必须符合标示符的定义规则,对其所有者来说,该名在数据库中是唯一的。
parameter:用户定义的参数。用户可以定义一个或多个参数。
mode:参数类型。
datatype:用户定义参数的数据类型。
return_type::用户返回值的数据类型。
函数返回scalar_expression表达式的值,function_body函数体由pl/sql语句构成。
2、示例
函数代码:
create or replace function T01001_count
return number

is
count_T01001
number;
begin

select count(*) into count_T01001 from T01001;
return
(count_T01001);
end T01001_count;                  --记得一定要打分号


调用:
declare
i
number;
begin

i:
=T01001_count();
dbms_output.put_line(to_char(i));
end;                 --记得一定要打分号
注意:
(1)    如果函数没有参数,那么函数名后不应该要括号;
(2)    创建函数的时候end后面一定要记得写函数名
--没有参数的函数   
create or replace function get_user return varchar2 is  
  v_user varchar2(50);   
begin  
  select username into v_user from user_users;   
  return v_user;   
end get_user;   
  
--测试   
方法一   
select get_user from dual;   
  
方法二   
SQL> var v_name varchar2(50)   
SQL> exec :v_name:=get_user;   
  
PL/SQL 过程已成功完成。   
  
SQL> print v_name   
  
V_NAME   
------------------------------   
TEST   
  
方法三   
SQL> exec dbms_output.put_line('当前数据库用户是:'||get_user);   
当前数据库用户是:TEST   
  
PL/SQL 过程已成功完成。  
--没有参数的函数
create or replace function get_user return varchar2 is
v_user varchar2(50);
begin
select username into v_user from user_users;
return v_user;
end get_user;
--测试
方法一
select get_user from dual;
方法二
SQL> var v_name varchar2(50)
SQL> exec :v_name:=get_user;
PL/SQL 过程已成功完成。
SQL> print v_name
V_NAME
------------------------------
TEST
方法三
SQL> exec dbms_output.put_line('当前数据库用户是:'||get_user);
当前数据库用户是:TEST
PL/SQL 过程已成功完成。
Sql代码
--带有IN参数的函数   
create or replace function get_empname(v_id in number) return varchar2 as  
  v_name varchar2(50);   
begin  
  select name into v_name from employee where id = v_id;   
   return v_name;   
exception   
  when no_data_found then  
    raise_application_error(-20001, '你输入的ID无效!');   
end get_empname;  
--带有IN参数的函数
create or replace function get_empname(v_id in number) return varchar2 as
v_name varchar2(50);
begin
select name into v_name from employee where id = v_id;
return v_name;
exception
when no_data_found then
raise_application_error(-20001, '你输入的ID无效!');
end get_empname;
 
附:
函数调用限制
1、SQL语句中只能调用存储函数(服务器端),而不能调用客户端的函数
2、SQL只能调用带有输入参数,不能带有输出,输入输出函数
3、SQL不能使用PL/SQL的特有数据类型(boolean,table,record等)
4、SQL语句中调用的函数不能包含INSERT,UPDATE和DELETE语句
 
查看函数院源代码
oracle会将函数名及其源代码信息存放到数据字典中user_source
select text from user_source where name='GET_EMPNAME';

删除函数
drop function get_empname
2012-02-10 11:09:35 soft_lawrency 阅读数 1959
  • 软件测试基础

          主要讲解软件测基础信息,包括如下内容: *  软件测试的发展 * 软件测试定义、目标、原则 * 软件测试模型(V模型、W模型、H模型等)      * 软件测试准入准出的标准(包括缺陷的生命周期、测试用例的相关属性字段) * 测试方法的分类 * 白盒测试(语句、条件、判定、条件/判定、条件组合、路径等覆盖) * 黑盒测试(等价类、边界值、因果图)       通过该系列课程,能达到对软件测试有一个简单的认识,知道通过一些方法来分析需求,编写测试用例,来管理缺陷,有一个简单的测试流程体系,知道如何测试、如何编写测试用例等。

    1792 人正在学习 去看看 王恩龙

software软件版本号总结:

V(Version):即版本,通常用数字表示版本号。(如:EVEREST Ultimate v4.20.1188 Beta )
Build: 用数字或日期标示版本号的一种方式。(如:VeryCD eMule v0.48a Build 071112)
SP: Service Pack,升级包。(如:Windows XP SP2 / Vista SP1)

授权和功能划分:
Trial:试用版,通常都有时间限制,有些试用版软件还在功能上做了一定的限制。可注册或购买成为正式版
Unregistered:未注册版,通常没有时间限制,在功能上相对于正式版做了一定的限制。可注册或购买成为正式版。
Demo: 演示版,仅仅集成了正式版中的几个功能,不能升级成正式版。
Lite: 精简版。
Full version:完整版,属于正式版。

语言划分:
SC: Simplified Chinese简体中文版。
CN: 简体中文版
GBK: 简体中文汉字内码扩展规范版。
TC: Traditional Chinese繁体中文版。
CHT: 繁体中文版
BIG5: 繁体中文大五码版。
EN: 英文版
Multilanguage:多语言版
UTF8: Unicode Transformation Format 8bit,对现有的中文系统不是好的解决方案。

其他版本划分:
Enhance: 增强版或者加强版 属于正式版1
Free: 自由版
Release: 发行版 有时间限制
Upgrade: 升级版
Retail: 零售版
Cardware:属共享软件的一种,只要给作者回复一封电邮或明信片即可。(有的作者并由此提供注册码等),目前这种形式已不多见。
Plus: 属增强版,不过这种大部分是在程序界面及多媒体功能上增强。
Preview: 预览版
Corporation & Enterprise: 企业版
Standard: 标准版
Mini: 迷你版也叫精简版只有最基本的功能
Premium: 贵价版
Professional: 专业版
Express: 特别版
Deluxe: 豪华版
Regged: 已注册版
Rip:是指从原版文件(一般是指光盘或光盘镜像文件)直接将有用的内容(核心内容)分离出来,剔除无用的文档,例如PDF说明文件啊,视频演示啊之类的东西,也可以算做是精简版,但主要内容功能是一点也不能缺少的!另:DVDrip是指将视频和音频直接从DVD光盘里以文件方式分离出来。

RTM 版:这基本就是最终的版本,英文是 Release To Manufactur,意思是发布到生产商。
OEM 版(Original Equipment Manufacturer):OEM软件是给电脑生产厂的版本,无需多说。 

FPP 版(Full Packaged Product (FPP)/Retail):零售版(盒装软件),这种产品的光盘的卷标都带有"FPP"字样,比如英文Windows XP Pro 的FPP版本的光盘卷标就是WXPFPP_EN,其中WX表示是Windows XP,P是Professional(H是Home),FPP表明是零售版本,EN是表明是英语。获得途径除了在商店购买之外,某些MSDN用户也可以得到。
VOL版(Volume Licensing for Organizations(VLO)):团体批量许可证(大量采购授权合约),这是为团体购买而制定的一种优惠方式。这种产品的光盘的卷标都带有"VOL"字样,取"Volume"前3个字母,以表明是批量,比如英文WXP Pro的VOL版本的光盘卷标就是WXPVOL_EN,其中WX表示是Windows XP,P是Professional(VOL没有Home版本),VOL表明是团体批量许可证版本,EN是表明是英语。获得途径主要是集团购买,某些MSDN用户也可以得到。


软件开发阶段划分:

1. 软件版本阶段说明

* α(Alpha)版:内测版。此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,或者专业测试人员测试用,一般而言,该版本软件的Bug较多,需要继续修改。
* β(Beta)版:公测版。该版本相对于α版已有了很大的改进,消除了严重的错误,但还是存在着一些缺陷,需要经过多次测试来进一步消除,此版本主要的修改对像是软件的UI,供专业爱好者大规模测试用。

* RC 版:是 Release Candidate 的缩写,意思是发布倒计时,候选版本,该版本已经相当成熟了,完成全部功能并清除大部分的BUG,基本上不存在导致错误的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

2016-04-23 16:11:04 nthack5730 阅读数 23280
  • 软件测试基础

          主要讲解软件测基础信息,包括如下内容: *  软件测试的发展 * 软件测试定义、目标、原则 * 软件测试模型(V模型、W模型、H模型等)      * 软件测试准入准出的标准(包括缺陷的生命周期、测试用例的相关属性字段) * 测试方法的分类 * 白盒测试(语句、条件、判定、条件/判定、条件组合、路径等覆盖) * 黑盒测试(等价类、边界值、因果图)       通过该系列课程,能达到对软件测试有一个简单的认识,知道通过一些方法来分析需求,编写测试用例,来管理缺陷,有一个简单的测试流程体系,知道如何测试、如何编写测试用例等。

    1792 人正在学习 去看看 王恩龙

使用:org.apache.shiro.web.filter.authz.RolesAuthorizationFilter进行授权拦截

本文还是使用静态的验证方式,将在以后一步步进行数据库查询认证信息和授权信息,不过,为了方便大家一步步学习和查看,还是先从静态的方式开始吧。



     perms(许可验证)
     org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter
     perms:例子/admins/user/**=perms[user:add:*],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,例如/admins/user/**=perms["user:add:*,user:modify:*"],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。
     /admins/user/**=perms[user:add:*]表示:要访问【/admins/user/**】必须具有【user:add:* 】权限

此文老猫原创,转载请加本文连接:http://blog.csdn.net/nthack5730/article/details/51226800
更多有关老猫的文章:http://blog.csdn.net/nthack5730




在application-shiro.xml中配置URL所需要的权限:

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
    <property name="securityManager" ref="securityManager" />
    <property name="loginUrl" value="/user/login.action" /> <!-- 没有权限或者失败后跳转的页面 -->

    <property name="filterChainDefinitions">
        <!-- , roles[admin], perms[document:read] -->
        <value>
            <!-- 对静态资源设置匿名访问 -->
            /js/** = anon
            /css/** = anon
            /img/** = anon
            /fonts/** = anon
            /scripts/** = anon


            /user/login.action = authc
            /user/logout = logout

            <!-- 进入后台需要权限:admin:* -->
            /backstage/** = perms[admin:*]

            /user/** = user
        </value>
    </property>
</bean>



在Struts2中加入上面Shiro中过滤链的对应的链接的Action:

【Action可以不用配置处理方法的,这个大家应该都知道吧?】
<!-- 后台 -->
<package name="backstage" namespace="/backstage" extends="struts-default">
    <default-action-ref name="index" />

    <action name="index">
        <result>/WEB-INF/jsp/backstage/index.jsp</result>
    </action>

</package>




自定义Realm的授权doGetAuthorizationInfo方法:

protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
    //从principals获取主身份信息
    //将getPrimaryPrincipal()返回的值强制转换为真实身份信息【在上边的doGetAuthenticationInfo()认证通过填充到SimpleAuthenticationInfo中的身份信息】
    String userCode = (String) principals.getPrimaryPrincipal();

    //根据身份信息获取权限信息
    //先链接数据库。。。
    //模拟从数据库获取数据
    List<String> permissions = new ArrayList<String>();
    permissions.add("admin:*");//用户的创建权限
    permissions.add("user:update");//用户的修改
    permissions.add("item:add");//商品的添加权限
    //....等等权限

    //查到权限数据,返回
    SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();

    //将List里面的权限填充进去
    simpleAuthorizationInfo.addStringPermissions(permissions);

    return simpleAuthorizationInfo;

}

此文老猫原创,转载请加本文连接:http://blog.csdn.net/nthack5730/article/details/51226800
更多有关老猫的文章:http://blog.csdn.net/nthack5730


在上面的代码中,主要加入权限的是:
【以后这里的权限数据是从数据库中查回来的,测试的时候为了更加直观,所以就直接用了静态写死的方式展示给大家看。】
List<String> permissions = new ArrayList<String>();
permissions.add("admin:*");//用户的创建权限
permissions.add("user:update");//用户的修改
permissions.add("item:add");//商品的添加权限
//....等等权限

权限部分添加后,通过addStringPermissions方法将这个collection交给授权管理器进行权限的判断。
//将List里面的权限填充进去
simpleAuthorizationInfo.addStringPermissions(permissions);



测试流程:

1、在application-shiro.xml配置过滤的规则

<!-- 进入后台需要权限:admin:* -->
/backstage/** = perms[admin:*]

2、用户在认证通过后,请求【/backstage/**】即backstage命名空间中任意地址

      被PermissionsAuthorizationFilter拦截,发现需要【admin:*】权限

3、PermissionsAuthorizationFilter调用Realm中的doGetAuthorizationInfo方法来获取数据库中正确的权限


4、PermissionsAuthorizationFilter对需要的权限【admin:*】和获取的权限进行对比,如果【admin:*】在realm返回的权限列表中,则授权通过,否则没有权限。在没有权限的时候,我们就用下面对没有权限的操作进行页面跳转。

此文老猫原创,转载请加本文连接:http://blog.csdn.net/nthack5730/article/details/51226800
更多有关老猫的文章:http://blog.csdn.net/nthack5730




配置没有权限(授权失败)页面:

在使用Struts2时候,如果没有访问权限,就会报Status 401错误,毕竟401这个很不友好,那么我们通过加入没有权限访问页面,就可以防止出现401这个不友好的界面的问题。
需要在spring配置文件中,【shiroFilter】的bean中加入如下配置:
<!-- 通过unauthorizedUrl指定没有权限操作时跳转页面-->
<property name="unauthorizedUrl" value="/refuse.jsp" />



存在的问题总结:

在applicationContext-shiro.xml中配置过滤器链,需要将全部的URl和权限对应起来进行配置,这种配置方式是比较麻烦的,不方便使用。
每次授权,都需要调用realm查询数据库,对于系统的性能具有很大的影响。设想:以后通过shiro的缓存来解决。
之后会一一处理这些问题。









2007-04-25 11:18:00 ibmjournal 阅读数 829
  • 软件测试基础

          主要讲解软件测基础信息,包括如下内容: *  软件测试的发展 * 软件测试定义、目标、原则 * 软件测试模型(V模型、W模型、H模型等)      * 软件测试准入准出的标准(包括缺陷的生命周期、测试用例的相关属性字段) * 测试方法的分类 * 白盒测试(语句、条件、判定、条件/判定、条件组合、路径等覆盖) * 黑盒测试(等价类、边界值、因果图)       通过该系列课程,能达到对软件测试有一个简单的认识,知道通过一些方法来分析需求,编写测试用例,来管理缺陷,有一个简单的测试流程体系,知道如何测试、如何编写测试用例等。

    1792 人正在学习 去看看 王恩龙

 尽管 Web 服务器能够为应用程序执行用户身份验证和粗粒度的授权检查,但是 Web 服务和面向服务的体系结构(Service-Oriented Architecture,SOA)开发人员通常必须编写自定义代码来限制对某些系统功能的访问,或者基于用户的标识来自定义行为或外观。在应用程序中嵌入授权检查很不灵活,易于出错,并且增加了复杂性。如果授权检查是数据驱动的而不是由程序逻辑实现的,结果会怎么样呢?通过重用某个授权框架,脚本和编译后的程序可以更小、更简单、更安全,并且可以减少应用程序开发时间和工作量。
引言

您也许熟悉操作系统提供的访问控制功能。它通常对系统调用和通过文件系统指定的资源的操作请求执行授权检查。程序员通常不必测试运行程序的用户是否有权读取数据文件和设置系统时间。操作系统将负责此任务,并通过一个返回值让程序知道是允许还是拒绝此操作。例如,UNIX® 强制实施通过文件所有者 ID、组 ID 和与实际或有效用户标识相关的权限来建立的要求。尽管此设计非常简单,但它可能不够,从而导致某些类 UNIX 系统通过访问控制列表和其他机制对其进行扩展。其他操作系统则使用了更精细的安全模型。而且,该安全模型通常适用于系统已知的文件对象和用户帐户(出现在 /etc/passwd 或 NIS 中的文件对象和用户帐户中)。

对于某些基于服务器的应用程序,此模型是足够的。服务器最初使用增强的特权来执行,因此它能执行任何操作。当代表某个特定用户执行操作时,它实际上就变成了该用户。或者,服务器可以使用系统调用来构建安全模型,从而将操作限制到允许该用户执行的操作。在执行该操作前,程序必须测试授权:当前用户是否允许执行该操作?

。。。。。。

                                                                                      点击此处查看全文

tp5.0验证

阅读数 798

没有更多推荐了,返回首页