From off-Line to continuous on-line maintenance

M. Pezzè
{"title":"From off-Line to continuous on-line maintenance","authors":"M. Pezzè","doi":"10.1109/ICSM.2012.6405244","DOIUrl":null,"url":null,"abstract":"Summary form only given. Software is the cornerstone of the modern society. Many human activities rely on software systems that shall operate seamlessly 24/7, and failures in such systems may cause severe problems and considerable economic loss. To efficiently address a growing variety of increasingly complex activities, software systems rely on sophisticated technologies. Most software systems are assembled from modules and subsystems that are often developed by third party organization, and sometime are not even available at the system build time. This is the case for example of many Web applications that link Web services built and changed independently by third party organizations while the Web applications are running. The progresses of software engineering in the last decades have increased the productivity, reduced the costs and improved the reliability of software products, but have not eliminated the occurrence of field failures. Detecting and removing all faults before deployment is practically too expensive even for systems that are simple and fully available at design time, and impossible when systems are large and complex, and are dynamically linked to modules that may be developed and distributed only after the deployment of the system. The classic stop-and-go maintenance approaches that locate and fix field faults offline before deploying new system versions are important, but not sufficient to guarantee a seamless 24/7 behavior, because the faulty systems remain in operation until the faults have been removed and new systems redeployed [1]. On the other hand, classic fault tolerant approaches that constrain developers' freedom and rely on expensive mechanisms to avoid or mask faults do not match the cost requirements of many modern systems, and do not extend beyond the set of safety critical systems [2]. Self-healing systems and autonomic computing tackle these new challenges by moving activities from design to runtime. In self-healing systems, the borderline between design and runtime activities fades, and both design and maintenance activities must change to enable activities such as fault diagnoses and fixes to be performed fully automatically and at runtime. Maintenance activities rely on information that are usually available at design time are are not part of the system runtime infrastructure. For example, corrective maintenance requires some knowledge about the expected system behavior to locate and fix the faults, while adaptive and perfective maintenance requires some knowledge about libraries and components to identify new modules that better cope with the the changes in the requirements and in the environment. In classic maintenance approaches, this knowledge is mastered by the developers, who gather and use the required information offline to deal with the emerging maintenance problems. In self healing systems the knowledge required for maintenance activities shall be available at runtime. Self healing systems shall be designed with enough embedded knowledge to deal with unplanned events, and shall be able to exploit this information automatically and at runtime to recover from unexpected situations, like field failures. The challenges of designing powerful self-healing systems relies in the ability to minimize the amount of extra knowledge to be provided at design time, while feeding a powerful automatic recovery mechanism. An interesting approach relies on the observation that software systems are redundant by nature, and exploits the intrinsic redundancy of software system to fix faults, thus minimizing the extra effort required at design time to feed the self-healing mechanism [3]. The intrinsic redundancy of software stems from design and reusability practice: the reuse of libraries may results in different ways to achieve the same or similar results, the design for modularity may produce methods with equivalent behavior, backward compatibility may keep deprecated and new implementations in the same system. For example, libraries like Ant and Log4J implement several functionalities already available in the standard Java libraries to improve efficiency or usability, while graphical libraries, like SWT, Swing and AWT, provide overlapping functionality that may be available in systems that include two or more of these libraries. This redundancy is available for free at runtime, and can be exploited both to design self-healing mechanisms that can be automatically activated to solve faulty situations at runtime, and to improve maintenance mechanisms by facilitating failure reproduction and fault localization and fixing.","PeriodicalId":348790,"journal":{"name":"2012 28th IEEE International Conference on Software Maintenance (ICSM)","volume":"43 1","pages":"0"},"PeriodicalIF":0.0000,"publicationDate":"2012-09-23","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":"1","resultStr":null,"platform":"Semanticscholar","paperid":null,"PeriodicalName":"2012 28th IEEE International Conference on Software Maintenance (ICSM)","FirstCategoryId":"1085","ListUrlMain":"https://doi.org/10.1109/ICSM.2012.6405244","RegionNum":0,"RegionCategory":null,"ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":null,"EPubDate":"","PubModel":"","JCR":"","JCRName":"","Score":null,"Total":0}
引用次数: 1

