Структура современного программного обеспечения: обзор