高级软件工程习题

1.简述《国家信息化发展战略纲要》

《国家信息化发展战略纲要》是为了以信息化驱动现代化,建设网络强国而制定的法规。
《纲要》指出,当今世界,信息技术创新日新月异,以数字化、网络化、智能化为特征的信息化浪潮蓬勃兴起。谁在信息化上占据制高点,谁就能够掌握先机、赢得优势、赢得安全、赢得未来。
《纲要》强调,要围绕“五位一体”总体布局和“四个全面”战略布局,牢固树立创新、协调、绿色、开放、共享的发展理念,贯彻以人民为中心的发展思想,以信息化驱动现代化为主线,以建设网络强国为目标。
纲要》要求,坚持“统筹推进、创新引领、驱动发展、惠及民生、合作共赢、确保安全”的基本方针,提出网络强国“三步走”的战略目标。
《纲要》指出,增强发展能力、提升应用水平、优化发展环境,是国家信息化发展的三大战略任务,包括14项具体工作内容。
《纲要》强调,必须坚持中央网络安全和信息化领导小组对国家信息化发展的集中统一领导。

2.简述软件工程所需要掌握的知识体系

软件工程学科由10个知识域构成:
(1) 软件需求
软件需求描述解决现实世界某个问题的软件产品及对软件产品的约束。
(2) 软件设计
软件设计涉及软件体系结构、构件、接口、以及系统或构件的其它特征,软件设计质量分析和评估、软件设计的符号、软件设计策略和方法等。
(3) 软件构造
软件构造通过编码、单元测试、集成测试、调试、确认这些活动,生成可用的、有意义的软件。
(4) 软件测试
测试涉及测试的标准、测试技术、测试度量和测试过程。
(5) 软件维护
改正软件的缺陷、提高软件性能或其他属性、使软件产品适应新的环境。
(6) 软件配置管理
软件配置管理包括配置管理过程的管理、软件配置鉴别、配置管理控制、配置管理状态记录、配置管理审计、软件发布和交付管理等。
(7) 软件工程管理
运用管理活动,如计划、协调、度量、监控、控制和报告,确保软件开发和维护是系统的、规范的、可度量的。
(8) 软件工程过程
软件工程过程关注软件过程的定义、实现、评估、测量、管理、变更、改进,以及过程和产品的度量。
(9) 软件工程工具和方法
软件工具分为:需求工具、设计工具、构造工具、测试工具、维护工具、配置管理工具、工程管理工具、工程过程工具、软件质量工具等。软件工程方法分为:①启发式方法,包括结构化方法、面向数据方法、面向对象方法和特定域方法;②基于数学的形式化方法;③用软件工程多种途径实现的原型方法,原型方法帮助确定软件需求、软件体系结构,用户界面等。
(10) 软件质量
软件质量涉及软件质量需求、软件质量度量、软件属性检测、软件质量管理技术和过程等。

3.简述软件工程,软件开发方法,软件开发工具之间的关系

(1)软件开发方法为软件工程提供了“如何做”的技术。它包括了多方面的任务,如项目计划与估算、软件系统需求分析、数据结构、系统总体结构的设计、算法过程的设计、编码、测试以及维护等。
(2)软件开发工具为软件工程方法提供了自动的或半自动的软件支撑环境。目前,已经推出了许多软件工具,这些软件工具集成起来,建立起称之为计算机辅助软件工程(case)的软件开发支撑系统。case将各种软件工具、开发机器和一个存放开发过程信息的工程数据库组合起来形成一个软件工程环境。
(3)软件工程则是将软件开发方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的。软件工程定义了方法使用的顺序、要求交付的文档资料、为保证质量和协调变化所需要的管理、及软件开发各个阶段完成的里程碑。

1.简述企业信息化的主要工作内容

企业信息化是指企业以业务流程的优化和重构为基础,在一定的深度和广度上利用计算机技术、网络技术和数据库技术,控制和集成化管理企业生产经营活动中的各种信息,实现企业内外部信息的共享和有效利用,以提高企业的经济效益和市场竞争力,这将涉及到对企业管理理念的创新,管理流程的优化,管理团队的重组和管理手段的创新。
如果从动态的角度来看,企业信息化就是企业应用信息技术及产品的过程,或者更确切地说,企业信息化是信息技术由局部到全局,由战术层次到战略层次向企业全面渗透,运用于流程管理、支持企业经营管理的过程。这个过程表明,信息技术在企业的应用,在空间上是一个由无到有、由点到面的过程;在时间上具有阶段性和渐进性;信息化的核心和本质是企业运用信息技术,进行隐含知识的挖掘和编码化,进行业务流程的管理。

2.简述企业信息系统建设(开发)方法

