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

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

У процесі професійної діяльності програмісту доводиться стикатися з безліччю ситуацій, що потребують комплексного аналізу великих фрагментів вихідного коду або ж навіть цілих додатків. Дослідження вдалих рішень і практик, аналіз вже реалізованих алгоритмів або ж просто переведення в команду іншого проекту часто викликає необхідність розібрати програму, написану кимось ще.

Вам знадобиться

  • - програма для перегляду вихідного коду;
  • - можливо, засоби реверс-інженерії і case-засоби.

Інструкція

1. Досліджуйте потоки передачі керування програмами. Виявіть точку входу. Вона, наприклад, є функцією main в C і C++, початок неіменного структурного блоку першого рівня, що завершується ключовим словом END з точкою, в pascal. Починаючи від точки входу, простежте всі маршрути викликів функцій, процедур, методів класів. Складіть укрупнену діаграму потоків керування. Для спрощення даного процесу можна використовувати різні засоби реверс-інженерингу. Більш детально проаналізуйте вихідний код структурних елементів програми, що розбирається. Складіть діаграми потоків керування або блок-схеми алгоритмів, які реалізуються окремими функціями та методами.

2. Аналізуйте потоки даних програми, що розбирається. Виявіть структури, які використовуються для зберігання інформації та її передачі між функціональними елементами програми. Виявіть фрагменти коду, в яких здійснюється перетворення даних з однієї форми на іншу. Складіть перелік місць програми, в яких проводиться отримання інформації із зовнішнього середовища, а також її висновок куди-небудь. При проведенні аналізу подібного роду також допоможуть засоби реінжирінгу і case-засоби (наприклад, для побудови діаграми спадкування і діаграми залежностей).

3. Розберіть програму, склавши повне уявлення про принципи її функціонування. На основі знань про потоки передачі управління між структурними елементами, а також всередині них, знань про потоки і типи перетворень даних, виявіть основні алгоритми роботи. Розділіть алгоритми обробки даних та керування інтерфейсом. Серед алгоритмів обробки виділіть типові, класифікуйте їх. Виявіть алгоритми, засновані на взаємодії різних компонентів (наприклад, пошук може використовуватися як самостійно, так і в складі сортування). При необхідності складіть блок-схеми різного ступеня деталізації, що ілюструють роботу програми.