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


 

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



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

— програма для перегляду вихідного коду;
- Можливо, кошти реверс-інженерії та case-средства.

Інструкція

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

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

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


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

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