החשיבות בבדיקות זיכרון במכשירי אנדרואיד טופז אנגלנדר

 

להשרות אמינות ומצוינות בתוכנה

 

בדיקות פונקציונליות מתמקדות בפעולות ובתכונות התוכנה, לעומת זאת הבדיקות הלא-פונקציונליות מתמקדות במאפיינים הלא-פונקציונליים של התוכנה, למשל: ביצועים, נוחות שימוש, יציבות, ואמינות.

התמקדות בבעיות ביצועים

בדיקות זיכרון משחקות תפקיד מכריע בסט הבדיקות הלא-פונקציונליות.

אחת הבדיקות החשובות במסגרת סט הבדיקות הלא-פונקציונליות היא בדיקת ניהול הזיכרון.
הסיבה לכך היא שבדיקות זיכרון הן כמו בדיקות תפקוד קוגניטיבי תקין של המוח: בדיקות שבהן מוודאים את היכולת לאחסן ולשלוף מידע בצורה אפקטיבית, באופן דומה ליכולת של המוח לנהל זיכרונות.

בדיקות הזיכרון מאפשרות לנו את היכולת לבחון את יכולת התוכנה לתת הקצאה ולשחרר הקצאה באופן יעיל למשאבי הזיכרון. כמו שאנו מארגנים את הזיכרונות שלנו בראש בצורה כזאת שתאפשר לנו לגשת בצורה מהירה ויעילה לזיכרונות. תחשבו על הבדיקות האלו כמו על בדיקות של מדען מוח שבודק את היכולת לשמור זיכרונות ולמחוק אותם, כל אלו מוודאים את יכולת התוכנה לתפקד בצורה חלקה ויעילה וללא עיכובים מיותרים או נפילות בביצועים. כמו שמערכת זיכרון תקינה חשובה וחיונית לבריאותנו, ככה ניהול זיכרון יעיל וחיוני בעולם התוכנה וקריטי לתפקודה התקין של התוכנה.

התעלמות מבדיקות זיכרון, עשויה לגרום לכך שתקלות חשובות מתגלות ב-Production ולא במהלך סבב הבדיקות. מדובר בתקלות קריטיות שיכולות להשפיע על ביצועי התוכנה, על חווית המשתמש ולגרום בסופו של דבר לקריסות.

חשיבות האופטימיזציה ותשומת לב רבה לפרטים הקטנים: Garbage Collector מוגבל ביכולות לזהות את כל סוגי דליפות הזיכרון
נאמר שאנו בודקים אפליקציית אנדרואיד עם Activity שיוצרת באופן דינמי קבצי Bitmap ל-ImageView. כאשר ה-Activity נסגר (למשל: כי משתמש ניווט מחוץ ל-Activity הזה), ה-Bitmap Reference לא משוחרר. בתרחיש הזה, שה-Activity משוחרר, ה-Bitmap Reference מוחזק על ידי ה-ImageView והוא לא משוחרר. ה-Garbage Collector עשוי לא לזהות את זה בתור דליפת זיכרון, היות שיש עדיין Reference שמחזיק את ה-Bitmap והוא באופן טכני ניתן להשגה. כתוצאה מזה, הזיכרון בשימוש על ידי ה-Bitmap עשוי לא להתפנות, זה יכול להוביל לדליפת זיכרון פוטנציאלית.

לֹעומת זאת, ה-Android Studio Memory Profiler יכול לזהות דליפת זיכרון מסוג זה היות שהוא יכול לזהות Instances שבהם ה-Object מוחזק שלא לצורך, אפילו כשיש להם Reference, ומזהה אותם בתור דליפת זיכרון פוטנציאלית.
אף על פי ש-Garbage Collector אמור לתת מענה לטיפול בזיכרון שלא בשימוש, ניהול זיכרון מדויק יותר נותר חיוני בשביל למנוע צווארי בקבוק. לכן, ביצוע של בדיקות זיכרון היא פרקטיקה מומלצת ואמצעי אקטיבי להבטחת יציבות המערכת וחווית משתמש טובה.

באמצעות ביצוע של בדיקות זיכרון, צוותי
QA יכולים להבטיח כי התוכנה שאותה הם בודקים עומדת בסטנדרטים גבוהים ופועלת בצורה חלקה ואיתנה.

בעוד כלים אחרים כמו LeakCanary זמינים ויכולים בהחלט לסייע בזיהוי דליפות זיכרון, במאמר זה נתמקד ב-Profiler ובשימוש שלו ב-Android Studio.

 Android Studio: כלי פיתוח שמאפשר גם בדיקות לניהול זיכרון המדגים את חשיבות בדיקות הזיכרון

בואו נצלול לפרקטיקה באמצעות Android Studio וכלי ה-Profiler. באמצעות Android Studio נדגים את ההשפעה והחשיבות הרבה של בדיקות זיכרון במהלך הפיתוח של תוכנה.