企业信息化建设是指通过计算机技术的部署来提高企业的生产运营效率,降低运营风险和成本,从而提高企业整体管理水平和持续经营的能力。企业通过专设信息机构、信息主管,配备适应现代企业管理运营要求的自动化、智能化、高技术硬件、软件、设备、设施,建立包括网络、数据库和各类信息管理系统在内的工作平台,提高企业经营管理效率的发展模式。
企业的信息化建设不外乎两个方向,第一是电子商务网站,是企业开向互联网的一扇窗户;其次就是管理信息系统,它是企业内部信息的组织管理者。电子商务的发展速度和规模是惊人的,各行各业的许多企业都在互联网上建立起自己的网站。这些网站有的以介绍产品为主,有的以提供技术支持为主,还有一些企业网站则开展电子商务,利用互联网组织企业的进货和销售。

3.简述企业信息系统的集成方面的主流技术

企业信息系统集成技术是信息系统工程的重要基础技术。涉及到的技术包括:信息系统集成中的体系框架、项目管理、工程监理、系统集成商以及用户行为分析;网络系统集成的体系结构、网络传输介质、网络传输设备、网络交换技术、网络接入技术、网络管理与安全和综合布线:数据集成的方法与规范、数据仓库、异构数据集成、数据集成工具、元数据及管理以及数据集成典型示例:应用集成的概念与标准应用集成的主流技术;网络集成示例、电子商务解决方案示例和电子政务系统示例。

4.简述企业信息系统持续开发与持续集成相关主流技术(CI/CD)

CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。
CI/CD主流技术:
(1)GitLab CI / CD
GitLab 的构建,测试和部署机制同样直接连接到其 Git 存储库,因此可以根据规则触发。该过程主要围绕 Docker 容器构建,可以大大简化围绕 Jenkins 构建必须完成的一些配置工作。
(2)CircleCI
CircleCI 既可在 Linux 环境中构建和提供,也可以构建 Android 应用程序以及 Xcode(适用于 iOS,MacOS,tvOS 或 watchOS)。
(3)Travis CI
如果构建需要在 Windows 机器上测试的代码,那么 Travis CI 可以提供一站式服务。
(4)Azure Pipelines
Azure为代码提供 Microsoft、Linux 和 MacOS 路径。该堆栈包含 Docker 容器和 Azure 硬件。如果更喜欢命令行,则可以使用 YAML 指定。
(5)CodeShip
CodeShip 在两个服务级别采用两种不同的方法。基础版本计划包括大量自动化和预配置以及图形用户界面,用于设置任务的大致轮廓。高级版本允许配置和用于定义构建环境的 Docker 容器,可以选择将多少个构建专用于任务以及可能的配置。
(6)Sauce Labs
Sauce Labs 则专注于测试。基于云的服务提供了各种各样的组合,以确保一切正常。 Sauce Labs 专门将测试与其他 CI 工具或管道集成,因此可以在本地运行 Jenkins,然后将测试委托给 Sauce Labs。
(7)Jenkins and Hudson
在云中启动持续集成最简单的方法之一是租用服务器实例并启动 Jenkins 或 Hudson。

1.简述WebService和RESTful,以及其优缺点

(1)Web Service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的交互操作的应用程序。
(2)RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。
WEBservice优缺点:
优点:
(1)可操作的的分布式应用程序
可以实现不同应用程序和在不同系统平台上开发出来的应用程序之间通信。与RMI、DOCM、CORBA最大的不同就是:Web Service 以 SOAP 作为基本通信协议从而避免了复杂的协议转换.
(2)普遍性、使用HTTP和XML进行通信
任何支持HTTP和XML 技术的设备都可以拥有和访问Web Service,不同平台不同开发语言照样可以调用我们发布的Web Service.
(3)Web Service 甚至可以穿越防火墙,真正的自由通信
一般要访问的Web服务器以及要访问的Web Service的客户端很可能位于防火墙后面,都默认关闭其它端口而开发HTTP端口,而Web service 正是基于HTTP的,所以它可以穿越防火墙.
(4)通过 SOAP 协议实现异地调用
SOAP 是 Web Service 的基本通信协议,它是在分散或分布式环境中交换信息,它基于XML的协议,通过SOAP协议可以实现不同项目、不同地点、甚至异地调用应用程序
缺点:
由于soap是基于xml传输,本身使用xml传输会传输一些无关的东西从而效率不高,随着soap协议的完善,soap协议增加了许多内容,这样就导致了使用soap协议去完成简单的数据传输的效率不高。如果直接用http传输自定义数据内容比webservice开发更快捷,例如第三方支付公司的支持接口。
应用场景:
因为webservice使用xml作为传输数据格式,xml是可跨平台跨语言的。因此对于要支持不同语言的系统交互时可以使用webservice作为接口使用。
需要注意的,服务端接口方为webservice则客户端也必须使用webservice。
因为webservice使用xml传输数据,因此性能上不能满足高并发。
RESTful优缺点:
优点:
1.轻量,直接基于http,不再需要任何别的诸如消息协议。get/post/put/delete为CRUD操作
2.面向资源,一目了然,具有自解释性。
3.数据描述简单,一般以xml,json做数据交换。
4.无状态,在调用一个接口(访问、操作资源)的时候,可以不用考虑上下文,不用考虑当前状态,极大的降低了复杂度。
5.简单、低耦合
缺点:
1.对后端开发人员要求高,业务逻辑有时难以被抽象为资源的增删改查。
2.对前端开发人员不友好,API粒度较粗,难以查询符合特殊要求的数据,同样的业务要比普通的API需要更多次HTTP请求。

