某软件项目的活动图如下图所示,其中顶点表示项目里程碑,连接顶点的边表示包含的活动,边上的数字表示活动的持续时间(天),则完成该项目的最少时间为( )天。活动BC和BF分别最多可以晚开始(请作答此空)天而不会影响整个项目的进度。
本题中关键路径为:A→B→D→G→F→J和A→B→C→E→F→J,总时长为:18。
所以完成该项目的最小时间为18天。
BC:由于BC在关键路径上,所以BC的松弛时间为0。
BF:由于关键路径时长为18,经过BF的最长路路径11,所以BF松弛时间为:18-11=7。
关键路径 :a b d g f i, 最短时间(最长路径)=18
某软件项目的活动图如下图所示,其中顶点表示项目里程碑,连接顶点的边表示包含的活动,边上的数字表示活动的持续时间(天)。活动 EH 最多可以晚开始( )天而不影响项目的进度。由于某种原因,现在需要同一个工作人员完成 BC 和 BD ,则完成该项目的最少时间为(请作答此空)天。
BC持续时间3天,BD持续时间2天,由一人完成,最快的方式为,先完成BD再去完成BC ,因此相当于此时,关键路径ABCEFJ上推迟了2天完成,因此此时项目完成的最少时间为20天。
故题目的正确答案为C。
某软件项目的活动图如下图所示,其中顶点表示项目里程碑,连接顶点的边表示包含的活动,边上的数字表示活动的持续时间(天)。完成该项目的最短时间是(33) 天。设活动A-B的最早开始时间为第1天,则活动B-C的最早和最晚开始时间分别为第(34)天。
图是一个软件项目的活动图,其中顶点表示项目里程碑,连接顶点的边表示包含的活动,则里程碑(请作答此空)没有按时完成会影响整个项目的进度。若活动0→2完成后,停止3天才开始活动2→6,则完成整个项目的最少时间是( )天。
适配器模式:将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
装饰模式:指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
策略模式:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。
类之间的关系主要有以下几种:
(1)继承关系:是指子类自动地具有其父类的全部属性与操作,也称为父类对子类的泛化。在UML建模语言中,采用空心三角形表示,从子类指向父类。
(2)关联关系:是指两个或多个类之间的一种静态关系,表现为一个类是另一个类的成员变量。在UML类图中,双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头,带普通箭头的实心线指向被拥有者。
(3)聚合关系:是整体与部分之间的关系,是强的关联关系。在UML中,聚合关系用带空心菱形的实心线,菱形指向整体。
(4)依赖关系:也是类之间的一种静态关系,表现为一个类是另外一个类的局部变量。在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。
9种探索性测试风格如下:
(1)预感(基于以往的缺陷,探索新的变化);
(2)模型(架构图、气泡图、状态表、故障模型等);
(3)示例(用例、特性演练、场景等);
(4)不变性(测试变更不会对应用程序产生影响);
(5)干扰(寻找中断或转移程序路径的方法);
(6)错误处理(检查错误处理是否正确);
(7)故障排除(错误分析,例如简化、澄清或加强错误报告,当缺陷修复后测试差异);
(8)小组洞察(头脑风暴、相关成员小组讨论、配对测试);
(9)规范(主动阅读,对照用户手册,启发式探索)。
软件错误估算值 n=(i*j)/k。
探索性测试无法对被测对象进行全面性测试,测试结果一般不易度量,不能确保发现最重要的软件缺陷。
自动化测试工具有 UTF \ Robot Framework \ Selenium
请问在哪些项目和环境中更适合使用自动化测试工具?任意写出四种即可。
(1)被测试系统具备足够的易测试性。
(2)需求稳定,不会频繁变更。
(3)每日构建后的测试验证。每日构建版本出来后,运行一组自动化的测试用例,保证基本功能可用,减少人工测试的工作量。
(4)研发和维护周期长,需要频繁执行回归测试。
(5)软件系统用户界面稳定,变动少。
(6)需要在多平台上运行的相同测试案例。
(7)项目进度压力不太大。
(8)测试人员具备较强的编程能力。
自动化测试工具。
(1)UFT
(2)Robot Framework
(3)Selenium
(4)Appium
易学性测试的目标是用于评估在指定的使用周境中,产品或系统在有效性、抗风险和满意度特性方面为了学习使用该产品或系统这一指定的目标, 可以为指定用户使用的程度。对于易学性测试,可以评估软件的帮助系统和文档的有效性,以及评估用户要用多长时间才能学会如何使用某个功能。
负载压力测试:是在一定约束条件下测试系统所能承受的并发用户量、运行时间、数据量,以确定系统所能承受的最大负载压力。在真实环境下,检查系统服务等级的满足情况,评估并报告整个系统的性能;对系统的未来容量作出预测和规划。
经济风险缓解性属于抗风险特性的子特性,使用质量模型如下图所示:
完整性属于信息安全性的子特性,系统/软件产品质量模型如下图所示:
阅读下列说明。
[说明]
某数据管理系统有两个重要模块:数据接收模块和数据查询模块。数据接收模块按照一定的时间间隔从多个不同数据源接收数据进行一定的预处理后存入数据库中;数据查询模块根据用户请求从数据库中查询相应的数据并返回给用户。现需要对该系统执行负载压力测试。
该数据管理系统的性能要求为:
13交易执行成功率100%;
14接收间隔最小为200ms;
15查询响应时间在3s以内;
16查询功能支持至少10个并发用户:
17数据接收模块CPU利用率不超过40%;
18数据查询模块CPU利用率不超过20%。
13、简述负载压力测试的主要目的。(3分)
14、对该数据管理系统进行性能测试时,主要关注哪些性能指标?(3分)
15、该系统数据接收模块和数据查询模块的测试结果如表5-1、表5-2所示,请分别指出测试结果是否满足性能需求并说明原因。(6分)
16、根据问题3的测试结果,试分析该系统的可能瓶颈。(3分)13、
本问题考查负载压力测试的测试目的。
负载压力测试的目的包括:在真实环境下检测系统性能,评估系统性能以及服务等级的满足情况;预见系统负载压力承受力,在应用实际部署之前,评估系统性能;分析系统瓶颈、优化系统。
14、
本问题考查性能测试的性能指标。性能测试指标包括并发用户数、响应时间、吞吐量、资源利用率等。
该系统涉及的性能指标包括:并发用户数,响应时间和资源利用率。
15、
本问题考查能否正确判断测试指标是否合理。
对数据接收模块来说,当接收频率为200ms时,存数据库交易成功率为80%,不满足交易成功率100%的要求;当接收频率为200ms时,CPU利用率为43.8%,不满足不超过40%的要求。因此数据接收模块的测试结果不满足性能指标。
对数据查询模块来说,要求至少支持10个并发用户的情况下响应时间在3秒以内,这样在15个并发用户的时候响应时间超出3秒不能算作不满足。数据查询模块的测试结果满足性能指标。
16、
本问题考查工程师对系统瓶颈的初步判断。
根据问题3可以看出,当接收频率过高时,存数据库交易成功率和CPU剩用率均不满足需求。存数据库交易成功率问题的可能原因有两个,一是该模块程序没有采用合适的并发/并行策略,二是数据库本身的设计或者优化不够;而CPU利用率的问题则是因为服务器CPU本身性能不够。 因此,可能瓶颈为:数据接收模块软件没有采用合适的并发/并行策略;服务器CPU性能不足;数据库设计不足或者优化不够。
阅读下列说明,回答下列问题。
[说明]
某大型匹萨加工和销售商为了有效管理匹萨的生产和销售情况,欲开发一套基于Web的信息系统。其主要功能为销售、生产控制、采购、运送、存储和财务管理等。系统采用Java EE平台开发,页面中采用表单实现数据的提交与交互,使用图形(Graphics)以提升展示效果。
4、系统实现时,对销售订单的更新所用的SQL语句如下:
PreparedStatement pStmt=connection.prepareStatement("UPDATE SalesOrder SET status= ? WHERE OrderID= ?")
然后通过setString(...);的方式设置参数值后加以执行。
设计测试用例以测试SQL注入,并说明该实现是否能防止SOL注入。
第四小题考查Web应用安全性方面的SQL注入,SQL注入是Web应用安全性测试的重要方面之一。
许多Web应用系统采用某种数据库,接收用户从Web页面中输入,完成展示相关存储的数据(如检查用户登录信息)、将输入数据存储到数据库(如用户输入表单中数据域并点击提交后,系统将信息存入数据库)等操作。在有些情况下,将用户输入的数据和设计好的SQL框架拼接后提交给数据库执行,就可能存在用户输入的数据并非设计的正确格式,就给恶意用户提供了破坏的机会,即SQL注入。恶意用户输入不期望的数据,拼接后提交给数据库执行,造成可能使用其他用户身份,查看其他用户的私密信息,还可能修改数据库的结构,甚至是删除应用的数据库表等严重后果。SQL注入在使用SSL的应用中仍然存在,甚至是防火墙也无法防止SQL注入。因此,在测试Web应用时,需要认真仔细设计测试用例,采用Web漏洞扫描工具等进行检查,进行认真严格的测试,以保证不存在SQL注入机会。
本系统实现时,对销售订单的更新所用的SQL语句如下:
PreparedStatement pStmt=connection.prepareStatement("UPDATE SalesOrder SET status= ? WHERE OrderID= ?;");
然后通过setString(...);的方式设置参数值后加以执行。
在SQL语句中采用参数的方式传递前台传递来的值,因为不论是什么值,都会只作为setString(...)的参数值,不会作为SQL语句的其他功能符,所以本SQL语句更新订单的方式是防止SQL注入的。设计如下测试SQL注入的测试用例:
status: 'fulfilled' --, OrderID: '2014' OR '1'='1'
检查执行结果,或者传递给数据库的SQL语句,会发现所有用例中的功能字符都会经过特定的转义后作为status和OrderID的值。和拼接SQL的方式不同,采用参数形式传递时,Java的JDBC驱动自动会将其按照相应的类型处理,功能符号会进行转义。因此,测试用例中的注释--、OR等都会作为参数的值,不会作为功能符,也就不会改变SQL语句本身的功能结构,该SQL语句是安全的。