免费智能真题库 > 历年试卷 > 软件评测师 > 2009年上半年 软件评测师 上午试卷 综合知识
  第15题      
  知识点:   面向对象技术   构件   敏捷方法   软件系统
  关键词:   构件   面向对象   软件系统   对象        章/节:   软件开发方法及过程       

 
在采用面向对象技术构建软件系统时,很多敏捷方法都建议的一种重要的设计活动是(15),它是一种重新组织的技术,可以简化构件的设计而无须改变其功能或行为。
 
 
  A.  精化
 
  B.  设计类
 
  C.  重构
 
  D.  抽象
 
 
 

 
  第31题    2018年下半年  
   67%
以下关于极限编程(XP)的叙述中,正确的是(31)。XP的12个最佳实践,不包括(32)。
  第35题    2011年下半年  
   42%
以下关于敏捷方法的叙述中,不正确的是(35)。
  第32题    2018年下半年  
   46%
以下关于极限编程(XP)的叙述中,正确的是(31)。XP的12个最佳实践,不包括(32)。
   知识点讲解    
   · 面向对象技术    · 构件    · 敏捷方法    · 软件系统
 
       面向对象技术
        在介绍面向对象软件测试之前,有必要先对面向对象技术的基本概念做一下简单介绍。
               对象和类
               面向对象其实是现实世界模型的自然延伸。现实世界中任何实体都可以看作是对象。对象之间通过消息相互作用。另外,现实世界中任何实体都可归属于某类事物,任何对象都是某一类事物的实例。如果说传统的过程式编程语言是以过程为中心,以算法为驱动的话,那么面向对象的编程语言则是以对象为中心,以消息为驱动的。用公式表示,过程式编程语言为:程序=算法+数据;面向对象编程语言为:程序=对象+消息。
               在面向对象的程序设计中,类是其设计的核心,它实际是一种新的数据类型,也是实现抽象类型的工具,类是通过抽象数据类型的方法来实现的一种数据类型。类是对某一类对象的抽象;而对象是某一种类的实例,因此,类和对象是密切相关的。没有脱离对象的类,也没有不依赖于类的对象。
               封装、继承和多态性
               封装,把数据和操作结合成一体,使程序结构更加紧凑,同时避免了数据紊乱带来的调试与维护的困难;继承,增加了软件的可扩充性,并为代码重用提供了强有力的手段;多态性,使程序员在设计程序时可以对问题进行更好的抽象,易设计出重用性和维护性俱佳的程序。
               封装是将数据和操作数据的函数衔接在一起,构成的一个具有类类型的对象的描述。封装要求一个对象应具备明确的功能,并且有一个或几个接口以便和其他对象相互作用。同时,对象的内部实现(代码和数据)是受保护的,外界不能访问它们,只有对象中的代码才可以访问该对象的内部数据。对象的内部数据结构的不可访问性称为数据隐藏。封装简化了程序员对对象的使用,只需要知道输入什么和输出什么,而对类内部进行什么操作不必追究。
               例如,类Test(以C++为例):
               
               
               输出结果是16,对于main()里的操作,无法更改类Test中的Value值,这样保护了数据Value,实现了数据的隐藏。函数SetValue()和数据Value结合在一起操作,这就实现了封装。
               继承即可以从一个类派生另一个类。派生类(也称为子类)继承了其父类和祖先类的数据成员和成员函数。派生类可增加新的属性和新的操作,另外,派生类在继承的成员函数不合适时也可以放弃不用。
               例如,水果是基类,它具有好吃、营养等水果的基本特征;香蕉和苹果是水果的派生类,它们在继承水果类的一些特征的基础上,增加了各自的特征,如特殊的味道、形状等;红富士苹果和青苹果是苹果类的派生类,它们又增加了各自的新特征。如此继承设计,可以大大减少工作量。
               例如(C++程序),先设计水果类Friut。
               
               苹果类Apple需要与水果类Friut同样的成员函数void Eat和void Taste,另外增加了新的函数void Color和void Shape。在设计时,我们不需要重写void Eat和void Taste,只需要继承水果类即可,苹果类的实际代码如下。
               
               多态性就是多种表现形式,具体来说,可以用“一个对外接口,多个内在实现方法”表示。多态性的实现,一般通过在派生类中重定义基类的虚函数来实现。
               如下例(C++程序),如果A是基类,B和C是A的派生类,基类中多态函数Test的参数是A的指针。那么Test函数可以引用A、B、C的对象如下。
               
               
               正是面向对象软件所独有的这些多态、继承、封装等新特点,使OO程序设计比传统语言程序设计产生错误的可能性更大,使得传统软件测试中的重点不再显得那么突出,也使原来测试经验和实践证明的次要方面成为了主要问题。例如,在传统的面向过程程序中,对于函数y=Func(x);你只需要考虑一个函数“Func()”的行为特点,而在面向对象程序中,你不得不同时考虑基类函数“Base::Func()”的行为和继承类函数“Derived::Func()”的行为。
               面向对象程序的结构不再是传统的功能模块结构,作为一个整体,原有集成测试所要求的,逐步将开发的模块搭建在一起进行测试的方法已不可能。而且,面向对象软件抛弃了传统的开发模式,对每个开发阶段都有不同于以往的要求和结果,已经不可能用功能细化的观点来检测面向对象分析和设计的结果。因此,传统的测试模型对面向对象软件已经不再适用。针对面向对象软件的开发特点,一种新的面向对象测试模型应需而生。
 
       构件
        为了达到门户站点的基本要求,一个企业的网站应当由以下构件组成:
        (1)应用服务器(Application Server)。主要用于企业较大规模电子商务应用的开发、发布和管理,同时实现与企业原有系统的集成。
        (2)工作流和群件服务器。主要用于使工作人员和商业伙伴能通过Internet共享资源、协同工作。
        (3)内容管理子系统。简化企业网站的产品管理、提高效率,并将相应的、经过筛选的内容发送给最终用户。
        (4)目录服务器。企业使用它来管理防火墙内外的用户、资源和控制安全权限,同时为用户的通信和电子商务提供一个通道。
        (5)性能优化工具。改善网站服务质量,包括流量管理、动态数据缓存、网络动态负载(Load Balancing)、知识管理等。
        (6)邮件和消息服务器。使企业和服务提供者能为所有员工、合作伙伴和客户社区提供商业级的通信架构。
        (7)个性化信息服务。在实时分析用户数据的基础上提供一对一的交易平台。通过对用户行为的更好理解,企业更跟踪、分析和理解网站用户。
        (8)搜索引擎。用户提供更广泛的资源。
        (9)安全服务器。包括数据安全、应用安全和交易完全。其基本内容有用防火墙阻止对网络的非授权访问,在安全和个人的角色授权的基础上,只需一次登录就可以访问网站的所有应用,通过提供一种对在线交易的每一方的可信任的授权方式,帮助客户、合作伙伴和员工访问Internet应用。
        (10)网站服务器(Web Server)。将各种网站的信息发布给用户。
        以上是通常构建网站所需要的构件,企业可针对自己的特点以及网站规模大小,应用的类型等自行选择。
        在网站结构的实现上,通常在逻辑上将网站分为三层:表示层、应用逻辑层、数据层。这种结构使得网站具有较好的可扩充性,将表示层与业务功能的实现分离开来,能够更灵活地适应业务的发展。网站不需要对业务逻辑组件进行任何变动,就能够适用新出现的表示形式和客户端。例如,为了使用户更方便地在网站上购物,网站调整了页面格局和页面风格。由于网站结构层次分明,只需要改动网站表示层,业务逻辑层和数据连接层则不需要改变。
        (11)表示层和相关技术。表示层用于为最终用户提供一个友好的用户界面,接受用户提交的事件,并将处理的结果返还给用户。这一层作为应用的前端和“窗口”,决定了用户对网站优劣的评价和总体印象。
        网站从总体上说是独立于客户端的,客户端包括基于浏览器的HTML客户端、给予Java的客户端、传统的C/C++应用、Power Builder客户端以及VB客户端。
        在表示层除了使用最基本的HTML语言外,通常还利用JavaScript Internet脚本语言,以及Java Internet程序开发语言。JavaScript程序运行在客户端,能够完成用户事件获取、数据提交前的合法性校验、错误检查和实现动画效果等。而利用Java开发的JavaServlet程序运行于服务器端,负责实现与业务逻辑层的交互,从业务逻辑层获得数据,并将用户提交的信息传给业务逻辑层,而基于Java语言的JSP程序,则实现数据的动态显示,它将JavaServlet程序获得的数据形成相应的HTML页面传给客户端。
        为了适应电子商务的各种需求,新的表示层技术不断发展。如XML(可扩展标记语言)和RDF(资源描述框架)等都是当前最新的、对表示层产生重大影响的技术。XML通过一种结构化的文本方式来表述数据;RDF提供一种统一的、可互操作的方法通过Internet在程序间交换元数据。
        (12)商务逻辑与实现。商务逻辑层是电子商务系统的核心,也是系统建造过程中的重点和难点。商务逻辑层包括商务应用程序、支持平台(包括商务服务层、商务支持层和基础支持层)。
        支持层向上层(商务应用层)提供的服务主要包括:表达、商务支持、运行支持、开发与集成服务。构成支持平台的技术产品至少应当包括:Web服务器、商务支持软件、集成与开发工具、计算机主机、网络及其他系统软件(如操作系统、管理工具软件等)。
        通常,Web服务器、商务支持软件、部分集成开发环境被集成到一个被称为“应用服务器”的软件包里,所以商务逻辑层在物理上可以简化为以下三个部门:应用软件(实现商务逻辑);应用服务器(为应用软件提供软件支持平台)和其他支持软件;计算机主机及网络(为应用软件提供硬件支持平台)。
        构造商务逻辑层的任务是为选择合适的应用服务器和其他支持软件,开发实现商务逻辑的应用软件系统。
        (13)数据层及实现。构造数据层的关键是开发电子商务与外部系统、内部资源系统的接口,完成系统集成。
        数据层的数据源主要包括:相关信息系统(如ERP系统)的数据与企业的数据库,企业与协作企业(如供应商)间交换的数据,企业与银行间交换的数据,企业与认证中心之间的认证数据,企业与其他商务中介交换的电子数据。
        由于企业商务逻辑的处理过程是一个从市场、销售、采购到客户服务的整体,所以必须将商务逻辑处理过程中所涉及到的数据集成到一起,因此构造数据层的任务是:实现电子商务系统与企业内部和外部信息系统之间的网络互联,并确保安全的网络环境,基于应用服务器平台的商务应用系统与企业内部数据的共享。
 
       敏捷方法
        敏捷软件开发简称敏捷开发,是从20世纪90年代开始逐渐引起广泛关注的一些新型软件开发方法,以应对快速变化的需求。它们的具体名称、理念、过程、术语都不尽相同,相对于“非敏捷”,更强调程序员团队与业务专家之间的紧密协作、面对面沟通、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重人的作用。
        敏捷开发的发展过程中,出现了多个不同的流派,例如,极限编程(ExtremeProgramming, XP)、自适应软件开发、水晶方法、特性驱动开发等。但其中的基本原则是一致的。从开发者的角度,主要的关注点有短平快会议(Stand Up)、小版本发布(Frequent Release)、较少的文档(Minimal Documentation)、合作为重(Collaborative Focus)、客户直接参与(Customer Engagement)、自动化测试(Automated Testing)、适应性计划调整(Adaptive Planning)和结对编程(Pair Programming);从管理者的角度,主要的关注点有测试驱动开发(Test-Driven Development)、持续集成(Continuous Integration)和重构(Refactoring)。
        XP是一种轻量(敏捷)、高效、低风险、柔性、可预测、科学且充满乐趣的软件开发方式,适用于小型或中型软件开发团队,并且客户的需求模糊或需求多变。与其他方法相比,其最大的不同如下:
        (1)在更短的周期内,更早地提供具体、持续的反馈信息。
        (2)迭代地进行计划编制,首先在最开始迅速生成一个总体计划,然后在整个项目开发过程中不断地发展它。
        (3)依赖于自动测试程序来监控开发进度,并及早地捕获缺陷。
        (4)依赖于口头交流、测试和源程序进行沟通。
        (5)倡导持续的演化式的设计。
        (6)依赖于开发团队内部的紧密协作。
        (7)尽可能达到程序员短期利益和项目长期利益的平衡。
        XP由价值观、原则、实践和行为4个部分组成,它们彼此相互依赖、关联,并通过行为贯穿于整个生命周期。XP的核心是其总结的4大价值观,即沟通、简单、反馈和勇气。它们是XP的基础,也是XP的灵魂。XP的5个原则是快速反馈、简单性假设、逐步修改、提倡更改和优质工作。而在XP方法中,贯彻的是“小步快走”的开发原则,因此工作质量决不可打折扣,通常采用测试先行的编码方式来提供支持。
        在XP中,集成了12个最佳实践:计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40小时、现场客户和编码标准。
        敏捷方法主要适用于小规模软件的开发和小型团队的开发。这些方法所提出来的一些所谓的“最佳实践”并非对每个项目都是最佳的,需要项目团队根据实际情况来决定。而且,敏捷方法的有些原则在应用中不一定能得到贯彻和执行。因此,在实际工作中,我们可以“取其精华,去其糟粕”,把敏捷方法和其他方法结合起来。
 
       软件系统
        网络系统软件包括网络操作系统和网络协议等。网络操作系统是指能够控制和管理网络资源的软件,是由多个系统软件组成,在基本系统上有多种配置和选项可供选择,使得用户可根据不同的需要和设备构成最佳组合的互联网络操作系统。网络协议是保证网络中两台设备之间正确传送数据的约定。
   题号导航      2009年上半年 软件评测师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第15题    在手机中做本题