精华内容
下载资源
问答
  • (4篇)思想方面主要存在问题及整改措施(精选).docx
  •   算法思想有很多,业界公认的常用算法思想有8种,分别是枚举、递推、递归、分治、贪心、试探法、动态迭代和模拟。当然8种只是一个大概的划分,是一个...枚举算法思想的最大特点是,在面对任何问题时它会...

    https://www.toutiao.com/a6653981171921191432/

     

    算法思想有很多,业界公认的常用算法思想有8种,分别是枚举、递推、递归、分治、贪心、试探法、动态迭代和模拟。当然8种只是一个大概的划分,是一个“仁者见仁、智者见智”的问题。

    1.1 枚举算法思想

    知识点讲解:光盘:视频讲解第2章枚举算法思想.avi

    枚举算法思想的最大特点是,在面对任何问题时它会去尝试每一种解决方法。在进行归纳推理时,如果逐个考察了某类事件的所有可能情况,因而得出一般结论,那么这个结论是可靠的,这种归纳方法叫作枚举法。

    1.1.1 枚举算法基础

    枚举算法的思想是:将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,保留合适的,丢弃不合适的。在C语言中,枚举算法一般使用while循环实现。使用枚举算法解题的基本思路如下。

    ① 确定枚举对象、枚举范围和判定条件。

    ② 逐一列举可能的解,验证每个解是否是问题的解。

    枚举算法一般按照如下3个步骤进行。

    ① 题解的可能范围,不能遗漏任何一个真正解,也要避免有重复。

    ② 判断是否是真正解的方法。

    ③ 使可能解的范围降至最小,以便提高解决问题的效率。

    枚举算法的主要流程如图1-1所示。

     

    算法工程师必须要知道的8种常用算法思想

    1-1枚举算法流程图

     

    1.2 递推算法思想

    知识点讲解:光盘:视频讲解第2章递推算法思想.avi

    与枚举算法思想相比,递推算法能够通过已知的某个条件,利用特定的关系得出中间推论,然后逐步递推,直到得到结果为止。由此可见,递推算法要比枚举算法聪明,它不会尝试每种可能的方案。

    1.2.1 递推算法基础

    递推算法可以不断利用已有的信息推导出新的东西,在日常应用中有如下两种递推 算法。

    ① 顺推法:从已知条件出发,逐步推算出要解决问题的方法。例如斐波那契数列就可以通过顺推法不断递推算出新的数据。

    ② 逆推法:从已知的结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。

    1.3 递归算法思想

    知识点讲解:光盘:视频讲解第2章递归算法思想.avi

    因为递归算法思想往往用函数的形式来体现,所以递归算法需要预先编写功能函数。这些函数是独立的功能,能够实现解决某个问题的具体功能,当需要时直接调用这个函数即可。在本节的内容中,将详细讲解递归算法思想的基本知识。

    1.3.1 递归算法基础

    在计算机编程应用中,递归算法对解决大多数问题是十分有效的,它能够使算法的描述变得简洁而且易于理解。递归算法有如下3个特点。

    ① 递归过程一般通过函数或子过程来实现。

    ② 递归算法在函数或子过程的内部,直接或者间接地调用自己的算法。

    ③ 递归算法实际上是把问题转化为规模缩小了的同类问题的子问题,然后再递归调用函数或过程来表示问题的解。

    在使用递归算法时,读者应该注意如下4点。

    ① 递归是在过程或函数中调用自身的过程。

    ② 在使用递归策略时,必须有一个明确的递归结束条件,这称为递归出口。

    ③ 递归算法通常显得很简洁,但是运行效率较低,所以一般不提倡用递归算法设计程序。

    ④ 在递归调用过程中,系统用栈来存储每一层的返回点和局部量。如果递归次数过多,则容易造成栈溢出,所以一般不提倡用递归算法设计程序。

    1.4 分治算法思想

    知识点讲解:光盘:视频讲解第2章分治算法思想.avi

    在本节将要讲解的分治算法也采取了各个击破的方法,将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。只要求出子问题的解,就可得到原问题的解。

    1.4.1 分治算法基础

    在编程过程中,经常遇到处理数据相当多、求解过程比较复杂、直接求解法会比较耗时的问题。在求解这类问题时,可以采用各个击破的方法。具体做法是:先把这个问题分解成几个较小的子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个大问题的解。如果这些子问题还是比较大,还可以继续再把它们分成几个更小的子问题,以此类推,直至可以直接求出解为止。这就是分治算法的基本思想。

    使用分治算法解题的一般步骤如下。

    ① 分解,将要解决的问题划分成若干个规模较小的同类问题。

    ② 求解,当子问题划分得足够小时,用较简单的方法解决。

    ③ 合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。

    1.5 贪心算法思想

    知识点讲解:光盘:视频讲解第2章贪心算法思想.avi

    本节所要讲解的贪心算法也被称为贪婪算法,它在求解问题时总想用在当前看来是最好方法来实现。这种算法思想不从整体最优上考虑问题,仅仅是在某种意义上的局部最优求解。虽然贪心算法并不能得到所有问题的整体最优解,但是面对范围相当广泛的许多问题时,能产生整体最优解或者是整体最优解的近似解。由此可见,贪心算法只是追求某个范围内的最优,可以称之为“温柔的贪婪”。

    1.5.1 贪心算法基础

    贪心算法从问题的某一个初始解出发,逐步逼近给定的目标,以便尽快求出更好的解。当达到算法中的某一步不能再继续前进时,就停止算法,给出一个近似解。由贪心算法的特点和思路可看出,贪心算法存在以下3个问题。

    ① 不能保证最后的解是最优的。

    ② 不能用来求最大或最小解问题。

    ③ 只能求满足某些约束条件的可行解的范围。

    贪心算法的基本思路如下。

    ① 建立数学模型来描述问题。

    ② 把求解的问题分成若干个子问题。

    ③ 对每一子问题求解,得到子问题的局部最优解。

    ④ 把子问题的局部最优解合并成原来解问题的一个解。

    实现该算法的基本过程如下。

    (1)从问题的某一初始解出发。

    (2)while能向给定总目标前进一步。

    (3)求出可行解的一个解元素。

    (4)由所有解元素组合成问题的一个可行解。

    1.6 试探法算法思想

    试探法也叫回溯法,试探法的处事方式比较委婉,它先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一进行枚举和检验。当发现当前候选解不可能是正确的解时,就选择下一个候选解。如果当前候选解除了不满足问题规模要求外能够满足所有其他要求时,则继续扩大当前候选解的规模,并继续试探。如果当前候选解满足包括问题规模在内的所有要求时,该候选解就是问题的一个解。在试探算法中,放弃当前候选解,并继续寻找下一个候选解的过程称为回溯。扩大当前候选解的规模,并继续试探的过程称为向前试探。

    1.6.1 试探法算法基础

    使用试探算法解题的基本步骤如下所示。

    ① 针对所给问题,定义问题的解空间。

    ② 确定易于搜索的解空间结构。

    ③ 以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

    试探法为了求得问题的正确解,会先委婉地试探某一种可能的情况。在进行试探的过程中,一旦发现原来选择的假设情况是不正确的,立即会自觉地退回一步重新选择,然后继续向前试探,如此这般反复进行,直至得到解或证明无解时才死心。

    假设存在一个可以用试探法求解的问题P,该问题表达为:对于已知的由n元组(y1,y2,…,yn)组成的一个状态空间E={(y1,y2,…,yn)∣yiSii=1,2,…,n},给定关于n元组中的一个分量的一个约束集D,要求E中满足D的全部约束条件的所有n元组。其中,Si是分量yi的定义域,且|Si|有限,i=1,2,…,nE中满足D的全部约束条件的任一n元组为问题P的一个解。

    解问题P的最简单方法是使用枚举法,即对E中的所有n元组逐一检测其是否满足D的全部约束,如果满足,则为问题P的一个解。但是这种方法的计算量非常大。

    对于现实中的许多问题,所给定的约束集D具有完备性,即i元组(y1,y2,…,yi)满足D中仅涉及y1,y2,…,yj的所有约束,这意味着jj<i)元组(y1,y2,…,yj)一定也满足D中仅涉及y1,y2,…,yj的所有约束,i=1,2,…,n。换句话说,只要存在0<=j<=n−1,使得(y 1,y 2,…,yj)违反D中仅涉及y1,y2,…,yj的约束之一,则以(y1,y2,…,yj)为前缀的任何n元组(y1,y2,…,yjyj+1,…,yn)一定也违反D中仅涉及y 1,y 2,…,yi的一个约束,n>=i>;j。因此,对于约束集D具有完备性的问题P,一旦检测断定某个j元组(y1,y2,…,yj)违反D中仅涉及y1,y2,…,yj的一个约束,就可以肯定,以(y1,y2,…,yj)为前缀的任何n元组(y1,y2,…,yjyj+1,…,yn)都不会是问题P的解,因而就不必去搜索它们、检测它们。试探法是针对这类问题而推出的,比枚举算法的效率更高。

    1.7 迭代算法

    迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,在解决问题时总是重复利用一种方法。与迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代法又分为精确迭代和近似迭代。“二分法”和“牛顿迭代法”属于近似迭代法,功能都比较类似。

    1.7.1 迭代算法基础

    迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。

    在使用迭代算法解决问题时,需要做好如下3个方面的工作。

    (1)确定迭代变量

    在可以使用迭代算法解决的问题中,至少存在一个迭代变量,即直接或间接地不断由旧值递推出新值的变量。

    (2)建立迭代关系式

    迭代关系式是指如何从变量的前一个值推出其下一个值的公式或关系。通常可以使用递推或倒推的方法来建立迭代关系式,迭代关系式的建立是解决迭代问题的关键。

    (3)对迭代过程进行控制

    在编写迭代程序时,必须确定在什么时候结束迭代过程,不能让迭代过程无休止地重复执行下去。通常可分为如下两种情况来控制迭代过程:

    ① 所需的迭代次数是个确定的值,可以计算出来,可以构建一个固定次数的循环来实现对迭代过程的控制;

    ② 所需的迭代次数无法确定,需要进一步分析出用来结束迭代过程的条件。

    1.8 模拟算法思想

    模拟是对真实事物或者过程的虚拟。在编程时为了实现某个功能,可以用语言来模拟那个功能,模拟成功也就相应地表示编程成功。

    1.8.1 模拟算法的思路

    模拟算法是一种基本的算法思想,可用于考查程序员的基本编程能力,其解决方法就是根据题目给出的规则对题目要求的相关过程进行编程模拟。在解决模拟类问题时,需要注意字符串处理、特殊情况处理和对题目意思的理解。在C语言中,通常使用函数srand()和rand()来生成随机数。其中,函数srand()用于初始化随机数发生器,然后使用函数rand()来生成随机数。如果要使用上述两个函数,则需要在源程序头部包含time.h文件。在程序设计过程中,可使用随机函数来模拟自然界中发生的不可预测情况。在解题时,需要仔细分析题目给出的规则,要尽可能地做到全面考虑所有可能出现的情况,这是解模拟类问题的关键点之一。

    展开全文
  • 然而目前,电子商务的发展在我国的发展仍属于初级阶段,因此了解我国电子商务存在问题,并提出切实可行的解决方案,才能促使我国电子商务健康、有效的发展。 2.我国电子商务发展存在问题 2.1 信息基础设施的...

    1.引言

    电子商务是现代信息技术在商务活动中的运用。电子商务作为一种新的沟通方式和交易方式,是人类不断追求高效率的结果。电子商务的形成,给整个社会经济带来了巨大的影响,形成了新的经济局。然而目前,电子商务的发展在我国的发展仍属于初级阶段,因此了解我国电子商务存在的问题,并提出切实可行的解决方案,才能促使我国电子商务健康、有效的发展。

    2.我国电子商务发展存在的问题

    2.1 信息基础设施的建设赶不上电子商务发展的需求

    近年来,我国在信息基础设施的建设上已经取得了一定的成就,但是,就发展全方位的电子商务要求还是存在一定的差距。一方面是网络发展不能普及到每一个地方,自然电子商务的发展也收到局限。另一方面网络带宽问题,比如在我国刚刚结束的春运中铁道部推出的网上购票系统为人们带来了很大的便捷,但是却大大的暴露出中国电子商务存在的最大弊端,承载量。在购票期间不断地需要刷新,有时登陆系统就要花大量的时间,付款后没有提示交易成功,人们不得不半夜就得守候在电脑旁边,后来经过不断的升级之后达到了承载量有所提高,但是仍然很难抵挡春运大潮。

    2.2 安全问题

    交易的安全问题是困扰电子商务发展一个很重要的问题。双方交易是通过一个虚拟的网络,对方是否可靠,不论是买方还是卖方都不是百分百的相信,卖方担心货发出后,钱收不到,买方会不放心财物两空。还有一点,我们都知道,网络的发展也伴随着黑客的出现,交易付款的时候,是否会遭到黑客的攻击,那样的话,不但是此次交易损失,交易所用的银行卡中的钱是否危险,这些都是要考虑的。

    2.3网站建设以及网店商品过于冗杂

    现在网站的建设也使很多人感到很无奈,首先广告问题,广告铺天盖地,而且内容很乱也不乏存在一些色情和暴力问题。商品广告过分的夸大了商品,不真实的描述,消费者收到商品后发现上当了,如果退货,邮费的问题,以及商品已被拆开造成的损失问题,由于存在这些,消费者只能接受。这也是很多人对电子商务产生恐惧,认为都是假的。有些商品的标码存在问题,买回来就穿不了。对商品的了解只存在图片和文字俩个方面,而且同一类商品就有百余种牌子,给消费者在选择上造成了许多困难。

    2.4 物流配送问题

    电子商务的交易达成之后,如何快捷、准确、安全地将货物交到消费者手中,是电子商务人员和消费者关切的问题。目前,我国的物流企业数量虽具有一定的规模,但能适应电子商务物流企业的数量还是不够完善、服务意识以及服务质量不尽如人意。好多地方,例如一些城镇、乡村、山区物流不能够达到。

    2.5 群众基础以及信誉问题

    其实电子商务适用于具有一定的专业知识的人,这些人主要以学生和知识分子为主,而在我国这些人的比例并不是很大,尤其像我们的父母等老一辈的人可以熟悉操作的人没有几个,而且传统的思想也在一定程度上制约了电子商务的发展。企业、商家、消费者的信誉更是电子商务发展的重中之重。

    3.解决存在相关问题的对策

    3.1 充分发挥政府的职能,切实加快信息基础设施的建设

    与发达国家的高投入及畅通的网络相比,我国在信息基础设施建设上显得有些不足。因此,政府首先在财政上应加强对基础设施建设的支持力度,最好做到家家有电脑、户户通网络。其次,政府应允分发挥对电子商务的组织和引导作用,通过提高上网速度、降低网费、改善联网的条件来构建能够满足社会经济发展需要的信息化基础平台,尽可能多的企业、商品、和商务活动进入电子商务领域。

    3.2 完善电子商务安全交易体系

    作为一个安全的系统,首先必须具有一个安全、可靠的通信网络,以保证交易安全、传递迅速。由于电子商务是在互联网上进行的,而互联网本身是不安全的,所以应加强互联网本身的安全建设。汽车,必须保证数据库服务器的绝对安全,防止黑客闯入网络盗取信息。最后,国家应该制定一定的法律来保护电子商务交易。

    3.3 完善电子商务平台的多样化功能传递需求信息

    互联网为网络购物的信息流通提供了很好的平台。目前,网络商店在中国的发展也有了一定的市场,网络商店里可以看到商品的分类、图片展示、资料介绍、用户评论等信息,还提供了商品的搜索功能。相对于网络购物的初期,这已经有了很大的进步,但也仍不能满足网络购物日益发展的需要。对于网络商店而言,更多的问题就是集中在商品的供应,买家经常遇到选中了商品,但被告知缺货情况,这就需要网络商家根据客户对商品的搜索,分析出购买者的商品需求信息。而对于网络消费者而言,主要看中是商家的可信度,商品的真实性。现在还存在一些情况,是商家通过请朋友来刷消费数量,有些评价具有不真实性。鉴于这些情况,国家的法律以及一些交易规定要适当的保护消费者。

    3.4 构建物流配送网络系统

    电子商务使我国物流市场具有相当大的开发潜力。不同层次的电子商务交易,根据自身的规模与资金,为了达到降低物流成本,提高竞争力的目的,企业应为自己选择合理的物流方式。就配送方式而言,目前最能提供专业化和社会化的物流配送的企业影视第三方物流企业所以政府应通过政策进行引导和鼓励发展第三方物流企业。另外,对于一些有实力发展自己的配送业务的大型企业,应加强在配送方面的投资,使之成为符合现代商品配送要求的专业化物流配送企业。总之,应尽快促使企业构建大型社会化和专业化的物流中心和配送中心,构成强有力的物流配送体系,来满足电子商务对商品配送上的需求。

    3.5 合理引导培养网络购物习惯

    网络购物毕竟是一种新生事物,对于习惯了传统购物的人们来说,接受这种方式还需要较长时间,也需要媒体的宣传和引导,培养人们进行网络购物的习惯。最初的购物过程需要用户亲身体验,需要购物网站将网络购物操作流程简单化,减少客户网络购物的难度,克服心理障碍。当网民有了网络购物的习惯后,就不容易再改变。另外,要积极引导人们用信用卡或银行卡购物的习惯。这样慢慢积累网络购物习惯会大大促进中国电子商务的迅速健康发展。

    4.结束语

    电子商务的发展史一个复杂的社会系统工程,它涉及到信息基础设施建设,交易安全、网上支付、身份认证、物流配送、人才培养、相关法律法规的制定与修改等各个方面。因此,应充分发挥企业本身的作用和政府的宏观规划与指导作用,营造有利的正常法律环境、运行环境和市场环境,促进我国电子商务的健康、平稳发展。

    展开全文
  • 工程化的思想

    千次阅读 热门讨论 2014-11-22 17:42:22
     最先了解“工程”这一词是从建设、建筑方面有所听闻,建筑工程、项目工程,水利工程、化学工程、土木工程、生物工程等的,之后接触了“软件工程”——是自己详细的学习和了解的一个工程。  工程的思想:在较短的...
                            工程化的思想


    工程这一词:

           最先了解“工程”这一词是从建设、建筑方面有所听闻,建筑工程、项目工程,水利工程、化学工程、土木工程、生物工程等的,之后接触了“软件工程”——是自己详细的学习和了解的一个工程。
           工程的思想:在 较短的时间多人合作,做出一个 功能强大、健壮性好项目事件
                               
                                                                                             

    软件工程

         在六七十年代计算机发展初期,程序设计都觉得是少数聪明人干的事。他们的智力与技能超群,编写的程序既能控制弱智的计算机,又能让别人看不懂、不会用。那个时期编程就跟捏泥巴一样随心所欲,于是他们很过分地把程序的集合称为软件,以便自己开心或伤心时再把程序捏个面目全非。人们就在这种美滋滋的感觉下热情地编程,结果产生了一堆问题:程序质量低下,错误频出,进度延误,费用剧增……。这些问题导致了“ 软件危机 ”。
    之后,一群程序员、计算机科学家与工业界人士聚集一起共商对策。通过借鉴传统工业的成功做法,他们主张通过工程化的方法开发软件来解决软件危机,并冠以“软件工程”这一术语。三十年余年来,尽管软件的一些毛病如人类的感冒一样无法根治,但软件的发展速度超过了任何传统工业,期间并未出现真真的软件危机。这的确是前人的先见之明。如今软件工程成了一门学科。
    软件工程 主要讲述软件开发的道理,基本上是软件实践者的成功经验和失败教训的总结。软件工程的观念、方法、策略和规范都是朴实无华的,平凡之人皆可领会,关键在于运用。 我们不可以把软件工程方法看成是诸葛亮的锦囊妙计─—在出了问题后才打开看看,而应该事先掌握,预料将要出现的问题,控制每个实践环节,并防患于未然。                                  

     阅读过《大道至简》同学都应该有印象,它向我们讲述两个内容:做什么和为什么做。“做什么”作为一种状态或者现象,通常是(阶段性)不变的,所以人们了解自己“在做什么”时大多只需要观察。简而言之,只需要自省,就可以了解自己的所作所为了。然而“为什么做”却相对更难于理解,因为这是“表象下的实质”,潜藏得很深:习以为常,便会根本上忘却“习”的来由。例如项目总监说要一份计划,你大概只需要拿一个以前做过的文档模板,很快就能写出一份项目计划案来。但在这个过程中,你已经忘掉了“项目计划案”真正存在的价值——写它的目的,并不是“完成工作”。这就是我们为什么需要学习“工程”的思想和眼界。          
    有谋略才会有好战术
     软件工程中的延迟注入、代码复用、分而治之、优化-折衷、合作、管理、界面等等,
                                         


    软件复用
    构造新的软件系统可以不必每次从零做起,直接使用已有的软构件,即可组装(或加以合理的修改)成新的系统。
                           
    分工合作:
          现代社会中,事物变化的如此的迅速,比如软件,自己有一个新点子单单只靠一个人去做的话,做出来了,这想法可能早已经成为过时了;但是,如果分而治之,有工程的思想来做,可能一个人要5年,分工合作给50个人,可能半年就做好了。
                            


    工程团队:
                                         

     
     总结
    我们思考的方式、思考的范围要工程化,有工程的思想。
                                             

        有人说:“如果没有流水线作业技术,根本就没有后来的如此发达的工业社会文明”。这样说其实一点也为不过分。我们也许不敢说流水线作业技术是最好的分工和协作方式,但是毫无疑问,它却是至今为止最为行之有效的一种分工和协作方式。它把无论多么复杂的制作过程进行拆分,一步一步的,直至它很简单为止。这样,流水线作业技术就使人类自身获得了较彻底的解放,一个人再也不用去掌握那么多的技能。这不仅是提高了效率,也更提高了产品的质量。而且这样被拆分后的每一个简单工作任务,可以很容易地让机器去代替完成,从而大幅提高生产效率并降低生产成本。同时,对复杂过程进行最大程度上的细分后,能有效的实施无关联步骤的并行开发活动,从而大幅缩短每件产品开发所需的时间。
        如果我们从一个更广义的视角来审视软件工程;那么软件工程其实可以被理解为,是对软件的开发活动,如何来实施流水线作业化的拆分过程。这个流水线作业化如果实施得好,那么可以说对这个软件项目的工程化,肯定也是实施得很成功的。80年代盛行的结构化分析和设计方法中的瀑布模型,它基本是遵循完全线性化的工作拆分流程,和其它的工业产品的生产流程类似,前一个“工序”没有被完成并审核通过,后一个任务流程是不会启动的。当然,后来发现,这样僵硬死板的软件工程化开发流程,其实对许多项目并不适合,尤其是那些需求从一开始很难确定的项目,或是需求变化太快的一些项目。因此,在现在的软件工程领域中,出现了许多其它的一些软件开发方法,诸如原型法、迭代法、螺旋法、演进法等等。
         试问!其它的工业产品在其完整生产周期过程中,会只有一个厂家参与某个产品生产的全过程吗?很明显,绝对不是这个样子的。我们知道除了原材料之外,中间还有许许多多的中间产品(半成品)环节。试想!如果一个房产建筑商在承建某一栋大楼时,所有的东西,所有的任务都由它一家公司来做,这可能吗?它又要去生产钢筋,又要去生产水泥,它还有能力去造楼吗?所以这就需要社会分工。而“流水线作业”,也绝对不是狭隘仅指,某个公司内部有很好的流水线作业管理就能够行得通!而是一个某行业的、甚至是全社会的合理分工和协作。
        这正是我们所需要的“工程化”思想呀!努力培养自己工程化的思想、思考问题的方式。在这个时代中,要么你引领时代,要么享受最低保障,被社会牵着走!你会怎样做出选择?我们慢慢的培养,在这之前是要有大量的编程经验和代码的积累。 

    展开全文
  • 测试管理中可能存在问题及分析

    千次阅读 2019-01-02 12:30:00
    文中前两部分简要介绍了软件测试管理及测试的范围,方法及重要性,之后对当前国内中小型软件企业在测试及测试管理中可能存在问题进 行了简单的介绍与分析,最后介绍了一些较好的解决方法。 1、软件测试及测试管理...

    摘要:本文结合实践,主要探讨了在中小型软件企业中,在测试资源不是很充足的情 况下的软件测试管理。文中前两部分简要介绍了软件测试管理及测试的范围,方法及重要性,之后对当前国内中小型软件企业在测试及测试管理中可能存在的问题进 行了简单的介绍与分析,最后介绍了一些较好的解决方法。

    1、软件测试及测试管理的范围

    1.1 测试的范围

    下面主要就测试的参与者,测试要素,测试开始时应确定的工作,测试过程简要介绍软件测试的工作范围。

    参与者

    1)用户方代表

    2)软件最终使用者

    3)软件开发人员

    4)软件测试人员

    5)高层经理的支持

    6)过程保证人员(SQA)

    测试要素

    1)正确性:数据输入,过程处理和输出的正确性(IPO)。

    2)文件完整性:文件被正确使用,恢复和存储的数据正确。

    3)授权:特殊的授权可以执行一个特殊的操作。

    4)进程追踪:当进程运行中,程序有能力证实进程在正常工作。

    5)系统运行的连续性:当有非致命性问题发生后,系统有能力继续运行关键的任务。

    6)服务水平:系统有紧急情况发生时,要求程序的输出结果不经或进行简单的处理后就可以直接使用。

    7)权限控制:防止系统被误用(意外或者有意的)。

    8)一致性:确保最终设计和用户需求完全一致。

    9)可靠性:在规定的时间内都可以正常运转。

    10)易于使用:多数人均感觉易于使用。

    11)可维护性:可以很容易的定位问题,并且进行修改。

    12)可移植性:数据或者程序易于移至到其它系统上。

    13)耦合性:系统中的组件可以很容易的联接。

    14)性能:系统资源的占用率,响应时间,并发处理。

    15) 操作性:易于操作(Operator)。

    测试开始时应确定的工作

    1)需求阶段

    --确定测试策略

    --确定收集了足够的需求

    --产生功能性的测试用例

    2)设计阶段

    --确定设计和需求之间的联系

    --确定进行了足够的设计

    --产生结构和功能的测试用例

    3) 编码阶段

    确定和设计之间的联系

    确定拥有执行的足够条件

    产生结构和功能的测试用例

    4)测试阶段

    确定设计了足够的测试用例

    测试应用系统已经完成

    关键资源已经到位

    5)安装阶段

    将测试完成的系统变为产品

    6)维护阶段

    修改和重新测试

    软件的测试过程

    7)估算:对软件工作量的估算;对软件系统的状况的评估。

    测试计划:详细的描述怎样能成功的完成测试工作,其中应包含必须的资源和实施计划。

    需求测试:在软件开发的所有阶段进行测试,测试应该尽早,在需求和设计阶段发现的缺陷修正的花费最小。

    设计测试:给测试要素打分;分析测试要素;对设计进行评审;检查修改的部分。

    编码测试:编码是否按照既有的标准进行,过程是否易于实践;是否编制了足够的文档。

    测试总结:表示出目前项目的实际状况;明确测试所做的工作,给出系统的操作性能的评价,明确什么时候系统可以进行产品化的工作。

    安装,交付测试:检验检查表和产品的正确性;使用测试标准去检验发生的问题。

    维护阶段的测试:开发一些测试用例,预先发现一些问题;对用户进行培训。

    1.2 测试管理的范围

    软件测试管理要解决的课题是如何确保软件测试技术能在软件项目在软件生命内得到顺利实施,并产生预期的效果。按照管理的对象不同,软件测试管理大致分为软件测试团队组织管理、软件测试计划管理、软件缺陷(错误)跟踪管理以及软件测试件管理四大部分。

    软件测试团队组织管理通俗的讲就是测试团队应该如何组建以及测试人员管理。在实际项目开发中,我们常常看到有些单位忽视测试团队存在的意义,当要实施测试 时,往往临时找几个程序员充当测试人员;也有些单位尽管认识到了组建测试团队的重要性,但在具体落实的时候往往安排一些毫无开发经验的行业新手去做测试工 作,这常常导致测试效率的低下,测试人员对测试工作索然无味。一个好的测试团队首先要有好的带头人,他必须具有极为丰富的开发经验,对开发过程中常见的缺 陷或错误了然于胸,此外,他还应具有亲和力和人格魅力。其次,测试团队还应有具备一技之长的成员,如对某些自动化测试工具运用娴熟或能轻而易举地编写自动 化测试脚本。另外,测试团队还应有兼职成员。如验证测试实施过程中,同行评审是最常使用的一种形式,这些同行专家就属于兼职测试团队成员的范畴。测试团队 里往往不乏缺乏开发经验软件新手,这部分人可以安排去从事交付验证或黑盒测试之类的工作。

    软件测试计划管理通俗地讲就是安排好测试流程。这部分内容具体涵盖软件测试策划、软件测试技术剪裁、测试进度管理、成本管理等几个部分。其中测试策划工作 主要是指具体测试活动实施之前做好策划工作,如起草测试大纲以及测试计划;软件测试技术剪裁工作主要是指测试团队应根据软件项目的具体实际剪裁出所要实施 的测试技术;测试进度管理工作主要是指排出各项测试的时间进度及人员安排,如有变动时应做相应调整;测试成本管理工作的内容即开列出测试活动中会涉及到的 资源需求。

    软件缺陷(错误)跟踪管理通俗地讲就是确保发现的缺陷(错误)已经被开发团队纠正或处理过并且没有引入新的缺陷(错误)。具体来讲,当测试团队通过各种途 径发现了文档或代码中的缺陷或错误以后,并不是交一份测试报告就草草了事,而是在递交报告以后继续督促开发团队及时关闭已知缺陷或错误(当然,如有必要应 对这些缺陷、错误做严重程度排序,以便开发团队能视轻重缓急安排处理顺序)。当开发团队关闭了测试报告中的缺陷(错误)以后,测试团队还需验证开发团队在 关闭过程中有没有引入新的错误。通常,这个过程称为回归测试。回归测试如发现问题,继续报开发团组,按上述流程循环,直至回归测试最终通过。

    软件测试件管理通俗地讲就是指努力建设好测试团队的财富库并对测试团队成员进行技能培训以帮助他们能使用好这个财富库。这里,财富库是指软件测试件。测试 件(Testware,指测试工作形成的产品)是一个不常见到的词汇,它包括是测试团队在长期实践过程中逐步积累起来的经验教训、测试技巧、测试工具、规 格文档以及一些经过少量修改能推广至通用的测试脚本程序。测试件管理工作做得越好,测试团队在实际测试过程中就能越少走弯路,测试团队内部的知识交流和传 递就越充分,测试脚本或规格文档的重复开发工作也就能被有效地避免。软件测试件管理工作包括两部分,一是建设,另一个是培训。建设工作大抵是收集各类测试 外文档、测试工具、测试脚本,也包括收集整理测试人员的会议发言、总结报告、技术心得等等。培训工作大抵是通过技术讲座、正式或非正式团队会议、印发学习 资料等形式进行。

    1.3 软件测试管理内容

    具体的测试管理内容有:

    1)测试方案管理:单元测试、集成测试和产品测试的测试计划的录入、修改、删除、查询和打印。

    2)测试案例管理

    测试案例的增、删、改、拷贝和查询;

    测试案例测试情况的管理,如测试状态包括:未测试、测试中、已测试;

    测试结果分为:通过、未实现、存在问题等;

    测试案例输人、编号和归档。

    3)测试流程管理:测试进度管理;测试流程标识;测试日志及状态报告。

    4)问题报告管理:问题报告处理流程(问题报告、整改报告)、实现问题报告与测试案例的关联。

    5)测试报告管理:生成单元测试、集成测试和产品测试的测试报告。

    除了以上这些,在侧试管理过程中还应对人员和环境资源进行管理。

    3、测试及测试管理中的问题及分析

    通过以上的简单总结与分析,可以看到软件测试及测试管理的重要性,及其复杂、广泛的组织管理工作,所以在实施起来,难免与理论有些出入。另外,国内的软件 企业大多起步晚,技术基础薄弱,应用与管理经验缺乏,在测试上更是如此。于是国内的一些中小型的软件企业,在软件测试方面存在诸多问题,不仅与理论要求相 差甚远,与实际的应用需求也相差很多。下面将简要介绍与分析当前国内中小型软件企业在测试及测试管理中存在的问题和问题原因,并在之后提出一些解决办法。

    3.1 软件本身的复杂性与企业自身的不足

    这里复杂性包括软件用户需求的复杂与难确定性,软件开发过程的组织管理的难控制性等,使得软件开发过程必然会存在诸多问题,开发出的产品也必然存在一些缺 陷与不足。而由于生产与管理经验的不足,缺乏高效的开发与测试团队,往往是开发人员又是测试人员,或测试人员质量管理;缺乏有效的测试技术,代码走查室最 常用的方法;测试开始较晚,往往在开发完成之后;对用户反馈信息缺乏整理总结等;使得不仅难以控制产品的缺陷数量,而且对于缺陷的定位与修补也很难到位。

    3.2 测试的特性

    3.2.1 测试是不完全的(测试不完全)

    由于软件需求的不完整性、软件逻辑路径的组合性、输入数据的大量性及结果多样性等因素,哪怕是一个极其简单的程序,要想穷尽所有逻辑路径,所有输入数据和验证所有结果是非常困难的一件事情。

    3.2.2 测试具有免疫性(软件缺陷免疫性)

    软件缺陷与病毒一样具有可怕的“免疫性”,测试人员对其采用的测试越多,其免疫能力就越强,寻找更多软件缺陷就更加困难。在软件测试中采用单一的方法不能 高效和完全的针对所有软件缺陷,因此软件测试必须采用不同的测试方式和测试数据,应该尽可能的多采用多种途径进行测试。

    3.2.3 测试是“泛型概念”(全程测试)

    如果单纯的只将程序设计阶段后的阶段称之为软件测试的话,需求阶段和设计阶段的缺陷产生的放大效应会加大。这非常不利于保证软件质量。需求缺陷、设计缺陷 也是软件缺陷,记住“软件缺陷具有生育能力”。软件测试应该跨越整个软件开发流程。需求验证(自检)和设计验证(自检)也可以算作软件测试(建议称为:需 求测试和设计测试)的一种。软件测试应该是一个泛型概念,涵盖整个软件生命周期,这样才能确保周期的每个阶段禁得起考验。同时测试本身也需要有第三者进行 评估(信息系统审计和软件工程监理),即测试本身也应当被测试,从而确保测试自身的可靠性和高效性。

    3.2.4 软件缺陷具有空间聚集性(80-20 原则)

    80%的软件缺陷常常生存在软件20%的空间里。这个原则告诉我们,如果你想使软件测试有效地话,记住常常光临其高危多发“地段”。在那里发现软件缺陷的 可能性会大的多。这一原则对于软件测试人员提高测试效率及缺陷发现率有着重大的意义。聪明的测试人员会根据这个原则很快找出较多的缺陷而愚蠢的测试人员却 仍在漫无目的地到处搜寻。

    80-20 原则的另外一种情况是,我们在系统分析、系统设计、系统实现阶段的复审,测试工作中能够发现和避免80%的软件缺陷,此后的系统测试能够帮助我们找出剩余 缺陷中的80%,最后的5%的软件缺陷可能只有在系统交付使用后用户经过大范围、长时间使用后才会曝露出来。因为软件测试只能够保证尽可能多地发现软件缺 陷,却无法保证能够发现所有的软件缺陷。

    3.2.5 为效益而测试

    为什么我们要实施软件测试,是为了提高项目的质量效益最终以提高项目的总体效益。为此我们不难得出我们在实施软件测试应该掌握的度。软件测试应该在软件测 试成本和软件质量效益两者间找到一个平衡点。这个平衡点就是我们在实施软件测试时应该遵守的度。单方面的追求都必然损害软件测试存在的价值和意义。一般说 来,在软件测试中我们应该尽量地保持软件测试简单性,切勿将软件测试过度复杂化。

    3.2.6 缺陷的必然性

    软件测试中,由于错误的关联性,并不是所有的软件缺陷都能够得以修复。某些软件缺陷虽然能够得以修复但在修复的过程中我们会难免引入新的软件缺陷。很多软 件缺陷之间是相互矛盾的,一个矛盾的消失必然会引发另外一个矛盾的产生。比如我们在解决通用性的缺陷后往往会带来执行效率上的缺陷。更何况在缺陷的修复过 程中,我们常常还会受时间、成本等方面的限制因此无法有效、完整地修复所有的软件缺陷。因此评估软件缺陷的重要度、影响范围,选择一个折中的方案或是从非 软件的因素(比如提升硬件性能)考虑软件缺陷成为我们在面对软件缺陷时一个必须直面的事实。

    3.3 测试组织管理不专业

    1、测试人员不独立于开发者,测试人员独立于开发者的程度将影响测试结果。

    人很容易用自己已经非常仔细地做过测试来欺骗自己,开发人员做测试容易受到个人的习惯性想法的影响,程序中可能包含由于程序员对问题的叙述或说明的误解而 产生的错误。如果是这种情况,当开发人员测试自己的程序时,往往还会带着同样的误解致使问题难以发现。开发和测试是两种不同的活动,开发人员对自己的程序 进行一定的审查、调试是必要的,但是一般情况下还需要另外的专业测试者进行测试。不过,由于有的企业中,人力有限,或者认为没有足够的资源或理由支持一支 测试队伍,有时不得不由开发人员测试;那么,开发者对自己的程序的测试需要注意许多问题,或者应由另外的开发者对自己的程序进行测试。

    2、测试时间安排往往计划不周,测试计划有时受制于开发计划。

    3、测试等级以及在那个等级上的测试时间往往选择不当。

    4、测试辅助设备和测试工具将影响开发者的测试效率及测试彻底性。

    5、测试策略文档的普遍缺失。

    6、测试范围的确认经常被其他文档或经验所取代。

    7、测试任务应该像BUG 一样有明确的分级,不同类型的测试应该有相应的测试用例集合与之对应。

    8、关键路径概念在测试规划时容易被项目经理弱化。

    9、测试用例不科学,测试用例在实际中没有起多大作用;在实际测试时根本没有按用例执行;往往测试执行后没有把新的用例补充到用例库中。

    3.4 测试人员的影响

    1)测试人员入门容易学习困难,无章可循;人员增加可能有重复工作。

    2)测试人员对现实应用与需求的理解可能有偏差。

    3)测试人员可能对测试存在一些不正确的看法和错误的态度,如下:

    (1) 认为测试工作不如设计和编码那样容易取得进展难以给测试人员某种成就感;

    (2) 以发现软件错误为目标的测试是非建设性的,甚至是破坏性的,测试中发现错位是对责任者工作的一种否定;

    (3) 测试工作枯燥无味,不能引起人们的兴趣;

    (4) 测试工作是艰苦而细致的工作;

    (5) 对自己编写的程序盲目自信,在发现错误后,顾虑别人对自己的开发能力的看法。

    4)提交以后对用户反馈信息缺乏及对缺乏足够的重视,对于有大量用户有持久生命力的软件产品(如Microsoft Office),用户反馈信息较全面,便于开发和测试人员进行软件的修补和维护;而一些中小软件企业的产品却远远无法和Microsoft Office 相比;于是可能缺乏足够的用户反馈信息,或没有足够的时间或人力处理用户反馈信息。

    5)开发及测试人员工作习惯,编程习惯,测试习惯等也影响测试的效果;由于测试人员短期的学习与培训,一般能提高的只是方法和技巧;而其自身能力与习惯可能的负面影响却一时难以消除。

    4、测试管理问题的解决

    4.1 建立软件测试管理体系

    建立软件测试管理体系的主要目的是确保软件测试在软件质量保证中发挥应有的关键作用,包括以下工作:

    软件产品的监视和测量:对软件产品的特性进行监视和测量,主要依据软件需求规格说明书,验证产品是否满足要求。所开发的软件产品是否可以交付,要预先设定质量指标,并进行测试,只有符合预先设定的指标,才可以交付。

    对不符合要求的产品的识别和控制:对于软件测试中发现的软件缺陷,要认真记录它们的属性和处理措施,并进行跟踪,直至最终解决。在排除软件缺陷之后,要再次进行验证。

    产品设计和开发的验证:通过设计测试用例对需求分析、软件设计、程序代码进行验证,确保程序代码与软件设计说明书的一致,以及软件设计说明书与需求规格说明书的一致。对于验证中发现的不合格现象,同样要认真记录和处理,并跟踪解决。解决之后,也要再次进行验证。

    软件过程的监视和测量:从软件测试中可以获取大量关于软件过程及其结果的数据和信息,它们可用于判断这些过程的有效性,为软件过程的正常运行和持续改进提供决策依据。

    一般应用过程方法和系统方法来建立软件测试管理体系,也就是把测试管理作为一个系统,对组成这个系统的各个过程加以识别和管理,以实现设定的系统目标。同 时要使这些过程协同作用、互相促进,从而使它们的总体作用大于各过程作用之和。其主要目标是在设定的条件限制下,尽可能发现和排除软件缺陷。测试系统主要 由下面6 个相互关联、相互作用的过程组成:测试规划、测试设计、测试实施、配置管理、资源管理和测试管理;确定这些过程的顺序和相互作用,前一过程的输出是后一过 程的输入。其中,配置管理和资源管理是这些过程的支持性过程,测试管理则对其他测试过程进行监视、测试和管理;确定这些过程所需的准则和方法,一般应制订 这些过程形成文件的程序,以及监视、测量和控制的准则和方法;确保可以获得必要的资源和信息,以支持这些过程的运行和对它们的监测;监视、测量和分析这些 过程;实施必要的改进措施。

    4.2 建立配置管理系统,规范项目管理流程

    建立配置管理系统 CVS,CVS 的全称是Current Version Control。在软件质量体系的诸多支持活动中,配置管理系统处在支持活动的中心位置,它有机地把其它支持活动结合起来,形成一个整体,相互促进,相互 影响,有力地保证了质量体系的实施。建立公司配置管理系统很容易得到公司领导层的支持,几乎没人反对。更重要的是建立配置管理系统后测试人员的工作有了系 统保证,测试工作的“矿藏资源”有了明确的位置,可以主动积极开展测试工作。

    4.3 测试过程分阶段执行

    将测试过程分成几个阶段执行,即:代码审查、单元测试、集成测试、确认测试和系统测试。

    单元测试是针对软件设计的最小单位-模块进行正确性检验的测试工作,其目的在于发现各模块内部可能存在的各种差错。在单元测试之后,需要按照设计时做出的 结构图,将它们联结起来,进行集成测试。是检验所开发的软件是否按用户要求运行。确认测试应检查软件能否按合同要求进行工作,即是否满足软件需求说明书中 的确认标准。软件开发完成后,还要与系统中其他部分配套运行,进行系统测试,包括恢复测试、安全测试、强度测试和性能测试等。

    4.4 做好过程管理

    过程管理须做好以下工作:分阶段设立里程碑,按里程碑计划工作和总结工作;加强审核,测试过程的中间结果要进行充分的审核;注重风险管理和规避风险,任何决定和过程都存在风险,尤其是质量好坏的风险,通过审核管理风险。

    4.5 制定成功的测试管理计划及测试计划

    一个成功的测试开始于一个全面的测试管理计划。因此在每次测试之前应做好详细的测试管理计划:

    首先,应该了解被测对象的基本信息,选择测试的标准级别,明确测试管理计划标识和测试管理项。在定义了被测对象的测试管理目标、范围后必须确定测试管理所 使用的方法,即提供技术性的Ali 试管理策略和测试管理过程。在测试管理计划中管理者应该全面了解被测试对象的系统方法、语言特征、结构特点、操作方法和特殊需求等,以便确定必要的侧试环 境,包括测试硬件/软件及测试环境的建立等等。而且.在测试管理计划中还应该制订一份详细的进度计划如:侧试管理的开始段、中间段、结束段及测试管理过程 每个部分的负责人等。由于任何一个软件不可能没有缺陷、系统运行时不出现故障,所以在测试管理计划中还必须考虑到一些意外情况、也就是说,当问题发生时应 如何处理。因为测试管理具有一定难度,所以对测试管理者应进行必要的测试设计、工具、环境等的培训。最后,还必须确定认可和审议测试管理计划的负责人员。

    还需要一个成功的测试计划,专业的测试必须以一个好的测试计划作 为基础。尽管测试的每一个步骤都是独立的,但是必定要有一个起到框架结构作用的测试计划。测试的计划应该作为测试的起始步骤和重要环节。一个测试计划应包 括:产品基本情况调研、测试需求说明、测试策略和记录、测试资源配置、计划表、问题跟踪报告、测试计划的评审、结果等等。

    4.6 测试人员及早介入

    测试人员应从软件生命周期的需求阶段就开始介入,这样可以在这些需求基础上生成一份测试计划,并将测试用例对应于需求。这样便于提高测试用例的有效性和可用性,并且方便测试用例的设计和管理。

    4.7 测试文件的使用

    在软件的需求分析阶段,就开始测试文件的编制工作,各种测试文件的编写应按一定的格式进行。测试文件的重要性表现在以下几个方面:

    a、验证需求的正确性:测试文件中规定了用以验证软件需求的测试条件,研究这些测试条件对弄清用户需求的意图是十分有益的。

    b、检验测试资源:测试计划不仅要用文件的形式把测试过程规定下来,还应说明测试工作必不可少的资源,进而检验这些资源是否可以得到,即它的可用性如何。如果某个测试计划已经编写出来,但所需资源仍未落实,那就必须及早解决。

    c、明确任务的风险:有了测试计划,就可以弄清楚测试可以做什么,不能做什么。了解测试任务的风险有助于对潜伏的可能出现的问题事先作好思想上和物质上的准备。

    d、生成测试用例:测试用例的好坏决定着测试工作的效率,选择合适的测试用例是作好测试工作的关键。在测试文件编制过程中,按规定的要求精心设计测试用例有重要的意义。

    e、评价测试结果:测试文件包括测试用例,即若干测试数据及对应的预期测试结果。完成测试后,将测试结果与预期的结果进行比较,便可对已进行的测试提出评价意见。

    f、再测试:测试文件规定的和说明的内容对维护阶段由于各种原因的需求进行再测试时,是非常有用的。

    g、决定测试的有效性:完成测试后,把测试结果写入文件,这对分析测试的有效性,甚至整个软件的可用性提供了依据。同时还可以证实有关方面的结论。

    4.8 测试团体的建设与测试人员的学习及培训

    要注重建立一支高效的测试团队,不利用各种方法对测试人员进行培训。测试人员须加强自身学习,测试人员必须和程序员、用户、市场人员、技术作者以及任何的可能为实现更好测试提供线索的人进行交流。充分利用网络,及时地不断地学习,充分利用软件测试的技巧等。

    4.9 经济的测试

    作为软件开发企业来说,投入人力,资金搞软件测试的最终目的还是离不开经济效益。而对与测试项目的管理也不能离开这个大前提。软件测试的经济效益主要来自 以下两个方面。一是满足用户需求,提高产品的竞争力,最终提高产品的销售量。二是尽早发现缺陷,降低售后服务成本。而软件测试的最终目的就是使它带来的经 济效益最大化。

    有时候用户应用机率越大的那些软件业务功能,应该越少有差错;对某些关键功能,应该不允许有差错;经常不用的,甚至基本不用的那些软件业务功能,则可以容忍它有差错,甚至有较多的差错。

    5、总结

    软件测试工作在软件开发过程中占有重要地位,在各种规模的软件的开发中,测试工作都必不可少。关于软件测试的研究与技术探讨可以说都有成熟的成果,但是在 实际应用中,由于软件开发的时间的影响或软件项目中人员的不足等等各种因素的影响,使得在国内的中小型软件企业中软件测试工作存在一些问题,本文对这些问 题进行了总结和分析,并提出了一些解决方法。

    展开全文
  • OO思想

    千次阅读 2007-07-08 23:00:00
    很多人觉得这是Java复杂导致,其实根本原因在于:我们原先掌握的关于软件知识(OO方面)不是太贫乏就是不恰当,存在认识上和方法上的误区。软件的生命性 软件是有生命的,这可能是老调重弹了,但是因为它事关分层架构
  • 生成式对抗网络的基本原理 ...本节将从初始版本的GAN出发,通过学习GAN的原理,对比GAN与其他几种生成式模型的异同,以及分析原始GAN中存在问题,以获得对GAN的深度理解。 知识点 生成模型、自编码器(AutoEncod
  • 面向对象思想总结

    万次阅读 多人点赞 2018-07-23 17:31:53
    面向对象和面向过程的思想有着本质上的区别,作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应该分析这个问题里面有哪些类和对象,这是...
  • LeNet论文的翻译与CNN三大核心思想的解读

    万次阅读 多人点赞 2017-05-01 23:20:34
    LeNet论文的翻译与CNN三大核心思想的解读
  • 浅析android系统设计中的回调思想

    千次阅读 2015-05-22 20:06:51
    比如activity的生命周期,fragment的生命周期,皆是回调函数实现的,android中的事件处理机制其一就是回调,线程方面的异步任务、loader、hanlder等都是基于回调的,等等。  可见android的其一根本思想就是回调,...
  • 思想的大脑,没灵性的AI

    千次阅读 热门讨论 2017-01-05 21:26:52
    思想的大脑,没灵性的AI人工智能、AI、深度学习、智能机器人,最近几年,这些老的概念和技术,又重新被炒热了,都快胡了。技术方面,只懂一点皮毛(不是谦虚),打算春节过后开始认真调研。抛开技术,谈谈我的一点...
  • 第二讲 算法思想的发展历程

    千次阅读 2014-10-19 17:20:41
    随着现代信息技术飞速发展,算法在科学技术、社会发展中发挥着越来越大的作用,并且日益融入社会生活的许多方面,算法思想已成为现代人应具备的一种数学素养。希望通过本专题内容的学习,理解算法思想的特点,了解...
  • MVC框架设计思想与设计理念

    千次阅读 2011-08-18 14:10:07
    尽管MVC早已不是什么新鲜话题了,但是从近些年一些优秀MVC框架的设计上...本文将对传统MVC架构中的一些弊病进行解读,了解一些优秀MVC框架是如何化解这些问题的,揭示其中所折射出的设计思想与设计理念。 MVC回顾
  • 敏捷开发的4个中心思想

    千次阅读 2013-06-10 13:59:51
    敏捷开发的4个中心思想 如下: 1. Individuals and interactions over processes and tools 2. Working software over comprehensive documentation 3. Customer collaboration over contract negotiation 4. ...
  • 你知道几种编程思想

    千次阅读 2017-03-10 11:49:41
    四大编程思想简述 1)POP--面向过程编程(Process-oriented programming ): 面向过程编程是以功能为中心来进行思考和...面向过程强调的是功能(加工),数据仅仅作为输入和输出存在。这种过程化的思想是一种很朴素和
  • 面向对象编程思想

    万次阅读 2014-06-24 21:18:46
    它是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们...
  • 网络技术与思想漫谈

    千次阅读 2013-04-16 18:31:28
    总之,封装这个设计实在是太好了,它几乎可以解决网络上的任何问题,基于这种思想,越来越多的协议被设计出来,起初是GRE,VPN,后来有了MPLS,LISP等,它们要么解决安全问题,要么解决兼容问题,要么解决性能问题...
  • 华为在科研上有一些实力,所以我们之间的合作将推动共同的发展,不仅仅局限在电源的合作上,还会延伸到其他方面。 八年来,华为走过了艰难的奋斗历程,已渐渐成熟,成为一个高科技企业。我们现有员...
  • 小程聊微服务--微服务思想

    千次阅读 2017-01-20 16:16:39
    在分布式系统中有三方面需要彼此权衡:一致性、可用性和分区容忍性。这个定理告之我们最多只能能保证三个中的两个。CA系统在分布式系统中根本不存在。 六、阶段总结: 在第一部分我们重点介绍了涉及...
  • 编程思想的理解(POP,OOP,SOA,AOP)

    万次阅读 多人点赞 2011-11-29 09:15:40
    1)POP--面向过程编程(Process-oriented programming ): 面向过程编程是以功能为中心来进行思考和组织的一种编程方法,它强调的是系统的数据被加工和处理...这种过程化的思想是一种很朴素和普遍的思想和方法,人类很多
  • 思想和语言的关系

    千次阅读 2011-11-01 14:44:46
    思维和语言的关系问题,至今有两个针锋相对的意见。 一种意见认为,语言表达思想,语言是思想输出的途径,就好比电脑屏幕和打印机输出电脑软件的运算结果一样; 另一种意见认为,语言是思维的工具,离开语言的思维...
  • 转自:机器学习十大算法的核心思想、工作原理、适用 情况及优缺点 机器学习十大算法的每个算法的核心思想、工作原理、适用 情况及优缺点 一、C4.5 算法: ID3 算法是以信息论为基础,以信息熵和信息...
  • 73.JAVA编程思想——JDBC

    万次阅读 2016-05-08 21:29:21
    73.JAVA编程思想——JDBC 据估算,将近一半的软件开发都要涉及客户(机)/服务器方面的操作。Java 为自己保证的一项出色能力就是构建与平台无关的客户机/服务器数据库应用。在Java1.1 中,这一保证通过Java ...
  • UNIX一切皆文件的思想正确吗

    千次阅读 2013-10-04 09:17:50
     当一切在树型模型下都运行得很美好的时候(包括经济,政治,公司经营等),人们发现了原来更本质的思想是互联的思想,于是当链接成了一切的时候,树型模型就不再适用了。今天,我们处在一个复杂网络的时代,复杂网络...
  • MySQL相关问题整理

    万次阅读 多人点赞 2020-04-07 11:47:29
    备注:针对基本问题做一些基本的总结,不是详细解答! 1.事务的基本要素 2.事务隔离级别(必考) 3.如何解决事务的并发问题(脏读,幻读)(必考) 4.MVCC多版本并发控制(必考) 5.为什么选择B+树作为索引结构...
  • 栈和队列的思想应用

    千次阅读 2013-10-15 16:39:46
     在日常生活中,很多问题可以归结到栈和队列的应用问题。例如,排队购物的现象就可以看做是队列。在计算机学科的应用中,栈和队列的应用就更多了,例如,编译系统、消息队列等。  栈的应用  栈具有相当广泛...
  • 一、基本思想   主成分分析 就是将多项指标转化为少数几项综合指标,用综合指标来解释多变量的方差- 协方差结构。综合指标即为主成分。所得出的少数几个主成分,要尽可能多地保留原始变量的信息,且彼此不相关。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 271,950
精华内容 108,780
关键字:

思想方面存在的问题