×

验证OpenJDK对泛型集合的排序方法。 (英语) Zbl 1468.68125号

摘要:TimSort是Java标准库和许多其他编程框架提供的主要排序算法。我们最初的目标是用机械证明对TimSort进行功能验证。然而,在我们的验证尝试中,我们发现了一个错误,该错误导致实现因未捕获的异常而崩溃。在本文中,我们确定了错误发生的条件,并由此导出了一个不会影响性能的无错误版本。我们正式指定了新版本,并验证了终止和不存在异常(包括错误)。该验证是使用KeY(一种最先进的Java交互式验证工具)以机械方式进行的。我们对这些证据进行了详细的描述和分析。证明的复杂性需要扩展和KeY中的新功能,包括符号状态合并。

MSC公司:

60年第68季度 规范和验证(程序逻辑、模型检查等)
68页第10页 搜索和排序
68伏15 定理证明(自动和交互式定理证明、演绎、解析等)
PDF格式BibTeX公司 XML格式引用
全文: 内政部

参考文献:

[1] Ahrendt,W.、Beckert,B.、Bubel,R.、Hähnle,R.,Schmitt,P.、Ulbrich,M.(编辑):演绎软件验证——KeY图书:从理论到实践,LNCS,第10001卷。柏林施普林格出版社(2016)
[2] Ahrendt,W.、Mostowski,W.和Paganelli,G.:用于高覆盖率测试生成的实时Java API规范。摘自:第十届实时和嵌入式系统Java技术国际研讨会论文集,JTRES’12,第145-154页。ACM,纽约(2012)
[3] Akbarpour,B.,Abdel-Hamid,A.T.,Tahar,S.,Harrison,J.:使用HOL验证IEEE-754浮点指数函数的综合实现。计算。J.53(4),465-488(2010)·doi:10.1093/comjnl/bxp023
[4] Beckert,B.,Hähnle,R.:推理与验证。IEEE智能。系统。29(1), 20-29 (2014) ·doi:10.1109/MIS.2014.3
[5] 贝克特,B。;Klebanov,V。;Cuellar,J.(编辑);Liu,Z.(编辑),演绎程序验证中的证明重用(2004),北京
[6] Beyer,D。;Baier,C.(编辑);Tinelli,C.(编辑),《软件验证和可验证证人》(SV-COMP 2015报告),第9035、401-416号(2015),柏林
[7] Blanchette,J.C.、Kaliszyk,C.、Paulson,L.C.、Urban,J.:迈向量化宽松。J.福尔马利兹。原因。9(1), 101-148 (2016) ·Zbl 1451.68318号
[8] Breunesse,C.B.:关于JML:Java程序的工具辅助验证主题。奈梅亨Radboud大学博士论文(2006年)
[9] Cadar,C.,Sen,K.:软件测试的符号执行:三十年后。Commun公司。ACM 56(2),82-90(2013)·doi:10.1145/2408776.2408795
[10] Filliátre,J.C.,Magaud,N.:系统Coq中排序算法的认证。高阶逻辑中的定理证明:新兴趋势。法国尼斯(1999年)。网址:http://www.lri.fr/filliatri/ftp/publis/Filliatre-Magaud.ps.gz
[11] Foley,M.,Hoare,C.A.R.:递归程序的证明:快速排序。计算。J.14(4),391-395(1971)·Zbl 0231.68011号 ·doi:10.1093/comjnl/144.391
[12] de Gouw,S.、de Boer,F.S.、Rot,J.:证明珍珠:正确稳定分选的关键因素。J.汽车。原因。53(2), 129-139 (2014) ·Zbl 1314.68277号 ·doi:10.1007/s10817-013-9300-y
[13] de Gouw,S.、Rot,J.、de Boer,F.S.、Bubel,R.、Hähnle,R.:OpenJDK的Java.utils。Collection.sort()被破坏:好的、坏的和最坏的情况。摘自:计算机辅助验证第27届国际会议,CAV 2015,美国加利福尼亚州旧金山,2015年7月18日至24日,会议记录,第一部分,第273-289页(2015)
[14] Leavens,G.T.、Poll,E.、Clifton,C.、Cheon,Y.、Ruby,C.、Cok,D.、Müller,P.、Kiniry,J.、Chalin,P.,Zimmerman,D.M.、WernerDietl:JML参考手册(2013)。http://www.eecs.ucf.edu/leavens/JML//OldReleases/jmlrefman.pdf。修订草案2344
[15] 项目经理麦克罗伊;Ramachandran,V.(编辑),乐观排序和信息理论复杂性,467-474(1993),费城·Zbl 0801.68040号
[16] Mostowski,W。;Cerioli,M.(编辑),《动态逻辑中Java卡安全属性的形式化和验证》,第3442、357-371号(2005),柏林·Zbl 1119.68351号 ·doi:10.1007/978-3-540-31984-9_27
[17] Mostowski,W.:经过充分验证的Java卡API参考实现。摘自:Beckert,B.(ed.)《第四届CADE-21国际核查研讨会论文集》,德国不来梅,CEUR研讨会论文集,第259卷。CEUR-WS.org(2007)
[18] Paulson,L.C.:Isabelle:一个通用定理证明器,LNCS,第828卷。柏林施普林格(1994)·Zbl 0825.68059号 ·doi:10.1007/BFb0030541
[19] Peters,T.:TimSort描述。http://svn.python.org/projects/python/trunk/Objects/listsort.txt。2015年2月访问
[20] Polikarpova,N。;Tschannen,J。;加利福尼亚州福利亚;比约纳,N.(编辑);Boer,FS(编辑),一个完全验证的容器库,编号9109,414-434(2015),柏林
[21] 雷夫,W。;斯坦泽尔,K。;Shyamasundar,RK(编辑),《软件验证中证据的重用》,第761号,第284-293页(1993年),柏林·doi:10.1007/3-540-57529-461
[22] Scheurer,D。;Hähnle,R。;布贝尔,R。;Ogata,K.(编辑);Lawford,M.(编辑);Liu,S.(编辑),《符号执行分支合并的通用格模型》,第10009号,第57-73页(2016),柏林
[23] Sforza,F.、Battú,L.、Brunelli,M.、Castelnuovo,A.、Magnaghi,M.:“验证设计”方法。摘自:第二届电子设计质量国际研讨会(ISQED),美国加利福尼亚州圣何塞,第50-55页。IEEE计算机学会(2001)
[24] 斯特纳格尔,C.:证明珍珠:GHC合并排序的机械化证明。J.汽车。原因。51(4), 357-370 (2013) ·Zbl 1314.68288号 ·doi:10.1007/s10817-012-9260-7
[25] Tschannen,J.,Furia,C.A.,Nordio,M.,Polikarpova,N.:自动验证:面向对象程序的自动功能验证。摘自:《第21届系统构建和分析工具和算法国际会议论文集》,第9035卷,第566-580页。纽约州施普林格市(2015)
此参考列表基于出版商或数字数学图书馆提供的信息。其项与zbMATH标识符进行启发式匹配,可能包含数据转换错误。在某些情况下,zbMATH Open的数据对这些数据进行了补充/增强。这试图尽可能准确地反映原始论文中列出的参考文献,而不要求完整或完全匹配。