2.简述SpringBoot框架的特点

(1)快速开发spring应用的框架
(2)内嵌tomcat和jetty容器,不需要单独安装容器,jar包直接发布一个web应用
(3)简化maven配置,parent这种方式,一站式引入需要的各种依赖
(4)基于注解的零配置思想,Springboot会根据在类路径中的jar包,类,为jar包中的类自动配置Bean,这样就减少了我们要使用的配置
(5)和各种流行框架,spring web mvc,mybatis,spring cloud无缝整合
(6)Springboot提供了基于http,ssh,telent对运行时的项目进行监控
不借助代码生成来实现,而是通过条件注解来实现,这也是Spring4.x的新特性,不需要任何的xml配置即可实现Spring的所有配置

1.简述大数据的应用技术及场景

(1)大数据应用技术,是指大数据相关的应用技术、大数据应用的技术,包括API、智能感知、挖掘建模等大数据技术,技术发展涉及机器学习、多学科融合、大规模应用开源技术等领域。 大数据有三个层:数据采集、存储和计算。 1、数据采集层,以App、Saas为代表的服务。 2、数据存储层,比如云存储,需掌握的技术有:HBase、Hive、Sqoop等。 3、数据计算应用层,以数据为基础,为将来的移动社交、交通、教育,金融进行服务。
应用场景:(1) 制造业,利用工业大数据提升制造业水平,包括产品故障诊断与预测、分析工艺流程、改进生产工艺,优化生产过程能耗、工业供应链分析与优化、生产计划与排程。
(2)金融行业,大数据在高频交易、社交情绪分析和信贷风险分析三大金融创新领域发挥重大作用。
(3)汽车行业,利用大数据和物联网技术的无人驾驶汽车,在不远的未来将走入我们的日常生活。
(4)互联网行业,借助于大数据技术,可以分析客户行为,进行商品推荐和针对性广告投放。
(5)电信行业,利用大数据技术实现客户离网分析,及时掌握客户离网倾向,出台客户挽留措施。
(6)能源行业,随着智能电网的发展,电力公司可以掌握海量的用户用电信息,利用大数据技术分析用户用电模式,可以改进电网运行,合理设计电力需求响应系统,确保电网运行安全。
(7)物流行业,利用大数据优化物流网络,提高物流效率,降低物流成本。
(8)城市管理,可以利用大数据实现智能交通、环保监测、城市规划和智能安防。
(9)生物医学,大数据可以帮助我们实现流行病预测、智慧医疗、健康管理,同时还可以帮助我们解读DNA,了解更多的生命奥秘。
(10)体育娱乐,大数据可以帮助我们训练球队,决定投拍哪种题财的影视作品,以及预测比赛结果。
(11)安全领域,政府可以利用大数据技术构建起强大的国家安全保障体系,企业可以利用大数据抵御网络攻击,警察可以借助大数据来预防犯罪。
(12)个人生活,大数据还可以应用于个人生活,利用与每个人相关联的“个人大数据”,分析个人生活行为习惯,为其提供更加周到的个性化服务。

2.简述SOA技术及应用场景

(1)面向服务的体系结构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。实际上,SOA作为一种面向服务的架构,是一种软件架构设计的模型和方法论。
(2)适用场景:
1.集成成本持续增长,而并未因为可提供真正投资回报 (ROI) 的新业务机会而得到缓解;
2.兼并和收购是企业扩大市场份额和获得新发展机会的业务模式的核心;
3.解决方案要求对来自异构系统和编程模型的业务功能进行集成;
4.业务的生存依赖于根据市场变化快速调整或即时响应竞争威胁的能力;
5.全球经济的影响要求企业事半功倍地开展业务,而且有必要依赖业务合作伙伴提供非核心业务功能;
6.就提高收益而言,与业务合作伙伴协作的效率对企业十分关键;企业业务资产的价值在减少,因为不能对其进行评估,以在最初用途之外的其他地方使用;
7.企业员工的效率出现了问题,因为他们的大部分时间并没有花在提供公司业务模型的核心功能和服务上;
8.企业的业务充满了机会型的业务工作;
9.企业从头开始开发新应用程序。

3.简述自适应设计与响应式设计

