精华内容
下载资源
问答
  • 确定 为发展对象征求群众意见会议记录 党组织名称: 时 间: 地 点: 主 持 人: 记 录 人: 参加人数: 参会人员姓名:
  • 关于 之(关系) 的证明材料 姓 名 性 别 出生年月 文化程度 政治面貌 现任职务 本人简历
  • 发展对象政审材料考察意见[汇编].pdf
  • 发展对象送审材料汇总表.doc
  • 发展对象证明材料怎么写.doc
  • 等保2.0.等保对象知多少

    千次阅读 2020-08-04 15:00:27
    在等保2.0的过程中,会有很多个对象,这些对象分别指的是什么?在测评过程中如何进行选择?本文将结合标准对这两个问题进行讲解。

    简介

    在等保2.0的过程中,会有很多个对象,这些对象分别指的是什么?在测评过程中如何进行选择?本文将从等保定级的角度来谈谈等级保护对象,测评对象留到另外一篇来讲。

    等级保护对象

    在GB/T 22240-2020 《 信息安全技术 网络安全等级保护定级指南》2020年刚发布的定级指南中提到了等级保护对象,在这里我们可以认为:
    等 级 保 护 对 象 = 定 级 对 象 等级保护对象=定级对象 =
    在标准GB/T 22240-2020 (p1)中给出的等级保护对象(target of classified protection)定义为:“包括信息系统、通信网络设施和数据资源”。
    拆开看就是三个对象:

    1. 信息系统
    2. 通信网络设施
    3. 数据资源

    这三个都是网络安全等级保护工作直接作用的对象,后面两个是等保1.0(原标准定义:信息安全等级保护工作直接作用的具体的信息和信息系统。)中没有规定的。

    信息系统

    信息系统(Information system),是由计算机硬件、网络和通信设备、计算机软件、信息资源、信息用户和规章制度组成的以处理信息流为目的的人机一体化系统(百度百科的定义)。常见的信息系统如:OA,客户关系管理系统,进销存管理系统等(详细列表可参考各计算机专业本科毕业设计题目),还有特定行业如医院的HIS/LIS/PACS等;当然也保护融合了新技术新应用的各种工控、云计算、物联网系统。
    信息系统是在GB/T 22240-2008中就一直存在的等保对象,这个标准是08年发布的,10多年过去了,现在的移动互联、大数据、云计算、物联网和工控系统当做信息系统来进行等级保护明显不太合适。
    例如:大数据、云计算平台中包含大量的虚拟化设备,这些设备和传统设备的安全设置、要求都有很大不同。

    通信网络设施

    通信网络设施是指为信息流通、网络运行等起基础支撑作用的网络设备设施,典型对象包括电信网、广播电视传输网,以及行业或单位的跨省专用网(骨干部分)等。
    通信网络设施作为等保对象虽然是新版标准中的修订部分,但是在2003年《国家信息化领导小组关于加强信息安全保障工作的意见》(中办发[2003] 27号)早就明确指出,“要重点保护基础信息网络和关系国家安全、经济命脉、社会稳定等方面的重要信息系统,抓紧建立信息安全等级保护制度”。在中级测评师复习资料里指出:随着信息化的发展进程,通信网络设施也由最初的电信传输网和互联网基础信息网络,逐步扩展到广播电视传输网,以及跨省的行业专网或业务专网。
    除了通信网络设施外,我觉得这里的意思应该是鼓励将通用的基础网络设施部分单独抽取出来,单独定级,这样做是以模块化的思想来处理我们要保护的这些对象,举个栗子:
    机房有若干个信息系统,有三级,有二级,那么要满足等保要求,要么整个机房物理环境都满足三级,要么就是机房进行了分区,二级信息系统放一个区域、三级系统放一个区域。如果机房里面有10个信息系统要做等保,就要对机房部署的机房环境,网络边界设备等做10次测评(当然如果10个信息系统同时做另说)。明显,这样不便于管理,工作量也大,这个时候就可以考虑单独把机房及内部的网络设备都单独拿出来,按运行的信息系统等保级别的就高原则做等保测评。也可以这么想,把机房做了三级等保之后,将来上面再加别的系统,或者二级系统变更为三级系统,物理环境、安全边界就不需要考虑这么多了。当然,如果信息系统数量不多或机房规模不大的情况下,就无需单独切分为等保对象。

    数据资源

    GB/T 22240-2008中的等保对象有提到信息,信息广义上可以泛指声音、图像、视频、记录等结构化及其他非结构化数据,香农(Shannon,1948)认为“信息是用来消除随机不确定性的东西”。在等保1.0阶段,信息主要还是指信息系统中涉及到的数据,如:业务信息、配置信息、管理信息、鉴别信息等。
    中级测评资料中指出:随着我国由工业化向信息化的转型,以开发和利用信息资源为目的的经济活动迅速扩大,逐步出现了面向大数据的应用需求。大数据具有体量巨大、类型繁多、处理速度快等特质,决定了大数据难以采用传统数据结构进行有效处理,需要引入新的分布式体系结构和计算平台,如云计算平合进行存储、操作和分析,而这些技术和平台的引入则进一步推动了数据资源、数据处理平合和网络运营者的解耦,即大数据资源、大数据应用/工具和大数据基础平合可能从属于不同的网络运营者,所有权和安全责任的分离导致大数据逐步成为独立的等级保护对象。
    而数据资源的典型例子是大数据,至于什么时候数据资源单独作为定级对象,什么时候整合在系统或平台中,下一节来讲解。

    定级对象的划分

    上面说的是等级保护对象,既然某对象要进行等级保护,那当然要先定级,这个时候就变成了定级对象。对于测评对象的主管单位而言,定级对象划分越粗越好,什么网站群系统,内含10多个网站。这样只算一个定级对象,出一份钱,解决多个网站的问题。这也是为什么要先写定级报告,然后由专家评审(新版标准规定),定级对象划分以及定级是否准确。下面以传统信息系统为例,看看如何来划分定级对象(公控、物联网、移动互联等系统可以参考中级测评师复习材料)。
    一共看三点:

    1. 具有确定的主要安全责任主体;
      这里的安全责任主体可以窄义理解为信息系统的所有/运营者,具体还是要看网络安全法中的规定(标准里面也有,从建设或运维角度来看),这里不展开,通常包括企业机关和事业单位等法人,以及不具备法人资格的社会团体等其他组织。
      这里要额外说明一下,很多单位都有这样的错误思想:我的网站放在某云平台上,安全责任不属于我管,应该是由云平台负责。客观来说,在某云平台上的网站,云平台仅负责安全物理环境、安全网络边界等一部分内容,出了安全问题还是由网站的所有/运营者负责。
    2. 承载相对独立的业务应用;
      2.1. 相对独立的业务应用是指该业务应用与外部业务关联度低,交互较少。如果两个业务应用紧密耦合,数据交互频繁,就应该考虑是否应该合并为一个定级对象。
      这里意思是两个系统如何界定是作为一个定级对象还是两个定级对象。例如:
      某医院有门诊系统和住院系统,如果两个系统放在不同的服务器,或者使用不同的数据库,甚至连开发单位也不一样,二者没有或者只有很少的数据交互,那么就要分开作为两个定级对象;
      如果两个系统用的同一套硬件、数据库,数据也有交互,可以用一卡通在门诊开药,医生可以预定床位,住院部可以看到门诊记录等,这个时候可以把两个系统看做是整个HIS的两个大模块,整个HIS作为一个定级对象进行处理。
      再例如之前提到的网站群的例子,假如某高校有后勤网站、二级学院网站、计财处网站。这个时候要考虑划分的粒度,不能全部都作为某高校网站群作为对象,也无需每一个网站都分开,通常可以把二级学院的网站,部门的网站等二级域名的放到一块:
      www.xxx.edu.cn;jsj.xxx.edu.cn;hqgl.xxx.edu.cn
      但是承担特殊业务的一些网站,如科研管理系统、财务报销系统要单独拿出来做为定级对象。
      2.2. 该业务应用不强制要求完全覆盖从客户终端到数据库后台的整个业务流程,也可以是其中一部分。《银行业定级指南》中就明确指出,“部署有应用服务器或者数据库服务器的前置系统”可以作为应用系统类定级对象独立定级。
      这里意思是信息系统对象什么时候可以拆分为多个定级对象,例如铁路的自动售票终端设备,按理说是属于售票管理系统,都是连接相同的数据,但是这些终端设备部署有自己的应用,可以单独拿出来作为定级对象。
    3. 包含相互关联的多个资源。
      这块还没想到具体的解释,欢迎各位评论区补充讨论。

    最后补充一下数据资源对象的划分标准:
    当安全责任主体相同时,大数据、大数据平台/系统宜作为一个整体对象定级;当安全责任主体不同时,大数据应独立定级。

    小结

    借用中级测评材料一小段总结一下:等保2.0中,等级保护对象定义为:“网络安全等级保护工作直接作用的对象,包括信息系统、通信网络设施和数据资源”。其中,通信网络设施是指为信息流通、网络运行等起基础支撑作用的网络设备设施,典型对象包括电信网、广播电视传输网,以及行业或单位的跨省专用网(骨干部分)等;信息系统是指由计算机或其他信息终端及相关设备组成的,按照一定的应用目标和规则对信息进行采集、加工、存储、传输、检索等处理的系统,典型对象即包括办公自动化系统、邮件系统等传统计算机信息系统,也包括工业控制系统、云计算平台、物联网以及使用移动互联技术的信息系统等融合了新技术新应用的新型等级保护对象;数据资源的典型例子是大数据。

    展开全文
  • 最近我在整理一些资料,现在发出一些,希望大家多提意见,多多扶持啊哈 ====================================== 面向对象的PHP开发模式(待完善中。。。) ====================================== 一、环境 服务器...
  • 什么是面向对象编程

    万次阅读 多人点赞 2020-01-12 18:57:20
    本文关键字:面向对象、面向过程、面向过程编程语言、面向对象编程语言。说到编程,对于初学者来讲,可能第一想到的就是敲键盘,写代码,做游戏,甚至于会联想到软件破解、网络攻防。另一方面,在学了一些编程的相关...

    写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成,愿将昔日所获与大家交流一二,希望对学习路上的你有所助益。同时,博主也想通过此次尝试打造一个完善的技术图书馆,任何与文章技术点有关的异常、错误、注意事项均会在末尾列出,欢迎大家通过各种方式提供素材。

    • 对于文章中出现的任何错误请大家批评指出,一定及时修改。
    • 有任何想要讨论和学习的问题可联系我:zhuyc@vip.163.com。
    • 发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。

    什么是面向对象编程

    本文关键字:面向对象、面向过程、面向过程编程语言、面向对象编程语言

    一、浅说编程

    说到编程,对于初学者来讲,可能第一想到的就是敲键盘,写代码,做游戏,甚至于会联想到软件破解、网络攻防。另一方面,在学了一些编程的相关知识以后,一个最明显的感觉就是:这东西有什么用?为什么我明明听懂了却还是解决不了实际的问题,甚至于完成不了相应的练习?这其中最主要的原因是什么呢?除了埋怨出的题目跨度太大以外,我们也应该好好的反思一下。
    对于以上的问题,最主要的原因就是对于编程了解的不够深入。这个深入指的不是我们要去了解他的发展历史以及底层原理,而指的是我们要对编程有一个明确的定位,我们现在学的内容是什么,又能用来做什么?

    • 编程与软件开发

    很多同学在刚开始都会把和计算机相关的所有内容都和编程,敲代码,程序员联想到一起,这其中甚至包括:做系统、配路由、修电脑、做病毒等等脑洞大开的想法。这些想法很多是行外人的看法,但是也有一少部分发生在学习者身上,等开始学了才发现和预想的完全不一样。
    通常来说学习编程所对应的岗位就是开发工程师,开发工程师根据工作内容的不同又分为很多种:前端、后端、移动端、嵌入式、游戏开发、大数据等等。相同点在于都是完成一个应用产品,也就是在电脑上运行的软件、通过浏览器访问的应用、手机端运行的各种APP、各种硬件设备的监控、数据分析产品等等。
    由于软件编程是信息技术的一部分,因此,在学习时通常会用到网络通信、操作系统、数据结构等等方面的知识,这时候往往就会一个头两个大了,因为这些学科可能不会去系统的学习,在接触的时候会感觉整个体系十分庞杂,难以掌握,学到的东西又不知道什么时候才会派上用场。

    • 如何学习编程

    对于以上的情况,首先我们需要做的就是先沉下心,越难掌握的东西往往会让自身的价值更高。这也是为什么程序开发者相对高薪,无论你接受与否,这都是一条充满挑战且激动人心的学习之旅。那么,编程到底如何学呢?熟练的掌握基础语法?背下每一段常用的代码?当然不是。首先我们要把编程语言当做是工具,做它的主人。
    我们现在所学的东西无非是那些伟大的人已经创造出来的东西,有一部分是固定的需要记忆下来的,就比如基础语法,一些基本的操作步骤。另外一部分就是比较难掌握,也是最充满魅力的部分,就是用已有的知识去解决一个实际的问题,而且通常这个问题都是自己之前没有实现过的。归结起来就是编程思想,对于初学者来说,就是解决一个问题的思路。

    吴文俊院士曾经提出过“数学机械化”的概念,很多问题在前进一步之后都有一个确定的、必须选择的下一步,这样就可以沿着一条有规律的、刻板的道路,一直达到结论。
    在编程和方法设计时我们也可以借鉴这样一个思路。通常我们按照三个步骤来思考就好,What I want?What I need?How to do?当然这只是本人总结的,如果大家有更清晰的步骤可以分享。

    • 第一步(What I want)

    一定不要着急写程序,特别是大脑一片空白不知道如何下手的时候。首先我们最应该做的是明确我们自己要做什么,把这个问题转换为一个有步骤的逻辑问题,是一个简单的顺序结构,还是一个需要根据不同情况来进行选择和循环,功能和功能之间存在哪些联系,这是我们需要理清的。

    • 第二步(What I need)

    在完成了第一步后,我们要在我们所学的知识当中来搜索,应该用到哪些基本结构或者已有的工具类和方法。如果还是没有任何思路,那只能说学的还不够扎实,或者又一次接触到了知识的盲区。这个时候并不需要暴躁,去查就可以了,并且幸运的是,在完成了第一步之后我们在搜索时我们的问题会很有针对性。搜索的问题不再是:XX系统怎么做?XX功能怎么实现?而是如何处理XX(步骤),XX技术点(使用方法)。碰到没有接触过的东西是一件很正常的事情,你目前所遇到的问题一定是先前别人已经遇到的。即使你遇到的是一个稀有级或者史诗级的BUG,那么通过搜索后得到的信息也一定会对解决问题有所帮助。

    • 第三步(How to do)

    完成了前两步之后,最后一步其实就很简单了。明确了自己要什么,用什么来做,剩下的就是怎么做了,把思路和工具结合,就是你的结果!所以大家需要明确的是,真正能写出程序,让他工作的是我们,不要把计算机想象的太过智能,每一个功能,包括细小的逻辑判断都是从我们的需要出发来实现的。所以编程才会那么灵活多变,能开发出各种各样的系统,做各种各样的应用,这也就是最具魅力的地方。想一想,把自己的一个想法完整的实现出来,是一种什么样的感觉?

    二、面向过程

    首先我们来说一说面向过程的编程语言,这是一种编程思维,是以过程为中心的编程。主要的特点是先分析出解决问题需要的步骤,然后把每一步定义成一个一个方法,通过逐个调用的方式来完成整个功能。这样的好处是十分直接,要解决什么问题就写什么代码,但是复用性会比较差。

    • 举例说明:假如我需要制作一套家具

    如果使用面向过程的语言来完成,那么我将化身一个全能木匠,从准备原材料开始到家具成品,中间的所有步骤都要自己完成。首先是确定原材料、准备原材料、然后是制作形状、上漆等步骤。在编程上体现为:主要通过方法调用来完成,一个程序解决一个特定的问题。

    三、面向对象

    那么什么是面向对象编程呢?由于对象这个词本身就很抽象,只要你不是按照下面这张图片理解的,那么你还是可以学好面向对象编程的。
    在这里插入图片描述
    面向对象是被目前绝大多数主流编程语言采用的编程思想和软件开发方法,并且由于这种概念的普适性,也已经在数据库系统、应用平台、分布式系统、人工智能等领域普遍使用。那么到底什么是面向对象编程呢?其实很简单,我们只需要按照我们正常的思维方式去思考就行了,比如还是制作一个木制家具,那么在实际生活中是怎样办到的呢?
    原材料准备,这应该是采购商的工作,其他的环节他无需插手;家具设计图,这是设计公司的工作;找到合适的木匠,这是用人单位应该做的。谁来做家具呢?木匠。于是我们把这些人组合到一起就可以完成这样一个工作,编程者更像是一个项目的负责人,需要知道完成这项工作需要用到哪些人,这些人应该能够完成哪部分的工作,每个人各司其职。

    • 举例说明:面向过程与面向对象的比较


    从直观来看,面向对象编程都有哪些特点呢?开销大,这是肯定的,原来一个经验丰富的老师傅能完成的工作现在要这么多人来完成,要创建这么多对象,内存的占用当然也是较多的。那有什么好处呢?我们把问题看的长远一点,如果我们要求家具用不同的材质来做,采用更多的式样来做,不单单是上漆,还要更多的装饰式样,这个时候会怎么样呢?如果使用面向过程的语言,我们需要写出很多很多个和要求匹配的程序,非常不利于维护。如果换成面向对象的语言呢?我们只需要告诉采购商:我要什么原材料;告诉设计公司:我要什么样的家具;告诉用人单位:我要什么样的木匠;告诉木匠:你该怎么做。虽然在前期要编写很多代码,但是在完成工作时可能只需要改变调用的参数就能解决很多问题。
    总体来说,如果我们追求效率和资源,要以最小的开销做出符合要求的产品,那拉上一帮人只为做那么几件东西就显得有些得不偿失了,这个时候我们选择使用面向过程语言比较合适。如果我们要做的是一个国际公司,可以适应不同国家地区不同人的要求,那么这个时候我们使用面向对象思维是很必要的,你总不能为每个需求都量身定做写一套程序。

    四、代表语言

    • 面向过程:

    C语言、Fortran等

    • 面向对象:

    C++、C#、Java、Python等

    扫描下方二维码,加入官方粉丝微信群,可以与我直接交流,还有更多福利哦~

    在这里插入图片描述

    展开全文
  • 机电一体化技术已越来越受到各方面的关注,它在改善人民生活、提高工作效率、节约能源、降低材料消耗、增强企业竞争力等方面起着极大的作用。在机电一体化技术迅速发展的同时,运动控制技术作为其关键组成部分,也...
  •  水泥生产质量控制对象主要包括:原材料、燃料、生料、熟料和出磨水泥及出厂水泥等。水泥生产质量控制要以配料为纲,努力提高熟料质量,确保出厂水泥符合国家标准及有关规定。水泥的生产工艺,以石灰石和粘土为主要...
  • 实用标准文案 企业级存储行业发展生态分析 精彩文档 实用标准文案 任何一个时期的用户选择总会呈现出那个时期的特点这一切都与用户业务与需求的变化有 关 题记 从对象存储黄金五年来看用户的选择 早在一年左右之前也...
  • 面对对象测试论文

    千次阅读 2018-12-24 18:51:30
    摘 要 如今, 面向对象软件测试是计算机编程开发领域中的重要方面, 对整个行业发展有着重要的促进作用。具体而言, 在软件开发过程中, 面向对象软件测试技术也是保证软件质量的重要环节。面向对象软件的特征是程序...

    面向对象测试技术分析

    张琨1
    (南昌航空大学软件学院 江西 南昌 330000)
    摘 要 如今, 面向对象软件测试是计算机编程开发领域中的重要方面, 对整个行业发展有着重要的促进作用。具体而言, 在软件开发过程中, 面向对象软件测试技术也是保证软件质量的重要环节。面向对象软件的特征是程序具有更好的结构和更规范的编程风格, 但在很大程度上又增加了软件测试的复杂性, 给软件测试带来了新的挑战。基于此,本文将对面向对象技术进行总体地介绍。

    关键词 面对对象;软件测试;类测试;测试用例;

    Analysis of object-oriented testing techniques
    Frank Zhang1

    (Nanchang Hangkong University School of Software Jiang Xi Nan Chang 330000)

    Abstract Today, object-oriented software testing is an important aspect of computer programming and development, and has an important role in promoting the development of the whole industry. Specifically, in the software development process, object-oriented software testing technology is also an important part of ensuring software quality.The features of object-oriented software make the program have very reasonable structure and more normal programme style. But the features also increase complexity of software testing and bring a new challenge to software testing.Based on this, this paper will be a brief introduction to object-oriented technology.
    Keywords object-oriented; software testing;class test;test case;

    1引 言
    软件测试的发展历程 软件测试是伴随着计算机软件的产生而产生的。在早期软件开发的过程中,软件就是由程序员写的简单计算机程序代码。因而,软件测试的含义比较狭窄 ---- 测试等同于 “调试”。软件测试的目的就是为寻找和纠正软件中的故障,这部分的工作常常由开发人员自己完成。

    直到上世纪 80 年代早期,“质量” 的号角才开始吹响。软件测试定义发生了改变,测试不单纯是一个发现错误的过程,而且包含软件质量评价的内容。软件开发人员和测试人员开始坐在一起探讨软件工程和测试问题。制定了各类标准,包括 IEEE(Institute of Electrical and Electronic Engineers)标准、美国 ANSI(American national Standard Institute)标准以及 ISO(International Standard Organization)国际标准。1983 年,Bill Wetzel 在《软件测试完全指南》(Complete Guide of Software Testing)一书中指出:“测试是以评价一个程序或者系统属性为目标的任何一种活动。测试是对软件质量的度。”Myers 和 Wetzel 的定义至今仍被引用。

    到了 2002 年,Rick 和 Stefan 在《系统的软件测试》(Systematic Software Testing)中对软件测试做了进一步定义:“测试是为了度量和提高被测软件的质量,对测试件进行工程设计、实施和维护的整个生命周期过程。” 这些经典论著对软件测试研究的理论化和体系化产生了巨大的影响。

    近 20 年来,随着计算机和软件技术的飞速发展,软件测试技术研究也取得了很大的突破。测试专家总结了很好的测试模型,比如著名的 V 模型、W 模型等,在测试过程改进方面提出了 TMM(Testing Maturity Model)的概念,在单元测试、自动化测试、负载压力测试以及测试管理等方面涌现了大量优秀的软件测试工具。

    虽然软件测试技术的发展很快,但是其发展速度仍落后于软件开发技术的发展速度,使得软件测试在今天面临着很大的挑战。软件规模越来越大,功能越来越复杂,如何进行充分而有效的测试成为难题。尤其是面向对象的开发技术越来越普及,但是面向对象的测试技术却刚刚起步。
    2面对对象测试技术概述
    面向对象软件开发过程及其特点 面向对象的开发方法(简称 OO)的基本思想认为,客观世界是由各种各样的对象组成的,每种对象都有各自的内部状态和运动规律,不同的对象之间的相互作用和联系就构成了各种不同的系统。

    2.1面对对象测试技术的内涵和特点
    对象概念、类概念、继承概念以及通信概念是面向对象软件的几个主要概念。面向对象技术主要指的是对类进行抽象的定义, 将直观无法呈现的变量以及作用于变量的操作综合形成一个对象系统。并通过对象语言对变量以及变量操作的变化进行了解。面向对象技术的主要特点体现在以下几个方面:应该对面向对象开发所有阶段进行统一考虑;保证开发过程中环节之间的连续性;整个开发过程包括分析、设计、编程以及测试四个环节。各个环节之间相互独立又相互联系, 有机形成一个整体。
    2.2面对对象测试技术的功能模块
    (1)模块组成。面向对象系统的功能模块组成摆脱了单一完成任务特定功能模式的束缚, 而是将数据、对象以及方法的类进行封装的综合功能模型。在整个功能模型中, 每一个对象都具有独立的数据反映自身的状态和生存期。可以通过对消息的掌控, 了解对象状态以及对象与对象之间的联系。通常情况下, 对象功能需要借助消息的作用完成与关联对象的功能演化, 并不能自身发生作用。使用面向对象技术进行软件测试时, 除了要核查测试结果与预期结果的一致性以外, 还应该对对象的状态进行测试。这是因为对象在工作过程中易发生状态的转移, 从而形成新的状态, 影响整体的结构质量。
    (2) 模块实现。通过不同对象之间的请示和协作可以完成对象系统的功能。本质上来讲, 面向对象程序的运行是使用消息的处理过程。消息的连接和处理方式不同, 反应的对象状态也不同。消息与对象状态总而言之是一种相互联系、相互影响的关系。面向对象系统在实现某种功能时, 除了要对直接相关的对象进行激活外, 还应该对系统中不同性质对象的成员函数进行全面激活, 在成员函数之间形成一个能够启动的链接。

    2.3面对对象测试技术存在的问题
    封装障碍。封装问题是面向对象技术存在的一种问题。本意上封装代表的是一种控制机制, 功能体现在词法单位的名字可见性方面。这种控制机制可以将信息隐蔽或者对信息进行模糊化处理, 而不会直接造成面向对象系统的错误。这种控制机制会对软件测试造成一定的影响, 主要通过对对象状态的影响, 阻碍测试进度。
    多态影响。多态性体现的是一种能力, 具体指的是独立引用与对象进行捆绑作用的能力。多态性的应用可以将多个对象进行捆绑, 从而将不同的对象综合成一个整体。这种效应会引起代码超标问题, 对象相互之间的联系变得更加复杂。并且多态性也会对测试的进行造成影响, 影响信息的传递作用。
    继承风险。继承是面向对象系统中的重要组成结构。继承的作用通常体现在快速完成编码任务上, 并且继承适用于一般关系和特殊关系。只是在使用过程中, 继承本身会出现一种错误风险, 对语言的完整性造成影响。具体而言, 继承风险体现在将单一函数封装在不同的类中, 对测试结果造成不同程度的影响。

    3面对对象软件测试技术
    本部分主要分析面向对象软件测试技术的组成。

    3.1分析和设计模式测试技术
    面向对象软件开发的起始步骤是开发分析和设计模型。UML(统一建模语言)能在面向对象技术开发中广泛应用,也是因为构建模型能帮助开发者理解正在解决的问题;构建模型能帮助管理正在开发的系统的复杂性;分析和设计阶段建构的模型最后将对具体地实现起指导作用。如果模型的质量很高对项目来说就很有价值;但是如果模型有错误,那么它对项目的危害就无可估量。
    分析和设计模型测试的内容

    分析和设计模型测试的重点是测试模型的完整性和一致性, 其主要内容有:

    1. 对确定的对象的测试;

    2. 对确定的结构的测试;

    3. 对确定的主题的测试;

    4. 对定义的属性和实例关联的测试;

    5. 对定义的服务和消息关联的测试。

    分析和设计模型测试的方法

    分析与设计模型的测试主要是对分析与设计模型进行测试,找出模型中的错误,其采用的方法是指导性审查 (guided inspection)。指导性审查技术通过使用明确的测试用例为查找工作成果中的缺陷提供了客观的、系统的方法。是一种增强了的专为检验模型的检测技巧,也可用来验证模型是否能符合项目的需求。其基本步骤如下:

    1. 定义测试位置。

    2. 使用特定的策略从测试位置选择测试值。

    3. 将测试值应用到被测试的产品中。

    4. 对测试结果以及对模型的测试覆盖率(基于某中标准)进行评估。

    这些步骤经过具体化后形成下列详细步骤:

    (1). 制订检查的范围和深度:范围将通过描述材料的实体或一系列详细的用例来定义。对小的项目来说,范围可以是整个模型。深度将通过指定须要测试的模型(MUT)的某种 UML 图的集合层次中的级别来定义。

    (2). 确定 MUT 产生的基础:除原始模型之外,所有的 UMT 的基础是前一开发阶段创建的一系列模型:比如,应用分析模型就是以域分析模型和用例模型为基础。起初模型则是基于所选择的一组人头脑里的知识。

    (3). 为每一个评价标准开发测试用例,标准在应用时使用基本模型的内容作为输入。这种从用户用例模型出发的方式对许多模型的测试用例来说是一个很好的出发点。

    (4). 为测量测试的覆盖率建立标准。比如对一个类图来说,如果图中每一个类都被测试到了,那么覆盖率就算不错了。

    (5). 使用合适的检查列表进行静态分析。将 MUT 与基本的模型相比较可以确定 2 个图型之间的连贯性。

    (6). “执行” 测试用例。

    (7). 使用测试用例覆盖率衡量法对测试的效率进行评价,计算覆率率百分比。比如,测试用例 “涉及” 到了包含 18 个类的类图中的 12 个类,那么测试的覆盖率就是 75%。鉴于分析和设计模型的测试如此高级,以至于要达到好的结果,必须有 100% 的覆盖率。

    (8). 如果覆盖率不充分,就要对测试进行扩充并应用额外的测试用例。否则终止正在进行的测试。通常无法在检查片断的过程中写下附加的测试用例。测试者确定哪些地方没有覆盖到并与开发者一起确定将触及未覆盖的模型组件的潜在的测试用例。然后,测试者创建整个的测试用例并且进行另一次检查。

    采用指导性审查技术对分析和设计产生的文本进行正确性验证, 是软件开发前期的关键性测试。
    3.2类测试技术
    使面向对象软件产品的基本组成单位是类,从宏观上来看,面向对象软件是各个类之间的相互作用。在面向对象系统中, 系统的基本构造模块是封装了的数据和方法的类和对象, 而不再是一个个能完成特定功能的功能模块。每个对象有自己的生存周期, 有自己的状态。消息是对象之间相互请求或协作的途径, 是外界使用对象方法及获取对象状态的惟一方式。对象的功能是在消息的触发下, 由对象所属类中定义的方法与相关对象的合作共同完成。且在不同状态下对消息的响应可能完全不同。工作过程中对象的状态可能被改变, 产生新的状态。对象中的数据和方法是一个有机的整体, 测试过程中不能仅仅检查输入数据产生的输出结果是否与预期的吻合, 还要考虑对象的状态,且在不同状态下对消息的响应可能完全不同。工作过程中对象的状态可能被改变, 产生新的状态。对象中的数据和方法是一个有机的整体, 测试过程中不能仅仅检查输入数据产生的输出结果是否与预期的吻合, 还要考虑对象的状态。

    类测试是由那些与验证类的实现是否和该类的说明完全一致的相关联的活动组成的。该类测试的对象主要是指能独立完成一定功能的原始类。如果类的实现正确,那么类的每一个实例的行为也应该是正确的。

    一.类测试的内容

    类测试的目的主要是确保一个类的代码能够完全满足类的说明所描述的要求.对一个类进行测试以确保他只做规定的事情,对此给与关注的多少,取决于提供额外的行为的类相关联的风险.在运行了各种类的测试后,如果代码的覆盖率不完整,这可能意味着该类包含了额外的文档支持的行为.需要增加更多的测试用例来进行测试。

    二.类测试的时间

    类测试的开始时间一般在完全说明这个类,并且准备对其编码后不久,就开发一个测试计划——至少是确定测试用例的某种形式。如果开发人员还负责该类的测试,那么尤其应该如此。因为确定早期测试用例有利于开发人员理解类说明,也有助于获得独立代码检查的反馈。

    类测试可以在开发过程中的不同位置进行。在递增的反复开发过程中,一个类的说明和实现在一个工程的进程中可能会发生变化,所以因该在软件的其它部分使用该类之前执行类的测试。每当一个类的实现发生变化时,就应该执行回归测试。如果变化是因发现代码中的缺陷(bug)而引起的,那么就必须执行测试计划的检查,而且必须增加或改变测试用例以测试在未来的测试期间可能出现的那些缺陷。

    三.类测试的测试人员

    类测试通常由他的开发人员测试,让开发人员起到测试人员的作用,就可使得必须理解类说明的人员数量减至最少。而且方便使用基于执行的测试方法,因为他们对代码极其的熟悉。由同一个开发者来测试,也有一定的缺点:开发人员对类说明的任何错误理解,都会影响到测试。因此,最好要求另一个类的开发人员编写测试计划,并且允许对代码进行对立检查。这样就可以避免这些潜在的问题了。

    四.类测试的方法

    类测试的方法有代码检查和执行测试用例。在某些情况下,用代码检查代替基于执行的测试方法是可行的,但是,和基于执行的测试相比,代码检查有以下两个不利之处:

    1. 代码检查易受人为因素影响。

    2. 代码检查在回归测试方面明显需要更多的工作量,常常和原始测试差不多。

    尽管基于执行的测试方法克服了以上的缺点,但是确定测试用例和开发测试驱动程序也需要很大的工作量。在某些情况下,构造一个测试驱动程序的工作量比开发这个类的还多,此时就应该评估在使用了这个类的系统之外测试测试这个类所花的代价和带来的收益。

    一旦确定了一个类的可执行测试用例,就必须执行测试驱动程序来运行每一个测试用例,并给出每一个测试用例的结果。

    五.测试程度

    可以根据已经测试了多少类实现和多少类说明来衡量测试的充分性。对于类的测试,通常需要将这两者都考虑到,希望测试到操作和状态转换的各种组合情况。一个对象能维持自己的状态,而状态一般来说也会影响操作的含义。但要穷举所有组合式不可能的,而且是没必要的 。因此,就因该结合风险分析进行选择配对系列的组合,以致达到使用最重要的测试用例并抽取部分不太重要的测试用例。

    六.构建类测试用例

    要对类进行测试,就必须先确定和构建类的测试用例。类的描述方法有 OCL, 自然语言,和状态图等方法,可以根据类说明的描述方法构件类的测试用例。因而,构建类的测试用例的方法有:根据类说明(用 OCL 表示)确定测试用例和根据类的状态转换图来构建类的测试用例。

    根据类的说明确定测试用例 用 OCL 表示的类的说明中描述了类的每一个限定条件条件。在 OCL 条件下分析每个逻辑关系,从而得到由这个条件的结构所对应的测试用例。这种确定类的测试用例的方法叫做根据前置条件和后置条件构建测试用例。其总体思想是:为所有可能出现的组合情况确定测试用例需求。在这些可能出现的组合情况下,可满足前置条件,也能够到达后置条件。根据这些需求,创建测试用例;创建拥有特定输入值(常见值和特殊值)的测试用例;确定它们的正确输出——预期输出值。

    根据前置条件和后置条件创建测试用例的基本步骤如下:

    1. 确定在表 1 中与前置条件形成相匹配的各个项目所指定的一系列前置条件的影响。

    2. 确定在表 2 中与后置条件形成相匹配的各个项目所指定的一系列前置条件的影响。

    3. 根据影响到列表中各个项目的所有可能的组合情况从而构造测试用例需求。一种简单的方法就是:用第一个列表中的每一个输入约束来代替第二个列表中每一个前置条件。

    根据状态转换图构建测试用例 状态转换图以图例的形式说明了与一个类的实例相关联的行为。状态转换图可用来补充编写的类说明或者构成完整的类说明。状态图中的每一个转换都描述了一个或多个测试用例需求。因而,可以用过在转换的每一端选择有代表性的值和边界来满足这些需求。如果转换是受保护的,那么也应该为这些保护条件选择边界。状态的边界值取决于状态相关属性值的范围,可以根据属性值来定义每一个状态。

    由此可见,和根据前置条件和后置条件创建类的测试用例相比,根据状态转换图创建类的测试用例有非常大的优势。在类的状态图中,类相关联的行为非常的明显和直观,测试用例的需求直接来自于状态转换,因而很容易确定测试用例的需求。不过基于状态图的方法也有其不利的方面。如要完全理解怎样根据属性值来定义状态;事件是如何在一个给定的状态内影响特定值等。这都很难仅从简单的状态图中确定。因此,在使用基于状态转换图进行测试时,务必在生成的测试用例时检查每个状态转换的边界值和预期值。
    3.3对象交互测试技术
    使面向对象的软件是由若干对象组成的,通过这些对象的相续协作来解决某些问题。对象的交互和写作方式决定了程序能作什么,从而决定了这个程序执行的正确性。也许可信任的原始类的实例可能不包含任何错误,但是如果那个实例的服务部被其他程序组件正确的使用的话,那么这个程序也就包含了错误。因此,程序中对象的正确协作——即交互——对于程序的正确性是非常关键的。

    对象的交互测试的重点是确保对象(这些对象的类已经被单独测试过)的消息传送能够正确进行。交互测试的执行可以使用嵌入到应用程序中的交互对象,或者在独立的测试工具(例如一个 Tester 类)提供环境中,交互测试通过使得该环境中的对象相互交互而执行。

    根据类的类型可以将对向交互测试分为汇集类测试和协作类测试。
    3.4面向对象系统测试技术
    使通过类测试、对象交互测试、类层次结构测试,仅能保证软件开发的功能得以实现。但不能确认在实际运行时,它是否满足用户的需要,是否大量存在实际使用条件下会被诱发产生错误的隐患。为此,对完成开发的软件必须经过规范的系统测试。换个角度说,开发完成的软件仅仅是实际投入使用系统的一个组成部分,需要测试它与系统其他部分配套运行的表现,以保证在系统各部分协调工作的环境下也能正常工作。

    系统测试应该尽量搭建与用户实际使用环境相同的测试平台,应该保证被测系统的完整性,对临时没有的系统设备部件,也应有相应的模拟手段。系统测试时,应该参考 OOA 分析的结果,对应描述的对象、属性和各种服务,检测软件是否能够完全 “再现” 问题空间。系统测试不仅是检测软件的整体行为表现,从另一个侧面看,也是对软件开发设计的再确认。

    这里说的系统测试是对测试步骤的抽象描述。它体现的具体测试内容包括:

    1. 功能测试:测试是否满足开发要求,是否能够提供设计所描述的功能,是否用户的需求都得到满足。功能测试是系统测试最常用和必须的测试,通常还会以正式的软件说明书为测试标准。

    2. 强度测试:测试系统的能力最高实际限度,即软件在一些超负荷的情况,功能实现情况。如要求软件某一行为的大量重复、输入大量的数据或大数值数据、对数据库大量复杂的查询等。

    3. 性能测试:测试软件的运行性能。这种测试常常与强度测试结合进行,需要事先对被测软件提出性能指标,如传输连接的最长时限、传输的错误率、计算的精度、记录的精度、响应的时限和恢复时限等。

    4. 安全测试:验证安装在系统内的保护机构确实能够对系统进行保护,使之不受各种非常的干扰。安全测试时需要设计一些测试用例试图突破系统的安全保密措施,检验系统是否有安全保密的漏洞。

    5. 恢复测试:采用人工的干扰使软件出错,中断使用,检测系统的恢复能力,特别是通讯系统。恢复测试时,应该参考性能测试的相关测试指标。

    6. 可用性测试:测试用户是否能够满意使用。具体体现为操作是否方便,用户界面是否友好等。

    7. 安装 / 卸载测试(install/uninstall test)等等。

    系统测试需要对被测的软件结合需求分析做仔细的测试分析,建立测试用例。
    3.5其它方法
    (1)正交试验设计法
    作为黑盒测试方法的一种, 正交试验设计法对于面向对象的软件测试具有较好的适用性。使用正交试验方式测试时, 具体需要测试的用例较少。因此使用正交试验测试法的效率较高。正交试验测试法具体而言就是一种软件测试中的设计方法。由于在研究工作中, 因素和水平较多, 因此在全面测试中, 按照正交性为依据, 选择部分区域进行测试。正交试验设计过程主要包括三个步骤:第一, 确定影响结果的因素和水平。第二, 选用合适的正交表。第三, 将正交表进行转化, 形成测试具体使用的方案。
    (2)前置条件测试方法
    在面向对象的软件测试技术中, 前置条件测试方法也是一种重要的测试方式。使用前置条件测试方式进行工作时, 主要是对所有可能出现的组合结果进行分析。并通过创建测试用例的方式对可能存在的结果进行实现。通过合理的输入和输出完成测试工作。测试用例的数量跟组合的结果有很大关联, 因此还要对每个逻辑关系进行分析, 最终完成面向对象的软件测试。
    4结 论
    软件测试作为软件运行的最后关口, 应得到高度重视。然而由于传统意识和历史原因, 重开发轻测试的意识根深蒂固, 已经成为制约软件成功运行的瓶颈。软件测试在明确和界定清楚测试与开发的关系时, 不能简单地把测试与开发看作是串行的过程。从软件过程管理看, 测试应当从需求分析开始, 它不仅要与开发并行, 而且要从开始就以测试用例为需求立定客观标准。
    面向对象软件测试仍处于发展阶段。本论文根据面向对象开发方法过程和特点总体地讨论了面向对象的软件测试,提出了一系列实用的面向软件测试技术。因为面对对象测试技术的复杂性,本文没有把所有的测试方法展示出来,有待日后进一步研究。

    参 考 文 献[参考资料]

    [1]张琨.面向对象软件的测试过程与方法的研究[A].第七届青年学术会议论文集[C];2005
    [2]宋雪芬,王冠军,宋雪玲.面向对象软件测试方法研究[A].中国自动化学会全国第九届自动化新技术学术交流会论文集[C],2004年
    [3]余先荣, 罗婷婷.关于面向对象软件测试技术的研究[J].中国新通信, 2013 (8) :55~56.
    [4]杨珺, 毕忠勤, 鲁宏勇.面向对象技术在软件自动化测试中的应用[J].上海电力学院学报, 2014 (2) :176~180.
    [5] 郑人杰等编著.《基于软件能力成熟度模型(CMM)的软件过程改进——方法实施》[M]. 北京:清华大学出版社,2003
    [6]McGregor.J.D. 等著;杨文宏等译.《面向对象的软件测试》[M].机械工业出版社,2002.8.
    [7]BinderRobertV.等著;华庆一,陈莉等译.《面向对象系统的测试》[M].北京: 人民邮电出版社,2001
    [8]郭菏清主编.《现代软件工程——原理,方法,与管理》[M].广州:华南理工大学出版社,2004.2(2005.1)
    [9]齐治昌等编著.《软件工程》[M].北京:高等教育出版社,2001.8(2002 重印)
    [10]姬莹,罗钧日,钟联炯.面向对象软件测试主要问题的探讨 [J].西安工业学院学报,2001,21(1):31237

    展开全文
  • 一张图概括编程语言发展

    千次阅读 2018-07-26 11:12:21
    一张图概括编程语言发展史 一张图概括编程语言发展史 Intro 编年史 Intro 编程语言是一组用来定义计算机程序的语法规则。它是一种被标准化的交流语言,用来向计算机发出指令。一种计算机语言让程序员...

    一张图概括编程语言发展史

    一张图

    编程语言是一组用来定义计算机程序的语法规则。它是一种被标准化的交流语言,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。尽管人们多次试图创造一种通用的程序设计语言,却没有一次尝试是成功的。之所以有那么多种不同的编程语言存在的原因是设计程序语言的初衷不同,对语言学习曲线的追求不同,不同程序之间的运行成本差异等。

    下面这张图片描绘了整个编程语言的历史。包括各种编程语言的发明人,编程语言的特点和适用领域,被什么网站或公司使用等。

    lang-history

    编年史

    我们一个统计出来256种编程语言,当然,这么多的语言中只有一些是常用的或实用的。

    1951 – Regional Assembly Language
    1952 – Autocode
    1954 – IPL (LISP语言的祖先)
    1955 – FLOW-MATIC (COBOL语言的祖先)
    1957 – FORTRAN (第一个编译型语言)
    1957 – COMTRAN (COBOL语言的祖先)
    1958 – LISP
    1958 – ALGOL 58
    1959 – FACT (COBOL语言的祖先)
    1959 – COBOL
    1959 – RPG
    1962 – APL
    1962 – Simula
    1962 – SNOBOL
    1963 – CPL (C语言的祖先)
    1964 – BASIC
    1964 – PL/I
    1966 – JOSS
    1967 – BCPL (C语言的祖先)
    1968 – Logo
    1969 – B (C语言的祖先)
    1970 – Pascal
    1970 – Forth
    1972 – C
    1972 – Smalltalk
    1972 – Prolog
    1973 – ML
    1975 – Scheme
    1978 – SQL
    1980 – C++ (既有类的C语言,更名于1983年7月)
    1983 – Ada
    1984 – Common Lisp
    1984 – MATLAB
    1985 – Eiffel
    1986 – Objective-C
    1986 – Erlang
    1987 – Perl
    1988 – Tcl
    1988 – Mathematica
    1989 – FL
    1990 – Haskell
    1991 – Python
    1991 – Visual Basic
    1993 – Ruby
    1993 – Lua
    1994 – CLOS (ANSI Common Lisp的一部分)
    1995 – Java
    1995 – Delphi (Object Pascal)
    1995 – JavaScript
    1995 – PHP
    1996 – WebDNA
    1997 – Rebol
    1999 – D
    2000 – ActionScript
    2001 – C#
    2001 – Visual Basic .NET
    2002 – F#
    2003 – Groovy
    2003 – Scala
    2007 – Clojure
    2009 – Go
    2011 – Dart

    从1951年2014年,人类一共发明了256种编程语言,每一种语言的出现都带有某些新特征。编程语言不断的在革新,很快就会有超出这个清单的新编程语言出现


    1801 - Joseph Marie Jacquard用打孔卡为一台织布机编写指令,在挂毯上织出了“hello, world”字样。当时的reddit网友对这项工作的反响并不热烈,因为它既缺少尾递归调用,又不支持并发,而且甚至都没有注意在拼写时恰当地区分大小写。

    Jacquard织布机是第一台可进行程序控制的织布机。用打孔卡进行编程的概念,直到电子计算机被发明出来之后仍然被广泛运用。

    最早的Hello World程序(出自K&R C)打印的是全小写的字符串:”hello, world”。

    在许多英文技术社区里,不正确地使用大小写发贴会被视作是小白的行为。(如把“Python”拼作“python”,把“FreeBSD”拼作“freebsd”,把“Qt”拼作“QT”)


    1842 - Ada Lovelace写了世界上第一个程序。她的努力只遇到了一点点小小的麻烦,那就是:实际上并没有任何计算机能够用来运行她的程序。后来的企业架构师们重新吸收了她的这个技能,用来学习如何更好地使用UML进行编程。

    Ada Lovelace为Charles Babbage的分析机写了一个计算伯努利数的算法实现,因此被后世公认为是世界上第一个程序员。实际上,分析机由于其设计思想过于先进,在当时根本没有 被制造出来。(Babbage的分析机一般被认为是现代电子通用计算机的先驱)

    讽刺现在的某些“软件架构师”顶多只会纸上谈兵地画画UML。


    1936 - Alan Turing发明了世间一切程序语言的最终形态,但很快他就被英国军情六处“请”去当007了,以至于他根本来不及为这些语言申请专利。

    与通用图灵机(Universal Turing machine)等价的语言被称为图灵完备的(Turing
    completeness),它定义了“什么样的语言可以被称作是程序语言”。

    二战期间Turing曾秘密地为英国军方工作,破解德军的Enigma密码机,并在战后被授予大英帝国勋章。但这项事实直到多年以后才向公众公开


    1936 - Alonzo Church同时也发明了世间一切程序语言的最终形态,甚至做得更好。但他的λ演算被绝大部分人忽视了,因为它与C语言“不够像”。尽管存在着这样的批评,但事实上,C在当时还没有被发明出来。

    Church是Turing在Princeton的博士生导师,他在λ演算方面的工作先于Turing指出了不存在一个对可判定性问题的通用解法,这后来证明和Turing针对停机问题提出的图灵机模型是等价的。即著名的Church-Turing论题。

    说Church“甚至做得更好”,因为λ演算为后世所有的函数式语言提供了理论基础。

    现在一种常见的关于函数式编程的批评就是:“它们与C语言不够像”。


    1940年代 - 一些直接采用布线和开关来进行程序控制的“计算机”出现了。工程师们当时这么做,据说是为了避开“用空格还是用制表符缩进”这样的论战。

    据说当时负责设计ENIAC的工程师中间曾经发生过这样的争论:

    • 空格比制表符好。

    • 制表符比空格好。

    • 4个空格比8个空格好。

    • 什么?用2个空格的统统烧死。

    关于这台具有里程碑意义的人类史上第一台电子计算机ENIAC上应该预装何种编辑器,工程师们还发生过这样的争吵:

    • Vim比Emacs好!

    • Emacs比Vim好!

    • 强烈推荐Sublime Text。

    • 你丫用编辑器的都是找虐,IDE才是王道。

    • 没错,要用就用世界上最好的公司微软开发出来的世界上最好的IDE:Visual Studio。

    • 我早就看透了无谓的编辑器论战什么的了,我要告诉楼上吵架的,你们全都是傻逼!

    最后,工程师们一致决定使用布线和开关来为他们即将发明的计算机进行编程,机智地避开了所有这些无谓的争吵,最终齐心协力创造出了人类历史上第一台电子计算机:ENIAC。(鼓掌)

    两位ENIAC程序员在运用敏捷开发方法进行愉快的结对编程。“自从抛弃伴随我多年的Emacs和HHKB Pro、改用布线和开关进行编程之后,我的左手小指麻痹奇迹般地痊愈了。”其中一位接受采访时如是说。另一位则表示:“新的编程方式让曾经专注颈椎病20年的我得到了彻底的康复,不用再整天盯着显示屏,身心同时得到了极大的放松,值得大力推广!”)


    1957 - John Backus和IBM发明了FORTRAN语言。关于IBM或FORTRAN并没有什么特别好笑的地方。除了,写FORTRAN程序的时候不系蓝领带将被编译器视作是一个syntax error。

    蓝领带、白衬衫、深色西装似乎是IBM公司20世纪经典的dress code。

    早期FORTRAN(FORTRAN 77)对程序书写格式的要求那是相当严格。(例如,蛋疼的固定格式缩进)


    1958 - John McCarthy和Paul Graham发明了LISP。由于冷战期间的战略括号资源储备所造成的巨大成本,LISP从未流行过。尽管欠缺足够的流行度,LISP(现在叫做 “Lisp”,有时叫“Arc”)仍然被视作一门有影响力的语言,在关键的算法思想诸如递归(recursion)和提升逼格 (condescension)上尤为典范。

    LISP发明的那一年Paul Graham其实还没有出生。据说是因为某本叫做《Haste and
    Waste》的伪程装黑圣典实在太有名了,以至于许多编程小白们把写这本书的传奇人物同Lisp之间画上了等号。

    提升逼格确实是一种与递归调用同样关键的算法思想。嗯,你懂的。


    1959 - 在输掉了和L. Ron Hubbard之间的一场打赌之后,Grace Hopper和其他几个抖S发明了所谓的“面向Boilerplate的全大写化语言(Capitalization Of Boilerplate Oriented Language,COBOL)”。多年以后,由于一些被误导的、性别歧视主义者对Adm. Hopper关于COBOL的工作的报复,在Ruby技术会议上不时会看到一些厌女主义乃至仇视女性的材料出现。

    L. Ron Hubbard是山达基教(Scientology)的创始人,二战期间曾与Grace
    Hopper同样供职于美国海军。(尚不清楚这两人之间有无其他联系)

    COBOL语言以代码极其冗长和通篇大写字母的书写风格而闻名。

    Adm. Hopper:Grace Murray Hopper女士的军衔是Rear Admiral Lower Half,即美国海军准将。


    1964 - John Kemeny和Thomas Kurtz创造了BASIC,一个为非计算机科学家设计的非结构化的程序语言。

    1965 - Kemeny和Kurtz两人goto到了1964。

    调侃BASIC语言对行号和goto的无节制滥用。


    1970 - Guy Steele和Gerald Sussman创造了Scheme。他们的工作导致了一系列以《Lambda之究极(Lambda the Ultimate)……》为标题开头的论文发表,并在《Lambda之究极厨房神器》这一篇中达到了最高潮。以这篇论文为基础,开始了一个长年累月的、收 视率究极失败的晚间电视购物节目。Lambda们因为其概念相对难以理解而被大众所忽视,直到未来的某一天,Java语言终于让它们变得有名了起来。通过 不包含它们这件事情。


    1970 - Niklaus Wirth创造了Pascal,一个过程式的语言。很快就有人开始声讨Pascal,因为它使用了类似“x := x + y”这样的语法,而不是更为人熟知的类C语法“x = x + y”。尽管存在着这样的批评,而事实上当时C还没有被发明出来。


    1972 - Dennis Ritchie发明了一把射击时能同时向前和向后两个方向发射子弹的绝世好枪。但他对此发明造成的致死和终身残疾数量感到还不够满意,所以他又发明了C语言和Unix。


    1972 - Alain Colmerauer设计了逻辑编程语言Prolog。他的目标是创造一个具有两岁小孩智商的程序语言。为了证明他成功达到了这个目标,他展示了一个Prolog程序,它对于每条查询都会机智地给出相同的回答:“No”。


    1973 - Robin Milner创造了ML,一个建立在M&M类型理论基础上的语言。由ML衍生而来的SML加上了一套形式语义的规范。当被要求给这个形式语义本身 书写一套形式语义时,Milner的脑子爆掉了。其他ML家族的著名语言还包括OCaml,F#,和,Visual Basic。


    1980 - Alan Kay创造了Smalltalk并发明了“面向对象”这个词。当被问到它的含义时,他回答道:“Smalltalk程序本身就是对象。”当被问到对象是由 什么组成时,他回答到:“对象。”当再一次被问到这个问题时,他说“看,它从里到外都是对象。直到你抽出一只乌龟。”

    Smalltalk的设计从很大程度上受到了Logo的影响。


    1983 - 为了纪念伟大的先辈程序员Ada Lovelace那能够写出永远也无法被执行的代码的彪悍技能,Jean Ichbiah和美国国防部创造了Ada语言。尽管缺乏证据显示有任何重要的Ada程序曾经被完成过,历史学家仍然确信Ada是个成功的公益项目,它让数 以千计的国防承包商免于沦落为与黑帮为伍。

    Ada曾经是美国国防部指定的嵌入式计算机系统唯一开发语言,在其研发上耗资巨大。(国防承包商们于是不用靠贩卖军火给黑帮来维持生计了)

    虽然有充分的证据显示Ada的整型范围溢出检查失败导致弄坏了欧空局的一枚Ariane 5运载火箭,不过美国国防部发言人对此表示:关我P事。


    1983 - Bjarne Stroustrup把他所听说过的一切都试图嫁接到C上,创造出了C++。最后得到的语言是如此地复杂,以至于程序必须被送到未来去让“天网”人工智能 进行编译。编译时间难以容忍。天网开展这项服务的动机仍然不为人知,但来自未来的发言人说道:“没什么好担心的,宝贝。”带着一口奥地利腔的机械口音。有 一些来自坊间的推测,所谓的天网只不过是个自命不凡的缓冲区溢出而已。


    1986 - Brad Cox和Tom Love创造了Objective-C,宣称“该语言完美地结合了C的内存安全性与Smalltalk的神奇效率”。现在的历史学家怀疑这两人其实是诵读障碍症患者。

    “C的内存安全性…”

    Smalltalk编译出来的程序以低效缓慢著称。


    1987 - Larry Wall在电脑前打了个盹,Larry Wall的脑门子压到了键盘上。醒来之后,Larry Wall深信 ,在Larry Wall的显示器上出现的神秘字符串并非是随机的,那是某种编程语言之程序样例的神谕。那必是上帝要他的先知,Larry Wall,去设计的。Perl语言就此诞生了。


    1990 - 一个由Simon Peyton-Jones、Paul Hudak、Philip Wadler、Ashton Kutcher和善待动物组织(PETA)组成的委员会创造了Haskell,一种纯函数式的、非严求值的语言。Haskell由于使用了Monad这种 较费解的概念来控制副作用而遭到了一些批评意见。Wadler试图平息这些质疑,他解释说:“一个单子(Monad)说白了不过就是自函子范畴上的一个幺 半群而已,这有什么难以理解的?”


    1991 - 荷兰程序员Guido van Rossum为了一次神秘的手术而进行了一次阿根廷之旅。回来后他带着一个巨大的颅疤,发明了Python,而被数以军团计的追随者们加冕为“终生大独裁 者”,并向全世界宣布“要办到一件事情,只可有唯一的一种方法!”。整个波兰陷入了恐慌。

    BDFL(Benevolent Dictator for
    Life):开源社区一种流行的说法,“仁慈的”终生大独裁者。这个说法最早指的就是Guido van Rossum。

    希特勒在提出建立“纯正的雅利安人国家”“统一的大德意志帝国”并实现了德奥合并之后,翌年便入侵了波兰,引发了第二次世界大战。“我一个人征服了整个欧洲!”(感觉好棒好棒的)


    1995 - 在家门口附近的一个意大利饭馆用餐时,Rasmus Lerdorf意识到他吃的那盘意面正好是一个用来理解WWW万维网的极好模型,而所有的Web应用都应该仿照它们的媒介那样去做。在他的餐巾的背后,他 设计出了著名的“可编程超链接Pasta(Programmable Hyperlinked Pasta,PHP)”语言。PHP的文档至今仍然保留在那片餐巾上。

    PHP最显著的特点就是:代码是可以直接嵌在HTML文档中的。


    1995 - 松本“Mad Matz”行弘创造出了Ruby语言,用来辟谣一些意味不明的、有关澳洲将会变成一片由莫霍克族战士和Tina Turner统治的荒漠的末世预言。该语言后来被它的真正发明者David Heinemeier Hansson重新命名为Ruby on Rails。(关于某个叫松本行弘的人发明了一种叫做Ruby的语言这件事情从未发生过,最好在这篇文章的下一个版本中删掉。 - DHH表示)

    最早关于Ruby的国际会议不是RubyConf,而是每年在澳大利亚举办的OSDConf。

    这里应该是在吐槽Ruby的杀手级应用Ruby on Rails实在太有名了,以至于超越了原来的Ruby语言本身。

    Matz并没有为“Ruby”这个名字注册商标——本着开源的黑客精神。

    而DHH(RoR的作者)却把“Ruby on
    Rails”这个(包含了“Ruby”字样的)名称注册成了商标,并且阻止别人未经授权使用“Rails”这个名字。

    (虽然抢注商标对开源来说未必是一件坏事情——Python基金会今年在欧洲还卷入了一场商标之争了不是)


    1995 - Brendan Eich读完了历史上所有在程序语言设计中曾经出现过的错误,自己又发明了一些更多的错误,然后用它们创造出了LiveScript。之后,为了紧跟 Java语言的时髦潮流,它被重新命名为JavaScript。再然后,为了追随一种皮肤病的时髦潮流,这语言又被命名为ECMAScript。


    1996 - James Gosling发明了Java。Java是一个相对繁冗的、带垃圾收集的、基于类的、静态类型的、单分派的面向对象语言,拥有单实现继承和多接口继承。Sun不遗余力地宣传着Java的独一无二不同凡响之处。


    2001 - Anders Hejlsberg发明了C#。C#是一个相对繁冗的、带垃圾收集的、基于类的、静态类型的、单分派的面向对象语言,拥有单实现继承和多接口继承。微软不遗余力地宣传着C#的独一无二不同凡响之处。


    2003 - 一个叫Martin Odersky的醉汉看见了好时瑞森花生酱杯的广告,展示了某个人的花生酱倒入另一个人的巧克力的场景,他忽然有了个点子。他创造了Scala,一种结合 了面向对象和函数式编程的语言。这同时激怒了两个阵营的忠实信徒,他们立刻宣布要发动圣战烧死异教徒。


    • 转载自微信公众号 STEAM解密
    展开全文
  • 2019工程伦理慕课答案(2019秋)习题及期末答案

    万次阅读 多人点赞 2019-11-08 18:19:53
    任务、对象和思维方式 单选题 (1/1 point) 下列哪一项不是工程活动的特征 自主性 创造性 社会性 确定性 多选题 (1points) 下列哪项是工程的完整生命周期中的环节 计划 设计 评估 完成 ...
  • 随着Java的不断发展(现在6.0版都已经非常成熟了)作者在收集了读者对第一版的反馈意见后,跟踪最新的Java技术推出了该书的第二版。希望通过电子书了解了本书第一版内容并对其感兴趣的读者能够购买《Java面向对象...
  • 机电一体化技术已越来越受到各方面的关注,它在改善人民生活、提高工作效率、节约能源、降低材料消耗、增强企业竞争力等方面起着极大的作用。在机电一体化技术迅速发展的同时,运动控制技术作为其关键组成部分,也...
  • 人工智能时代,所需要了解人工智能的基本常识

    万次阅读 多人点赞 2018-12-10 22:49:44
    国内对于人工智能的讨论大多是不成体系的碎片式,很难从中深入了解人工智能的发展脉络和技术体系,也很难有实际借鉴意义。人工智能的历史、核心技术和应用情况进行了详细说明,尤其是其中重要的认知技术。这份报告将...
  • 自动驾驶概述

    万次阅读 2020-02-08 20:27:27
    《国务院关于推进物联网有序健康发展的指导意见》 将车联网作为物联网的核心应用领域 2015年 国务院 《中国制造2025》 提出到2020年,...
  • 前端面试题

    万次阅读 多人点赞 2019-08-08 11:49:01
    列举浏览器对象模型BOM里常用的至少4个对象,并列举window对象的常用方法至少5个 72 简述列举文档对象模型DOM里document的常用的查找访问节点的方法并做简单说明 72 希望获取到页面中所有的checkbox怎么做?(不...
  • 许多人认为面向对象编程是计算机科学的珍宝,代码组织的最终解决方案,所有问题的终极回答,编写程序的唯一真正方法,编程之神赐予我们的财富…… 但事实证明并非如此,人们常常屈服于抽象和混杂共享可变对象的复杂...
  • 未来5-10年计算机视觉发展趋势

    千次阅读 多人点赞 2020-05-21 09:35:50
    未来5-10年计算机视觉发展趋势 来源:CCF计算机视觉专委会 引言 计算机视觉是人工智能的“眼睛”,是感知客观世界的核心技术。进入21世纪以来,计算机视觉领域蓬勃发展,各种理论与方法大量涌现,并在多个...
  • 面向对象的需求分析方法

    千次阅读 2016-11-03 14:11:00
    面向对象的需求分析方法  面向对象的需求分析方法的核心是利用面向对象的概念和方法为软件需求建造模型。它包含面向对象风格的图形语言机制和用于指导需求分析的面向对象方法学。  面向对象的思想最初起源于 20...
  • 推荐系统简介中,我们给出了推荐系统的一般框架。很明显,推荐方法是整个推荐系统中最核心、最...目前,主要的推荐方法包括:基于内容推荐、协同过滤推荐、基于关联规则推荐、基于效用推荐、基于知识推荐和组合推荐
  • 努力使用尽可能少的原材料与能源,并只产生最少的废物和其他污染来达到你的工作目标 增进对需要恢复环境的行动的透彻理解 拒绝任何牵涉不公平地破坏居住环境和自然的委托 工程师一旦通过职业判断发现情况...
  • 深度学习在推荐系统中的应用

    千次阅读 2019-11-24 16:38:03
    经过这几年的发展,深度学习技术已经在图像分类、语音识别、自然语言处理等领域取得突破性进展,甚至在某些方面(如图像分类等)超越了人类专家的水平。深度学习技术驱动了第三次人工智能浪潮的到来。 ...
  • 软件测试面试题汇总

    万次阅读 多人点赞 2018-09-27 12:31:09
    转载自: ... 软件测试面试题汇总 测试技术面试题 ...........................................................................................................
  • java学习 面向对象

    2010-12-07 20:52:45
    java学习好材料,面向对象从软件建模方法论的角度上看,应用软件系统的开发方法已历经两代技术变 更,由面向过程发展到现在主流的面向对象的方法。面向过程包括面向功能和面 向数据流程。面向对象的思想用对象对象...
  • 问题三,什么是面向对象编程? 问题四,面向对象三大特性五大原则是什么? 前言 写这个系列的文章的初心是,19年12月份我辞了职,此时我已经工作了快两年了。心里想着有着接近两年的工作经验,从上海回到老家郑州...
  • 15道常考SpringBoot面试题整理

    千次阅读 2019-02-24 20:28:41
    提供意见发展方法。 通过提供默认值快速开始开发。 没有单独的Web服务器需要。这意味着你不再需要启动Tomcat,Glassfish或其他任何东西。 需要更少的配置 因为没有web.xml文件。只需添加用@ Configuration...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,685
精华内容 20,674
关键字:

发展对象推荐意见