المقدمة
يستخدم العديد من الشركات الاختبار الآلي بكامل طاقته. اختبارات الوحدة واختبارات التكامل واختبارات واجهة المستخدم والاختبار اليدوي وطرق أخرى. ولكن لسبب ما ، في منطقة كبيرة مثل GameDev ، ترجع أتمتة الاختبار إلى حقيقة أن الوحدات يتم نقلها إلى قسم ضمان الجودة للاختبار اليدوي. سأحاول أن أخبر كيف أقوم بتطوير الألعاب ، وكيف أكتب الاختبارات لها.
بالطبع ، هناك دائمًا استثناءات ، وفي العديد من الشركات ، آمل أن يمر كل مبنى بمعظم الشيكات قبل الدخول في ضمان الجودة ، بل وأكثر من ذلك مع اللاعبين. لسوء الحظ ، لم أتمكن من العمل في هذه الشركات ، على الرغم من أن الاختيار صغير - تم استبدال 3 شركات فقط خلال حياتي المهنية. وفي كل منها ، تم إجراء الاختبار يدويًا فقط (وفي البداية لم يكن هناك حتى مختبرين ، قم بذلك بالقوة - "من قام بفحص الميزة")
عن اللعبة
بضع كلمات حول اللعبة - لعبة الجوال المحصنة. يتجول الأبطال في الأبراج المحصنة ، ويجمعون أشياء مفيدة مختلفة ، ويكملون المهام ويضخون نفس الأبطال. لا يقول الوصف أن اللعبة معقدة ولها العديد من الميزات المختلفة. ولكن في الداخل ، كما يحدث عادة ، كل شيء أكثر تعقيدًا.
أيضا عن داخل اللعبة هو محرك cocos2d-x-3.17 ، لغة التطوير هي C ++. معظم الاختبارات هي Python. من أدوات الطرف الثالث المستخدمة - TexturePacker (تجميع الأطلس) ، Spine (الرسوم المتحركة الهيكلية ثنائية الأبعاد) ، مبلط (محرر مستوى البلاط). يتضمن هذا أيضًا جداول بيانات Google (يتم تخزين معظم بيانات اللعبة في جداول). المنصات المستهدفة - Android و iOS. التطوير قيد التشغيل على OS X / Windows.
الفريق صغير - شخصان. فنان ، وهو رسام متحرك وأنا مبرمج. لا يوجد مصمم ألعاب ، ولا يوجد مختبرين. في الغالب ، تم استبدال عملهم بالجيل والاختبارات والنصوص الأخرى التي تساعدنا في عملية التطوير. اللعبة لا تزال قيد التطوير ، بالفعل 1.5 سنة. تم تطويره في وقت الفراغ وهذه المرة محدودة. لذلك ، يتم كتابة الكثير من التعليمات البرمجية الإضافية لتقليل أي عمل روتيني.
قائمة الاختبارات باستخدام اللعبة
, , :
(, , )
, cocos2d-x, , (Cocos, CocosStudio, CocosBuilder ). , .
— xml. — xml. . , . , , , — .
, . xml-. , . , . , , / . , Python. , , .
, . , . , . , .
:
: — ID , ; , — , .
. , — . , . , . , .
, , . , — . , — .
, , . ( , 80/20 ). — , . — , . ? — , . , , , , , . . , . , .
. Tower Defense, . 100 , 2 , 3 . 10 . , 1-2 . , , . — , , .
- , :
, . , . — . , .
/ Google-
. , . .
Google- ( )
export_{table}.py . . , . , .
core-
— , . , ECS . , , — , . , . — , (, ).
— . 0 — . — . — , . TDD , .
- level- . , . . , , — . , , , . . . , , . — , . .
— , . , . , ( ECS). .
, — 5*5 ( , ) . — , .

— , , , .
UI
, , — UI . . , . — — . — - ()/ .
:<client_testing_commands name="window_settings_and_credits" text="Window settings, credits">
<sequence repeat_forever="no">
<commands>
<CTCommandWaitNode path="/content/title_layer"/>
<CTCommandAudioEnable enabled="yes"/>
<CTCommandPressButton node_name="bt_settings" />
<CTCommandPressButton window_name="window_settings" name="disable_audio" />
<CTCommandCheckNode window_name="window_settings" name="enable_audio" visible="yes"/>
<CTCommandCheckNode window_name="window_settings" name="disable_audio" visible="no"/>
<CTCommandCheckAudio enabled="no"/>
<CTCommandPressButton window_name="window_settings" name="enable_audio" />
<CTCommandCheckNode window_name="window_settings" name="enable_audio" visible="no"/>
<CTCommandCheckNode window_name="window_settings" name="disable_audio" visible="yes"/>
<CTCommandCheckAudio enabled="yes"/>
<CTCommandPressButton window_name="window_settings" name="credits" />
<CTCommandPressButton window_name="window_credits" name="close" />
<CTCommandPressButton window_name="window_settings" name="restore_inapps" />
<CTCommandCheckNode name="spinner" visible="yes"/>
<CTCommandExit />
</commands>
</sequence>
</client_testing_commands>
, , , .
:
— . . , , . , , . . ( , ) , , , . — , . 10-15 .
Git-
. , . , . 5-10 , . , .
include
, include , . , , , include . , , . , . .
code-style
. , , IDE . .
. — . (2048 )- . , . — , .
Spine
.spine , . cocos2d-x json, . json , . , , . . , .
Firebase TestLab
, apk Firebase TestLab . , OS. Robo-tests , . , . , . — .
, , , .. . . . . , .
CI
git-hooks , CI. bitbucket-pipelines. , TeamCity . unit, integration . . , , .
, , , . , , , .
يسعدني أن أقرأ كيف يتم اختبار الألعاب في الشركات حيث لا تزال تمارس هذه الممارسة.