51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 12075|回复: 21
打印 上一主题 下一主题

如何针对设计进行有效性测试?(09-3-30)(获奖名单已公布)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-3-30 10:55:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何针对设计进行有效性测试?

如果你也有问题想提出来和大家一起讨论,请点击此处>>
说不定下期讨论的问题就是由你提出的哦,请快快参与吧!



获奖名单
奖项
获奖名单
奖励
答案链接
一等奖
kukumaru
当当购物卡50元
17#
二等奖
贝贝酷
300论坛积分
22#



相关文章:

黑盒测试设计

软件设计中的可用性

MVC设计模式

更多内容请点击>>>
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2009-3-30 17:19:56 | 只看该作者
首先说一下,从需求过程来说,所有来自用户的原始需求是需要经过再次加工的,原始需求都是用自然语言描述,需要在此基础上进行需求的分解与开发,成为用技术语言描述的系统需求,在分解和开发过程中,还要考虑市场机会、竞争对手信息、技术储备、投入产出比等信息,以及一些系统本身的内部需求,如兼容性、重用性、可靠性、可服务性、可测试性、可制造性等等许多相关因素,而参考软件测试的V模型,系统测试对需求的覆盖实际是指系统需求这一级别
从需求管理的角度来说,下一级需求一定要实现对上级需求的覆盖,也就是说系统需求要实现对用户需求的覆盖,所以说,当测试实现了对系统需求的覆盖的同时,也就完成了对用户需求的有效覆盖
以上是从系统工程之需求工程的角度来描述,而从测试角度说呢,测试人员拿到需求后事实上也需要做功能结构分解,将需求分解成一个功能点列表(注意:功能列表中不止有功能的描述,还应该有其性能指标,如性能的失效以及衰减的定义),在此基础上,行成测试规格说明,再参考系统架构设计规格,形成测试大纲,参考测试规格说明来进行测试用例的设计,这样就能完成对需求的有效覆盖了
而就用户需求本身是否能实现,应该是在需求分析阶段来进行验证的,经过需求分析,有时会发现很多用户需求都不是他的真实需求,相反,有很多真实需求却没有体现(这种也叫隐含需求),这种情况,就需要比较有经验的业务人员或者开发人员进行需求的引导来实现了
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2009-3-30 17:22:15 | 只看该作者
说实话,我对一楼的问题理解的不是十分到位,不知道是否回答到位,或者请默默巫再解释一下?
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2009-3-30 19:03:40 | 只看该作者
这个问题需要真正有经验的老同志来回答。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2009-3-31 13:15:08 | 只看该作者
有效性测试(又称功能测试)一般都先于编码过程,即通过对设计文档的理解,使用单元测试实现功能。
验证设计文档中的代码结构是可以满足预期功能的。
功能测试时,应针对接口迚行测试。
接口的实现代码可以在单元测试中先行实现后,在单元测试通过后移入相应的源码包中。
功能测试时无需设计复杂的测试用例,只需要按照设计文档的预期输入设计测试用例,断言相关的接口输出为预期设计,如果单元测试通过,则可以推论设计是满足预期功能不设计的。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2009-3-31 13:30:10 | 只看该作者
原帖由 lanbiers 于 2009-3-31 13:15 发表
有效性测试(又称功能测试)一般都先于编码过程,即通过对设计文档的理解,使用单元测试实现功能。
验证设计文档中的代码结构是可以满足预期功能的。
功能测试时,应针对接口迚行测试。
接口的实现代码可以在单元 ...


问题描述中说的“这种设计”是“用户提供或者自行整理的需求文档”。

在这个时候好像还不大会有接口,接口的实现代码,代码结构。
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2009-3-31 13:30:55 | 只看该作者
原帖由 lanbiers 于 2009-3-31 13:15 发表
有效性测试(又称功能测试)一般都先于编码过程,即通过对设计文档的理解,使用单元测试实现功能。
验证设计文档中的代码结构是可以满足预期功能的。
功能测试时,应针对接口迚行测试。
接口的实现代码可以在单元 ...

