Як розібрати програму.

В процесі професійної діяльності програмісту доводиться стикатися з безліччю ситуацій, що вимагають комплексного аналізу великих фрагментів вихідного коду або ж навіть цілих додатків. Дослідження вдалих рішень і практик, аналіз вже реалізованих алгоритмів або ж просто переклад в команду іншого проекту часто викликає необхідність розібрати програму, написану кимось ще.
Вам знадобиться
  • - програма для перегляду вихідного коду;
  • - можливо, кошти реверс-інженерії та case-засоби.
Інструкція
1
Дослідіть потоки передачі управління розглядуваної програми. Виявіть точку входу. Їй, наприклад, є функція main в C і C ++, початок неіменованого структурного блоку першого рівня, що завершується ключовим словом END з точкою, в pascal.Начіная від точки входу, простежте всі маршрути викликів функцій, процедур, методів класів. Складіть укрупнену діаграму потоків управління. Для спрощення даного процесу можна використовувати різні засоби реверс-інженерінга.Более детально проаналізуйте вихідний код структурних елементів розглядуваної програми. Складіть діаграми потоків управління або блок-схеми алгоритмів, реалізованих окремими функціями і методами.
2
Здійсніть аналіз потоків даних розглядуваної програми. Виявіть структури, використовувані для зберігання інформації та її передачі між функціональними елементами програми. Виявіть фрагменти коду, в яких здійснюється перетворення даних з однієї форми в іншу. Складіть перелік місць програми, в яких відбувається отримання інформації із зовнішнього середовища, а також її висновок куди-небудь. При проведенні аналізу подібного роду також допоможуть засоби реінжиринг і case-засоби (наприклад, для побудови діаграми успадкування та діаграми залежностей).
3
Розберіть програму , склавши повне уявлення про принципи її функціонування. На основі знань про потоках передачі управління між структурними елементами, а також всередині них, знань про потоках і типах перетворень даних, виявите основні алгоритми работи.Разделіте алгоритми обробки даних і управління інтерфейсом. Серед алгоритмів обробки виділіть типові, классифицируйте їх. Виявіть алгоритми, засновані на взаємодії різних компонентів (наприклад, пошук може використовуватися як самостійно, так і в складі сортування). При необхідності складіть блок-схеми різного ступеня деталізації, що ілюструють роботу програми.