Я не інженер програмного забезпечення. Я аспірант в галузі геознавства.
Майже два роки тому я почав програмувати наукове програмне забезпечення. Я ніколи не використовував постійну інтеграцію (CI), головним чином тому, що спочатку я не знав, що вона існує, і я була єдиною людиною, яка працює над цим програмним забезпеченням.
Тепер, коли база програмного забезпечення працює, інші люди починають цікавитися ним і хочуть внести свій внесок у програмне забезпечення. План полягає в тому, щоб інші особи в інших університетах впроваджували доповнення до основного програмного забезпечення. (Я боюся, що вони можуть ввести помилки). Крім того, програмне забезпечення стало досить складним і стало складніше і важче перевірити, і я також планую продовжувати роботу над ним.
Через ці дві причини я зараз все більше і більше замислююся про використання CI. Оскільки я ніколи не здобував освіту інженера-програмного забезпечення, і ніхто навколо мене ніколи не чув про КІ (ми вчені, ніякі програмісти), мені важко почати свій проект.
У мене є кілька запитань, де я хотів би отримати поради:
Перш за все коротке пояснення того, як працює програмне забезпечення:
Програмне забезпечення контролюється одним файлом .xml, що містить усі необхідні настройки. Ви запускаєте програмне забезпечення, просто проходячи шлях до файлу .xml як вхідний аргумент, і він запускається та створює пару файлів з результатами. Один разовий пробіг може зайняти ~ 30 секунд.
Це наукове програмне забезпечення. Майже всі функції мають декілька вхідних параметрів, типи яких в основному є класами, які є досить складними. У мене є кілька .txt файлів з великими каталогами, які використовуються для створення примірників цих класів.
Тепер перейдемо до моїх запитань:
одиничні тести, інтеграційні тести, тести на кінці? : У моєму програмному забезпеченні зараз близько 30 000 рядків коду з сотнями функцій і ~ 80 класів. Мені здається дивним почати писати одиничні тести для сотень функцій, які вже реалізовані. Тому я подумав про те, щоб просто створити кілька тестових випадків. Підготуйте 10-20 різних .xml файлів і дозвольте запуску програмного забезпечення. Я думаю, це те, що називається тестами в кінці? Я часто читаю, що ви не повинні цього робити, але, можливо, це все нормально, якщо у вас вже є робоче програмне забезпечення? Або просто проста дурна ідея спробувати додати CI до вже працюючого програмного забезпечення.
Як ви пишете одиничні тести, якщо параметри функції важко створити? припустимо, у мене є функція,
double fun(vector<Class_A> a, vector<Class_B>)
і зазвичай мені потрібно спершу прочитати в декількох текстових файлах, щоб створити об'єкти типуClass_A
таClass_B
. Я думав про створення деяких фіктивних функцій, таких якClass_A create_dummy_object()
без читання в текстових файлах. Я також думав про реалізацію якоїсь серіалізації . (Я не планую тестувати створення об’єктів класу, оскільки вони залежать лише від декількох текстових файлів)Як написати тести, якщо результати сильно відрізняються? Моє програмне забезпечення використовує великі імітації Монте-Карло та працює ітераційно. Зазвичай у вас є ~ 1000 ітерацій, і на кожній ітерації ви створюєте ~ 500-20 000 екземплярів об'єктів на основі моделювання Монте-Карло. Якщо лише один результат однієї ітерації трохи інший, то всі наступні ітерації зовсім інші. Як ви вирішите цю ситуацію? Я вважаю, що це є важливим моментом у порівнянні з тестами, оскільки кінцевий результат дуже мінливий?
Будь-які інші поради з CI високо оцінені.