首页 > 最新文献

Science of Computer Programming最新文献

英文 中文
Latch: Enabling large-scale automated testing on constrained systems Latch:实现受限系统的大规模自动测试
IF 1.5 4区 计算机科学 Q2 Computer Science Pub Date : 2024-06-06 DOI: 10.1016/j.scico.2024.103157
Tom Lauwaerts , Stefan Marr , Christophe Scholliers

Testing is an essential part of the software development cycle. Unfortunately, testing on constrained devices is currently very challenging. First, the limited memory of constrained devices severely restricts the size of test suites. Second, the limited processing power causes test suites to execute slowly, preventing a fast feedback loop. Third, when the constrained device becomes unresponsive, it is impossible to distinguish between the test failing or taking very long, forcing the developer to work with timeouts. Unfortunately, timeouts can cause tests to be flaky, i.e., have unpredictable outcomes independent of code changes. Given these problems, most IoT developers rely on laborious manual testing.

In this paper, we propose the novel testing framework Latch (Large-scale Automated Testing on Constrained Hardware) to overcome the three main challenges of running large test suites on constrained hardware, as well as automate manual testing scenarios through a novel testing methodology based on debugger-like operations—we call this new testing approach managed testing.

The core idea of Latch is to enable testing on constrained devices without those devices maintaining the whole test suite in memory. Therefore, programmers script and run tests on a workstation which then step-wise instructs the constrained device to execute each test, thereby overcoming the memory constraints. Our testing framework further allows developers to mark tests as depending on other tests. This way, Latch can skip tests that depend on previously failing tests resulting in a faster feedback loop. Finally, Latch addresses the issue of timeouts and flaky tests by including an analysis mode that provides feedback on timeouts and the flakiness of tests.

To illustrate the expressiveness of Latch, we present testing scenarios representing unit testing, integration testing, and end-to-end testing. We evaluate the performance of Latch by testing a virtual machine against the WebAssembly specification, with a large test suite consisting of 10,213 tests running on an ESP32 microcontroller. Our experience shows that the testing framework is expressive, reliable and reasonably fast, making it suitable to run large test suites on constrained devices. Furthermore, the debugger-like operations enable to closely mimic manual testing.