之前看标题的时候以为是说如何针对设计进行有效性测试
可后来看到内容时又说是针对“用户提供或者自行整理的需求文档”进行有效性测试,就把我弄糊涂了
如果是针对设计进行测试,主要是在设计和编码阶段,进行单元和集成测试
其中单元测试,主要是验证单元模块(或者类和对象)的输入输出以及数据流,查看其是否代码满足了详细设计文档中的要求
集成测试是在单元测试基础上进行,主要是验证模块间的接口问题,查看其是否满足该要设计文档中的要求
参考V模型,在测试时,是要假设下一层设计文档能够满足上一层文档的设计要求,这样反向推断
而下一层设计文档是否能满足上一层文档的设计要求,是需要按自顶向下的顺序,通过评审和审计的手段来控制和保证的
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2009-3-31 13:31:55 | 只看该作者
原帖由 black_tulip 于 2009-3-31 13:30 发表


问题描述中说的“这种设计”是“用户提供或者自行整理的需求文档”。

在这个时候好像还不大会有接口,接口的实现代码,代码结构。

是,所以我说这个问题看的我很糊涂,到底是针对的用户需求,还是针对设计,能否请发问人来解释一下呢?
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2009-4-1 09:53:28 | 只看该作者
大家还是按标题"如何针对设计进行有效性测试"来进行回答吧.
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2009-4-1 10:20:51 | 只看该作者

设计评审

严格的设计评审,应该是最有效的设计测试方法。

当然,这样的设计评审应当是多方参与的(干系人),包括客户、市场、需求、专家、开发、测试、维护.....
针对不同的干系人,进行必要的宣讲和阐述。
不同的人对评审的内容有所侧重,得出的结果也较全面。
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2009-4-1 23:23:05 | 只看该作者

严格遵守软件开发流程

1 需求评审
2 设计方案评审
3 详细设计评审
4 测试用例设计(用合理的用例最大可能覆盖设计的方方面面)
5 版本测试(制定出合理的测试时间、计划、人力模块划分)
6 故障分析总结
7 测试复盘总结
8 文档修订(规程修订、方案修订)
如果每一步都能得到严格有效的执行,可以保证测试的有效性
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2009-4-2 11:50:37 | 只看该作者
需求--->功能点---->评审------>测试观点------>评审--------->测试用例-------->评审------->执行
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2009-4-2 20:44:02 | 只看该作者

站在用户的角度来测,模似实际情况。

很多时候需求上的功能点可以很容易地测出:具体功能项有没有实现,难点在于实际用户的对软件的错误理解而造成的非法操作,引起的系统异常,使之不能正常工作,我往往是我们按照正常测试流程走很难测到的。所以用户在实际需求中,都隐含着对软件的健壮性的强列需求。而我们一般的测试流程中往往最容易忽略这一点。站在用户的角度来测,模似实际情况,才会更有效。
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2009-4-3 14:34:53 | 只看该作者
这个问题,我不太了解,来向前辈们学习下
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2009-4-3 14:54:41 | 只看该作者
额,这个问题可问住我这个菜鸟了。向各位学习了先
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2009-4-3 14:55:08 | 只看该作者
额,这个问题可问住我这个菜鸟了。向各位学习了先
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2009-4-3 15:57:24 | 只看该作者
假设有个类别widget;我们希望能够针对该类别做有效性测试,通常我们可能会为widget定义一个is_valid()成员函数
widget w;
if (w.is_valid()) {...}

然而有时候我们可能更希望接口更直接点,比如:
error e;
if (e) {...}

这时候可以采取的一个方法是提供一个转型:
比如转至一个int

class error {
public:
    error (int code) : m_error_code(code) {}
    operator int() const {return m_error_code; }
private:
    int m_error_code;
};

通常我们并不鼓励这么做,自动转型暴露了内部数据,总是存在难以发现的隐患(我们应该尽可能遵循伟大的c_str()传统);

另外一种转型operator bool也不被鼓励

class error {
...
   operator bool() const { return m_error_code != 0; }
};

原因是你有可能写出:

error e(1), e2(2);
if (e == e2) { ... }

在没有定义operator==的情况下,if (e == e2) 居然也可以通过,而且返回真。原因是e和e2都转型为bool后再做比较。

当然你可以定义operator==以消除这种状况的发生。

