免费智能真题库 > 历年试卷 > 软件设计师 > 2013年上半年 软件设计师 下午试卷 案例
  第3题      
  知识点:   类图   用例图   net   功能描述   开发过程   面向对象方法   认证   系统管理   用户登录

 

【说明】
某城市拟开发一个基于Web的城市黄页,公开发布该城市重要的组织或机构(以下统称为客户)的基本信息,方便城市生活。该系统的主要功能描述如下:
(1)搜索信息:任何使用Internet的网络用户都可以搜索发布在城市黄页中的信息,例如客户的名称、地址、联系电话等。
(2)认证:客户若想在城市黄页上发布信息,需要通过系统的认证。认证成功后,该客户成为系统授权用户。
(3)更新信息:授权用户登录系统之后,可以更改自己的在城市黄页中的相关信息,例如变更联系电话等。
(4)删除客户:对于拒绝继续在城市黄页上发布信息的客户,由系统管理员删除该客户的相关信息。
系统采用面向对象方法进行开发,在开发过程中认定出如表3-1所示的类。系统的用例图和类图分别如图3-1和3-2所示。



 
问题:3.1   根据说明中的描述,给出图3-1中的A1和A2处所对应的参与者、UC1和UC2处所对应的用例以及(1)处的关系。
 
问题:3.2   根据说明中的描述,给出图3-2中的C1~C5所对应的类名(表3-1中给出的类名)和(2)~(5)处所对应的多重度。
 