测试是软件开发周期的重要组成部分。遗憾的是,目前在受限设备上进行测试非常具有挑战性。首先,受限设备的内存有限,严重限制了测试套件的大小。其次,有限的处理能力导致测试套件执行缓慢,无法形成快速反馈回路。第三,当受限设备反应迟钝时,无法区分是测试失败还是测试耗时过长,开发人员不得不使用超时功能。不幸的是,超时会导致测试不稳定,即测试结果不可预测,与代码变化无关。在本文中,我们提出了新颖的测试框架 Latch(受限硬件上的大规模自动测试),以克服在受限硬件上运行大型测试套件所面临的三大挑战,并通过基于类似调试器操作的新颖测试方法实现手动测试场景的自动化--我们将这种新的测试方法称为托管测试。因此,程序员在工作站上编写脚本并运行测试,然后工作站会逐步指示受限设备执行每个测试,从而克服内存限制。我们的测试框架还允许开发人员将测试标记为依赖于其他测试。这样,Latch 就能跳过依赖于先前失败测试的测试,从而加快反馈循环。最后,Latch 通过分析模式解决了测试超时和不稳定性的问题,该模式可提供测试超时和不稳定性的反馈。我们通过在 ESP32 微控制器上运行由 10,213 个测试组成的大型测试套件,根据 WebAssembly 规范测试虚拟机来评估 Latch 的性能。我们的经验表明,该测试框架具有很强的表现力、可靠性和相当快的速度,因此适合在受限设备上运行大型测试套件。此外,类似调试器的操作还能近似模拟人工测试。
{"title":"Latch: Enabling large-scale automated testing on constrained systems","authors":"Tom Lauwaerts ,&nbsp;Stefan Marr ,&nbsp;Christophe Scholliers","doi":"10.1016/j.scico.2024.103157","DOIUrl":"10.1016/j.scico.2024.103157","url":null,"abstract":"<div><p>Testing is an essential part of the software development cycle. Unfortunately, testing on constrained devices is currently very challenging. First, the limited memory of constrained devices severely restricts the size of test suites. Second, the limited processing power causes test suites to execute slowly, preventing a fast feedback loop. Third, when the constrained device becomes unresponsive, it is impossible to distinguish between the test failing or taking very long, forcing the developer to work with timeouts. Unfortunately, timeouts can cause tests to be flaky, i.e., have unpredictable outcomes independent of code changes. Given these problems, most IoT developers rely on laborious manual testing.</p><p>In this paper, we propose the novel testing framework <em>Latch</em> (Large-scale Automated Testing on Constrained Hardware) to overcome the three main challenges of running large test suites on constrained hardware, as well as automate manual testing scenarios through a novel testing methodology based on debugger-like operations—we call this new testing approach <em>managed testing</em>.</p><p>The core idea of <em>Latch</em> is to enable testing on constrained devices without those devices maintaining the whole test suite in memory. Therefore, programmers script and run tests on a workstation which then step-wise instructs the constrained device to execute each test, thereby overcoming the memory constraints. Our testing framework further allows developers to mark tests as depending on other tests. This way, <em>Latch</em> can skip tests that depend on previously failing tests resulting in a faster feedback loop. Finally, <em>Latch</em> addresses the issue of timeouts and flaky tests by including an analysis mode that provides feedback on timeouts and the flakiness of tests.</p><p>To illustrate the expressiveness of <em>Latch</em>, we present testing scenarios representing unit testing, integration testing, and end-to-end testing. We evaluate the performance of <em>Latch</em> by testing a virtual machine against the WebAssembly specification, with a large test suite consisting of 10,213 tests running on an ESP32 microcontroller. Our experience shows that the testing framework is expressive, reliable and reasonably fast, making it suitable to run large test suites on constrained devices. Furthermore, the debugger-like operations enable to closely mimic manual testing.</p></div>","PeriodicalId":49561,"journal":{"name":"Science of Computer Programming","volume":null,"pages":null},"PeriodicalIF":1.5,"publicationDate":"2024-06-06","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"141414909","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":4,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
iGnnVD: A novel software vulnerability detection model based on integrated graph neural networks iGnnVD:基于集成图神经网络的新型软件漏洞检测模型
IF 1.3 4区 计算机科学 Q2 Computer Science Pub Date : 2024-06-06 DOI: 10.1016/j.scico.2024.103156
Jinfu Chen , Yemin Yin , Saihua Cai , Weijia Wang , Shengran Wang , Jiming Chen

Software vulnerability detection is a challenging task in the security field, the boom of deep learning technology promotes the development of automatic vulnerability detection. Compared with sequence-based deep learning models, graph neural network (GNN) can learn the structural features of code, it performs well in the field of vulnerability detection for source code. However, different GNNs have different detection results for the same code, and using a single kind of GNN may lead to high false positive rate and false negative rate. In addition, the complex structure of source code causes single GNN model cannot effectively learn their depth feature, thereby leading to low detection accuracy. To solve these limitations, we propose a software vulnerability detection model called iGnnVD based on the integrated graph neural networks. In the proposed iGnnVD model, the base detectors including GCN, GAT and APPNP are first constructed to capture the bidirectional information in the code graph structure with bidirectional structure; And then, the residual connection is used to aggregate the features while retaining the features each time; Finally, the convolutional layer is used to perform the aggregated classification. In addition, an integration module that analyzes the detection results of three detectors for final classification is designed using a voting strategy to solve the problem of high false positive rate and false negative rate caused by using a single kind of base detector. We perform extensive experiments on three datasets and experimental results show that the proposed iGnnVD model can improve the detection accuracy of vulnerabilities in source code as well as reduce the false positive rate and false negative rate compared with existing deep learning-based vulnerability detection models, it also has good stability.

软件漏洞检测是安全领域一项极具挑战性的任务,深度学习技术的蓬勃发展推动了漏洞自动检测的发展。与基于序列的深度学习模型相比,图神经网络(GNN)可以学习代码的结构特征,在源代码漏洞检测领域表现出色。然而,不同的图神经网络对相同代码的检测结果不同,使用单一类型的图神经网络可能会导致较高的假阳性率和假阴性率。此外,源代码结构复杂,单一的 GNN 模型无法有效学习其深度特征,从而导致检测准确率较低。为了解决这些问题,我们提出了一种基于集成图神经网络的软件漏洞检测模型 iGnnVD。在所提出的 iGnnVD 模型中,首先构建了包括 GCN、GAT 和 APPNP 在内的基础检测器,以捕捉具有双向结构的代码图结构中的双向信息;然后,在保留每次特征的同时,利用残差连接对特征进行聚合;最后,利用卷积层进行聚合分类。此外,我们还设计了一个集成模块,利用投票策略分析三个检测器的检测结果,进行最终分类,以解决使用单一类型的基础检测器导致的高假阳性率和假阴性率问题。我们在三个数据集上进行了大量实验,实验结果表明,与现有的基于深度学习的漏洞检测模型相比,所提出的 iGnnVD 模型可以提高源代码中漏洞的检测精度,降低误报率和误负率,而且具有良好的稳定性。
{"title":"iGnnVD: A novel software vulnerability detection model based on integrated graph neural networks","authors":"Jinfu Chen ,&nbsp;Yemin Yin ,&nbsp;Saihua Cai ,&nbsp;Weijia Wang ,&nbsp;Shengran Wang ,&nbsp;Jiming Chen","doi":"10.1016/j.scico.2024.103156","DOIUrl":"https://doi.org/10.1016/j.scico.2024.103156","url":null,"abstract":"<div><p>Software vulnerability detection is a challenging task in the security field, the boom of deep learning technology promotes the development of automatic vulnerability detection. Compared with sequence-based deep learning models, graph neural network (GNN) can learn the structural features of code, it performs well in the field of vulnerability detection for source code. However, different GNNs have different detection results for the same code, and using a single kind of GNN may lead to high false positive rate and false negative rate. In addition, the complex structure of source code causes single GNN model cannot effectively learn their depth feature, thereby leading to low detection accuracy. To solve these limitations, we propose a software vulnerability detection model called iGnnVD based on the integrated graph neural networks. In the proposed iGnnVD model, the base detectors including GCN, GAT and APPNP are first constructed to capture the bidirectional information in the code graph structure with bidirectional structure; And then, the residual connection is used to aggregate the features while retaining the features each time; Finally, the convolutional layer is used to perform the aggregated classification. In addition, an integration module that analyzes the detection results of three detectors for final classification is designed using a voting strategy to solve the problem of high false positive rate and false negative rate caused by using a single kind of base detector. We perform extensive experiments on three datasets and experimental results show that the proposed iGnnVD model can improve the detection accuracy of vulnerabilities in source code as well as reduce the false positive rate and false negative rate compared with existing deep learning-based vulnerability detection models, it also has good stability.</p></div>","PeriodicalId":49561,"journal":{"name":"Science of Computer Programming","volume":null,"pages":null},"PeriodicalIF":1.3,"publicationDate":"2024-06-06","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"141323285","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":4,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
BEAPI: A tool for bounded exhaustive input generation from APIs BEAPI:从应用程序接口生成有界穷举输入的工具
IF 1.3 4区 计算机科学 Q2 Computer Science Pub Date : 2024-06-05 DOI: 10.1016/j.scico.2024.103153
Mariano Politano , Valeria Bengolea , Facundo Molina , Nazareno Aguirre , Marcelo Frias , Pablo Ponzio

Bounded exhaustive testing is a very effective technique for bug finding, which proposes to test a given program under all valid bounded inputs, for a bound provided by the developer. Existing bounded exhaustive testing techniques require the developer to provide a precise specification of the valid inputs. Such specifications are rarely present as part of the software under test, and writing them can be costly and challenging.

To address this situation we propose BEAPI, a tool that given a Java class under test, generates a bounded exhaustive set of objects of the class solely employing the methods of the class, without the need for a specification. BEAPI creates sequences of calls to methods from the class' public API, and executes them to generate inputs. BEAPI implements very effective pruning techniques that allow it to generate inputs efficiently.

We experimentally assessed BEAPI in several case studies from the literature, and showed that it performs comparably to the best existing specification-based bounded exhaustive generation tool (Korat), without requiring a specification of the valid inputs.

有界穷举测试是一种非常有效的错误查找技术,它建议在所有有效的有界输入条件下测试给定程序,测试条件由开发人员提供。现有的有界穷举测试技术要求开发人员提供有效输入的精确说明。针对这种情况,我们提出了 BEAPI,它是一种工具,给定一个被测试的 Java 类,只需使用该类的方法,就能生成该类对象的有界穷举集,而无需说明。BEAPI 从类的公共 API 中创建方法调用序列,并执行这些序列以生成输入。BEAPI 实现了非常有效的剪枝技术,使其能够高效地生成输入。我们在多个文献案例研究中对 BEAPI 进行了实验性评估,结果表明它的性能可与现有最好的基于规范的有界穷举生成工具(Korat)媲美,而无需对有效输入进行规范。
{"title":"BEAPI: A tool for bounded exhaustive input generation from APIs","authors":"Mariano Politano ,&nbsp;Valeria Bengolea ,&nbsp;Facundo Molina ,&nbsp;Nazareno Aguirre ,&nbsp;Marcelo Frias ,&nbsp;Pablo Ponzio","doi":"10.1016/j.scico.2024.103153","DOIUrl":"https://doi.org/10.1016/j.scico.2024.103153","url":null,"abstract":"<div><p>Bounded exhaustive testing is a very effective technique for bug finding, which proposes to test a given program under all valid bounded inputs, for a bound provided by the developer. Existing bounded exhaustive testing techniques require the developer to provide a precise specification of the valid inputs. Such specifications are rarely present as part of the software under test, and writing them can be costly and challenging.</p><p>To address this situation we propose BEAPI, a tool that given a Java class under test, generates a bounded exhaustive set of objects of the class solely employing the methods of the class, without the need for a specification. BEAPI creates sequences of calls to methods from the class' public API, and executes them to generate inputs. BEAPI implements very effective pruning techniques that allow it to generate inputs efficiently.</p><p>We experimentally assessed BEAPI in several case studies from the literature, and showed that it performs comparably to the best existing specification-based bounded exhaustive generation tool (Korat), without requiring a specification of the valid inputs.</p></div>","PeriodicalId":49561,"journal":{"name":"Science of Computer Programming","volume":null,"pages":null},"PeriodicalIF":1.3,"publicationDate":"2024-06-05","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"141294635","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":4,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
Parallel program analysis on path ranges 路径范围上的并行程序分析
IF 1.3 4区 计算机科学 Q2 Computer Science Pub Date : 2024-05-31 DOI: 10.1016/j.scico.2024.103154
Jan Haltermann , Marie-Christine Jakobs , Cedric Richter , Heike Wehrheim

Symbolic execution is a software verification technique symbolically running programs and thereby checking for bugs. Ranged symbolic execution performs symbolic execution on program parts, so-called path ranges, in parallel. Due to the parallelism, verification is accelerated and hence scales to larger programs.

In this paper, we discuss a generalization of ranged symbolic execution to arbitrary program analyses. More specifically, we present a verification approach that splits programs into path ranges and then runs arbitrary analyses on the ranges in parallel. Our approach in particular allows to run different analyses on different program parts. We have implemented this generalization on top of the tool CPAchecker and evaluated it on programs from the SV-COMP benchmark. Our evaluation shows that verification can benefit from the parallelization of the verification task, but also needs a form of work stealing (between analyses) to become efficient.

符号执行是一种软件验证技术,它以符号方式运行程序,从而检查错误。范围符号执行对程序部分(即所谓的路径范围)进行并行符号执行。在本文中,我们讨论了范围符号执行对任意程序分析的推广。更具体地说,我们提出了一种验证方法,它将程序分割成路径范围,然后并行运行路径范围上的任意分析。我们的方法尤其允许在不同的程序部分运行不同的分析。我们在工具 CPAchecker 的基础上实现了这种通用方法,并在 SV-COMP 基准程序上对其进行了评估。我们的评估结果表明,验证任务的并行化可以使验证工作受益,但也需要一种形式的工作窃取(在分析之间)才能提高效率。
{"title":"Parallel program analysis on path ranges","authors":"Jan Haltermann ,&nbsp;Marie-Christine Jakobs ,&nbsp;Cedric Richter ,&nbsp;Heike Wehrheim","doi":"10.1016/j.scico.2024.103154","DOIUrl":"https://doi.org/10.1016/j.scico.2024.103154","url":null,"abstract":"<div><p>Symbolic execution is a software verification technique symbolically running programs and thereby checking for bugs. Ranged symbolic execution performs symbolic execution on program parts, so-called <em>path ranges</em>, in parallel. Due to the parallelism, verification is accelerated and hence scales to larger programs.</p><p>In this paper, we discuss a generalization of ranged symbolic execution to arbitrary program analyses. More specifically, we present a verification approach that splits programs into path ranges and then runs arbitrary analyses on the ranges in parallel. Our approach in particular allows to run <em>different</em> analyses on different program parts. We have implemented this generalization on top of the tool <span>CPAchecker</span> and evaluated it on programs from the SV-COMP benchmark. Our evaluation shows that verification can benefit from the parallelization of the verification task, but also needs a form of work stealing (between analyses) to become efficient.</p></div>","PeriodicalId":49561,"journal":{"name":"Science of Computer Programming","volume":null,"pages":null},"PeriodicalIF":1.3,"publicationDate":"2024-05-31","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://www.sciencedirect.com/science/article/pii/S0167642324000777/pdfft?md5=c9721851a6e6fced1e9f8337cb568046&pid=1-s2.0-S0167642324000777-main.pdf","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"141294633","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":4,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"OA","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
Taming shared mutable states of operating systems in Rust 用 Rust 管理操作系统的共享可变状态
IF 1.3 4区 计算机科学 Q2 Computer Science Pub Date : 2024-05-27 DOI: 10.1016/j.scico.2024.103152
Jaemin Hong , Sunghwan Shim , Sanguk Park , Tae Woo Kim , Jungwoo Kim , Junsoo Lee , Sukyoung Ryu , Jeehoon Kang

Operating systems (OSs) suffer from pervasive memory bugs. Their primary source is shared mutable states, crucial to low-level control and efficiency. The safety of shared mutable states is not guaranteed by C/C++, in which legacy OSs are typically written. Recently, researchers have adopted Rust into OS development to implement clean-slate OSs with fewer memory bugs. Rust ensures the safety of shared mutable states that follow the “aliasing XOR mutability” discipline via its type system. With the success of Rust in clean-slate OSs, the industry has become interested in rewriting legacy OSs in Rust. However, one of the most significant obstacles to this goal is shared mutable states that are aliased AND mutable (A&M). While they are essential to the performance of legacy OSs, Rust does not guarantee their safety. Instead, programmers have identified A&M states with the same reasoning principle dubbed an A&M pattern and implemented its modular abstraction to facilitate safety reasoning. This paper investigates modular abstractions for A&M patterns in legacy OSs. We present modular abstractions for six A&M patterns in the xv6 OS. Our investigation of Linux and clean-slate Rust OSs shows that the patterns are practical, as all of them are utilized in Linux, and the abstractions are original, as none of them are found in the Rust OSs. Using the abstractions, we implemented xv6Rust, a complete rewrite of xv6 in Rust. The abstractions incur no run-time overhead compared to xv6 while reducing the reasoning cost of xv6Rust to the level of the clean-slate Rust OSs.

操作系统(OS)普遍存在内存漏洞。它们的主要来源是共享可变状态,这对底层控制和效率至关重要。C/C++ 无法保证共享可变状态的安全性,而传统操作系统通常是用 C/C++ 编写的。最近,研究人员在操作系统开发中采用了 Rust,以实现内存错误更少的干净操作系统。Rust 通过其类型系统确保遵循 "别名 XOR 可变性 "规则的共享可变状态的安全性。随着 Rust 在清洁板操作系统中的成功,业界开始对用 Rust 重写传统操作系统感兴趣。然而,实现这一目标的最大障碍之一是共享的可变状态,即别名和可变状态(A&M)。虽然它们对传统操作系统的性能至关重要,但 Rust 并不保证它们的安全性。相反,程序员们用相同的推理原则识别 A&M 状态,将其称为 A&M 模式,并实现其模块化抽象,以促进安全推理。本文研究了传统操作系统中 A&M 模式的模块化抽象。我们介绍了 xv6 操作系统中六种 A&M 模式的模块化抽象。我们对 Linux 和简洁版 Rust 操作系统的调查表明,这些模式是实用的,因为所有这些模式都在 Linux 中使用,而这些抽象是原创的,因为在 Rust 操作系统中找不到这些模式。利用这些抽象,我们用 Rust 实现了 xv6Rust,这是对 xv6 的完全重写。与 xv6 相比,抽象不产生运行时开销,同时将 xv6Rust 的推理成本降低到了 Rust 操作系统的水平。
{"title":"Taming shared mutable states of operating systems in Rust","authors":"Jaemin Hong ,&nbsp;Sunghwan Shim ,&nbsp;Sanguk Park ,&nbsp;Tae Woo Kim ,&nbsp;Jungwoo Kim ,&nbsp;Junsoo Lee ,&nbsp;Sukyoung Ryu ,&nbsp;Jeehoon Kang","doi":"10.1016/j.scico.2024.103152","DOIUrl":"https://doi.org/10.1016/j.scico.2024.103152","url":null,"abstract":"<div><p>Operating systems (OSs) suffer from pervasive memory bugs. Their primary source is shared mutable states, crucial to low-level control and efficiency. The safety of shared mutable states is not guaranteed by C/C++, in which legacy OSs are typically written. Recently, researchers have adopted Rust into OS development to implement clean-slate OSs with fewer memory bugs. Rust ensures the safety of shared mutable states that follow the “aliasing XOR mutability” discipline via its type system. With the success of Rust in clean-slate OSs, the industry has become interested in rewriting legacy OSs in Rust. However, one of the most significant obstacles to this goal is shared mutable states that are <em>aliased AND mutable</em> (A&amp;M). While they are essential to the performance of legacy OSs, Rust does not guarantee their safety. Instead, programmers have identified A&amp;M states with the same reasoning principle dubbed an <em>A&amp;M pattern</em> and implemented its modular abstraction to facilitate safety reasoning. This paper investigates modular abstractions for A&amp;M patterns in legacy OSs. We present modular abstractions for six A&amp;M patterns in the xv6 OS. Our investigation of Linux and clean-slate Rust OSs shows that the patterns are practical, as all of them are utilized in Linux, and the abstractions are original, as none of them are found in the Rust OSs. Using the abstractions, we implemented xv6<span><math><msub><mrow></mrow><mrow><mi>R</mi><mi>u</mi><mi>s</mi><mi>t</mi></mrow></msub></math></span>, a complete rewrite of xv6 in Rust. The abstractions incur no run-time overhead compared to xv6 while reducing the reasoning cost of xv6<span><math><msub><mrow></mrow><mrow><mi>R</mi><mi>u</mi><mi>s</mi><mi>t</mi></mrow></msub></math></span> to the level of the clean-slate Rust OSs.</p></div>","PeriodicalId":49561,"journal":{"name":"Science of Computer Programming","volume":null,"pages":null},"PeriodicalIF":1.3,"publicationDate":"2024-05-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"141294634","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":4,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
Preface Formal Techniques for Safety-Critical Systems (FTSCS 2022) 前言 安全关键型系统的形式化技术(FTSCS 2022)
IF 1.3 4区 计算机科学 Q2 Computer Science Pub Date : 2024-05-21 DOI: 10.1016/j.scico.2024.103149
Cyrille Artho , Peter Csaba Ölveczky
{"title":"Preface Formal Techniques for Safety-Critical Systems (FTSCS 2022)","authors":"Cyrille Artho ,&nbsp;Peter Csaba Ölveczky","doi":"10.1016/j.scico.2024.103149","DOIUrl":"10.1016/j.scico.2024.103149","url":null,"abstract":"","PeriodicalId":49561,"journal":{"name":"Science of Computer Programming","volume":null,"pages":null},"PeriodicalIF":1.3,"publicationDate":"2024-05-21","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"141145140","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":4,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
Improving and comparing performance of machine learning classifiers optimized by swarm intelligent algorithms for code smell detection 改进和比较通过群智能算法优化的机器学习分类器在代码气味检测方面的性能
IF 1.3 4区 计算机科学 Q2 Computer Science Pub Date : 2024-05-15 DOI: 10.1016/j.scico.2024.103140
Shivani Jain, Anju Saha

In complex systems, the maintenance phase engenders the emergence of code smells due to incessant shifts in requirements and designs, stringent timelines, and the developer's relative inexperience. While not conventionally classified as errors, code smells inherently signify flawed design structures that lead to future bugs and errors. It increases the software budget and eventually makes the system hard to maintain or completely obsolete. To mitigate these challenges, practitioners must detect and refactor code smells. However, the theoretical interpretation of smell definitions and intelligent establishment of threshold values pose a significant conundrum. Supervised machine learning emerges as a potent strategy to address these problems and alleviate the dependence on expert intervention. The learning mechanism of these algorithms can be refined through data pre-processing and hyperparameter tuning. Selecting the best values for hyperparameters can be tedious and requires an expert. This study introduces an innovative paradigm that fuses twelve swarm-based, meta-heuristic algorithms with two machine learning classifiers, optimizing their hyperparameters, eliminating the need for an expert, and automating the entire code smell detection process. Through this synergistic approach, the highest post-optimization accuracy, precision, recall, F-measure, and ROC-AUC values are 99.09%, 99.20%, 99.09%, 98.06%, and 100%, respectively. The most remarkable upsurge is 35.9% in accuracy, 53.79% in precision, 35.90% in recall, 44.73% in F-measure, and 36.28% in ROC-AUC. Artificial Bee Colony, Grey Wolf, and Salp Swarm Optimizer are the top-performing swarm-intelligent algorithms. God and Data Class are the most readily detectable smells with optimized classifiers. Statistical tests underscore the profound impact of employing swarm-based algorithms to optimize machine learning classifiers, corroborated by statistical tests. This seamless integration enhances classifier performance, automates code smell detection, and offers a robust solution to a persistent software engineering challenge.

在复杂的系统中,由于需求和设计的不断变化、严格的时间限制以及开发人员相对缺乏经验,维护阶段会产生代码气味。虽然在传统意义上,代码气味并不属于错误,但它本质上意味着设计结构存在缺陷,会导致未来的错误和错误。它增加了软件预算,最终导致系统难以维护或完全过时。为了减轻这些挑战,实践者必须检测和重构代码气味。然而,气味定义的理论解释和阈值的智能确定是一个重大难题。有监督的机器学习是解决这些问题并减轻对专家干预依赖的有效策略。这些算法的学习机制可以通过数据预处理和超参数调整来完善。选择超参数的最佳值可能很繁琐,而且需要专家的帮助。本研究引入了一种创新范式,将 12 种基于蜂群的元启发式算法与两种机器学习分类器融合在一起,优化了它们的超参数,无需专家,并使整个代码气味检测过程自动化。通过这种协同方法,优化后的最高准确率、精确率、召回率、F-measure 和 ROC-AUC 值分别为 99.09%、99.20%、99.09%、98.06% 和 100%。其中,准确率、精确率、召回率、F-measure 和 ROC-AUC 分别上升了 35.9%、53.79%、35.90%、44.73% 和 36.28%。人工蜂群、灰狼和 Salp Swarm Optimizer 是表现最好的蜂群智能算法。上帝和数据类别是优化分类器最容易检测到的气味。统计测试强调了采用基于蜂群的算法来优化机器学习分类器的深远影响,统计测试也证实了这一点。这种无缝集成提高了分类器的性能,实现了代码气味检测的自动化,并为软件工程的长期挑战提供了强大的解决方案。
{"title":"Improving and comparing performance of machine learning classifiers optimized by swarm intelligent algorithms for code smell detection","authors":"Shivani Jain,&nbsp;Anju Saha","doi":"10.1016/j.scico.2024.103140","DOIUrl":"10.1016/j.scico.2024.103140","url":null,"abstract":"<div><p>In complex systems, the maintenance phase engenders the emergence of code smells due to incessant shifts in requirements and designs, stringent timelines, and the developer's relative inexperience. While not conventionally classified as errors, code smells inherently signify flawed design structures that lead to future bugs and errors. It increases the software budget and eventually makes the system hard to maintain or completely obsolete. To mitigate these challenges, practitioners must detect and refactor code smells. However, the theoretical interpretation of smell definitions and intelligent establishment of threshold values pose a significant conundrum. Supervised machine learning emerges as a potent strategy to address these problems and alleviate the dependence on expert intervention. The learning mechanism of these algorithms can be refined through data pre-processing and hyperparameter tuning. Selecting the best values for hyperparameters can be tedious and requires an expert. This study introduces an innovative paradigm that fuses twelve swarm-based, meta-heuristic algorithms with two machine learning classifiers, optimizing their hyperparameters, eliminating the need for an expert, and automating the entire code smell detection process. Through this synergistic approach, the highest post-optimization accuracy, precision, recall, F-measure, and ROC-AUC values are 99.09%, 99.20%, 99.09%, 98.06%, and 100%, respectively. The most remarkable upsurge is 35.9% in accuracy, 53.79% in precision, 35.90% in recall, 44.73% in F-measure, and 36.28% in ROC-AUC. Artificial Bee Colony, Grey Wolf, and Salp Swarm Optimizer are the top-performing swarm-intelligent algorithms. God and Data Class are the most readily detectable smells with optimized classifiers. Statistical tests underscore the profound impact of employing swarm-based algorithms to optimize machine learning classifiers, corroborated by statistical tests. This seamless integration enhances classifier performance, automates code smell detection, and offers a robust solution to a persistent software engineering challenge.</p></div>","PeriodicalId":49561,"journal":{"name":"Science of Computer Programming","volume":null,"pages":null},"PeriodicalIF":1.3,"publicationDate":"2024-05-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"141053981","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":4,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
TerGEC: A graph enhanced contrastive approach for program termination analysis TerGEC:用于程序终止分析的图形增强对比法
IF 1.3 4区 计算机科学 Q2 Computer Science Pub Date : 2024-05-15 DOI: 10.1016/j.scico.2024.103141
Shuo Liu , Jacky Wai Keung , Zhen Yang , Yihan Liao , Yishu Li

Context

Programs with non-termination behavior induce various bugs, such as denial-of-service vulnerability and memory exhaustion. Hence the ability to detect non-termination programs before software deployment is crucial. Existing detection methods are either execution-based or deep learning-based. Despite great advances, their limitations are evident. The former requires complex sandbox environments for execution, while the latter lacks fine-grained analysis.

Objective

To overcome the above limitations, this paper proposes a graph-enhanced contrastive approach, namely TerGEC, which combines both inter-class and intra-class semantics to carry out a more fine-grained analysis and exempt execution during the detection process.

Methods

In detail, TerGEC analyzes behaviors of programs from Abstract Syntax Trees (ASTs), thereby capturing intra-class semantics both syntactically and lexically. Besides, it incorporates contrastive learning to learn the discrepancy between program behaviors of termination and non-termination, thereby acquiring inter-class semantics. In addition, graph augmentation is designed to improve the robustness. Weighted contrastive loss and focal loss are also equipped in TerGEC to alleviate the classes-imbalance problem during the non-termination detection. Consequently, the whole detection process can be handled more fine-grained, and the execution can also be exempted due to the nature of deep learning.

Results

We evaluate TerGEC on five datasets of both Python and C languages. Extensive experiments demonstrate TerGEC achieves the best performance overall. Among all experimented datasets, TerGEC outperforms state-of-the-art baselines by 8.20% in terms of mAP and by 17.07% in terms of AUC on average.

Conclusion

TerGEC is capable of detecting non-terminating programs with high precision, showing that the combination of inter-class and intra-class learning, along with our proposed classes-imbalance solutions, is significantly effective in practice.

背景具有非终止行为的程序会诱发各种错误,如拒绝服务漏洞和内存耗尽。因此,在软件部署前检测非终止程序的能力至关重要。现有的检测方法要么基于执行,要么基于深度学习。尽管取得了巨大进步,但它们的局限性也显而易见。为了克服上述局限性,本文提出了一种图增强对比方法,即 TerGEC,它结合了类间语义和类内语义,可以在检测过程中进行更精细的分析并免于执行。方法具体来说,TerGEC 通过抽象语法树(AST)分析程序的行为,从而从语法和词法上捕捉类内语义。此外,TerGEC 还结合了对比学习(contrastive learning)来学习终止和非终止程序行为之间的差异,从而获取类间语义。此外,还设计了图增强来提高鲁棒性。TerGEC 还配备了加权对比损失和焦点损失,以缓解非终止检测过程中的类间不平衡问题。结果我们在 Python 和 C 语言的五个数据集上对 TerGEC 进行了评估。广泛的实验证明,TerGEC 的整体性能最佳。在所有实验数据集中,TerGEC 的 mAP 和 AUC 平均分别比最先进的基线高出 8.20% 和 17.07%。结论 TerGEC 能够高精度地检测非终止程序,这表明将类间学习和类内学习相结合,再加上我们提出的类平衡解决方案,在实践中非常有效。
{"title":"TerGEC: A graph enhanced contrastive approach for program termination analysis","authors":"Shuo Liu ,&nbsp;Jacky Wai Keung ,&nbsp;Zhen Yang ,&nbsp;Yihan Liao ,&nbsp;Yishu Li","doi":"10.1016/j.scico.2024.103141","DOIUrl":"10.1016/j.scico.2024.103141","url":null,"abstract":"<div><h3>Context</h3><p>Programs with non-termination behavior induce various bugs, such as denial-of-service vulnerability and memory exhaustion. Hence the ability to detect non-termination programs before software deployment is crucial. Existing detection methods are either execution-based or deep learning-based. Despite great advances, their limitations are evident. The former requires complex sandbox environments for execution, while the latter lacks fine-grained analysis.</p></div><div><h3>Objective</h3><p>To overcome the above limitations, this paper proposes a graph-enhanced contrastive approach, namely TerGEC, which combines both inter-class and intra-class semantics to carry out a more fine-grained analysis and exempt execution during the detection process.</p></div><div><h3>Methods</h3><p>In detail, TerGEC analyzes behaviors of programs from Abstract Syntax Trees (ASTs), thereby capturing intra-class semantics both syntactically and lexically. Besides, it incorporates contrastive learning to learn the discrepancy between program behaviors of termination and non-termination, thereby acquiring inter-class semantics. In addition, graph augmentation is designed to improve the robustness. Weighted contrastive loss and focal loss are also equipped in TerGEC to alleviate the classes-imbalance problem during the non-termination detection. Consequently, the whole detection process can be handled more fine-grained, and the execution can also be exempted due to the nature of deep learning.</p></div><div><h3>Results</h3><p>We evaluate TerGEC on five datasets of both Python and C languages. Extensive experiments demonstrate TerGEC achieves the best performance overall. Among all experimented datasets, TerGEC outperforms state-of-the-art baselines by 8.20% in terms of mAP and by 17.07% in terms of AUC on average.</p></div><div><h3>Conclusion</h3><p>TerGEC is capable of detecting non-terminating programs with high precision, showing that the combination of inter-class and intra-class learning, along with our proposed classes-imbalance solutions, is significantly effective in practice.</p></div>","PeriodicalId":49561,"journal":{"name":"Science of Computer Programming","volume":null,"pages":null},"PeriodicalIF":1.3,"publicationDate":"2024-05-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"141028873","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":4,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
Refining a design thinking-based requirements elicitation process: Insights from a focus group 完善基于设计思维的需求征询流程:焦点小组的见解
IF 1.3 4区 计算机科学 Q2 Computer Science Pub Date : 2024-05-12 DOI: 10.1016/j.scico.2024.103137
Ezequiel Kahan , Marcela Genero , Alejandro Oliveros

Requirements elicitation processes have a series of challenges and limitations in terms of business process focus, system transparency, and dealing with the complexity resulting from interdependence. The Design Thinking approach, which focuses on people and on understanding the context of problems, can contribute to solving them. For this reason, a requirements elicitation process based on Design Thinking has been defined, consisting of three activities: Empathise, Synthesise, and Ideate. For refining this process, a focus group discussion with experts was conducted. The experts provided feedback, specifically on the role of empathy in the process, its domain of application and activities. The results analysed from the focus group confirm the usefulness of the process and generate a series of lessons learned that allowed us to continue refining it. This paper presents the cited process, the main characteristics and results of the focus group and the refined process.

需求征询过程在关注业务流程、系统透明度和处理相互依存所产生的复杂性方面存在一系列挑战和局限。设计思维方法注重人和对问题背景的理解,有助于解决这些问题。为此,我们定义了一个基于设计思维的需求征询流程,由三项活动组成:共鸣(Empathise)、综合(Synthesise)和构思(Ideate)。为了完善这一流程,我们与专家进行了一次焦点小组讨论。专家们提供了反馈意见,特别是关于移情在流程中的作用、其应用领域和活动。焦点小组的分析结果证实了该流程的实用性,并总结出一系列经验教训,使我们能够继续完善该流程。本文介绍了所引用的流程、焦点小组的主要特点和结果以及完善后的流程。
{"title":"Refining a design thinking-based requirements elicitation process: Insights from a focus group","authors":"Ezequiel Kahan ,&nbsp;Marcela Genero ,&nbsp;Alejandro Oliveros","doi":"10.1016/j.scico.2024.103137","DOIUrl":"10.1016/j.scico.2024.103137","url":null,"abstract":"<div><p>Requirements elicitation processes have a series of challenges and limitations in terms of business process focus, system transparency, and dealing with the complexity resulting from interdependence. The Design Thinking approach, which focuses on people and on understanding the context of problems, can contribute to solving them. For this reason, a requirements elicitation process based on Design Thinking has been defined, consisting of three activities: Empathise, Synthesise, and Ideate. For refining this process, a focus group discussion with experts was conducted. The experts provided feedback, specifically on the role of empathy in the process, its domain of application and activities. The results analysed from the focus group confirm the usefulness of the process and generate a series of lessons learned that allowed us to continue refining it. This paper presents the cited process, the main characteristics and results of the focus group and the refined process.</p></div>","PeriodicalId":49561,"journal":{"name":"Science of Computer Programming","volume":null,"pages":null},"PeriodicalIF":1.3,"publicationDate":"2024-05-12","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"141050019","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":4,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
Application of fuzzy Delphi technique to identify analytical lenses for determining the preparation of free and open source software projects for user experience maturity 应用模糊德尔菲技术确定分析透镜,以确定免费开源软件项目为用户体验成熟度所做的准备工作
IF 1.3 4区 计算机科学 Q2 Computer Science Pub Date : 2024-05-11 DOI: 10.1016/j.scico.2024.103136
Phesto P. Namayala , Tabu S. Kondo

User eXperience (UX) significantly influences the success of free and open source software (FOSS) projects and is measured using UX capability maturity models (UXCMMs). Every organization desires higher levels of UX maturity; however, it requires upfront preparations and process quality control.

Harmonizing processes and analytical lenses for determining preparation for UX maturity are still challenging, and studies to create them are limited. The analysis is ad hoc and based on the actors’ will and experiences. This study proposes and validates analytical lenses.

Findings show that UX experts agreed that the lenses could be used with a consensus percentage of 81 %, the threshold value (d) = 0.112, and crisp values greater than α-cut = 0.5. On validation, 47.57 % of stakeholders agreed, and 52.43 % strongly agreed they were relevant. Results help evaluate the status quo and change culture and policies toward ideal preparation. Two areas are suggested for future research.

用户体验(UX)在很大程度上影响着自由与开源软件(FOSS)项目的成功与否,用户体验能力成熟度模型(UXCMMs)可用于衡量用户体验项目的成功与否。每个组织都希望达到更高水平的用户体验成熟度,但这需要前期准备和过程质量控制。确定用户体验成熟度准备工作的统一过程和分析视角仍具有挑战性,而创建这些过程和视角的研究也很有限。分析是临时性的,以参与者的意愿和经验为基础。研究结果表明,用户体验专家一致认为可以使用这些分析透镜,共识率为 81%,阈值 (d) = 0.112,清晰度值大于 α-cut = 0.5。在验证方面,47.57% 的利益相关者表示同意,52.43% 的利益相关者表示非常同意这些相关性。结果有助于评估现状,改变文化和政策,实现理想的准备工作。建议今后在两个领域开展研究。
{"title":"Application of fuzzy Delphi technique to identify analytical lenses for determining the preparation of free and open source software projects for user experience maturity","authors":"Phesto P. Namayala ,&nbsp;Tabu S. Kondo","doi":"10.1016/j.scico.2024.103136","DOIUrl":"https://doi.org/10.1016/j.scico.2024.103136","url":null,"abstract":"<div><p>User eXperience (UX) significantly influences the success of free and open source software (FOSS) projects and is measured using UX capability maturity models (UXCMMs). Every organization desires higher levels of UX maturity; however, it requires upfront preparations and process quality control.</p><p>Harmonizing processes and analytical lenses for determining preparation for UX maturity are still challenging, and studies to create them are limited. The analysis is ad hoc and based on the actors’ will and experiences. This study proposes and validates analytical lenses.</p><p>Findings show that UX experts agreed that the lenses could be used with a consensus percentage of 81 %, the threshold value (d) = 0.112, and crisp values greater than α-cut = 0.5. On validation, 47.57 % of stakeholders agreed, and 52.43 % strongly agreed they were relevant. Results help evaluate the status quo and change culture and policies toward ideal preparation. Two areas are suggested for future research.</p></div>","PeriodicalId":49561,"journal":{"name":"Science of Computer Programming","volume":null,"pages":null},"PeriodicalIF":1.3,"publicationDate":"2024-05-11","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"140906819","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":4,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
期刊
Science of Computer Programming
全部 Acc. Chem. Res. ACS Applied Bio Materials ACS Appl. Electron. Mater. ACS Appl. Energy Mater. ACS Appl. Mater. Interfaces ACS Appl. Nano Mater. ACS Appl. Polym. Mater. ACS BIOMATER-SCI ENG ACS Catal. ACS Cent. Sci. ACS Chem. Biol. ACS Chemical Health & Safety ACS Chem. Neurosci. ACS Comb. Sci. ACS Earth Space Chem. ACS Energy Lett. ACS Infect. Dis. ACS Macro Lett. ACS Mater. Lett. ACS Med. Chem. Lett. ACS Nano ACS Omega ACS Photonics ACS Sens. ACS Sustainable Chem. Eng. ACS Synth. Biol. Anal. Chem. BIOCHEMISTRY-US Bioconjugate Chem. BIOMACROMOLECULES Chem. Res. Toxicol. Chem. Rev. Chem. Mater. CRYST GROWTH DES ENERG FUEL Environ. Sci. Technol. Environ. Sci. Technol. Lett. Eur. J. Inorg. Chem. IND ENG CHEM RES Inorg. Chem. J. Agric. Food. Chem. J. Chem. Eng. Data J. Chem. Educ. J. Chem. Inf. Model. J. Chem. Theory Comput. J. Med. Chem. J. Nat. Prod. J PROTEOME RES J. Am. Chem. Soc. LANGMUIR MACROMOLECULES Mol. Pharmaceutics Nano Lett. Org. Lett. ORG PROCESS RES DEV ORGANOMETALLICS J. Org. Chem. J. Phys. Chem. J. Phys. Chem. A J. Phys. Chem. B J. Phys. Chem. C J. Phys. Chem. Lett. Analyst Anal. Methods Biomater. Sci. Catal. Sci. Technol. Chem. Commun. Chem. Soc. Rev. CHEM EDUC RES PRACT CRYSTENGCOMM Dalton Trans. Energy Environ. Sci. ENVIRON SCI-NANO ENVIRON SCI-PROC IMP ENVIRON SCI-WAT RES Faraday Discuss. Food Funct. Green Chem. Inorg. Chem. Front. Integr. Biol. J. Anal. At. Spectrom. J. Mater. Chem. A J. Mater. Chem. B J. Mater. Chem. C Lab Chip Mater. Chem. Front. Mater. Horiz. MEDCHEMCOMM Metallomics Mol. Biosyst. Mol. Syst. Des. Eng. Nanoscale Nanoscale Horiz. Nat. Prod. Rep. New J. Chem. Org. Biomol. Chem. Org. Chem. Front. PHOTOCH PHOTOBIO SCI PCCP Polym. Chem.
×
引用
GB/T 7714-2015
复制
MLA
复制
APA
复制
导出至
BibTeX EndNote RefMan NoteFirst NoteExpress
×
0
微信
客服QQ
Book学术公众号 扫码关注我们
反馈
×
意见反馈
请填写您的意见或建议
请填写您的手机或邮箱
×
提示
您的信息不完整,为了账户安全,请先补充。
现在去补充
×
提示
您因"违规操作"
具体请查看互助需知
我知道了
×
提示
现在去查看 取消
×
提示
确定
Book学术官方微信
Book学术文献互助
Book学术文献互助群
群 号:481959085
Book学术
文献互助 智能选刊 最新文献 互助须知 联系我们:info@booksci.cn
Book学术提供免费学术资源搜索服务,方便国内外学者检索中英文文献。致力于提供最便捷和优质的服务体验。
Copyright © 2023 Book学术 All rights reserved.
ghs 京公网安备 11010802042870号 京ICP备2023020795号-1