(1)响应式设计是一种网络页面设计布局,其理念是:集中创建页面的图片排版大小,可以智能地根据用户行为以及使用的设备环境进行相对应的布局。响应式设计简而言之就是一个网站能够兼容多个终端,而不是为每个终端做一个特定的专版本。在这属里大家可以理解为做一个网站就能适应多种设备,而不用在为每个设备做一个特定的版本,在不同的设备上展现的模式也不一样。响应式可以为不同终端的用户提供更舒适的界面和更好的浏览体验。
(2)自适应设计指能使网页自适应显示在不同大小终端设备上新网页设计方式及技术。大家可以理解为不同大小的设备上呈现同样的页面,让同一个页面适应不同大小屏幕,根据屏幕的大小,自动调整布局。

简述软件过程框架,软件工程过程普适性活动,软件工程实践原则内容

1.过程框架定义了若干个框架活动,为实现完整的软件工程过程建立了基础。这些活动可广泛应用于所有软件开发项目,无论项目的规模和复杂性如何。此外,过程框架还包含一些适用于整个软件过程的普适性活动。一个通用的软件工程过程框架通常包含以下5个活动。
(1)沟通。在技术工作开始之前,和客户的沟通与协作是极其重要的,其目的是理解利益相关者的项目目标,并收集需求以定义软件特性和功能。
(2)策划。如果有地图,任何复杂的旅程都可以变得简单。软件项目好比是一个复杂的旅程,策划活动就是创建一个“地图”,以指导团队的项目旅程,这个地图称为软件项目计划,它定义和描述了软件工程工作,包括需要执行的技术任务、可能的风险、资源需求、工作产品和工作进度计划。
(3)建模。无论你是庭园设计师、桥梁建造者、航空工程师、木匠还是建筑师,你每天的工作都离不开模型。你会画一张草图来辅助理解整个项目大的构想——体系结构、不同的构件如何结合,以及其他一些特性。如果需要,可以把草图不断细化,以便更好地理解问题并找到解决方案。软件工程师也是如此,需要利用模型来更好地理解软件需求,并完成符合这些需求的软件设计。
(4)构建。必须要对所做的设计进行构建,包括编码和测试,后者用于发现编码中的错误。
(5)部署。软件交付给用户,用户对其进行评测并给出反馈意见。

2.软件工程过程框架活动由很多普适性活动来补充实现。
通常,这些普适性活动贯穿软件项目始终,以帮助软件团队管理和控制项目进度、质量、变更和风险。典型的普适性活动包括如下活动。
软件项目跟踪和控制——项目组根据计划来评估项目进度,并且采取必要的措施保证项目按进度计划进行。
风险管理——对可能影响项目成果或者产品质量的风险进行评估。
软件质量保证——确定和执行保证软件质量的活动。
技术评审——评估软件工程产品,尽量在错误传播到下一个活动之前发现并清除错误。
测量——定义和收集过程、项目以及产品的度量,以帮助团队在发布软件时满足利益相关者的要求。同时,测量还可与其他框架活动和普适性活动配合使用。
软件配置管理——在整个软件过程中管理变更所带来的影响。
可复用管理——定义工作产品复用的标准(包括软件构件),并且建立构件复用机制。
工作产品的准备和生产——包括生成产品(如建模、文档、日志、表格和列表等)所必需的活动。

2.简述统一过程模型(RUP)相关理论

统一过程(RUP/UP)是一种以用例驱动、以体系结构为核心、迭代及增量的软件过程模型,由UML方法和工具支持,广泛应用于各类面向对象项目。RUP是由Rational公司开发并维护,和一系列软件开发工具紧密集成。RUP蕴含了大量优秀的实践方法,如:迭代式软件开发、需求管理、基于构件的构架应用、建立可视化的软件模型、软件质量验证、软件变更控制等。
统一过程主要分五个阶段:开启阶段,细化阶段,构建阶段,移交阶段,生产。

1.用自己的话描述敏捷开发方法的特点。

(1)敏捷开发的过程有着更强的适应性而不是预设性。
(2)敏捷开发的过程中,更加的注重人的因素。
(3)在敏捷开发的过程中,整个项目是测试驱动的而不是文档驱动的。不仅每个模块有着自己的相应的测试单元,开发人员在开发自己的模块的过程中必须保证自己所开发的模块可以通过这一单元的测试,并且集成测试贯穿了整个开发过程的始终。

2.简述高效软件团队的特点,及组建高效软件团 队应注意的因素。