class error {
...
   operator bool() const { return m_error_code != 0; }
   bool operator==(const error& e) { return m_error_code == e.m_error_code; }
};

这时if (e == e2) { ... } 可以返回正确的结果,同时你也达到进行有效性测试的目的。

对于像smart_ptr这样的模板类别,情况会有点微妙的变化。你仍然可以进行有效性测试:

smart_ptr<int> s;
if (s) { ... }

但operator==却行为异常。因为你可能对着两个不同类型的smart_ptr进行比较,而对于不同类型的smart_ptr,并未有operator==被实作出来(你只会针对同型的smart_ptr实作operator==):

smart_ptr<A> s1;
smart_ptr<B> s2;

if (s1 == s2) {... }
结果是显而易见的,s1,s2分别实施转型至bool,if比较返回true

正确的做法是基于不同的smart_ptr类型产生不同的可测试有效性的类型:下面是一个方法(MordenC++p178)

template <class T>
class smart_ptr {
    class nested_unspecified_type {
            void opeartor delete(void*);
    };
public:
    opeartor nested_unspecified_type*() const {
              if (!m_pointee) return 0;
   static nested_unspecified_type n;
   return &n;           
    }
};

nested_unspecified_type会声明而未定义void opeartor delete(void*); 的原因是阻止写出如下的delete代码:
delete smart_ptr<int>(new int);

另一个更加精妙的方法来自boost\system\error_code.cpp,即转型至一个函数指针
template <class T>
class smart_ptr {
    typedef void (nested_unspecified_type)();
    static void nested_unspecified_type_(){}
public:
    opeartor nested_unspecified_type() const {
              if (!m_pointee) return 0;
              return nested_unspecified_type_;
    }
};

延伸讨论:
上述除了opeartor==的行为需要考虑以外,其他的比较操作符也需要考虑,比如opeator!=, operator<等。如果没有定义这些操作符,那么smart_ptr或者error都会转型以完成比较,所以行为也就会未定义。

结论是:要定义有效性测试符,请采用转型为内部函数指针的转型符,同时也必须定义各种比较操作符
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2009-4-4 10:59:05 | 只看该作者
如何针对设计进行有效性的测试:设计的范围比较广,有前期需求分析的设计,测试计划的设计,测试用例的设计等多方面。针对需求分析方面的设计,在进行设计的时候通常主要有三方的代表,客户代表,开发代表和测试代表,当然中间肯定有技术总监进行评审,如果进行有效性的设计宗旨就是满足客户的需求另外一方面就是便于公司自己以后改进该版本的预留功能,只要满足了客户的需求这是设计是要重点考虑的,如何保证满足就是后期测试用例设计要全面考虑到的,按照测试用例设计的方法来进行全面详细的设计,比如等价类划分法,边界值法,因果图法,场景法等等。其实在设计测试用例的时候,要有个好习惯,就是根据需求画出流程图,所谓流程图就是实现功能的路径,根据流程图计算有多少条路径,然后针对每个路径设计测试用例,每个路径设计的测试用例至少应该包括2个方面,合法和非法。这样在进行用例设计的时候就会很方面,相对来说也会比较全面。
回复 支持 反对

使用道具 举报

该用户从未签到

19#
发表于 2009-4-5 01:16:27 | 只看该作者
我把题目划分为两个关键点:
1)设计:软件研发过程中的设计阶段 即概要设计和详细设计
2)有效性测试又称确认测试 即验证软件是否达到预期需求     这里的软件泛指软件生命周期中所有的软件工作产品

从而得知一般设计的有效性测试就是设计文档的评审。
如果想使其测试更全面、更细致、更有效,那就要相应的做一些扩充;一般来说从方法、过程、工具三个方面来扩充。

这里说得比较宏观,要详细说的话要写好多 ,所以就这样简而概之。
回复 支持 反对

使用道具 举报

该用户从未签到

20#
发表于 2009-4-5 09:54:04 | 只看该作者
有效性测试,我觉得比如以前邮箱空间不是很大时,有些网站号称能达到多少多少个M的邮箱空间,实际上仅仅是个噱头,并没有实现多么高的空间提供
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-18 10:39 , Processed in 0.084488 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表