试题一:论面向对象的系统分析方法及应用
OOA的基本任务是运用OO方法,对问题域进行分析和理解,正确认识其中的事物及它们之间的关系,找出描述问题域和系统功能所需的类和对象,定义它们的属性和职责,以及它们之间所形成的各种联系。最终产生一个符合用户需求,并能直接反映问题域和系统功能的OOA模型及其详细说明。
OOA模型独立于具体实现,即不考虑与系统具体实现有关的因素,这也是OOA和OOD的区别之所在。OOA的任务是“做什么”,OOD的任务是“怎么做”。
建立用例模型:
建立分析模型:
试题二:论静态测试方法及应用
静态测试是指被测试程序不在机器上运行,而采用人工检测和计算机辅助静态分析的手段对程序进行检测。静态测试包括对文档的静态测试和对代码的静态测试。对文档的静态测试主要以检查单的形式进行,而对代码的静态测试一般采用桌前检查(DeskChecking)、代码审查和代码走查。经验表明,使用这种方法能够有效地发现30%~70%的逻辑设计错误和编码错误。
1.桌前检查
由程序员检查自己编写的程序。程序员在程序通过编译之后,进行单元测试设计之前,对源程序代码进行分析和检验,并补充相关的文档,目的是发现程序中的错误。检查项目包括检查变量的交叉引用表;检查标号的交叉引用表;检查子程序、宏、函数;等值性检查;常量检查;标准检查;风格检查;比较控制流;选择、激活路径;对照程序的规格说明,详细阅读源代码;补充文档。
由于程序员熟悉自己的程序和自身的程序设计风格,这种桌前检查可以节省很多检查时间,但应避免主观片面性。
2.代码审查
代码审查是由若干程序员和测试人员组成一个会审小组,通过阅读、讨论和争议,对程序进行静态分析的过程。代码审查的过程可以分为两个步骤:
(1)小组负责人提前把设计规格说明书、控制流程图、程序文本及有关要求、规范等分发给小组成员,作为评审的依据。小组成员在充分阅读这些材料之后,进入审查的第二步。
(2)召开程序审查会。在会上,首先由程序员讲解程序的逻辑。在此过程中,程序员或其他小组成员可以提出问题,展开讨论,审查是否存在错误。实践表明,程序员在讲解过程中能发现许多原来自己没有发现的错误,而讨论和争议则促进了问题的暴露。
在会前,应当给会审小组每个成员准备一份常见错误的清单(通常称为检查单或检查表),把以往所有可能发生的常见错误罗列出来,供与会者对照检查,以提高会审的效率。检查单把程序中可能发生的各种错误进行分类,对每一类列举出尽可能多的典型错误,然后把它们制成表格,供会审时使用。
3.代码走查
代码走查与代码审查基本相同,其过程也分为两个步骤:
(1)把材料先发给走查小组每个成员,让他们认真研究程序,然后再开会。
(2)开会的程序与代码会审不同,不是简单地读程序和对照错误检查单进行检查,而是让与会者“充当”计算机。即首先由测试组成员为被测程序准备一批有代表性的测试用例,提交给走查小组。走查小组开会,集体扮演计算机角色,让测试用例沿程序的逻辑运行一遍,随时记录程序的踪迹,供分析和讨论使用。
4.静态分析
在静态测试中,主要是对程序代码进行静态分析,包括控制流分析、数据流分析、接口分析和表达式分析。
(1)控制流分析。控制流分析是指使用控制流程图检查被测程序控制结构的过程。例如,可检查被测程序是否存在没有使用的语句或子程序、是否调用并不存在的子程序,以及是否存在无法达到的语句等。
(2)数据流分析。数据流分析是指使用控制流程图分析数据各种异常情况的过程,包括数据初始化、赋值或引用过程中的异常,例如,引用未定义的变量、对以前未使用的变量再次赋值等程序差错或异常情况。
(3)接口分析。接口分析主要包括模块之间接口的一致性分析、模块与外部数据库及其他软件配置项之间的一致性分析、子程序和函数之间的接口一致性分析等。例如,可以检查函数形参与实参的数量、顺序、类型和使用的一致性。
(4)表达式分析。表达式分析用于检查程序代码中的表达式错误,例如,括号不配对、数组引用越界、除数为零,以及浮点数变量比较时的误差等错误。
试题三:论富WEB技术及应用
人们的应用需求永远是技术发展的驱动力。传统的Web系统允许用户填写表单,提交表单时就向Web服务器发送一个请求。服务器接收并处理传来的表单,然后返回一个新的网页。这种做法浪费了许多带宽,因为在前后两个页面中的大部分HTML代码往往是相同的。由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的响应时间。这导致了用户界面的响应比本地应用慢得多。为了弥补B/S架构存在的一些不足,提高用户体验,富互联网应用(Rich Internet Application, RIA)技术应运而生。
RIA是一个用户接口,它比用HTML实现的接口更加健壮、反应更加灵敏和更具有令人感兴趣的可视化特性。RIA结合了C/S架构反应速度快、交互性强的优点与B/S架构传播范围广及容易传播的特性,简化并改进了B/S架构的用户交互,这样,系统可以提供更丰富、更具有交互性的用户体验。
1.RIA的概念
针对B/S架构所存在的缺点,如果一味地提升服务器和网络的速度,既不现实又不经济,一种可行的技术方案就是采用高度互动性和局部智能型的客户端应用程序,这样,就可以在无需刷新全页或增加带宽需求的情况之下,迅速响应用户的输入并作出相应的处理。这种技术就是RIA。
RIA是B/S架构的一种演变,“富”的含义有两种,分别是丰富的数据模型和丰富的用户界面。丰富的数据意味着客户端的用户界面能表现和应对更多、更复杂的数据模式,这样才能处理客户端的运算,以及异步发送和接收数据。为了达到高度复杂的数据模式,客户端允许用户构建一个高响应、交互式的应用程序;HTML只能为用户的界面控制提供有限的功能,反之,RIA允许一些富有创造性的界面控制,巧妙地与数据模式相结合。传统的B/S架构是线性设计方式,用户唯一的选择就是用批处理方式提交页面到服务器。连续处理服务器请求和页面更新存在许多障碍,包括页面响应时间、网络带宽,以及满足会话或状态交叉连接而不断增长的日常开销。伴随着丰富的用户界面,用户可以从早期的服务器响应影响整个界面的运作模式,迁移到只对发出请求的特定区域进行改变的模式上来。
RIA具有C/S架构的特点,包括在消息确认和格式编排方面提供互动用户界面,在无刷新页面之下提供快捷的界面响应时间,提供通用的用户界面特性(例如,拖放操作、在线和离线操作能力等);RIA也具有B/S架构的特点,包括立即布署、跨平台、采用逐步下载来检索内容和数据,以及可以充分利用广泛采纳的互联网标准。在RIA中,数据能够被缓存在客户端,从而可以实现一个比基于HTML的响应速度更快且数据往返于服务器的次数更少的用户界面。
2.客户端开发技术
一个新的技术是否能够被广泛应用,与该技术的支持平台的多少和平台功能是否强大、是否易用等因素密切相关。RIA技术一经推出,就得到了广泛应用,支持RIA的平台或工具主要有以下几个:
(1)Flex。Flex是一个表示服务器和应用程序框架,它可以运行于J2EE和.NET平台。Flex应用程序框架由MXML(Macromedia XML)、ActionScript和Flex类库构成。开发人员利用MXML定义应用程序用户界面元素,利用ActionScript定义客户逻辑与程序控制。Flex类库中包括Flex组件、管理器和行为等。应用程序由Flex服务器翻译成SWF格式的客户端应用程序,在Flash Player中运行。
(2)Bindows。Bindows是用Javascript和DHTML(Dynamic HTML,动态HTML)开发的Web窗口框架。JavaScript用于客户端界面的显示和处理,XML和HTTP用于客户端与服务器的信息传输。Bindows的一个主要缺点是,它采用一次性全部载入的方式来实现脚本库,在窗口的加载期,需要一个漫长的等待过程,甚至浏览器的进程会产生无响应的情况。另外,Bindows内部大量量利用了IE(Internet Explorer)技术,没有考虑到非IE的浏览器,限制了Bindows的流行。
(3)Java。一些相当复杂的系统都是用Java编写的,这说明可以用Java来建立几乎任何一个能够想象得到的RIA。使用Java建立RIA的主要缺陷是它的复杂性,例如,即使对简单的窗口和图形,也要求编写非常烦琐的代码。
(4)Laszlo。Laszlo是一个开源的RIA开发环境。使用Laszlo平台时,开发人员只需编写名为LZX的描述语言(其中整合了XML和JavaScript),运行在J2EE应用服务器上的Laszlo表示服务器会将其编译成SWF格式的文件并传输给客户端展示。从这点上来说,Laszlo的本质和Flex是一样的。
(5)XUL(XML User Interface Language,基于XML的用户界面语言)。XUL可用于建立窗口应用系统,这些系统既可以在Mozilla浏览器上运行,也可以在其他描述引擎上运行。XUL描述引擎都非常小,它既可以使用XML数据,也可以生成XML数据。
(6)Avalon。Avalon是Vista的一部分,是一个图形和展示引擎,主耍由.NET框架中的一组类集合而成。Avalon定义了一个在Longhorn中使用的新标记语言,其代号为XAML(eXtensible Application Markup Language),即可扩展应用标记语言。可以使用XAML来定义文本、图像和控件的布局,程序代码可以直接嵌入到XAML中,也可以将它保留在一个单独的文件内。这与Flex中的MXML或者Laszlo中的LZX非常相似。不同的是,基于Avalon的系统必须运行在Longhorn环境中,而Flex和Laszlo是不依赖于平台的,仅仅需要装有Flash播放器的浏览器即可。
3.异步JavaScript和XML
异步JavaScript和XML(Asynchronous JavaScript And XML, AJAX)是由几种蓬勃发展的技术以新的方式组合而成的,包括基于XHTML(eXtensible HyperText Markup Language,可扩展超文本标识语言)和CSS(Cascading Style Sheets,层叠样式表)标准的表示、使用DOM(Document Object Model,文档对象模型)进行动态显示和交互、使用XML和XSLT(eXtensible Stylesheet Language for Transformation,用于转换的可扩展样式表语言)进行数据交换及相关操作、使用XMLHttpRequest与服务器进行异步通信、使用JavaScript绑定一切。
(1)XML。XML是一套从SGML(Standard Generalized Markup Language,标准通用标记语言)中派生出来的定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。它也是元标记语言,用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。XML的高扩展性、高灵活性特性,使得它可以描述各种不同种类的应用软件中的各种不同类型的数据,可以实现不同数据的集成。由于XML格式的标准化,许多浏览器软件都能够提供很好的支持,因此,只需简单地将XML格式的数据发送给客户端,客户端就可以自行对其进行编辑和处理,而不仅是显示。
(2)XHTML。XHTML是一个基于XML的标记语言,是一个扮演着类似HTML角色的XML,结合了部分XML的强大功能和大多数HTML的简单特性。建立XHTML的目的就是实现HTML向XML的过渡。
(3)JavaScript。JavaScript是一种粘合剂,使AJAX应用的各部分集成在一起。在AJAX中,JavaScript主要用来传递用户界面上的数据到服务端并返回结果。
(4)XMLHttpRequest。XMLHttpRequest对象用来响应通过HTTP传递的数据,一旦数据返回到客户端,就可以立刻使用DOM将数据显示在网页上。XMLHttpRequest对象在大部分浏览器中已经实现,而且拥有一个简单的接口,允许数据从客户端传递到服务端,但并不会打断用户当前的操作。使用XMLHttpRequest传送的数据可以是任何格式的。
(5)DOM。DOM为XML文档的已解析版本定义了一组接口。解析器读入整个文档,构建一个驻留内存的树结构,然后代码就可以使用DOM接口来操作这个树结构。
(6)XSLT。XSLT是一种将XML文档转换为XHTML文档或其他XML文档的语言,可以用在客户端和服务端,它能够减少大量的用JavaScript编写的应用逻辑。
(7)CSS。一个CSS样式单就是一组规则,样式再根据特定的一套规则级联起来。每个规则给出其所适用的元素名称,以及要应用于哪些元素的样式。CSS提供了从内容中分离应用样式和设计的机制。虽然CSS在AJAX应用中扮演至关重要的角色,但它也是构建跨浏览器应用的一大阻碍,因为不同的浏览器厂商支持各种不同的CSS级别。
借助于AJAX,可以在用户单击按钮时,使用JavaScript和DHTML立即更新用户界面,并向服务器发出异步请求,以执行更新或查询数据库。当请求返回时,就可以使用JavaScript和CSS来相应地更新用户界面,而不是刷新整个页面。最重要的是,用户甚至不知道浏览器正在与服务器通信,Web站点看起来是即时响应的。使用AJAX的最大优点,就是能在不更新整个页面的前提下维护数据,这使得Web系统更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息。
使用AJAX的主要缺点是,它可能破坏浏览器“后退”按钮的正常行为。在动态更新页面的情况下,用户无法回到前一个页面状态,这是因为浏览器只能记下历史记录中的静态页面。用户通常都希望单击“后退”按钮,就能够取消他们的前一次操作,但在AJAX系统中,却无法做到这一点。解决这个问题的主要方法是,在用户单击“后退”按钮访问历史记录时,通过建立或使用一个隐藏的IFRAME来重现页面上的变更。例如,当用户在Google Maps中单击“后退”时,它在一个隐藏的IFRAME中进行搜索,然后将搜索结果反映到AJAX元素上,以便将系统恢复到当时的状态。另外,使用动态页面更新时,用户难以将某个特定的状态保存到收藏夹中。解决这个问题的主要方法是,使用URL(Uniform Resource Locator,统一资源定位符)片断标识符(通常被称为锚点,即URL中“#”后面的部分)来保持跟踪,允许用户回到指定的某个系统状态。
进行AJAX开发时,需要慎重考虑网络延迟。不给予用户明确的回应,没有恰当的预读数据,或者对XMLHttpRequest的不恰当处理,都会使用户感到延迟,这是用户不希望看到的,也是他们无法理解的。通常的解决方案是,使用一个可视化的组件来告诉用户,系统正在进行后台操作并且正在读取数据和内容。
试题四:论DevSecOps技术及应用
DevSecOps 对 DevOps 进行了改进,以确保安全性仍然是该过程的一个重要部分。
与 DevOps 一样,DevSecOps 是开发人员和 IT 运营团队在开发和部署软件应用程序时所遵循的一种思维方式或文化。它将主动和自动化的安全审计以及渗透测试集成到敏捷应用程序开发中。
要使用 DevSecOps,你需要:
从 SDLC 开始就引入安全性概念,以最大程度地减少软件代码中的漏洞。
确保每个人(包括开发人员和 IT 运营团队)共同承担在其任务中遵循安全实践的责任。
在 DevOps 工作流程开始时集成安全控件、工具和流程。这些将在软件交付的每个阶段启用自动安全检查。
DevOps 一直致力于在开发和发布过程中包括安全性以及质量保证(QA)、数据库管理和其他所有方面。然而,DevSecOps 是该过程的一个演进,以确保安全永远不会被遗忘,成为该过程的一个重要部分。
了解 DevSecOps 流程
典型的 DevOps 流程有不同的阶段;典型的 SDLC 流程包括计划、编码、构建、测试、发布和部署等阶段。在 DevSecOps 中,每个阶段都会应用特定的安全检查。
计划:执行安全性分析并创建测试计划,以确定在何处、如何以及何时进行测试的方案。
编码:部署整理工具和 Git 控件以保护密码和 API 密钥。
构建:在构建执行代码时,请结合使用静态应用程序安全测试(SAST)工具来跟踪代码中的缺陷,然后再部署到生产环境中。这些工具针对特定的编程语言。
测试:在运行时使用动态应用程序安全测试(DAST)工具来测试您的应用程序。 这些工具可以检测与用户身份验证,授权,SQL 注入以及与 API 相关的端点相关的错误。
发布:在发布应用程序之前,请使用安全分析工具来进行全面的渗透测试和漏洞扫描。
部署:在运行时完成上述测试后,将安全的版本发送到生产中以进行最终部署。
随着基于现代 IT 基础设施的企业安全威胁的复杂性增加,DevSecOps 将发挥更加关键的作用。然而,DevSecOps 流程将需要随着时间的推移而改进,而不是仅仅依靠同时实施所有安全更改即可。这将消除回溯或应用交付失败的可能性。
引用:你需要知道的DevSecOps流程及工具
《系统分析师教程》张友生著