问题:3.3   认定类是面向对象分析中非常关键的一个步骤。一般首先从问题域中得到候选类集合,再根据相应的原则从该集合中删除不作为类的,剩余的就是从问题域中认定出来的类。简要说明选择题选类的原则,以及对候选类集合进行删除的原则。
 
 
 

   知识点讲解    
   · 类图    · 用例图    · net    · 功能描述    · 开发过程    · 面向对象方法    · 认证    · 系统管理    · 用户登录
 
       类图
        类图(Class Diagram)展现了一组对象、接口、协作及其之间的关系。在面向对象系统的建模中所建立的最常见的图就是类图。
        类图给出了系统的静态设计视图,包含主动类的类图给出了系统的静态进程视图。作为模型管理视图还可以含有包或子系统,二者都用于把模型元素聚集成更大的组块。类图用于对系统的静态视图建模。这种视图主要支持系统的功能需求,即系统要提供给最终用户的服务。当对系统的静态设计建模时,通常以下述3种方式之一使用类图:对系统的词汇建模;对简单的协作建模;对逻辑数据库模式建模。
        作为静态视图的类图可以包含依赖、关联、泛化、组合、实现关系以及注解和约束等。
        (1)依赖关系是两个事物之间的语义关系,其中一个事物发生变化会影响另一个事物的语义。
        (2)关联关系是一种结构关系,它描述了一组对象之间的链接关系。其中有一种特殊类型的关联关系,即聚集关系,它描述了整体与部分的结构关系。
        (3)泛化关系是一种一般—特殊关系,利用这种关系,子类可以共享父类的结构和行为。
        (4)实现关系是类之间的语义关系,其中的一个类制订了另一个类保证执行的契约。实现关系用于两种情况:在接口和实现它们的类或构件之间;在用例和它们的协作之间。
        (5)组合是聚集关系的变种,表示元素间更强的组合关系。各种关系图例如下图所示。
        
        各种关系图例
 
       用例图
        用例图(Use Case Diagram)展现了一组用例、参与者(Actor)以及两者之间的关系。用例图通常包括用例、参与者、扩展关系、包含关系。用例图用于对系统的静态用例视图进行建模,主要支持系统的行为,即该系统在它的周边环境的语境中所提供的外部可见服务。当对系统的静态用例视图建模时,可以用下列两种方式来使用用例图:对系统的语境建模;对系统的需求建模。
 
       net
        在网络管理中,最为常用的就是net命令家族。常用的net命令有以下几个。
        .net view命令:显示由指定的计算机共享的域、计算机或资源的列表。
        .net share:用于管理共享资源,使网络用户可以使用某一服务器上的资源。
        .net use命令:用于将计算机与共享的资源相连接或断开,或者显示关于计算机连接的信息。
        .net start命令:用于启动服务,或显示已启动服务的列表。
        .net stop命令:用于停止正在运行的服务。
        .net user命令:可用来添加或修改计算机上的用户账户,或者显示用户账户的信息。
        .net config命令:显示正在运行的可配置服务,或显示和更改服务器服务或工作站服务的设置。
        .net send命令:用于将消息(可以是中文)发送到网络上的其他用户、计算机或者消息名称上。
        .net localgroup命令:用于添加、显示或修改本地组。
        .net accounts命令:可用来更新用户账户数据库、更改密码及所有账户的登录要求。
 
       功能描述
        与PC端一样,移动端登录是商务活动不可或缺的功能。用户应用社交、电商、金融等App必须进行注册登录,如微信、QQ、支付宝、淘宝、美团等。移动端用户账号登录注册主要有几种形式:第三方账号、手机号、邮箱。
        (1)第三方账号(QQ、微信、微博等)。使用第三方账号优势是用户操作简单,方便用户快速的体验产品;其缺点是通过第三方平台获取到的用户信息太少,手机没有安装对应App时,通过网页进行登录认证需要输入账号密码,复杂度很高。移动端第三方登录模块的基本功能如下图所示。
        
        移动第三方登录模块基本流程图
        (2)手机号注册登录。通过手机获取验证码(短信),验证后设置密码进行注册;登录时使用手机号和密码登录。获取验证码的优点是可以很大程度上防止恶意注册,可以导入通讯录关系而且用户不需要记忆成本;其缺点是短信验证码需要成本,用户隐私可能泄露,手机号丢失后找回复杂。移动端手机号注册登录模块的基本功能如下图所示。
        
        移动手机号注册登录模块基本流程图
        (3)邮箱登录注册。邮箱登录验证成本低,对用户来说隐私性更好,但是移动端邮箱输入复杂,验证不方便,普及率不高普及率高。
 
       开发过程
        嵌入式系统软件的开发过程可以分为项目计划、可行性分析、需求分析、概要设计、详细设计、程序建立、下载、调试、固化、测试及运行等几个阶段。
        项目计划、可行性分析、需求分析、概要设计及详细设计等几个阶段,与通用软件的开发过程基本一致,都可按照软件工程方法进行,如采用原型化方法、结构化方法等。
        :由于嵌入式软件的运行和开发环境不同,开发工作是交叉进行的,所以每一步都要考虑到这一点。
        程序建立阶段的工作是根据详细设计阶段产生的文档进行的,主要是源代码编写、编译链接等子过程,这些工作都在宿主机上进行,不需要用到目标机。产生应用程序的可执行文件后,就要用到交叉开发环境进行调试,根据实际情况可以选用3.6.3节中提到的调试方法或其有效组合来进行。由于嵌入式系统对安全性和可靠性的要求比通用计算机系统要高,所以,在对嵌入式系统进行白盒测试时,要求有更高的代码覆盖率。
        最后,要将经调试后正确无误的可执行程序固化到目标机上。根据嵌入式系统硬件配置的不同,可以固化在EPROM(Erasable Programmable ROM,可擦除可编程ROM)和Flash等存储器中,也可固化在DOC(DiskOnChip)等电子盘中,通常还要借助一些专用编程器进行。
 
       面向对象方法
        面向对象方法是当前的主流开发方法,拥有大量不同的方法,主要包括OMT(Object Model Technology,对象建模技术)方法、Coad/Yourdon方法、OOSE(Object-Oriented Software Engineering,面向对象的软件工程)及Booch方法等,而OMT、OOSE及Booch最后统一成为UML(United Model Language,统一建模语言)。
               Coad/Yourdon方法
               Coad/Yourdon方法主要由面向对象的分析(Object-Oriented Analysis, OOA)和面向对象的设计(Object-Oriented Design, OOD)构成,特别强调OOA和OOD采用完全一致的概念和表示法,使分析和设计之间不需要表示法的转换。该方法的特点是表示简炼、易学,对于对象、结构、服务的认定较系统和完整,可操作性强。
               在Coda/Yourdon方法中,OOA的任务主要是建立问题域的分析模型。分析过程和构造OOA概念模型的顺序由5个层次组成,分别是类与对象层、属性层、服务层、结构层和主题层,它们表示分析的不同侧面。OOA需要经过5个步骤来完成整个分析工作,即标识对象类、标识结构与关联(包括继承、聚合、组合及实例化等)、划分主题、定义属性和定义服务。
               OOD中将继续贯穿OOA中的5个层次和5个活动,它由4个部分组成,分别是人机交互部件、问题域部件、任务管理部件和数据管理部件,其主要的活动就是这4个部件的设计工作。
               Booch方法
               Booch认为软件开发是一个螺旋上升的过程,每个周期包括4个步骤,分别是标识类和对象、确定类和对象的含义、标识关系、说明每个类的接口和实现。Booch方法的开发模型包括静态模型和动态模型,静态模型分为逻辑模型(类图、对象图)和物理模型(模块图、进程图),描述了系统的构成和结构。动态模型包括状态图和顺序图。该方法对每一步都做了详细的描述,描述手段丰富而灵活。
               Booch不仅建立了开发方法,还提出了设计人员的技术要求,以及不同开发阶段的人力资源配置。Booch方法的基本模型包括类图与对象图,主张在分析和设计中既使用类图,也使用对象图。
               OMT方法
               OMT作为一种软件工程方法学,支持整个软件生存周期,覆盖了问题构成分析、设计和实现等阶段。OMT方法使用了建模的思想,讨论如何建立一个实际的应用模型。从3个不同而又相关的角度建立了3类模型,分别是对象模型、动态模型和函数模型,OMT为每一个模型提供了图形表示。
               (1)对象模型。描述系统中对象的静态结构、对象之间的关系、属性和操作。它表示静态的、结构上的、系统的“数据”特征。主要用对象图来实现对象模型。
               (2)动态模型。描述与时间和操作顺序有关的系统特征,如激发事件、事件序列、确定事件先后关系的状态。它表示瞬时、行为上的和系统的“控制”特征。主要用状态图来实现动态模型。
               (3)函数模型。描述与值的变换有关的系统特征,包括功能、映射、约束和函数依赖。主要用数据流图来实现功能模型。
               在进行OMT建模时,通常包括4个活动,分别是分析、系统设计、对象设计和实现。
               (1)分析:建立可理解的现实世界模型。通常从问题陈述入手,通过与客户的不断交互及对现实世界背景知识的了解,对能够反映系统的3个本质特征(对象类及它们之间的关系,动态的控制流,受约束的数据的函数变换)进行分析,构造出现实世界的模型。
               (2)系统设计:确定整个系统的体系结构,形成求解问题和建立解答的高层策略。
               (3)对象设计:在分析的基础上,建立基于分析模型的设计模型,并考虑实现细节。其焦点是实现每个类的数据结构及所需的算法。
               (4)实现:将对象设计阶段开发的对象类及其关系转换为程序设计语言、数据库或硬件的实现。
               OOSE
               OOSE在OMT的基础上,对功能模型进行了补充,提出了用例(use case)的概念,最终取代了数据流图来进行需求分析和建立功能模型。
               OOSE方法采用5类模型来建立目标系统。
               (1)需求模型:获取用户的需求,识别对象,主要的描述手段有用例图、问题域对象模型及用户界面。
               (2)分析模型:定义系统的基本结构。将分析模型中的对象分别识别到分析模型中的实体对象、界面对象和控制对象三类对象中。每类对象都有自己的任务、目标并模拟系统的某个方面。实体对象模拟那些在系统中需要长期保存并加以处理的信息。实体对象由使用事件确定,通常与现实生活中的一些概念相符合。界面对象的任务是提供用户与系统之间的双向通信,在使用事件中所指定的所有功能都直接依赖于系统环境,它们都放在界面对象中。控制对象的典型作用是将另外一些对象组合形成一个事件。
               (3)设计模型:分析模型只注重系统的逻辑构造,而设计模型需要考虑具体的运行环境,即将分析模型中的对象定义为模块。
               (4)实现模型:用面向对象的语言来实现。
               (5)测试模型:测试的重要依据是需求模型和分析模型,测试的方法与9.8节所介绍的方法类似,而底层是对类(对象)的测试。测试模型实际上是一个测试报告。
               OOSE的开发活动主要分为3类,分别是分析、构造和测试。其中分析过程分为需求分析和健壮性分析两个子过程,分析活动分别产生需求模型和分析模型。构造活动包括设计和实现两个子过程,分别产生设计模型和实现模型。测试过程包括单元测试、集成测试和系统测试三个过程,共同产生测试模型。
               用例是OOSE中的重要概念,在开发各种模型时,它是贯穿OOSE活动的核心,描述了系统的需求及功能。用例实际上是描述系统用户(使用者、执行者)对于系统的使用情况,是从使用者的角度来确定系统的功能。因此,首先必须分析确定系统的使用者,然后进一步考虑使用者的主要任务、使用的方式、识别所使用的事件,即用例。
 
       认证
        认证又分为实体认证和消息认证两种。实体认证是识别通信对方的身份,防止假冒,可以使用数字签名的方法。消息认证是验证消息在传送或存储过程中有没有被篡改,通常使用报文摘要的方法。
               基于共享密钥的认证
               如果通信双方有一个共享的密钥,则可以确认对方的真实身份。这种算法依赖于一个双方都信赖的密钥分发中心(Key Distribution Center,KDC),如下图所示,其中的A和B分别代表发送者和接收者,KAKB分别表示A、B与KDC之间的共享密钥。
               
               基于共享密钥的认证协议
               认证过程如下:A向KDC发出消息{A,KA(B,KS)},说明自己要与B通信,并指定了与B会话的密钥KS。注意,这个消息中的一部分(B,KS)是用KA加密的,所以第三者不能了解消息的内容。KDC知道了A的意图后就构造了一个消息{KB(A,KS)}发给B。B用KB解密后就得到了A和KS,然后就可以与A用KS会话了。
               然而,主动攻击者对这种认证方式可能进行重放攻击。例如A代表雇主,B代表银行。第三者C为A工作,通过银行转账取得报酬。如果C为A工作了一次,得到了一次报酬,并偷听和复制了A和B之间就转账问题交换的报文,那么贪婪的C就可以按照原来的次序向银行重发报文2,冒充A与B之间的会话,以便得到第二次、第三次……报酬。在重放攻击中攻击者不需要知道会话密钥KS,只要能猜测密文的内容对自己有利或是无利就可以达到攻击的目的。
               基于公钥的认证
               这种认证协议如下图所示。A向B发出EB(A,RA),该报文用B的公钥加密。B返回EARARBKS),用A的公钥加密。这两个报文中分别有A和B指定的随机数RARB,因此能排除重放的可能性。通信双方都用对方的公钥加密,用各自的私钥解密,所以应答比较简单。其中的KS是B指定的会话键。这个协议的缺陷是假定双方都知道对方的公钥。
               
               基于公钥的认证协议
 
       系统管理
        系统管理过程规定安全性和系统管理如何协同工作,以保护机构的系统。系统管理的过程是:软件升级;薄弱点扫描;策略检查;日志检查;定期监视。
        要及时安装操作系统和服务器软件的最新版本和修补程序。因为不断会有一些系统的漏洞被发现,通常软件厂商会发布新的版本或补丁程序以修补安全漏洞,保持使用的版本是最新的可以使安全的威胁最小。要进行必要的安全配置,应在系统配置中关闭存在安全隐患的、不需要的服务,比如:FTP、Telnet、finger、login、shell、BOOTP、TFTP等,这些协议都存在安全隐患,所以要尽量做到只开放必须使用的服务,关闭不经常用的协议及协议端口号。要加强登录过程的身份认证,设置复杂的、不易猜测的登录密码,严密保护账号密码并经常变更,防止非法用户轻易猜出密码,确保用户使用的合法性,限制未授权的用户对主机的访问。严格限制系统中关键文件的使用许可权限,加强用户登录身份认证,严格控制登录访问者的操作权限,将其完成的操作限制在最小的范围内。充分利用系统本身的日志功能,对用户的所有访问做记录,定期检查系统安全日志和系统状态,以便及早发现系统中可能出现的非法入侵行为,为管理员的安全决策提供依据,为事后审查提供依据。还要利用相应的扫描软件对操作系统进行安全性扫描评估、检测其存在的安全漏洞,分析系统的安全性,提出补救措施。
 
       用户登录
               PC端用户登录
                      功能描述
                      登录是用户在电子商务网站中进行各种商务活动的前提,登录模块的功能是判断用户是否合法(已注册),如果合法用户忘记了密码要能根据注册信息找回密码,如果是非法用户,登录了多次是否要进行限制,只有合法用户且密码正确才能登录成功。登录模块的基本功能如下图所示。
                      
                      登录模块基本流程图
                      界面设计
                      登录页面包括TextBox和Label控件,分别用于用户信息的输入及显示提示性文本信息,另外,验证控件对用户输入进行验证。登录页面如下图所示。
                      
                      登录界面
                      代码实现
                      当用户单击“登录”按钮时,首先验证控件会验证用户是否填写信息,如果没有填写则提示用户填写,如果已经填写了,则判断用户是否是合法用户,如果是合法用户,再判断用户密码是否正确。主要程序代码如下:
                      
               移动端用户登录
                      功能描述
                      与PC端一样,移动端登录是商务活动不可或缺的功能。用户应用社交、电商、金融等App必须进行注册登录,如微信、QQ、支付宝、淘宝、美团等。移动端用户账号登录注册主要有几种形式:第三方账号、手机号、邮箱。
                      (1)第三方账号(QQ、微信、微博等)。使用第三方账号优势是用户操作简单,方便用户快速的体验产品;其缺点是通过第三方平台获取到的用户信息太少,手机没有安装对应App时,通过网页进行登录认证需要输入账号密码,复杂度很高。移动端第三方登录模块的基本功能如下图所示。
                      
                      移动第三方登录模块基本流程图
                      (2)手机号注册登录。通过手机获取验证码(短信),验证后设置密码进行注册;登录时使用手机号和密码登录。获取验证码的优点是可以很大程度上防止恶意注册,可以导入通讯录关系而且用户不需要记忆成本;其缺点是短信验证码需要成本,用户隐私可能泄露,手机号丢失后找回复杂。移动端手机号注册登录模块的基本功能如下图所示。
                      
                      移动手机号注册登录模块基本流程图
                      (3)邮箱登录注册。邮箱登录验证成本低,对用户来说隐私性更好,但是移动端邮箱输入复杂,验证不方便,普及率不高普及率高。
                      界面设计
                      由于移动端(手机)屏幕的限制,长字符串的输入以及字母数字符号间的切换对用户来说很不方便,因此要特别注意在注册登录界面的设计环节。在输入方面增加单词的输入联想,邮箱的后缀列为选择菜单,输入手机号/卡号/验证码时自动弹出数字输入面板,减少冗余操作,默认勾选用户协议等;在显示方面,手机号、银行卡等长字符串应进行分类,如手机号显示为***_****_****,验证码短信发送时将数字显示到短信最前方,这样用户可以直接从短信摘要取得信息而不需要切换到短信应用。
                      代码实现
                      移动端界面的代码实现由于采用的编程方式各不相同,实现的过程差异很大,这里通过HTML、CSS和JSP+MySQL数据库设计一个简单的手机验证登录界面,如下图所示。当用户单击“获取验证码”按钮时,获取验证码设置点击事件,并将值发送到send()方法,然后判断是否传输成功。如果成功,为数据库中添加字段,由前端控制器方法实现添加成功后,服务器端JSON返回信息,随后前台进行登录验证。
                      
                      一个简单的手机注册登录界面
                      主要代码如下:
                      
                      
   题号导航      2013年上半年 软件设计师 下午试卷 案例   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
 
第3题    在手机中做本题