Старение программного обеспечения
Старение программного обеспечения — это тенденция программного обеспечения к сбоям или отказам системы после непрерывной работы в течение определённого времени или вследствие постоянных изменений в окружающей программной среде. Причинами старения ПО являются, в частности, неспособность устаревшего ПО адаптироваться к меняющимся потребностям или изменению технологических платформ, а также к тенденции патчей приводить к другим (вторичным) ошибкам. По мере старения ПО оно становится менее пригодным для своих целей и, в конечном итоге, перестаёт работать должным образом. Перезагрузка компьютера или переустановка программы может быть временным решением[1]. Проактивным методом управления ошибками для устранения инцидентов старения ПО является его омоложение.
Данное явление впервые было идентифицировано Дэвидом Парнасом в эссе, посвящённом поиску решений этой проблемы[2]:
Программы, как и люди, стареют. Мы не можем предотвратить старение, но мы можем понять его причины, предпринять шаги для ограничения его последствий, временно обратить вспять некоторые из причинённых им повреждений и подготовиться к тому дню, когда программное обеспечение больше не будет жизнеспособным[3].
Как с академической, так и с промышленной точек зрения, феномен старения программного обеспечения становится всё более актуальным. Недавние исследования были сосредоточены на выяснении причин и последствий старения[4]. Разбухание памяти и утечки, вместе с повреждением данных и неосвобождёнными блокировками файлов являются основными причинами старения программного обеспечения.
Проактивное управление старением программного обеспечения
Старение программного обеспечения
Сбои программного обеспечения чаще приводят к незапланированным простоям систем, чем аппаратные сбои[5][6]. Это связано с тем, что со временем программное обеспечение демонстрирует возрастающую частоту отказов из-за повреждения данных, накопления численных ошибок и неограниченного потребления ресурсов. В широко используемом и специализированном программном обеспечении распространённым способом устранения проблем является перезагрузка, поскольку старение происходит из-за сложности программного обеспечения, которое никогда не бывает лишено ошибок. Практически невозможно полностью проверить, что программное обеспечение свободно от ошибок. Даже известное программное обеспечение, такое как Windows и macOS, требует постоянных обновлений для улучшения производительности и исправления ошибок. Разработка программного обеспечения, как правило, обусловлена необходимостью соблюдения сроков выпуска, а не обеспечением долгосрочной надёжности[7]. Разработка программного обеспечения, устойчивого к старению, затруднительна[8].
Омоложение программного обеспечения
Чтобы предотвратить сбои или деградацию, омоложение программного обеспечения можно применять проактивно, поскольку неизбежное старение приводит к отказам в программных системах. Этот проактивный метод был определён как экономически эффективное решение в ходе исследований отказоустойчивого программного обеспечения в лабораториях Белла в 1990-х годах[9]. Программное омоложение работает путём устранения накопленных ошибок и освобождения системных ресурсов, например, путём очистки таблиц ядра операционной системы, использования сборки мусора, переинициализации внутренних структур данных.
Существуют как простые, так и сложные методы достижения омоложения. Наиболее знакомый большинству людей способ — это перезагрузка оборудования или программного обеспечения. Более техническим примером может служить метод омоложения веб-серверного программного обеспечения Apache, когда процессы завершаются и воссоздаются после обработки определённого количества запросов[10]. Другой метод заключается в перезапуске виртуальных машин, работающих в среде облачных вычислений[11].
Международная телекоммуникационная корпорация AT&T внедрила программное омоложение в систему реального времени, собирающую биллинговые данные в Соединённых Штатах для большинства телефонных узлов[12].
Некоторые системы, в которых применялись методы программного восстановления, включают[13]:
- Системы обработки транзакций
- Веб-серверы
- Бортовые системы космических аппаратов
В 2013 году на Международном симпозиуме IEEE надёжности программного обеспечения прошёл 5-й ежегодный Международный семинар по старению и омоложению программного обеспечения(woSAR). Среди тем были:
- Разработка, реализация и оценка механизмов омоложения
- Моделирование, анализ и реализация планирования омоложения
- Тестирование производительности омоложения.
Утечка памяти
Некоторые языки программирования, такие как C и C++, позволяют программисту выделить память из кучи. Более того, программист может быть обязан освободить память, когда она больше не нужна. Освобождение памяти необходимо, потому что некоторые операционные системы не выполняют сборку мусора при завершении процесса. Со временем программа будет потреблять всё больше и больше памяти, в конечном итоге приводя к нехватке памяти[14]. В условиях нехватки памяти компьютер обычно работает медленнее из-за интенсивной подкачки страниц и пробуксовки. Когда это происходит, приложения начинают работать медленно или вовсе перестают отвечать на запросы. Если в компьютере заканчивается и оперативная память, и файл подкачки, операционная система может автоматически перезагрузиться, или, что ещё хуже, зависнуть[15].
Программы, написанные на языках программирования, использующих сборщик мусора (например, Java), менее подвержены утечкам памяти, поскольку память, на которую больше нет ссылок, будет освобождена сборщиком мусора. Однако это не означает, что невозможно написать код, который будет приводить к утечкам памяти в таких языках.
Иногда критические компоненты самой операционной системы могут быть источником утечек памяти. Например, в Windows использование памяти проводником может истощить доступную память до такой степени, что весь компьютер станет непригодным для использования и может потребоваться перезагрузка[16].
Реализция
Два метода реализации омоложения:
- Омоложение по времени
- Омоложение по предсказанию
Разбухание памяти
Сборка мусора — это вид автоматического управления памятью, когда система сама освобождает неиспользованную память. Например, .NET Framework управляет выделением и освобождением памяти для программ, работающих под его управлением. Однако автоматическое отслеживание этих объектов занимает время и не является идеальным.
Веб-сервисы на базе .NET управляют несколькими логическими типами памяти, такими как стек, неуправляемая и управляемая куча (свободное пространство). Когда физическая память заполняется, операционная система записывает редко используемые её части на диск, чтобы освободить место для других приложений — этот процесс называется подкачкой или свопингом. Если же память снова потребуется, данные должны быть загружены с диска. Если несколько приложений одновременно предъявляют большие требования к памяти, ОС может тратить значительную часть времени только на перемещение данных между основной памятью и диском, что называется пробуксовкой[17]. Поскольку сборщик мусора должен просмотреть все выделения памяти, чтобы определить, какие из них используются, он может усугубить эту пробуксовку. В результате интенсивное использование подкачки может привести к тому, что циклы сборки мусора увеличатся с миллисекунд до десятков секунд, что вызывает проблемы с юзабилити.
См. также
- Ухудшение программного обеспечения
- Гниение программного обеспечения
Примечания
- ↑ Shereshevsky, Crowell etc, 2003, с. 721–730.
- ↑ Parnas, 1994, с. 279–287.
- ↑ Software Aging | the morning paper (брит. англ.) (14 октября 2014). Дата обращения: 12 февраля 2024.
- ↑ Grottke, Matias, Trivedi, 2008, с. 1–6.
- ↑ Oatd: -.
- ↑ Garg, Van Moorsel etc, 1998, с. 283–292.
- ↑ Castelli, Harper etc, 2001, с. 311–332.
- ↑ Gross, Bhardwaj, Bickford, 2003, с. 17–23.
- ↑ Cotroneo, Natella etc, 2014.
- ↑ Trivedi, K. S. and Vaidyanathan, K. 2007. Software Aging and Rejuvenation. Wiley Encyclopedia of Computer Science and Engineering.
- ↑ Bruneo, Distefano etc, 2013, с. 1072–1085.
- ↑ Trivedi, Vaidyanathan, 2004, с. 151–182.
- ↑ Li, Vaidyanathan, Trivedi, 2002, с. 91–100.
- ↑ Overview of Memory Leaks. msdn.microsoft.com. Дата обращения: 4 ноября 2015.
- ↑ Martin Brown; Ken Milberg. Optimizing AIX 7 memory performance Part 3, Tuning swap space settings. IBM (16 ноября 2010).
- ↑ Preventing Memory Leaks in Windows Applications (Windows). msdn.microsoft.com. Дата обращения: 4 ноября 2015.
- ↑ Chaitra, Basu, 2012, с. 31–35.
Литература
- Shereshevsky M., Crowell J., Cukic B., Gandikota V., Yan Liu. Software aging and multifractality of memory resources // 2003 International Conference on Dependable Systems and Networks, 2003. Proceedings. — 2003. — ISBN 978-0-7695-1952-4. — doi:10.1109/DSN.2003.1209987.
- Parnas D.L. Software aging // Proceedings of 16th International Conference on Software Engineering. — 1994. — ISBN 978-0-8186-5855-6. — doi:10.1109/ICSE.1994.296790.
- Michael Grottke, Rivalino Matias, Kishor S. Trivedi. The fundamentals of software aging // 2008 IEEE International Conference on Software Reliability Engineering Workshops (ISSRE WKSP). — 2008. — ISBN 978-1-4244-3416-9. — doi:10.1109/ISSREW.2008.5355512.
- Garg S., Van Moorsel A., Vaidyanathan K., Trivedi K.S. A methodology for detection and estimation of software aging // Proceedings Ninth International Symposium on Software Reliability Engineering (Cat. No.98TB100257). — 1998. — ISBN 978-0-8186-8991-8. — doi:10.1109/ISSRE.1998.730892.
- V. Castelli, R.E. Harper, P. Heidelberger, S.W. Hunter, K.S. Trivedi, K. Vaidyanathan, W.P. Zeggert. Proactive management of software aging // IBM Journal of Research and Development. — 2001. — Март (т. 45, вып. 2). — ISSN 0018-8646. — doi:10.1147/rd.452.0311.
- Gross K.C., Bhardwaj V., Bickford R. Proactive detection of software aging mechanisms in performance critical computers // 27th Annual NASA Goddard/IEEE Software Engineering Workshop, 2002. Proceedings.. — 2003. — ISBN 978-0-7695-1855-8. — doi:10.1109/SEW.2002.1199445.
- Cotroneo D., Natella R., Pietrantuono R., Russo S. A survey of software aging and rejuvenation studies. // ACM J. Emerg. Technol. Comput. Syst.. — 2014. — Т. 10, вып. 1. Article 8 (January 2014).
- Dario Bruneo, Salvatore Distefano, Francesco Longo, Antonio Puliafito, Marco Scarpa. Workload-Based Software Rejuvenation in Cloud Systems // IEEE Transactions on Computers. — 2013. — Т. 62, вып. 6. — doi:10.1109/TC.2013.30. — Bibcode:2013ITCmp..62.1072B.
- Kishor S. Trivedi, Kalyanaraman Vaidyanathan. Software Rejuvenation - Modeling and Analysis / (ed) Ricardo Reis. — Springer US, 2004. — (IFIP International Federation for Information Processing). — ISBN 978-1-4020-8158-3. — doi:10.1007/1-4020-8159-6_6.
- Lei Li, Vaidyanathan K., Trivedi K.S. An approach for estimation of software aging in a Web server // Proceedings International Symposium on Empirical Software Engineering. — 2002. — ISBN 978-0-7695-1796-4. — doi:10.1109/ISESE.2002.1166929.
- Chaitra S.R., Anirban Basu. Software Rejuvenation in Web Services // International Journal of Computer Applications. — 2012. — Т. 54, вып. 8. — doi:10.5120/8589-2340. — Bibcode:2012IJCA...54h..31S.
Литература для дальнейшего чтения
- Удовиченко А.О. Комплексный подход к решению проблемы «старения» программного обеспечения // Телекоммуникационные системы и компьютерные сети.
- Александр, Курилкин. Почему ваши программы «стареют»? tproger (4 декабря 2015). Дата обращения: 1 декабря 2025.
- Что такое старение и обновление программного обеспечения? (19 декабря 2021). Дата обращения: 1 декабря 2025.
- R. Matias Jr. and P. J. Freitas Filho, "An experimental study on software aging and rejuvenation in web servers," Proceedings of the 30th Annual International Computer Software and Applications Conference (COMPSAC'06), Vol. 01, pp. 189 – 196, 2006.
- M. Grottke, R. Matias Jr., and K. S. Trivedi, "The Fundamentals of Software Aging," Workshop of Software Aging and Rejuvenation (WoSAR/ISSRE), 2008.
- R. Matias Jr, P. Barbetta, K. Trivedi, P. Freitas Filho "Accelerated Degradation Tests Applied to Software Aging Experiments," IEEE Transactions on Reliability 59(1): 102–114,2010.
- M. Grottke, L. Li, K. Vaidyanathan, and K.S. Trivedi, "Analysis of software aging in a web server," IEEE Transactions on Reliability, vol. 55, no. 3, pp. 411–420, 2006.
- M. Grottke, K. Trivedi, "Fighting Bugs: Remove, Retry, Replicate, and Rejuvenate," IEEE Computer 40(2): 107–109, 2007.
- More papers on Proceedings of Workshop of Software Aging and Rejuvenation (WoSAR'08,'10, '11, '12, '13, '14) at IEEE Xplore.