(1)具有明确且有挑战性的共同目标
一个具有明确的而且有挑战性目标的团队比目标不明确或不具有很大的挑战性目标的团队效率高得多。
(2)团队具有很强的凝聚力
在一个高效的软件开发团队中,成员们凝聚为一个整体共同进行工作,他们是相互支持、互相交流、互相尊重的。
(3) 具有融洽的交流环境
(4)具有共同的工作规范和框架
(5)采用合理的开发过程
注意因素:
(1)选拔或培养适合角色职责的人才
软件项目是由不同角色的人共同协作完成的,每种角色都必须有明确的职责定义,因此选拔和培养适合角色职责的人才是首要的因素
(2)建立共同的工作框架、规范和纪律约束
软件项目的开发是创造性的工作,但要有必要开发纪律。
(3)自我管理
作为团队的成员,应该以开发经理为首坚持管理自我,对工作负责,与同事友好合作,遵守工作纪律、自我技能培训等。
(4)学习国外成功经验
学习国外的一些成功开发过程、分析方法、设计思想、体系结构、设计模式等。

3.简述敏捷团队,XP团队的特点。

(1)尊重。尊重是指团队成员间,也指团队外部与团队间。
(2)透明。“透明”,是建立起信任关系的最好方法。
(3)目标。自组织团队要有明确的目标,团队才能向目标前进,为达成目标共同努力。
(4)承诺。确定了目标就要承诺达成。
(5)团队。一个项目团队就是一个整体,即使某个人成绩很突出,但假若项目失败了,遗留BUG很多,或者上线后出现很多问题,客户自然不会满意。
(6)辅导。互相辅导是提升团队能力的最佳途径,也是实现团队间尊重、承诺的最好办法。
XP特点:
(1)工作环境:XP要求每个参加项目开发的人都担任一个角色,并履行相应的权利和义务。所有的人都在一个开放式的开发环境中工作,最好是在同一个大房间中工作,随时讨论问题,强调每周40小时工作制,不加班。
(2)需求分析:客户被纳入开发队伍。
(3)设计:XP强调简单设计,即用最简单的办法实现每个小需求。
(4)编程:成对编程是极限编程的一大特色,即两个人一起使用同一个屏幕,同一个键盘,共同完成一段程序的编码。
(5)测试:在极限编程中,测试是非常重要的一个环节,它首先要求在开始写程序之前先写好测试,其目的是为了提高软件的可测试性。X
(6)发布:XP要求按照开发计划,每经过一个开发周期,软件就发布一次,而不是像传统的开发方法那样,整个软件开发完成后才发布。

