从下列的4道试题(试题一至试题四) 中任选1道解答。请在答题纸上的指定位置处将所选择试题的题号框涂黑。若多涂或者未涂题号框,则对题号最小的一道试题进行评分。
从下列的4道试题(试题一至试题四) 中任选1道解答。请在答题纸上的指定位置处将所选择试题的题号框涂黑。若多涂或者未涂题号框,则对题号最小的一道试题进行评分。
基于构作的软件开发 (Component-Based Software Development,CBSD)
是一种基于分布对象技术、强调通过可复用构件设计与构造软件系统的软件复用途径。基于构件的软件系统中的构件可以是COTS
(Commercial-Off-the-Shelf)构件,也可以是通过其它途径获得的构件(如自行开发)。CBSD将软件开发的重点从程序编写转移到了基于已有构件的组装,以更快地构造系统,减轻用来支持和升级大型系统所需要的维护负担,从而降低软件开发的费用。请围绕“基于构件的软件开发方法及其应用"论题,依次从以下三个方面进行论述。
概要叙述你参与管理和开发的软件项目,以及你在其中所承担的主要工作。
详细论述基于构件的软件开发方法的主要过程。
结合你具体参与管理和开发的实际项目,请说明具体实施过程以及碰到的主要问题。
软件维护是指在软件交付使用后,直至软件被淘汰的整个时间范围内,为了改正错
误或满足新的需求而修改软件的活动。在软件系统运行过程中,软件需要维护的原因是
多种多样的,根据维护的原因不同,可以将软件维护分为改正性维护、适应性维护、完
善性维护和预防性维护。在维护的过程中,也需要对软件的可维护性进行度量。在软件
外部,一般采用 MTTR 来度量软件的可维护性;在软件内部,可以通过度量软件的复杂
性来间接度量软件的可维护性。
据统计,软件维护阶段占整个软件生命周期60%以上的时间。因此,分析影响软件
维护的因素,度量和提高软件的可维护性,就显得十分重要。
请围绕“软件维护方法及其应用”论题,依次从以下三个方面进行论述。
概要叙述你参与管理和开发的软件项目,以及你在其中所承担的主要工作。
详细论述影响软件维护工作的因素有哪些。
结合你具体参与管理和开发的实际项目,说明在具体维护过程中,如何度量软件的可维护性,说明具体的软件维护工作类型。
区块链作为一种分布式记账技术,目前已经被应用到了资产管理、物联网、医疗管理、政务监管等多个领域。从网络层面来讲,区块链是一个对等网络(Peer
to Peer,
P2P),网络中的节点地位对等,每个节点都保存完整的账本数据,系统的运行不依赖中心化节点,因此避免了中心化带来的单点故障问题。同时,区块链作为一个拜占庭容错的分布式系统,在存在少量恶意节点情况下可以作为一个整体对外提供稳定的服务。请围绕“区块链技术及应用”论题,依次从以下三个方面进行论述。
1.概要叙述你参与管理和开发的软件项目以及你在其中所承担的主要工作。
2.区块链包含多种核心技术,请简要描述区块链的3种核心技术。
3.具体阐述你参与管理和开发的项目是如何应用区块链技术进行设计与实现。
随着5G、大数据、人工智能、物联网等技术的不断成熟,各行各业的业务场景日益复杂,企业数据呈现出大规模、多样性的特点,特别是非结构化数据呈现出爆发式增长趋势。在这一背景下,企业数据管理不再局限于传统的结构化
OLTP (On-Line Transaction
Processing)数据交易过程,而是提出了多样化、异质性数据的实时处理要求。传统的数据湖(Data
Lake)在事务一致性及实时处理方面有所欠缺,而数据仓库(Data
Warehouse)也无法应对高并发、多数据类型的处理。因此,支持事务一致性、提供高并发实时处理及分析能力的湖仓一体(Lake House)
架构应运而生。湖仓一体架构在成本、灵活性、统一数据存储、多元数据分析等多方面具备优势,正逐步转化为下一代数据管理系统的核心竞争力。请围绕“湖仓一体架构及其应用”论题,依次从以下三个方面进行论述。
概要叙述你参与管理和开发的、采用湖仓一体架构的软件项目以及你在其中所
承担的主要工作。请对湖仓一体架构进行总结与分析,给出其中四类关键特征,并简要对这四类
关键特征的内涵进行阐述。具体阐述你参与管理和开发的项目是如何采用湖仓一体架构的,并围绕上述四类关键特征,详细论述在项目设计与实现过程中遇到了哪些实际问题,是如何解决的。
一、概要叙述你所参与管理或开发的软件项目以及你在其中所承担的主要工作。
二、详细论述基于构件的软件开发方法的主要过程。
CBSD方法使得软件开发不再一切从头开发,开发的过程就是构件组装的过程,维护的过程就是构件升级、替换和扩充的过程,其优点是提高了软件开发的效率;构件可由一方定义其规格说明,被另一方实现,然后供给第三方使用,CBSD允许多个项目同时开发,降低了费用,提高了可维护性,可实现分步提交软件产品。
CBSD方法由软件的需求分析和定义、架构设计、构件库的建立、应用软件构建、测试和发布五个阶段组成。
( )需求分析和定义:在这阶段需要重点说明系统跟曾经开发过的其他系统类似,具有大量可复用的成熟构件。
( )架构设计:结合实际项目,根据上一阶段获得的需求和定义提出架构模型。
( )构件库的建立:这是本论文主题的重点。构件的获得有四个途径:
1)从现有构件中获得符合要求的构件,直接使用或作适应性修改,得到可复用的构件。
2)通过遗留工程(Legacy Engineering),将具有潜在复用价值的构件提取出来,得到可复用的构件。
3)从市场上购买现成的商业构件,即 COTS(Commercial Off-The-Shell)构件。
4)开发新的符合要求的构件。
而构件库的检索方法有3种
1)基于关键字的检索。
2)刻面检索法。
3)超文本检索法。
( )应用软件构建:构建过程主要是构件的组装过程,而大致有三种技术:
1)基于功能的组装技术。基于功能的组装技术采用子程序调用和参数传递的方式将构件组装起来。它要求库中的构件以子程序/过程/函数的形式出现,并且接口说明必须清晰。当使用这种组装技术进行软件开发时,开发人员首先要对新系统进行功能分解,将系统分解为强内聚、松耦合的功能模块;然后根据各模块的功能需求提取构件,进行适应性修改后,再挂接到上述功能分解框架中。
2)基于数据的组装技术。基于数据的组装技术首先根据当前软件问题的核心数据结构设计出一个框架,然后根据框架中各结点的需求提取构件并进行适应性修改,再将构件逐个分配至框架中的适当位置。此后,构件的组装方式仍然是传统的子程序调用与参数传递。这种组装技术也要求库中构件以子程序形式出现,但它所依赖的软件设计方法不再是功能分解,而是面向数据的设计方法,例如,Jackson
系统开发方法。3)面向对象的组装技术。由于封装和继承特征,面向对象方法比其他软件开发方法更适合支持软件复用。在面向对象的软件开发方法中,如果从类库中检索出来的基类能够完全满足新系统的需求,则可以直接应用,否则,必须以基类为父类,生成相应的子类,以满足新系统的需求。
( )测试和发布:可以是一个增量和迭代的过程。
三、结合你具体参与管理和开发的实际项目,请说明具体实施过程以及碰到的主要问题。
可能遇到的问题包括:构件不适配;连接子不适配;从遗留工程中抽取的构件性能不满足;购买现成的商业构件无法完美匹配等。
影响软件的可维护性有以下7个因素:
1、可理解性
一个可维护的软件必然是可理解的。
软件的可理解性是指通过阅读源代码和相关文档,了解软件的功能和如何运行的容易程度。
软件的可理解性可以使用“90-10测试”的方法来衡量,即如果一个有经验的程序员阅读一份源代码清单10分钟,可以写出该程序的90%,则认为这个程序具有可理解性。
2、可测试性
一个可维护的软件必然是可测试的。
软件的可测试性是指验证软件程序正确的难易程度。
可测试性好的软件,通常意味着软件设计简单,复杂性低。因为软件的复杂性越大,测试的难度也就越大。
3、可修改性
一个可维护的软件必然是可修改的。
软件的可修改性是指修改软件的难易程度。
软件的可修改性可以通过进行几个简单的修改练习来评价。假设软件的平均复杂性是C,要修改的模块的复杂性是A,那么修改的难度可由下面公式计算:D=A/C
4、可靠性
一个软件的可靠性越高,需要维护的概率就会越低。
软件的可靠性是指软件在满足用户需求的前提下,在给定的时间段内正确运行的概率。
软件可靠性的度量有以下两种方法:
根据软件的错误统计进行可靠性预测。如度量软件的平均失效间隔时间(MTTF)。
根据软件的复杂性进行可靠性预测。
5、可移植性
软件运行环境的变化是软件维护的一种常见情形,可移植性好的软件会降低维护的概率。
软件的可移植性是指将软件从一个环境移植到新的的环境下正确运行的难易程度。
一个可移植的软件应具有良好的结构,使用独立于机器的高级语言编写。
6、可使用性
软件易于使用通常意味着软件设计简单,易于理解。
软件的可使用性是指用户使用软件的难易程度。
软件的可使用性可以通过测试用户首次使用软件掌握常用功能的时间来衡量。
7、效率
效率是指软件既能很好地完成用户期望的功能、性能,又不浪费机器资源的程度。
软件设计不能一味地追求效率,盲目地追求效率会使得软件的其它质量特性受到影响,比如降低软件的可维护性。
区块链从本质上来看就是一个数据库,在其中存储的数据具备了“不可伪造,全程留痕,公开可追溯“等特性。区块链的四大核心技术如下:
1、分布式账本。指的是交易记账由分布在不同地方的多个节点共同完成,而且每一个节点记录的是完整的账目,因此它们都可以参与监督交易合法性,同时也可以共同为其作证。跟传统的分布式存储有所不同,区块链的分布式存储的独特性主要体现在两个方面:一是区块链每个节点都按照块链式结构存储完整的数据,传统分布式存储一般是将数据按照一定的规则分成多份进行存储。二是区块链每个节点存储都是独立的、地位等同的,依靠共识机制保证存储的一致性,而传统分布式存储一般是通过中心节点往其他备份节点同步数据。没有任何一个节点可以单独记录账本数据,从而避免了单一记账人被控制或者被贿赂而记假账的可能性。也由记账节点足够多,理论上讲除非所有的节点被破坏,否则账目就不会丢失,从而保证了账目数据的安全性。
2、非对称加密。存储在区块链上的交易信息是公开的,但是账户身份信息是高度加密的,只有在数据拥有者授权的情况下才能访问到,从而保证了数据的安全和个人的隐私。
3、共识机制。就是所有记账节点之间怎么达成共识,去认定一个记录的有效性,这既是认定的手段,也是防止篡改的手段。区块链提出了四种不同的共识机制,适用于不同的应用场景,在效率和安全性之间取得平衡。区块链的共识机制具备“少数服从多数”以及“人人平等”的特点,其中“少数服从多数”并不完全指节点个数,也可以是计算能力、股权数或者其他的计算机可以比较的特征量。“人人平等”是当节点满足条件时,所有节点都有权优先提出共识结果、直接被其他节点认同后并最后有可能成为最终共识结果。以比特币为例,采用的是工作量证明,只有在控制了全网超过51%的记账节点的情况下,才有可能伪造出一条不存在的记录。当加入区块链的节点足够多的时候,这基本上不可能,从而杜绝了造假的可能。
4、智能合约。是基于这些可信的不可篡改的数据,可以自动化的执行一些预先定义好的规则和条款。以保险为例,如果说每个人的信息(包括医疗信息和风险发生的信息)都是真实可信的,那就很容易的在一些标准化的保险产品中,去进行自动化的理赔。在保险公司的日常业务中,虽然交易不像银行和证券行业那样频繁,但是对可信数据的依赖是有增无减。因此,笔者认为利用区块链技术,从数据管理的角度切入,能够有效地帮助保险公司提高风险管理能力。具体来讲主要分投保人风险管理和保险公司的风险监督。
湖仓一体是一种新型的开放式架构,打通了数据仓库和数据湖,将数据仓库的高性能及管理能力与数据湖的灵活性融合了起来,底层支持多种数据类型并存,能实现数据间的相互共享,上层可以通过统一封装的接口进行访问,可同时支持实时查询和分析,为企业进行数据治理带来了更多的便利性。湖仓一体可在数据入湖后原地进行数据处理与分析,能有效避免数据冗余及流动导致的算力、网络及成本开销,可以作为超大型ODS存储贴源数据,实现全量数据的实时处理。
湖仓一体架构在数据管理中主要具有以下几大关键特征:
一是支持分析多种类型数据。湖仓一体架构可为多应用程序提供数据的入库、转换、分析和访问。数据类型包括结构化与非结构化类型,如文本、图像、视频、音频等,以及半结构化数据,如JSON等。
二是数据可治理,避免产生数据沼泽。湖仓一体架构可以支持各类数据模型的实现和转变,支持DW模式架构,例如星型模型、雪花模型等,可保证数据的完整性,同时具有健全的治理和审计机制,能够避免数据沼泽现象的出现。
三是事务支持。在企业中,数据库往往要为业务系统提供并发的数据读取和写入。湖仓一体架构对事务ACID的支持,可确保并发访问,尤其是SQL访问模式下的数据一致性、正确性。
四是BI支持。湖仓一体支持直接在源数据上使用BI工具,这样可以提高分析效率,降低数据延时。另外,相比于在数据湖和数据仓库中分别操作两个副本的方式,湖仓一体更具成本优势。
五是存算分离。湖仓一体采用存算分离架构,可使系统能够扩展到更大规模的并发能力和数据容量,能满足新时代对于分布式数据架构的要求。
六是开放性。湖仓一体采用开放、标准化的存储格式(例如行存、列存、块存),能提供丰富的API支持。因此,各种工具和引擎(包括机器学习和Python/R库)可以高效地对数据进行直接访问。
从落地性来看,湖仓一体技术架构落地目前有三种方式:
第一个融合方向是基于Hadoop体系的数据湖向数据仓库能力扩展,湖中建仓,从数据湖进化到湖仓一体。湖仓一体结合了数据湖和数据仓库特点,直接在用于数据湖的低成本存储上实现与数据仓库中类似的数据结构和数据管理功能。目前主要有Netflix等开源企业在探索此技术路线。
第二个是基于自身云平台或第三方对象存储(如OSS、S3、Ceph等),基于Hadoop或自研技术进行湖仓一体能力的搭建。探索此技术路线的通常是各大云厂商,如AWS、阿里云、华为云等。
第三个融合方向是以数据库技术为基础,自研分布式平台,从调度、计算到存储不依赖第三方平台,形成可以灵活在公有云、私有云、裸金属等场景独立部署使用的能力。技术方向上更注重于实时高并发场景及非结构化数据数据治理,并逐步向更广泛的分析场景发展,主要厂商以Snowflakes、Databricks、巨杉数据库等为代表。