как избежать этих скрытых, но обычных ошибок в программном обеспечении проектирование PCB process, and introduce several techniques to help engineers find the hidden errors in the PCB copy board (www.печатная плата.net) software. Большинство проектов разработки программного обеспечения зависят от сочетания проверки кода, распознавание дефектов программного обеспечения. Although these traditional techniques are very important and can find most software problems, Они не могут обнаружить много обычных ошибок в современной сложной системе.
структурные или белые тесты могут эффективно обнаружить логическое, управляющее течение, вычисление и ошибки в данных в коде. В ходе этого тестирования было запрошено краткое описание внутренней работы программного обеспечения (так называемые « белые ящики» или « стеклянные коробки»), с тем чтобы получить более подробную информацию о структуре программного обеспечения. Он проверяет каждое условное выражение, математические операции, ввод и вывод. так как требуется много деталей для тестирования, проверка конструкции проводится один раз, когда проверяется только один программный модуль, который обычно является функцией или классом.
в процессе пересмотра кода используются те же сложные методы, что и в случае выявления недостатков и потенциальных проблем. как и в случае тестирования в белых коробках, оценка обычно проводится по каждому программному элементу, поскольку для эффективного процесса оценки требуется централизованный и детальный контроль.
В отличие от обзора и тестирования в белых коробках, функциональные тесты или тесты в чёрном ящике предполагают, что о реализации программного обеспечения ничего не известно. Он проверяется с помощью управляемого ввода. функциональный тест состоит из тестовой программы, разработанной испытателем или разработчиком. Они указывают ожидаемый вывод программы, соответствующий вводу конкретной группы программ. после выполнения теста проверяющий сравнивает фактический результат с ожидаемым, чтобы обнаружить проблемы. Тесты чёрного ящика позволяют эффективно выявлять неудовлетворенные потребности в наиболее часто используемых функциях программы, проблемы с интерфейсом, проблемы с характеристиками и ошибки.
Although combining these techniques can find most of the errors hidden in a particular software program, Они также имеют ограничения. Code review and white box testing only target a small part of the code at a time, игнорировать другие части системы. Black box testing usually treats the system as a whole, игнорировать подробности. некоторые важные вопросы могут быть выявлены только путем уделения внимания деталям их взаимодействия в рамках всей системы; традиционные методы не позволяют надежно идентифицировать эти проблемы. система программного обеспечения должна быть подвергнута тщательной проверке, с тем чтобы выявить конкретные причины конкретных проблем. Since it is usually impossible to thoroughly analyze every detail in the program and its interaction with all other parts of the code, анализ должен касаться конкретных аспектов плана, которые, как известно, могут вызвать проблемы.
В настоящем документе рассматриваются три возможные проблемные области:
* переполнение стека
* конкурентные условия
* Deadlock
читатель может прочитать вторую часть текста в режиме онлайн, в которой будут рассмотрены следующие вопросы:
* вопрос о сроках
* Reentrant conditions
Все эти проблемы широко распространены в системах, использующих многозадачные технологии проектирования в реальном времени.
Stack overflow
процессор использует стек для хранения временных переменных, передачи параметров вызываемым функциям, сохранения "состояния" потоков и так далее. Если система не использует виртуальную память (иными словами, она не может переносить страницу памяти на диск, чтобы освободить пространство памяти для других целей), стек будет фиксироваться в виде размера продукта при выходе. если по какой - либо причине стек выходит за рамки выделенных программистами ассигнований, программа становится неопределенной. Эта нестабильность может привести к серьезным системным сбоям. Поэтому важно обеспечить, чтобы система могла в наихудшем случае распределять достаточное количество стеков.
Единственный способ убедиться в том, что переполнение стека не произойдет, это проанализировать код, определить максимальную степень использования стека во всех случаях, когда это возможно, и затем проверить, достаточно ли выделен стек. этот тест вряд ли вызовет мгновенное введение определенной комбинации и приведет к худшему состоянию системы.
понятие глубинного анализа стека относительно простое:
1. создать дерево вызовов для каждой отдельной дискуссии.
определение использования стека для каждой функции в дереве вызова.
3. Проверьте каждое дерево вызова, чтобы определить путь вызова от корней дерева к внешним "листам", которые больше всего нуждаются в стеке.
4. Добавить коэффициент использования каждой отдельной дискуссии для вызова дерева стека.
определить максимальное количество стеков, используемых в каждой программе обслуживания прерывания (ISR), и рассчитать общее количество. Однако, если сами ISR не имеют стека и использует стек прерванных потоков, максимальное количество стеков, используемых ISR, должно быть добавлено в каждый стек.
6. для каждого приоритета схема PCB Проект, add the number of stacks used to save the processor state when an interrupt occurs.
7. If you are using RTOS, add the maximum number of stacks required for the internal use of the RTOS itself (different from the system call caused by the application code, which is included in step 2).
Кроме того, необходимо рассмотреть два важных вопроса. Во - первых, дерево вызовов, построенное только из исходного кода продвинутого языка, может быть неполным. Большинство компиляторов используют библиотеку во время работы для оптимизации обычных задач вычисления, таких как умножение и деление больших чисел целых чисел, операция с плавающей запятой и т.д. функция репозитория сама по себе может занимать много места в стеке и поэтому должна быть включена в анализ. если вы используете язык C + +, то в дереве вызова также должны содержаться все следующие функции (методы): конструктор, дизъюнктура, оператор перегрузки, структура репликации и функция преобразования. Все указатели функций также должны быть проанализированы, и все вызываемые ими функции включены в анализ.