1、根据你对优秀软件开发者(优秀软件工程师的观察和认识,说出三个共同的个人特质(优秀品质),试举例。

1.有个人责任感
这会让软件工程师去努力实现对同伴,其他利益相关者的承诺。为获得成功的结果,他会在需要的时候不遗余力的做他需要做的事情。
2.有敏锐的意识
对一些人的需求有敏锐的意识,这些人包括团队的成员,对现存问题的软件解决办法有需求的利益相关者等。他会观察人们的工作环境,并根据环境和人本身调整行为。
3.坦诚
如果发现有缺陷的设计,他会以诚实且有建设性的方式指出问题。即使被要求歪曲与进度,特点,性能等项目特性有关事实,他也会选择实事求是。
4.抗压能力强
软件工程师的工作经常处在混乱的边缘,压力来自多方面,如需求的变更,要求苛刻令人难以忍受的管理者,优秀工程师需要很好的处理这些压力。
5.高度的公平感
他会乐于与同事分享荣誉,努力避免利益冲突且绝不破坏他人劳动成果。
6.注重细节
他会利用产品和项目已有的概括性标准,在日常工作基础上思考,进而做出技术性决策。
7.务实
他会根据当前情景需要进行调整的科学规则
8. 具有好奇心
他们总是保持一颗好奇心,凡是遇到问题,会积极解决。

2、用自己的语言描述关注点分解这个概念。

关注点分离 是计算机科学中最重要的努力目标之一。这个原则,就是在软件开发中,通过各种手段,将问题的各个关注点分开。如果一个问题能分解为独立且较小的问题,就是相对较易解决的。实现关注点分离的方法主要有两种,一种是标准化,另一种是抽象与包装。

3、一个重要的沟通原则说到"有准备的沟通"在早期的工作中你都需要做哪些准备?在早期的准备中都应该产生哪些工作产品?

1.确定需求开发计划
2.确定项目的目标和范围
3.确定调查对象
4.实地收集需求信息
5.确定非功能需求
6.在收集需求信息中应注意的问题

1.在系统架构设计中,决定系统架构设计的非功能性需求有四类:操作性需求,性能需求,安全性需求,文化需求。简要说明四类含义。

1.1
(1)操作性需求
指系统完成任务所需的操作环境要求以及如何满足系统将来可能的需求变更的要求。
(2)性能需求
针对系统性能要求的指标,如吞吐率、响应时间和容量等。
(3)安全性需求
指为防止系统奔溃和保证数据安全所需要采取的保护措施的要求,为系统提供合理的预防措施。
(4)文化需求
指使用本系统的不同用户群体对系统提出的特有要求。
1.2
操作性需求:
(a)用户界面支持用户的个性化定制;
(b)系统需要支持当前主流的标准和服务,特别是通信协议和平台接口;
性能需求:
( c)用户操作的响应时间应不大于3秒,竞拍板块不大于1秒;
(d)系统具有故障诊断和快速恢复能力;
(f)系统需要支持不低于2G的数据缓存;
安全性需求:
(e)用户密码需要加密传输;
(g)用户操作停滞时间超过一定时限需要重新登录验证;
文化需求:
(h)系统支持用户选择汉语、英语或法语三种语言之一进行操作。

2.一个负责起草系统需求规格说明书的工程师,应当如何记录功能性需求和非功能性需求.

(1)功能需求规定开发人员必须在产品中实现的软件功能,用户利用这些功能来完成任务,满足业务需求。功能需求描述是开发人员需要实现什 么。
(2)非功能性需求是指依一些条件判断系统运作情形或其特性,而不是针对系统特定行为的需求。
包括安全性、可靠性、互操作性、健壮性、易使用性、可维护性、可移植性、可重用性、可扩充性。

3.简述需求评审的目的、主要内容、主要参加人员.

目的:
需求评审是当完成调研后输出了解决方案,在落地解决方案之前需要召集业务方、研发团队对方案内容进行讨论与确认。
主要内容:
需求评审通常是由产品经理主持,通过讲解产品需求文档,让相关人员了解具体需求,并提出疑问,进行沟通的过程。统一大家对产品需求的理解,为后续“如何做”打好基础。
评审会开场前的准备工作: 1、确认需求、原型、文档都完成了吗? 2、提前找核心人员小范围沟通、消灭掉大问题 3、与参会者确定可出席的时间 4、至少提前2天发出会议邀请、定好会议室 5、邀请时附上需求文档和原型交互设计稿 6、提前到会议室、提前演练一遍评审会现场 5、约下一次的评审
主要参加人员:产品经理,技术开发者

1.简述结构化建模方法和工具

结构化建模方法按照系统观点,从最高最抽象层次出发,自顶向下分解,由表及里,由粗到精,分层次,分模块的进行分析和设计,将系统设计成层次化的模块结构,从而实现由一般到具体的建模。
结构化建模工具:
(1)数据流程图: 是一种能全面地描述系统数据流程的主要工具,它用一组符号来描述整个系统中信息的全貌,综合地反映出信息在系统中的流动、处理和存储情况。
(2)数据字典:数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明。
(3)功能结构图:一般情况下产品或系统的总功能可分解为若干分功能,各分功能又可进一步分解为若干二级分功能,如此继续,直至各分功能被分解为功能单元为止。这种由分功能或功能单元按照其逻辑关系连成的结构称为功能结构。分功能或功能单元的相互关系可以用图来描述,表达分功能或功能单元相互关系或从属关系的图称为功能结构图。

2.面向对象的建模方法和工具

面向对象方法把对象作为系统建模的基本单元。面向对象方法认为:
(1)对象既可以是具体的物理实体,也可以是抽象的逻辑实体。
(2)每种对象都有各自的属性和行为或操作。
(3)不同的对象之间的相互作用和联系构成了各种不同的系统。面向对象方法的本质是从客观世界固有的事物出发来构造系统,通过识别对象,分析对象间的关系,反映问题域中固有的事物及相互联系。
工具:
UML是一种标准的图形化建模语言,它是面向对象分析与设计的一种标准表示。
(1)用例建模:用用例图和用例来说明描述用户需求。
(2)静态建模:通过类图/对象图描述系统中的对象如何组成系统。
(3)动态建模:描述系统的动态行为和控制结构。主要有顺序图,协作图,状态图,活动图。
(4)实现模型:描述了系统实现时的特性,即物理架构,包括组件图和部署图。

3.两种方法的特点和优缺点。

特点:
(1)结构化方法的思想是一种分层的思想,模块化思想,它语句结构化,不再使用GOTO语句。
结构化方法还遵循分解原则,自顶向下进行分层解决。
(2)面向对象方法显然是面向对象思想,将系统中要处理的问题看作对象,复杂对象由简单对象组成。具有相同属性和操作的对象属于一个类,类之间有类似于结构化的层次,可以有子类,且可以继承父类的全部属性并具有自己的属性和操作。类具有封装性,将内部属性和操作隐藏。面向对象的思想强调抽象、继承和封装。

优点:
(1)结构化方法的优点是考虑问题的方式较为合理,先确定主要系统功能,然后逐层深入,由简到难,逐渐将一个大致的总体结构具体化,最终全部实现其功能。结构化的模块化使得问题难度降低,编写的程序也更加简明,可读性更高。
(2)面向对象方法的优点在于其开发软件的思维与人类思维方法一致,用户更容易理解。而由于面向对象的封装性,局部的改变不会影响整体系统的功能,使得管理人员调试维护起来也很方便,可靠性也更高。而面向对象方法也使用了模块化的思想,将复杂问题分解成独立的小问题,降低了难度和成本。

缺点:
(1)结构化由于要对一个整体问题不断分解,要处理的条件和信息也会越来越多,有时候会给开发人员编程时造成麻烦,这也使得结构化方法能处理的复杂问题难度有一定的限制。
不利于维护。
(2)面向对象虽然对于用户使用起来很方便,但对于开发人员抽象对象的能力有很高的要求。对于对象的建立不但要准确,还要全面,并且符合模块的要求,若整体模块划分不合理,对功能会有很大的影响。

1、简述(DSSA)领域分析与设计过程。

领域分析是对特定的领域进行需求工程的活动。它覆盖了对领域需求的获取,分析,规约和检验的整个过程。领域分析通过捕获领域内系统拥有的共性和特性提升领域内软件开发,升级和维护的效率,支持系统级和大规模的软件重用。
领域分析过程中的步骤为:(1)定义待研究的领域。(2)对从领域中提取的项进行分类;(3)收集领域中有代表性的应用系统样本。(4)分析样本中的每个应用,并且定义分析类;(5)为这些类开发需求模型。

2、当描述一个系统时,必须要在得到完整的需求规格说明之前就开始系统体系结构的设计,简述软件体系结构设计的重要性。

软件体系结构的重要性在于它决定了—个系统的主体结构、宏观特性和具有的基本功能以及特性。软件体系结构是整个软件设计成功的基础相关键之所在、其作用可以延伸到软件设计开发的各个阶段。
(1)在项目规划阶段.概略的体系结构是进行项目可行性分析、工程复杂性分析、工程进展、投资规模分析和风险预测等活动的重要依据。
(2)在需求分析阶段,通过对概要体系结构进行更加深入和细致分析从而建立更深入的体系结构描述及需求体系结构。
(3)在设计阶段,需要从实现的角度,从多个维度对软件系统结构再次进行深入的分解和描述,并产生设计型软件体系结构。
(4)在实施阶段,可以根据体系结构的层次和构件粒度的大小建立项月开发人员的组织、分工和进度表,协调开发人员关系。
(5)在项目评们阶段,体系结构是性能测试和评价的依据。
(6)在项目维护阶段,对软件任何扩展和修改都需要杏体系结构的指导下进行.以维持整个设计的合理性和正确件,并为维护升级的正确性和开销分析提供依据。

3、简述SOA和微服务的概念及两者之间的关系与异同。

(1)SOA概念:
面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。
(2)微服务概念:
微服务其实和SOA类似,是在SOA上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。
(3)区别:
微服务的目的是有效的拆分应用,实现敏捷开发和部署 ,可以是使用不同的编程语言编写。微服务框架将能够带来更大的敏捷性,并为构建应用提供更轻量级、更高效率的开发。SOA更适合大型企业中的业务过程编排、应用集成。微服务是去ESB、去中心化、分布式的,SOA是以ESB为核心,大量的WS标准实现。从部署方式上,这个是最大的不同,对比Monolithic(有人翻译为单体)的Java EE部署架构,通过展现层打包WARs,业务层划分到JARs最后部署为EAR一个大包,而微服务则打开了这个黑盒子,把应用拆分成为一个一个的单个服务,应用Docker技术,不依赖任何服务器和数据模型,是一个 全栈应用,可以通过自动化方式独立部署,每个服务运行在自己的进程中,通过轻量的通讯机制联系,经常是基于HTTP资源API,这些服务基于业务能力构建,能实现集中化管理。

十一

1.简述高质量软件的一般特质

适用性: 软件是否提供了相应的功能
可靠性: 产品在规定的条件下,在规定的时间内完成规定功能的能力
易用性: 在指定使用条件下,产品被理解、 学习、使用和吸引用户的能力
效率性: 在规定的条件下,相对于所用资源的数量,软件产品可提供适当性能的能力
软件维护性: “四规”, 在规定条件下,规定的时间内,使用规定的工具或方法修复规定功能的能力
软件可移植性: 从一种环境迁移到另一种环境的能力
兼容性: 产品在不同平台,不同设备,不同仪器上运行情况,是否稳定
安全性: 产品在数据安全,网络安全方面是否有相应的防护措施

2.如何提高软件的质量

1.需求分析
首先需要确保清楚你的程序应该做什么。需要考虑需求之间的兼容性,是否可以实现所有要求,是否存在某些硬件限制
2.软件设计
首先考虑解决方案,如何实施,需要使用哪些算法,哪部分代码可以重用,可以使用哪些库,不同的组件和类如何相互通信等。
3.编码指南
它定义了要使用的编码风格,这样你的代码就会有一个统一的风格 - 可读。
4. 定期审查
与其他团队成员一起进行设计和代码审查。
5.静态代码分析
使用静态代码分析工具。这些工具可以分析源代码而无需运行它。
6.单元测试
单元测试有助于确保在每次更改时没有破坏已经正在运行的功能,并且可以帮助其他程序员了解代码的用途。
7.组件和系统测试
对组件或系统进行更高级别的测试。
8. 持续集成
使用CI系统(如Jenkins)设置持续集成服务器,让它在每次新更改的情况下每晚运行构建并检查代码。
9.错误跟踪
在bug跟踪系统中跟踪已发现的错误(例如:Mantis)。对于每个错误,记录如何重现它们以及它与预期行为的不同之处。
10.分析和内存使用
为了能够保持软件的性能,定期测量其运行时间。

十二

1.简述软件的可用性,如何提高软件的可用性。

软件对用户来说有效、易学、高效、好记、少错和令人满意的程度,即用户能否用产品完成他的任务,效率如何,主观感受怎样,实际上是从用户角度所看到的产品质量
提高软件可用性有八大原则:
(1)将系统和现实世界进行匹配大家都很熟悉;
(2)使界面保持一致,包括与系统内部和任何现存的外部标准保持一致;
(3)系统状态的可视性也是大家较为熟悉的;
(4)用户控制和容错性的原则;
(5)错误和错误的修复;
(6)记忆;
(7)灵活性和使用的高效性;
(8)简洁性和一致性的设计目标。

2.简述软件的可靠性,如何提高软件的可靠性。

按统计术语定义的软件可靠性是:在特定的环境和特定的时间内,计算机程序正常运行的概率。它包含两个含义:
(1)在规定的条件下,在规定的时间内,软件不引起系统失效的概率;
(2)在规定的时间周期内,在所述条件下程序执行所要求的功能的能力;

提高软件可靠性:
(1)改进制度制定规范
对开发方法的选择、分析及设计文档的编写、编码规范、代码评审制度等对软件开发的各个过程进行控制。
(2) 软件重用
对通用模块进行抽象、封装,不断积累团队自己的开发库,在不断的重用中,其存在的BUG会不断被发现,改进。
(3)提高员工的单兵作战能力,再加上良好的团队管理模式。
(4)加强测试
加强对软件的测试,尽可能地解决软件中存在的问题。
(5) 及时有效的跟踪
通过用户反馈的BUG进行对症下药修改BUG。

十三

1.软件复用的优点,举例描述支持软件复用的方法和内容。

(1)缩短软件开发和维护的时间。
(2)降低软件开发和维护的成本。
(3)保证软件的可靠性
(4)保证软件的一致性。
举例:应用框架:一些抽象类和具体类通过适配和扩展来创建应用系统。
应用系统集成:两个或更多的应用系统集成在一起提供扩展的功能。

2.软件复用规划时要考虑到的因素。

(1)技术因素:软件构件技术,领域工程,软件构架,软件再工程,开放系统,软件过程CASE技术等。
(2)非技术因素:机构组织如何适应复用的需求;管理方法如何适应复用的需求;开发人员知识的更新;创造性和工程化的关系;开发人员的心理障碍;知识产权问题;保守商业秘密的问题;复用前期投入的经济考虑;标准化问题等等。

3.简述信息安全的基本属性内容及其相关应用技术。

(1)保密性:加解密技术,对称与非对称,即保证信息为授专权者享用而不泄露给未授权者。
(2)完整性:消息认证码,即保证信息从真实的发信者传送到真实的收信者手中,传送过程没有被非法用户添加,删除,替换等。
(3)可用性:认证技术,防火墙,入侵检测技术,即保证信息和信息系统随时为授权者提供服务,保证合法用户对信息和资源的使用不会被不合理的拒绝。
(4)可控性:问控制技术,权限管理,即出于国家和机构的利益和社会管理的需要,保证管理者能够对地信息实施必要的控制管理,以对抗社会犯罪和外敌侵犯。
(5)不可否认性:签名技术,数字证书,及人民,即人们要为自己的信息行为负责,提供保证社会依法管理需要的公证,仲裁信息证据。

4.简述信息系统安全设计要考虑的几个层面,每个层面可能存在的安全威胁及其应对措施。

(1)物理层:防火,防盗,防水,防雷,空调,供电。
(2)网络层:防火墙,入侵检测设备,VPN。
(3)系统层:操作系统,数据库系统,应用开发平台,中间件。
(4)应用层:认证系统,文件系统,应用系统,事务系统,管理系统。
(5)软件架构安全:体系结构。
(6)管理层:组织架构,三员(系统管理员,安全员,审计员),开发团队,维护团队,应用培训,风险评估,应急预案。
(7)岗位职责与管理制度。
(8)工作日志。

你可能感兴趣的:(高级软件工程,软件工程师)