Κατά τη σύγκριση του Racerx με άλλα εργαλεία δοκιμών ταυτόχρονα, ιδιαίτερα στο πλαίσιο των εφαρμογών MVVMCross, είναι απαραίτητο να κατανοήσουμε τα μοναδικά χαρακτηριστικά και τους περιορισμούς κάθε εργαλείου.
Racerx
** Το Racerx είναι ένα εργαλείο στατικής ανάλυσης ευαίσθητου σε ροή που έχει σχεδιαστεί για να ανιχνεύει ζητήματα ταυτόχρονα όπως οι αγώνες και τα αδιέξοδα. Ξεχωρίζει απαιτώντας ελάχιστο σχολιασμό του πηγαίου κώδικα, συνήθως χρειάζονται μόνο ένα μικρό τραπέζι που καθορίζει τα API που χρησιμοποιούνται για την απόκτηση και απελευθέρωση κλειδαριών. Αυτό μειώνει το βάρος του σχολιασμού μεγάλων συστημάτων, καθιστώντας το πιο αποτελεσματικό για τους προγραμματιστές που εργάζονται με σύνθετες εφαρμογές. Ο Racerx δημιουργεί ένα γράφημα ροής ελέγχου (CFG) από τον πηγαίο κώδικα, ο οποίος περιλαμβάνει πληροφορίες σχετικά με κλήσεις λειτουργιών, κοινή μνήμη και χρήση δείκτη. Στη συνέχεια χρησιμοποιεί αυτό το γράφημα για τον εντοπισμό πιθανών προβλημάτων ταυτόχρονης ανάλυσης του τρόπου με τον οποίο χρησιμοποιούνται οι κλειδαριές σε ολόκληρο τον κώδικα [1].
σύγκριση με το σκάκι
** Σκάκι, ένα άλλο εργαλείο δοκιμών ταυτόχρονα που αναπτύχθηκε από την Microsoft Research, χρησιμοποιεί ένα συνδυασμό ελέγχου μοντέλου και δυναμικής ανάλυσης. Σε αντίθεση με το Racerx, το σκάκι συστηματικά διερευνά τα χρονοδιαγράμματα για να ανιχνεύσει σφάλματα ταυτόχρονα όπως οι συνθήκες αγώνα, τα αδιέξοδα και η διαφθορά των δεδομένων. Το σκάκι παρέχει ένα πλήρως επαναλαμβανόμενο περιβάλλον εκτέλεσης, το οποίο είναι επωφελές για σκοπούς εντοπισμού σφαλμάτων. Ωστόσο, το σκάκι βασίζεται σε ισχυρισμούς προγραμματιστών για την επαλήθευση κατάστασης και δεν χειρίζεται συγχρονισμό μέσω αλληλένδετων λειτουργιών, οι οποίες μπορεί να περιορίσουν την εφαρμογή του σε ορισμένα σενάρια [1].
σύγκριση με άλλα εργαλεία
Στο πλαίσιο των εφαρμογών MVVMCROSS, οι οποίες είναι κατά κύριο λόγο διασταυρούμενες πλατφόρμες και χρησιμοποιούν το μοτίβο MVVM, η επιλογή των εργαλείων δοκιμών ταυτόχρονα μπορεί να επηρεαστεί από τις συγκεκριμένες ανάγκες της εφαρμογής. Για παράδειγμα, εάν η εφαρμογή περιλαμβάνει πολύπλοκα πράγματα ή ταυτόχρονες λειτουργίες, εργαλεία όπως το σκάκι ή το Racerx θα μπορούσαν να είναι ευεργετικά. Ωστόσο, το ίδιο το MVVMCross δεν παρέχει εγγενώς εργαλεία δοκιμών συνδρομής. Επικεντρώνεται στην παροχή ενός πλαισίου για την εξέλιξη των πλατφορμών χρησιμοποιώντας το μοτίβο MVVM [9] [10].
Σκέψεις για εφαρμογές mvvmcross
Κατά την ανάπτυξη εφαρμογών MVVMCROSS, η κύρια εστίαση είναι συχνά στην ανταλλαγή συμπεριφοράς και της επιχειρησιακής λογικής σε όλες τις πλατφόρμες. Ενώ το MVVMCROSS παρέχει χαρακτηριστικά όπως η ένεση εξάρτησης και τα πλαίσια plugin, δεν αντιμετωπίζει άμεσα τις δοκιμές ταυτόχρονης. Ως εκ τούτου, οι προγραμματιστές ενδέχεται να χρειαστεί να ενσωματώσουν εξωτερικά εργαλεία όπως ο Racerx ή το SCESS στη ροή εργασίας των δοκιμών τους για να διασφαλιστεί ότι οι ταυτόχρονες λειτουργίες εντός των εφαρμογών τους επικυρώθηκαν σωστά.
Συνοπτικά, ο Racerx είναι ένα ισχυρό εργαλείο για την ανίχνευση ζητημάτων ταυτόχρονης με ελάχιστο σχολιασμό κώδικα, καθιστώντας το κατάλληλο για μεγάλα και σύνθετα συστήματα. Ωστόσο, η δυνατότητα εφαρμογής του σε εφαρμογές MVVMCross θα εξαρτηθεί από τις συγκεκριμένες απαιτήσεις ταυτόχρονης εφαρμογής και ίσως χρειαστεί να χρησιμοποιηθεί παράλληλα με άλλα πλαίσια δοκιμών που είναι πιο άμεσα ενσωματωμένα στο οικοσύστημα MVVMCross.
Αναφορές:[1] https://learn.microsoft.com/en-us/archive/msdn-magazine/2008/june/tools-and-techniques-to-identify-concurrency-issues
[2] https://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison
[3] https://testsigma.com/blog/android-testing-tools/
[4] https://www.mvvmcross.com/documentation/fundamentals/testing
[5] https://www.functionize.com/automated-testing/cross-browser-testing-tools
[6] https://www.browserstack.com/guide/cross-platform-testing-tools
[7] https://stackoverflow.com/questions/17233922/mvvmcross-mvx-trace-usage
[8] https://stackoverflow.com/questions/25134716/should-i-choose-mvvmlight-or-mvmcross-on-a-new-project-simple-to-medium-comp
[9] https://github.com/mvvmcross/mvvmcross
[10] https://www.mvvmcross.com