Software Resurrection: Discovering Programming Pearls by Showing Modernity to Historical Software
我们被告知,阅读别人编写的计算机程序代码和文档是学习编写可理解和可维护的代码和文档的最佳方法之一。本文介绍的软件复活练习,需要一个积极的学习者编译和测试的历史版本(如20岁)的一个良好的维护和广泛采用的开放源码软件的现代硬件和软件平台。本练习最后根据在发布时无法预见的硬件和软件平台上编译和测试历史软件发布时遇到的问题撰写评论。作为软件复活练习的一部分,学习者还需要解决这些问题。看似毫无意义的恢复历史软件的练习,让有动力的学习者体验软件维护的痛苦和喜悦,这对于理解有助于程序代码和文档的可理解性和可维护性的因素至关重要。使用20年前发布的SQLite数据库引擎版本来说明软件复活练习的概念。这个例子表明,当一个历史软件版本被改编为在现代平台上成功运行时,软件工程原则(或编程珍珠)就出现了。软件复活练习也有可能为终身探索和学习现有程序代码的意愿奠定基础。
2022-09-12 cs.SE
The most frequent programming mistakes that cause software vulnerabilities
所有计算机程序都有缺陷,其中一些缺陷可被利用来获得对计算机系统的未经授权的访问。我们对影响三个广泛使用的开源软件项目的公开报告的漏洞进行了实地研究。本文重点介绍了研究中收集的实地数据的主要观察结果和结论。
2019-12-03 cs.SE
Engineering Human Values in Software through Value Programming
在软件开发中忽视人的价值观可能会违背用户的价值观,并在软件中引入偏见,从而使用户处于不利地位。这可以通过告知开发人员他们的选择的价值含义并主动考虑软件中的人类价值来缓解。为此,我们提出了价值编程的概念,它有三个原则:(P1)注释源代码和相关的工件;(P2)检查源代码以检测导致软件中的偏差和价值违背的条件,即,(P3)提出建议,以减轻偏见和价值违规。为了促进价值编程,我们提出了一个框架,允许自动注释的软件代码相对于人类的价值观。所提出的框架为检查代码中的人类价值并提出建议以克服软件中的偏见和价值违规奠定了坚实的基础。
2020-03-10 cs.SE
Statistical Program Slicing: a Hybrid Slicing Technique for Analyzing Deployed Software
动态程序切片可以通过将其缩小到相关程序语句的子集来显著减少开发人员需要检查的代码。然而,尽管大量的研究表明它的有用性,动态切片仍然是短期的生产级使用,由于运行时插装成本高。作为替代方案,我们提出了统计程序切片,一种新的混合动态-静态切片技术,探讨了准确性和运行时成本之间的权衡。我们的方法依赖于现代硬件支持的控制流监控和一个新的,协同堆内存跟踪机制结合静态程序分析的数据流跟踪。我们评估统计切片调试21个故障,从6个广泛部署的应用程序,并显示它恢复94%的程序语句的动态切片,只有5%的开销。
2021-12-31 cs.PL cs.SE
Supporting Software Engineering Research and Education by Annotating Public Videos of Developers Programming
软件工程长期以来一直在研究软件开发人员如何工作,构建了一个工作主体,形成了许多软件工程最佳实践、工具和理论的基础。最近,一些开发人员开始录制自己参与开源项目编程任务的视频,使他们能够与其他开发人员分享知识和社交。我们相信这些视频为软件工程研究和教育提供了重要的机会。在本文中,我们讨论了这些视频的潜在用途,以及如何最好地实现这种设想的使用开放的问题。我们建议创建一个中央存储库的编程视频,使分析和注释视频,以说明感兴趣的特定行为,如提问和回答问题,采用策略,和软件工程理论。这样一个知识库将提供一种重要的新方法,使软件工程研究人员和学生都能理解软件开发人员是如何工作的。
2019-05-09 cs.SE
How Scale Affects Structure in Java Programs
Java程序的许多内部软件度量和外部质量属性与程序大小密切相关。这种知识已经广泛地用于软件的定量研究,通过实践,如大小度量标准化。本文报道了以前不知道的与尺寸相关的超线性和次线性效应。从一个非常大的Java程序集合(截至2011年夏天,Google Code托管了30,911个项目)中获得的发现揭示了程序的某些特征如何随着程序大小而不成比例地变化,有时甚至是非单调的。许多非线性关系的具体参数的报告。这一结果进一步揭示了“小规模编程”与“大规模编程”的差异。“报告的发现对OO软件度量和一般的软件研究具有重要的影响:已知与大小相关的度量现在可以适当地标准化,以便其中留下的所有信息都与大小无关。
2015-08-04 cs.PL cs.SE
ProFIPy: Programmable Software Fault Injection as-a-Service
在本文中,我们提出了一个新的错误注入工具(ProFIPy)的Python软件。该工具被设计为可编程的,以使用户能够指定他们的软件故障模型,使用域特定语言(DSL)的故障注入。此外,为了实现更好的可用性,ProFIPy以软件即服务的形式提供,并通过配置故障负载和工作负载、故障数据分析以及使用基于容器的虚拟化和并行化实现实验的完全自动化来支持用户。
2020-05-11 cs.SE
JavaBERT: Training a transformer-based model for the Java programming language
Kiel University(基尔大学)
在开发新的软件代码时,代码质量是并将是一个关键因素,需要适当的工具来确保代码的功能和可靠性。机器学习技术仍然很少用于软件工程工具,错过了其应用的潜在好处。自然语言处理已经显示出处理关于各种任务的文本数据的潜力。我们认为,这样的模型也可以显示类似的好处,软件代码处理。在本文中,我们研究了如何用于自然语言处理的模型可以在软件代码上进行训练。我们介绍了一个数据检索管道的软件代码和训练模型上的Java软件代码。由此产生的模型,JavaBERT,显示了高精度的掩蔽语言建模任务显示其潜在的软件工程工具。
2021-10-20 cs.LG cs.SE
Software Cloning in Extreme Programming Environment
随着时间的推移,软件系统通过添加新功能和修改现有功能而不断发展。随着软件的演化,软件的结构变得越来越复杂,软件系统的可理解性和可维护性也日益恶化。这些不仅重要,而且是软件开发中最昂贵的活动之一。重构经常被应用到软件中来改进它们。重构的目标之一是限制代码克隆,因为它阻碍了软件维护并影响其质量。为了应对不断的变化,重构被视为极限编程的重要组成部分。敏捷方法将重构作为重要的关键实践,是开发无克隆代码的首选。本文总结了我对软件克隆分析的概述。首先讨论了代码克隆的概念、类型、产生原因、后果和分析。重点介绍了极限编程环境下的代码克隆,并指出克隆检测是重构的有效工具。
2014-08-21 cs.SE
Mining Q&A Platforms for Empirical Evidence on Quantum Software Programming
本研究分析了Stack Exchange平台上6,935篇量子软件编程讨论帖,通过主题建模和定性分析识别出20个讨论主题、9个支持框架及四大核心挑战,为量子软件生态系统的未来研究、工具开发和教育提供了实证见解。
2025-03-07 cs.SE
QChecker: Detecting Bugs in Quantum Programs via Static Analysis
本文提出了一种名为QChecker的静态分析工具,通过基于AST提取程序信息和基于模式检测错误的两个模块,有效检测Qiskit量子程序中的错误。
2023-04-10 cs.PL cs.SE
Towards a Benchmark Set for Program Repair Based on Partial Fixes
软件缺陷显著增加了软件成本,并增加了系统故障的风险。近年来,已经提出了许多自动程序修复方法来自动修复不期望的程序行为。尽管他们取得了巨大的成功,但一些具体的问题,如用部分修复来修复bug,仍然没有得到解决。对已知软件问题的部分修复是程序员第一次尝试修复问题失败。即使失败,此修复尝试仍然会传递重要信息,例如可疑软件区域和错误类型。在这项工作中,我们不提出一种方法,部分修复程序修复,而是回答一个初步的问题:部分修复经常发生足够的,一般来说,是相关的自动程序修复的研究领域?我们在GitHub上抓取了1500个开源C代码库来进行部分修复。其结果是基于部分修复的自动程序修复的2204个基准任务的基准集。基准集是开源的,并开放进一步的贡献和改进。
2021-07-16 cs.PL cs.SE
Proceedings Fifth Workshop on Programming Language Approaches to Concurrency- and Communication-cEntric Software
PLACES 2012(全称:面向以并发和通信为中心的软件的程序设计语言方法)是PLACES研讨会系列的第五版。自2008年第一届PLACES加入DisCoTec之后,自2009年以来,该研讨会每年都是ETAPS的一部分,现在是ETAPS卫星活动的一部分。PLACES 2012于3月31日在爱沙尼亚塔林举行。开办这一系列讲习班是为了促进新的程序设计语言思想应用于为并行和通信是内在方面的系统开发软件这一日益重要的问题。这包括用于多核系统和大规模分布式和/或面向服务的系统的软件。PLACES的范围包括新的程序设计语言特性、全新的程序设计语言设计、新的类型系统、新的语义方法、新的程序分析技术和新的实现机制。今年的论文征集活动共收到17份论文,方案委员会从中挑选了10份论文在讲习班上介绍。讲习班结束后,所有作者都应邀编写了论文的修订本,以列入《欧洲条约汇编》的议事录。六篇论文的作者接受了邀请,这些论文构成了本卷。
2013-02-23 cs.DC cs.LO cs.PL
Software Mutational Robustness
中性景观和突变鲁棒性被认为是生物学中进化性的重要推动因素。我们将这些概念应用于软件,将突变鲁棒性定义为使程序行为不变的随机突变的分数。测试用例用于度量程序行为,变异算子取自遗传编程。虽然软件通常被认为是脆弱的,小的变化会导致灾难性的行为变化,我们的研究结果显示出惊人的鲁棒性,面对随机的软件突变。本文描述了22个程序的突变鲁棒性的实证研究,包括14个生产软件项目,西门子基准测试,和4个专门构造的程序。我们发现,超过30%的随机突变相对于他们的测试套件是中性的。结果保持在所有类别的程序,在源代码和汇编指令级别的突变,在各种程序设计语言,只有弱相关的测试套件覆盖。我们得出结论,突变鲁棒性是软件的固有属性,并且中性变体(即,那些通过测试套件的)通常满足程序的原始目的或规范。基于这些结果,我们推测,中性突变可以作为一种机制,产生软件的多样性。我们证明了这一点,通过生成一个人口的中性程序的变种,并显示变种自动修复未知的错误的概率很高。中性景观也提供了一个部分的解释,最近的结果,使用演化计算自动修复软件错误。
2013-06-27 cs.SE
Increase of Software Safety
为软件安全提供了新的模型。研究了错误在程序生存周期各阶段的分布。在帮助仿真程序的基础上,研究了提高软件可靠性的途径.
2008-07-01 cs.SE
Empirical Study of Phased Model of Software Change
软件变更是软件演化和维护的基本任务。PMSC(Phased Model for Software Change)是一个软件变更的过程模型,它是在代码中本地化的。它由几个阶段组成,涵盖了程序理解和代码修改。本文提出了一个实证研究的制定私营军事和安保服务公司,加强了使用工具JRipples。受试者是具有不同程度编程经验的研究生。实证研究结果表明,程序员与知识的PMSC和支持JRipples执行完善的软件变化,在不熟悉的软件在显着更少的时间(约一半的时间)比独立的程序员。在代码理解和实施工作方面都有了实质性的时间改进。
2019-04-11 cs.SE
The Matthew Effect of AI Programming Assistants: A Hidden Bias in Software Evolution
City University of Hong Kong (Dongguan)(香港城市大学(东莞));The Hong Kong Polytechnic University(香港理工大学);The University of Hong Kong(香港大学);The Hong Kong University of Science and Technology(香港科技大学)
本文研究了AI编程助手对软件生态系统的影响,发现主流语言和框架因数据丰富而获得更优支持,揭示了软件演化的隐藏偏见。
2026-02-09 cs.SE
A Programmer-Centric Approach to Program Verification in ATS
形式化规格说明在高质量软件的构造中得到了广泛的应用。然而,在正式规范和实际实现之间往往存在着巨大的差距。虽然已经有大量的工作在软件测试和验证,任务,以确保实现确实符合其规格仍然是不可避免的巨大困难。ATS是一种程序设计语言,它配备了一个高度表达的类型系统,允许程序员指定和实现,然后在语言本身中验证实现是否符合其规范。在本文中,我们主要是通过例子程序员为中心的风格的程序验证,强调要求程序员解释在一个文学的方式,为什么他或她的代码的作品。这是追求软件构造的坚实的一步,根据规范是可验证的正确的。
2012-03-27 cs.PL cs.SE
A Formal Study on Backward Compatible Dynamic Software Updates
我们研究的动态软件更新问题的程序与环境,不一定更新。我们认为,这样的更新应该是向后兼容的。我们提出了向后兼容性的一般定义和向后兼容程序更新的情况。基于我们对现实世界程序演化的详细研究,我们提出了交互式程序的向后兼容更新类,这些类平均占所有研究程序变化的32%。更新类的定义参数化我们的新框架的程序等价,推广现有的结果程序等价的非终止执行。我们的向后兼容更新的研究是基于W语言的类型扩展。
2015-09-10 cs.SE
Tea: Program Repair Using Neural Network Based on Program Information Attention Matrix
Microsoft Asia-Pacific Technology Company Ltd.(微软亚太科技有限公司);University of Chinese Academy of Sciences(中国科学院大学);Institute of Software, Chinese Academy of Sciences(中国科学院软件研究所)
机器学习(ML)驱动的自然语言处理(NLP)的进步为软件程序的自动错误修复指明了一个有希望的方向,因为修复有错误的程序可以转换为翻译任务。虽然软件程序包含比一维自然语言文档更丰富的信息,但使用ML驱动的NLP技术进行自动程序修复的开创性工作只考虑了有限的此类信息。我们假设,更全面的软件程序的信息,如果适当利用,可以提高ML驱动的NLP方法在修复软件程序的有效性。作为证明这一假设的第一步,我们提出了一个统一的表示来捕捉软件程序的语法,数据流和控制流方面,并设计了一种方法来使用这样的表示来指导Transformer模型从NLP更好地理解和修复错误的程序。我们的初步实验证实,更全面的软件程序使用的信息,更好的ML驱动的NLP技术可以执行在这些程序中修复错误。
2021-07-17 cs.AI cs.SE
Code Shrew: Software platform for teaching programming through drawings and animations
在本文中,我们提出了代码Shrew,一个新的软件平台,伴随着一个交互式编程课程。它的目的是通过让用户创建自己的绘图和动画来教授计算机编程的基础知识。该程序设计语言具有基于Python的简单语法,并添加了一些新功能,可以使用面向对象代码轻松绘制和动画。编辑器的反应无缝,即时,提供了一个引人入胜的和互动的环境,实验和测试的想法。编程课程包括涵盖基本编程原则的课程,以及测试用户在课程中进步的技能的挑战。课程和挑战都利用了编辑的即时反馈,允许专注于边做边学。我们描述了软件和内容,它们背后的动机,以及它们与建构主义的联系。
2018-08-08 cs.CY cs.SE
Automatic and Efficient Variability-Aware Lifting of Functional Programs
软件分析是一种计算机程序,它将软件产品的某些表示作为输入,并产生有关该产品的某些有用信息作为输出。软件产品线包含\emph{many}软件产品变体,因此现有分析可单独应用于每个产品变体,但不能应用于整个产品线。枚举所有的产品变体,并分析他们一个接一个通常是棘手的,由于组合爆炸的产品变体的数量相对于产品线功能。一些软件分析(例如,类型检查器、模型检查器、数据流分析)已经被重新设计/重新实现以支持可变性。这通常需要大量的时间和精力,并且可变性感知版本的分析可能会有新的错误/bug,这些错误/bug在原始版本中不存在。给出了一个基于PCF的函数式语言编写的分析程序,在本文中,我们提出了两种方法将其转换(提升)为语义等效的变量感知分析。轻量级方法(称为\emph{shallow lifting})将分析程序包装成可变性感知版本,探索其输入参数的所有组合。另一方面,深度提升是一种程序重写机制,其中输入程序的语法结构被重写为它们的可变性感知对应物。在组成上,这导致了一个有效的程序语义等价于输入程序,模可变性。我们提出的正确性标准的功能程序提升,连同正确性证明我们的程序转换草图。我们评估我们的方法上的一组程序分析适用于BusyBox C语言产品线。
2020-10-01 cs.PL cs.SE
Ethics of Software Programming with Generative AI: Is Programming without Generative AI always radical?
本文分析生成式AI革新软件编码的潜力与风险,提出其是传统编程的辅助工具而非替代品,倡导结合人类监督与AI能力的平衡方案及伦理准则,以负责任地使用GenAI。
2024-10-31 cs.SE
The cross cyclomatic complexity: a bi-dimensional measure for program complexity on graphs
降低和控制复杂性是软件设计中的一个基本实践。圈复杂度(CC)是最流行的软件度量之一,应用了40多年。尽管CC是一个突出程序中分支数量的有趣度量,但它显然不足以表示软件的复杂性。在本文中,我们介绍了交叉圈复杂度(CCC),一个新的二维复杂性的图,结合圈复杂度和最小重量的循环基的重量在笛卡尔计划的对来表征程序的复杂性使用控制流图。我们的假设打开了一个新的场所,代表程序的复杂性,我们讨论它的含义和机会。
2020-03-01 cs.PL cs.SE
Program Spectra Analysis in Embedded Software: A Case Study
由于市场的限制,消费电子产品中的嵌入式软件几乎不可避免地带有故障,目标只是在产品发布之前将固有的不可靠性降低到可接受的水平。自动故障诊断是一种有价值的工具,可以捕获软件故障,而无需花费额外的精力进行测试。除了在设计和集成时的调试辅助之外,故障诊断还可以帮助分析操作期间的问题,从而实现更准确的系统恢复。在本文中,我们将讨论应用一个特定的故障诊断技术,即程序谱分析,在消费电子设备的嵌入式软件领域的前景和局限性。我们说明了我们的第一次经验,从行业的测试案例。
2006-07-26 cs.SE
Software Cognitive Complexity Measure Based on Scope of Variables
本文定义了一个程序结构的数学模型。本文定义的程序结构数学模型提供了对程序结构的统一数学处理,揭示了程序是当前语句与前一语句之间嵌入的二元关系的大而有限的集合。然后,将程序看作是一个组合列表和多个语句按照一定的组合规则的逻辑组合。我们还定义了范围信息复杂度数(SICN),并提出了基于软件功能分解的认知复杂度,包括理论验证,通过九个Weyuker的性质。
2014-09-17 cs.SE
Managing layers of risk: Uncertainty in large development programs combining agile software development and traditional project management
如何在敏捷项目的多个级别上隐式和显式地管理风险还没有得到广泛的研究,有必要调查如何在大型敏捷项目中使用风险管理。这是本探索性研究的目的,它调查了以下研究问题:一个大型软件/硬件开发项目如何使用敏捷实践管理在项目/子项目和工作包级别的不确定性?
2021-03-16 cs.SE
Genetic Micro-Programs for Automated Software Testing with Large Path Coverage
University of Pretoria(比勒陀利亚大学)
计算智能(CI)的不断发展导致人们越来越希望应用CI技术来改进软件工程过程,特别是软件测试。现有的最先进的自动化软件测试技术集中于利用搜索算法来发现实现高执行路径覆盖的输入值。这些算法是在他们打算测试的相同代码上训练的,需要仪器和漫长的搜索时间来测试每个软件组件。本文概述了一种新的遗传编程框架,进化的解决方案是不是输入值,但微程序,可以重复生成输入值,有效地探索一个软件组件的输入参数域。我们还认为,我们的方法可以推广,如适用于许多不同的软件系统,并因此不具体到仅仅是特定的软件组件上,它是训练。
2023-02-14 cs.AI cs.NE cs.SE
Mining Software Repair Models for Reasoning on the Search Space of Automated Program Fixing
本文通过分析软件仓库中数以千计的错误修复事务来理解错误修复的本质。然后,它将这些学习到的知识放在自动程序修复的上下文中。我们给出了大量的经验结果,在大规模和细粒度的抽象语法树差异的性质,人类的错误修复。我们建立了数学推理的搜索空间的自动修复和时间,通过应用我们的方法对14个存储库的Java软件和89,993版本事务,我们表明,并非所有的概率修复模型是等价的。
2013-11-14 cs.SE
Agentic AI Software Engineers: Programming with Trust
National University of Singapore(新加坡国立大学);Carnegie Mellon University, KBR Inc., NASA Ames(卡内基梅隆大学、KBR公司、NASA阿姆斯特朗实验室);CISPA Helmholtz Center for Information Security, University of Stuttgart(CISPA海姆霍兹信息安全中心、斯图加特大学);Columbia University(哥伦比亚大学)
本文探讨了LLM智能体在软件工程中的应用前景,提出成功部署AI软件工程师需要建立不低于人类实践水平的信任,并主张编程重心应从规模化转向以信任为核心。
2025-09-21 cs.AI cs.SE
Creating Interactive Visualizations of TopHat Programs
许多公司和机构已经在工作流管理软件中实现了业务流程的自动化。新的编程范式面向任务编程(TOP)为此类软件提供了抽象。基于TOP的最大框架iTasks已被用于开发真实世界的软件。工作流软件通常包括关键系统。在这种情况下,对软件进行推理以确定其正确性是很重要的。缺乏正式的iTasks语义使其不适合形式化推理。为此,TopHat已被开发为具有正式语义的TOP语言。然而,TopHat缺乏图形用户界面(GUI),这使得开发实用的TopHat系统变得更加困难。在本文中,我们介绍了TopHat UI。通过结合现有的服务器框架和用户界面框架,我们已经开发了一个功能齐全的概念实现的证明,在Haskell的TopHat的语义之上。我们表明,实现TOP框架是可能的,使用不同的主机语言比iTasks使用。TopHat的任何形式属性都没有受到损害,因为UI框架完全独立于TopHat。我们运行几个示例程序,并评估其生成的GUI。拥有这样一个系统可以提高TOP软件的质量和可验证性。
2022-08-29 cs.HC cs.PL cs.SE
Prompts Are Programs Too! Understanding How Developers Build Software Containing Prompts
Carnegie Mellon University(卡内基梅隆大学)
本文通过访谈20名开发者,提出提示词编程概念,发现其与传统软件开发不同,开发者难以建立可靠心智模型,为提示词工具开发提供启示。
2025-04-25 cs.AI cs.HC cs.SE
Symbolic quantum programming for supporting applications of quantum computing technologies
本文概述了量子软件开发工具的现状与优缺点,提出了一种支持符号操作、函数式编程且兼容高性能与云计算的量子程序开发架构,并展示了其在量子软件测试与电路构建中的应用。
2023-02-18 cs.PL cs.SE quant-ph
Software Vulnerability Prediction Knowledge Transferring Between Programming Languages
Ericsson Security Research(爱立信安全研究院);Vodafone(沃达丰)
开发自动化和智能化的软件漏洞检测模型一直受到研究和开发社区的极大关注。这方面最大的挑战之一是缺乏适用于所有不同程序设计语言的代码示例。在这项研究中,我们通过提出一种迁移学习技术来解决这个问题,该技术利用可用的数据集并生成一个模型来检测不同程序设计语言中的常见漏洞。我们使用C源代码样本来训练一个卷积神经网络(CNN)模型,然后,我们使用Java源代码样本来采用和评估学习的模型。我们使用来自两个基准数据集的代码样本:NIST软件保障参考数据集(SARD)和Draper VDISC数据集。实验结果表明,该模型能够检测出C和Java代码中的漏洞,平均召回率为72%.此外,我们采用可解释的人工智能来研究每个功能对所提出的模型中C和Java之间的知识转移机制的贡献。
2023-03-10 cs.AI cs.LG cs.SE
Combining Tests and Proofs for Better Software Verification
Constructor University Bremen(不来梅构造大学);Eiffel Software(艾菲尔软件);Constructor University(构造大学)
通过结合测试与证明技术,利用设计契约和反例生成,提升软件验证的质量与效率。
2026-02-07 cs.SE
Programming the Universe: The First Commandment of Software Engineering for all Varieties of Information Systems
自从计算机和程序出现以来,软件开发的过程和结果一直是一个充满问题和失败的雷区,因为软件及其开发的复杂性和复杂性在半个世纪内增加了一千倍。多年来,出现了一些理论、法律、最佳做法、宣言和方法,取得了不同程度的成功。我们作为软件工程师处理复杂和大规模系统的经验表明,这些指导方针局限于以前定义的范围,而且往往是狭窄的范围。够了如今,几乎每家公司都在从事软件和服务业务,一切都是软件或由软件管理。那么,是时候重新定义支配我们宇宙的定律了。在这种情况下,我们讨论并提出了一套普遍的法律,使我们提出的第一诫软件工程的所有品种的信息系统。
2020-07-16 cs.SE
Cryptographic Path Hardening: Hiding Vulnerabilities in Software through Cryptography
我们提出了一种新的方法来提高软件的安全性,称为加密路径硬化,这是为了隐藏软件中的安全漏洞,从攻击者通过使用可证明的安全和混淆的加密设备来硬化程序中的路径。所谓“硬化”,我们的意思是在一个给定的程序P中,某些错误检查的if-条件语句被等价的”我们的意思是,对手不能使用半自动程序分析技术来推理硬化的程序路径,因此不能发现沿着这些路径的未知错误,除非通过黑盒字典式攻击或随机测试(我们永远无法阻止)。除了这些不可预防的攻击方法,我们可以进行程序分析,旨在发现错误“证明困难”的资源有限的攻击者,在同一意义上,加密方案是很难打破。与通过模糊实现安全不同,在加密路径硬化中,我们使用可证明安全的加密设备来隐藏错误,并且我们的安全性数学参数与加密中使用的标准参数相同。加密路径强化的一个应用是软件补丁或过滤器通常向攻击者揭示足够的信息,这些信息可以用于构建错误揭示输入,以利用程序的未补丁版本。通过“硬化”补丁,我们使攻击者难以分析打补丁的程序来构建错误揭示输入,从而防止他潜在地构建漏洞。
2012-02-02 cs.CR cs.PL cs.SE
Some Aspects of a Software Reliability Problem
显然,软件可靠性研究的活力在过去的一段时间里明显加快了,我们可以说,它的强度正在接近,在某些情况下领先于信息系统硬件可靠性研究的强度。软件的可靠性比它的其他特性(如运行时间)重要得多,尽管现代软件的绝对可靠性显然是无法达到的,但仍然没有普遍接受的计算机程序可靠性的度量。本文分析了造成这种状况的原因,并提出了解决问题的途径。本文讨论了信息系统软件生存周期的一般特征问题。考虑了软件应用的可靠性问题和故障安全保证编程的使用。还介绍了导致信息系统功能异常的病毒程序的基本类型。重点介绍了一些已知的用于软件调试和运行的模型。因此,本文主要分为四个部分:信息系统软件过程的建立、信息系统软件的可靠性、故障安全程序的使用以及根据调试和正常运行的结果对软件可靠性的评估。
2020-03-05 cs.SE
A Survey of Reverse Engineering and Program Comprehension
逆向工程已经成为硬件社区的标准实践有一段时间了。仅仅在过去的十年里,逆向工程,或“程序理解”,已经成长为软件工程的当前子学科。传统的软件工程主要集中在新软件的开发和设计上。然而,大多数程序员都在其他人设计和开发的软件上工作。一个软件维护人员可能会花费50%的时间来确定源代码的意图。由于客户服务器和万维网技术的激增,对重新评估和重新实施遗留软件系统的需求日益增长,这突出了对逆向工程工具和技术的需要。本文介绍了逆向工程的相关术语,并给出了使逆向工程难以实施的一些障碍。虽然逆向工程仍然严重依赖于人类的组成部分,一些自动化的工具,提出了帮助逆向工程。
2005-03-24 cs.SE
The Role of Executable Abstract Programs in Software Development and Documentation
我们提出了可执行抽象程序,并分析其作用的软件开发和文档。对这些程序的直观理解符合软件系统工程师的计算思维,并得到简单但精确的行为定义的支持。因此,它们可以顺利地集成到从业者的日常工作中,以严格制定从可执行抽象程序到目标和有效运行代码的路径上所采取的每一个设计和实现决策。所得到的系统文档的可执行抽象程序表示可以通过测试(由于其可执行特性)或推理(由于其行为的数学定义)检查和证明的实现步骤的定义。对于复杂的系统,实施涉及多个(正交或连续)的实施步骤,代表一个实际的计算细化概念的实例。这种系统开发过程是由计算改进驱动的,并严格限于明确制定和证明-除了要求-只有必要的实施步骤。其结果是,它产生的副作用是文档的语料库,促进了最终代码的可理解性,提高了其可靠性和弹性;它还增强了维护过程(包括重用和抽象程序和代码的更改),降低了维护成本。
2022-09-14 cs.SE
Exploring Code Clones in Programmable Logic Controller Software
通过复制和粘贴来重用代码片段在软件开发中被广泛实践,并导致代码克隆。克隆被认为是一种反模式,因为它会对程序正确性产生负面影响,并增加维护工作量。可编程逻辑控制器(PLC)软件在代码克隆讨论中也不例外,因为开发和维护中的重用经常通过复制、粘贴和修改来实现。尽管代码克隆的存在本身可能不是问题,但随着软件系统的发展,检测、跟踪和管理克隆是很重要的。不幸的是,用于克隆检测和管理的工具支持通常不适用于PLC软件系统,或者仅限于具有精简功能集的通用工具。在本文中,我们研究了代码克隆在现实世界的PLC软件系统的基础上IEC 61131-3结构化文本和C/C++。我们扩展了一个广泛使用的克隆检测工具,并提供了规范化支持。此外,我们评估了不同类型和性质的代码克隆在所研究的系统和重构的相关性。结果揭示了克隆检测在工业自动化系统的背景下的适用性和有用性,它证明了适应IEC 611313-3语言的检测和管理工具的好处。
2017-06-13 cs.SE
Assessing Semantic Frames to Support Program Comprehension Activities
软件开发人员在构建和处理软件系统时,经常依赖于出现在软件工程工件中的自然语言文本来访问关键信息。例如,开发人员访问需求文档以了解要构建什么,访问源代码中的注释以了解设计决策,访问问答网站上的问题答案以了解API,等等。为了帮助软件开发人员访问和使用这些自然语言信息,软件工程研究人员经常使用自然语言处理中的技术。在本文中,我们探讨框架语义,一般的语言学方法,已被用于需求文本,也可以帮助解决问题时,应用基于词汇分析的技术与程序理解活动的文本。我们评估通用语义框架解析的适用性,并根据结果,我们提出SEFrame定制语义框架解析程序的理解使用。我们评估的正确性和鲁棒性的方法,发现SEFrame是正确的73%和74%的情况下,它可以解析文本从各种软件工件用于支持程序的理解。我们描述了如何使用这种方法来增强现有的方法来确定意图的含义从软件工程文本。
2021-05-12 cs.SE
MindForge: Teaching Small Language Models Whole-Life-Cycle Software Engineering via Source-Free Program Synthesis
Huawei Canada(华为加拿大);Queen’s University(女王大学);University of Manitoba(曼尼托巴大学)
研究针对小型语言模型从零构建程序的挑战,提出MindForge构建全生命周期无源码训练环境,微调Qwen3.6-27B后在ProgramBench及7个软件工程基准上性能显著提升。
2026-07-30 cs.CL cs.LG cs.SE
Control and Data Flow Execution of Java Programs
十年来,对程序的理解已经成为学生以及参与软件开发过程和为开放问题提供解决方案的其他人的必修任务。在这方面,以最好的方式显示在一个图形表示的问题是一个关键的优势,以更好地理解it.We提供的模型和结构,Java程序理解的控制和数据流分析的执行。特别是它有助于理解Java程序的静态分析,这是软件维护的一个极其重要的阶段。我们提供了Java程序可视化的信息和模型,可以帮助更好地理解程序的学习和分析目的。为构建可视化工具提供的思想是从Java程序的执行中提取数据和控制分析。通过实例分析,证明了本文的思想对理解Java程序的静态分析、软件调试和软件维护具有重要意义。
2017-07-27 cs.SE
Software Libraries and Their Reuse: Entropy, Kolmogorov Complexity, and Zipf's Law
我们从信息论和Kolmogorov复杂性的角度来分析软件重用,评估我们的能力,“压缩”的程序,通过表达他们的软件组件重用库。软件复用文献中的一个共同主题是,如果我们能够获得正确的环境-正确的工具,正确的概括,经济激励,“复用文化”-那么软件复用将飙升,从而提高生产力和软件质量。在本文中开发的分析描绘了一个不同的画面:在何种程度上,软件重用可以发生的问题域的内在属性,更好的工具和文化可以只有边际影响重用率,如果域是固有的抵抗重用。我们定义了一个熵参数$H \in [0,1]$的问题域,措施程序的多样性,并推导出代码重用的上限和规模的组件,我们可以工作。对于$H$接近0的“低熵”域,程序彼此高度相似,并且该域可以通过组成大规模组件来实现基于约束的软件工程(CBSE)的编程梦想。对于$H$接近1的问题域,程序需要大量的新代码,只有适度比例的应用程序由重用的小规模组件组成。来自Unix平台的初步经验结果支持我们模型的一些预测。
2005-10-02 cs.IT cs.PL cs.SE
Software Verification for Weak Memory via Program Transformation
尽管多处理器实现弱内存模型,验证方法往往假设顺序一致性(SC),因此可能会错过错误,由于弱内存。我们提出了一个健全的改造方案进行验证,使SC工具进行验证w.r.t.记忆力差我们提出了各种各样的模型(从x86/TSO到Power/ARM)和各种各样的验证工具的实验,量化了转换的额外成本,并强调了我们可以大幅降低它的情况。
2012-07-30 cs.LO cs.SE
Application Software Structure Enables Nif Operations Kirby W. Fong
NIF集成计算机控制系统(ICCS)应用软件使用一组服务框架,确保前端处理器(FEP)和管理程序的统一行为。这种一致性在每个程序使用共享服务的方式和它为附加图形用户界面(GUI)提供的灵活性上都是可见的。为了维护构成ICCS的许多程序的程序员的利益,需要跨应用程序的结构一致性。本文讨论了对应用程序结构影响最大的框架组件。
2001-11-07 cs.SE
Klever: Verification Framework for Critical Industrial C Programs
针对大型关键工业 C 程序验证耗时且缺乏环境建模、多版本配置验证等支持的问题,本文提出 Klever 框架以降低自动验证工具的应用成本。
2023-09-28 cs.SE
Development Of Ontology-Based Intelligent System For Software Testing
软件测试是软件产业的重要组成部分。除了了解测试的重要性外,只有有限的时间用于教授测试。如果测试与编程基础同时教授,效率会更高。这种测试技术和编程的综合学习允许程序员以更好的方式执行,这导致了行业进步的性能的提高。本文介绍了一种本体技术,该技术首先对测试过程进行层次化定义,并定义测试过程之间的关系,以实现知识的共享和重用,然后通过自然语言处理生成元数据,最后应用本体来支持测试管理。它作为多种环境的知识库,集成了编程基础和测试概念的教学。关键词:Meta Data,Ontology,软件测试,集成,编程基础.
2013-02-21 cs.AI cs.SE
The Visual Debugger Tool
本文提出一种集成于IntelliJ IDEA的可视化调试工具,通过对象图图形化展示程序执行信息,以降低软件调试与维护成本。
2024-04-19 cs.SE
Are Computer Science and Engineering Graduates Ready for the Software Industry? Experiences from an Industrial Student Training Program
自1968年在北约会议上创造软件工程一词以来,已经有50年了。到目前为止,该领域应该相对成熟,大多数知名大学在其计算机科学课程中涵盖核心软件工程主题,其他大学提供专业学位。然而,仍然有许多从业者抱怨新的软件工程员工缺乏技能。随着行业对软件工程师需求的不断增长,这种明显的差距变得越来越明显。解决这一差距的一个企业战略是,该行业在招聘过程之前制定补充培训计划,这也可以帮助他们筛选可行的候选人。在本文中,我们报告了我们的经验和教训,在进行暑期学校计划,旨在筛选新毕业生,向他们介绍与组织和行业相关的核心技能,并评估他们对掌握这些技能的态度招聘过程开始之前。我们的经验表明,这些举措对新员工和公司都是互利的。我们支持这一见解与前和后训练数据收集的参与者在第一版这样的暑期学校和后续调查问卷进行了一年后的毕业生,其中50%的人被公司雇用后不久,暑期学校。
2018-05-22 cs.CY cs.SE
Identifying Flakiness in Quantum Programs
本文通过分析 14 个量子软件仓库,识别出 12 个仓库中的 flaky tests,归纳其成因与修复方法,并指出量子程序员尚未充分采用现有应对措施,为研究和实践提供定量依据。
2023-07-07 cs.SE
One-Year Internship Program on Software Engineering: Students' Perceptions and Educators' Lessons Learned
School of Computing Technologies, RMIT University(RMIT大学计算技术学院)
研究分析了RMIT大学一年实习课程的发展,总结了学生面临的挑战及有益课程,为教育者和企业提供了优化实习体验的建议。
2026-03-23 cs.SE
Model Checking with Program Slicing Based on Variable Dependence Graphs
在嵌入式控制系统中,由于软件复杂性导致例如与时序相关的问题,软件缺陷的潜在风险一直在增加。这些缺陷很少通过测试或模拟发现。为了检测这种缺陷,我们提出了一种建模方法,可以生成软件模型的模型检验与程序切片技术的基础上的变量依赖图。最后将该方法应用于一个汽车控制软件的实例中,验证了该方法的有效性。此外,我们开发了一个软件工具来自动化模型生成,并取得了35%的总验证时间减少模型检验。
2013-01-01 cs.LO cs.SE