פתחו ב-Android Studio את הפרויקט עליו את עובדים -> בחרו בתפריט View -> בחרו ב-Tool Windows -> בחרו ב-Profiler.

בחרו Profiler session חדש באמצעות לחיצה על כפתור ה-+, כעת בחרו במכשיר המחובר שלכם ואת ה-package הרלוונטי אותו אתם רוצים לבדוק. נתמקד באופן ספציפי ב-Memory, בחרו ב-Tab של Memory שנמצא בתוך ה-Profiler.

 

לאחר שתפריט ה-Memory Profiler נטען, בצעו סט בדיקות והפעילו את אופציית ה-Memory Capture באמצעות לחיצה על כפתור Capture heap dump ואז על כפתור Record.

   הפעולה הזאת שומרת תמונת מצב נוכחית של ניצול זיכרון האפליקציה, בעזרת מידע זה ניתן לאבחן את הזיכרון שבשימוש ברמת פירוט מדויקת. פעולה זה עוזרת במיוחד לזיהוי אובייקטים או משתנים ספציפיים שגורמים לבעיות בזיכרון. 

בתרחיש שמודגם בצילום מסך הבא, הבדיקה עברה בהצלחה עם תוצאה של 0 דליפות מזוהות. במקרה הזה, הצלחנו לאשר את גמישות האפליקציה בניהול הזיכרון שלה.

 בניגוד לכך, הצילום מסך הבא חושף תוצאה שונה לגמרי אשר עשויה להתגלות במהלך הבדיקות. כאן מדובר בכשל של הבדיקה כאשר מספר דליפות זיכרון המזוהות שהתגלו הוא 5. במקרה הזה קיבלנו תוצאה שונה מזאת שציפינו לה, מה שמציף בעיה פוטנציאלית בניהול הזיכרון של האפליקציה.

 השונות בין התוצאות מחייבת בחינה מוקפדת. מידע שימושי ביותר הוא ה References-וה Fields-אשר מושפעים מהדליפות המזוהות. המידע הזה שימושי מאוד למפתחים ומאפשר זיהוי ותיקון מהיר יותר של התקלה הפוטנציאלית. חשוב מאוד לתעד את המידע הזה בדיווח באג מקיף. תקלות של דליפת זיכרון בדרך כלל נחשבות לחמורות ובדרך כלל מטופלות במהלך הפיתוח טרם התוכנה יוצאת לשוק.  

אילו סוגי בדיקות נבצע על מנת לאתר דליפת זיכרון?

שימוש בכלי לניטור זיכרון הוא טוב ויפה אבל בלי ביצוע תרחישי בדיקה מתאימים לא תהיה לו שום תועלת. חשוב להבין שאין כאן עשה ואל תעשה. אמליץ להתמקד בראש ובראשונה בתרחישי בדיקות נפוצים שאותן התוכנה אמורה לבצע (Sanity) זאת על מנת לשלול דליפת זיכרון בתרחישים בסיסיים. על מנת לנטר דליפות עמוקות יותר: אפשר לצלול לבדיקות עם יותר עומס על התוכנה, בדיקות של תרחישים שליליים יותר או בתפריטים יותר עמוקים בתוך התוכנה וגם בדיקות נסיגה (בהנחה והן רלוונטיות בשלב הזה של הפיתוח) עשויות להשלים מכלול מלא יותר לתוכנה בשלב הפיתוח. מניסיוני ניתן לנטר דליפות זיכרון במגוון רחב של תרחישים גם בסיסיים וגם עמוקים יותר. 

 

שיפור אמינות אפליקציות באמצעות בדיקת זיכרון ב-Android Studio

באמצעות שילוב בדיקת זיכרון בשלב הפיתוח עםAndroid Studio, צוותי ה-QA יכולים למצוא מראש אתגרים ותקלות אפשריות, אנשי QA יכולים לבדוק הרבה יותר Test Cases שונים ומגוונים שאנשי הפיתוח לא בהכרח פנויים לבדוק אותם (וגם לא בהכרח מתפקידם לבדוק אותם) ובכך לוודא שהאפליקציה מפותחת באיכות גבוהה, עובדת בצורה יעילה ומשרה אמינות. השימוש בבדיקות אלו התברר בתור כלי אפקטיבי, המאפשר לנו לזהות ולטפל בבעיות באופן יעיל. כיום בדיקות אלו באמצעות Android Studio הפכו לחלק חיוני מסט הבדיקות שאנו עורכים באופן קבוע. אני ממליץ לכם להשתמש בכלי הזה, כמו גם למצוא את הכלי הרלוונטי לסביבת הפיתוח שבה אתם עובדים בשביל לערוך בדיקות מתאימות.