Abstract

Summary form only given. Software is the cornerstone of the modern society. Many human activities rely on software systems that shall operate seamlessly 24/7, and failures in such systems may cause severe problems and considerable economic loss. To efficiently address a growing variety of increasingly complex activities, software systems rely on sophisticated technologies. Most software systems are assembled from modules and subsystems that are often developed by third party organization, and sometime are not even available at the system build time. This is the case for example of many Web applications that link Web services built and changed independently by third party organizations while the Web applications are running. The progresses of software engineering in the last decades have increased the productivity, reduced the costs and improved the reliability of software products, but have not eliminated the occurrence of field failures. Detecting and removing all faults before deployment is practically too expensive even for systems that are simple and fully available at design time, and impossible when systems are large and complex, and are dynamically linked to modules that may be developed and distributed only after the deployment of the system. The classic stop-and-go maintenance approaches that locate and fix field faults offline before deploying new system versions are important, but not sufficient to guarantee a seamless 24/7 behavior, because the faulty systems remain in operation until the faults have been removed and new systems redeployed [1]. On the other hand, classic fault tolerant approaches that constrain developers' freedom and rely on expensive mechanisms to avoid or mask faults do not match the cost requirements of many modern systems, and do not extend beyond the set of safety critical systems [2]. Self-healing systems and autonomic computing tackle these new challenges by moving activities from design to runtime. In self-healing systems, the borderline between design and runtime activities fades, and both design and maintenance activities must change to enable activities such as fault diagnoses and fixes to be performed fully automatically and at runtime. Maintenance activities rely on information that are usually available at design time are are not part of the system runtime infrastructure. For example, corrective maintenance requires some knowledge about the expected system behavior to locate and fix the faults, while adaptive and perfective maintenance requires some knowledge about libraries and components to identify new modules that better cope with the the changes in the requirements and in the environment. In classic maintenance approaches, this knowledge is mastered by the developers, who gather and use the required information offline to deal with the emerging maintenance problems. In self healing systems the knowledge required for maintenance activities shall be available at runtime. Self healing systems shall be designed with enough embedded knowledge to deal with unplanned events, and shall be able to exploit this information automatically and at runtime to recover from unexpected situations, like field failures. The challenges of designing powerful self-healing systems relies in the ability to minimize the amount of extra knowledge to be provided at design time, while feeding a powerful automatic recovery mechanism. An interesting approach relies on the observation that software systems are redundant by nature, and exploits the intrinsic redundancy of software system to fix faults, thus minimizing the extra effort required at design time to feed the self-healing mechanism [3]. The intrinsic redundancy of software stems from design and reusability practice: the reuse of libraries may results in different ways to achieve the same or similar results, the design for modularity may produce methods with equivalent behavior, backward compatibility may keep deprecated and new implementations in the same system. For example, libraries like Ant and Log4J implement several functionalities already available in the standard Java libraries to improve efficiency or usability, while graphical libraries, like SWT, Swing and AWT, provide overlapping functionality that may be available in systems that include two or more of these libraries. This redundancy is available for free at runtime, and can be exploited both to design self-healing mechanisms that can be automatically activated to solve faulty situations at runtime, and to improve maintenance mechanisms by facilitating failure reproduction and fault localization and fixing.
从离线到连续在线维护
只提供摘要形式。软件是现代社会的基石。许多人类活动依赖于全天候无缝运行的软件系统,此类系统的故障可能会导致严重的问题和相当大的经济损失。为了有效地处理各种日益复杂的活动,软件系统依赖于复杂的技术。大多数软件系统是由模块和子系统组装而成的,这些模块和子系统通常是由第三方组织开发的,有时甚至在系统构建时是不可用的。例如,在Web应用程序运行时,许多Web应用程序链接由第三方组织独立构建和更改的Web服务。近几十年来,软件工程的发展提高了生产效率,降低了成本,提高了软件产品的可靠性,但并没有消除现场故障的发生。在部署之前检测和消除所有故障实际上是太昂贵的,即使对于设计时简单且完全可用的系统来说也是如此,当系统又大又复杂,并且动态链接到可能仅在系统部署后才开发和分发的模块时,这是不可能的。在部署新系统版本之前,传统的走走停停的维护方法在离线定位和修复现场故障是很重要的,但不足以保证24/7的无缝行为,因为故障系统在故障被消除和新系统重新部署之前仍在运行[1]。另一方面,经典的容错方法限制了开发人员的自由,并依赖昂贵的机制来避免或掩盖故障,这与许多现代系统的成本需求不匹配,并且不能扩展到安全关键系统集之外[2]。自我修复系统和自主计算通过将活动从设计转移到运行时来应对这些新挑战。在自修复系统中,设计和运行时活动之间的界限逐渐消失,设计和维护活动都必须改变,以使故障诊断和修复等活动能够完全自动地在运行时执行。维护活动依赖于通常在设计时可用的信息,这些信息不是系统运行时基础结构的一部分。例如,纠正性维护需要一些关于预期系统行为的知识来定位和修复故障,而适应性和完善的维护需要一些关于库和组件的知识来识别更好地处理需求和环境中的变化的新模块。在经典的维护方法中,这些知识由开发人员掌握,他们离线收集和使用所需的信息来处理新出现的维护问题。在自愈系统中,维护活动所需的知识应在运行时可用。自我修复系统应该设计有足够的嵌入式知识来处理计划外事件,并且应该能够自动利用这些信息并在运行时从意外情况(如现场故障)中恢复。设计强大的自我修复系统的挑战在于,在提供强大的自动恢复机制的同时,尽量减少在设计时提供的额外知识的数量。一种有趣的方法依赖于观察到软件系统本质上是冗余的,并利用软件系统的内在冗余来修复故障,从而最大限度地减少设计时为提供自愈机制所需的额外工作[3]。软件的内在冗余源于设计和可重用性实践:库的重用可能会导致以不同的方式实现相同或类似的结果,模块化的设计可能会产生具有相同行为的方法,向后兼容性可能会在同一系统中保留废弃的和新的实现。例如,像Ant和Log4J这样的库实现了标准Java库中已有的一些功能,以提高效率或可用性,而像SWT、Swing和AWT这样的图形库提供了重叠的功能,这些功能可能在包含两个或更多这些库的系统中可用。这种冗余在运行时是免费的,可以用来设计自愈机制(可以在运行时自动激活以解决错误情况),也可以通过促进故障再现、故障定位和修复来改进维护机制。
本文章由计算机程序翻译,如有差异,请以英文原文为准。
求助全文
约1分钟内获得全文 求助全文
来源期刊
自引率
0.00%
发文量
0
×
引用
GB/T 7714-2015
复制
MLA
复制
APA
复制
导出至
BibTeX EndNote RefMan NoteFirst NoteExpress
×
提示
您的信息不完整,为了账户安全,请先补充。
现在去补充
×
提示
您因"违规操作"
具体请查看互助需知
我知道了
×
提示
确定
请完成安全验证×
copy
已复制链接
快去分享给好友吧!
我知道了
右上角分享
点击右上角分享
0
联系我们:info@booksci.cn Book学术提供免费学术资源搜索服务,方便国内外学者检索中英文文献。致力于提供最便捷和优质的服务体验。 Copyright © 2023 布克学术 All rights reserved.
京ICP备2023020795号-1
ghs 京公网安备 11010802042870号
Book学术文献互助
Book学术文献互助群
群 号:604180095
Book学术官方微信
小红书