<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Παραμετροποίηση VS.NET IDE</title><link>https://www.dotnetzone.gr:443/cs/forums/34/ShowForum.aspx</link><description>Δημιουργία plug-ins και custom components, designers, etc.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Code Validation?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/21907.aspx</link><pubDate>Sat, 09 Dec 2006 01:08:49 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:21907</guid><dc:creator>Πέτρος Αμοιρίδης</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/21907.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=34&amp;PostID=21907</wfw:commentRss><description>Αν μου επιτρέπετε να συμβάλλω και εγώ λίγο στη συζήτηση.&lt;br&gt;&lt;br&gt;Το unit testing είναι ένα εργαλείο στα χέρια μας που μπορούμε να χρησιμοποιήσουμε για να αυτοματοποιήσουμε όσο το δυνατόν καλύτερα τον έλεγχο του κώδικα της εφαρμογής μας. Λέω αυτοματοποιήσουμε, διότι με το πάτημα ενός κουμπιού, μπορούμε να εκτελέσουμε όλα τα unit tests που γράψαμε και δίπλα από το κάθε ένα να ανάψει ένα πράσινο ή ένα κόκκινο λαμπάκι. Το πράσινο σημαίνει ότι πέρασε το τεστ, το κόκκινο σημαίνει ότι δεν πέρασε. Αυτό χρησιμεύει ιδιαίτερα όταν αλλάζουμε κάτι στον κώδικά μας. Με το που τρέχουμε όλα τα unit tests, μπορούμε να δούμε κατευθείαν αν έχουμε "σπάσει" κάποια λειτουργικότητα.&lt;br&gt;&lt;br&gt;Όσο μεγαλύτερο κομμάτι της εφαρμογής μας καλύπτουμε με unit tests, τόσο καλύτερα ελέγχουμε αυτόματα εάν σπάει ο κώδικάς μας μετά από αλλαγές. Συνεπώς, το unit testing μπορούμε να το χρησιμοποιήσουμε είτε ολοκληρωτικά ή μερικώς. Αυτοί που το χρησιμοποιούν ολοκληρωτικά συνήθως ακολουθούν το λεγόμενο test driven programming.&lt;br&gt;&lt;br&gt;Το test driven programming λέει ότι πρώτα γράφεις το unit test το οποίο αποτυγχάνει (εφόσον δεν υπάρχει ακόμα ο πραγματικός κώδικας) και μετά προσπαθείς να γράψεις τον κώδικα στην εφαρμογή σου μέχρι το λαμπάκι δίπλα στο τεστ να ανάψει πράσινο (έχει περισσότερες λεπτομέρειες φυσικά το πράγμα, αλλά η βασική ιδέα είναι αυτή). Εγώ μέχρι τώρα δεν κατάφερα να το κάνω αυτό. Αυτό που κάνω συνήθως είναι να χρησιμοποιώ unit tests μόνο σε πολύπλοκο κώδικα ώστε να αποδείξω ότι λειτουργεί με εύκολο τρόπο.&lt;br&gt;&lt;br&gt;Ένα υπεραπλουστευμένο παράδειγμα test driven programming είναι το παρακάτω:&lt;br&gt;&lt;br&gt;Έστω ότι θέλουμε να γράψουμε μια method που να παίρνει δύο αριθμούς και να επιστρέφει το άθροισμά τους. Πρώτα γράφουμε το τεστ:&lt;br&gt;&lt;br&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;[Test]&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;void&lt;/span&gt; TestAddition()&lt;br /&gt;{&lt;br /&gt;  &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;int&lt;/span&gt; result &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; Add(1,1);&lt;br /&gt;  Assert.AreEqual(2, result);&lt;br /&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;Το παραπάνω δε κάνει compile γιατί δεν έχουμε γράψει την Add. Οπότε την γράφουμε πρώτα:&lt;br&gt;&lt;br&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;int&lt;/span&gt; Add(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;int&lt;/span&gt; firstNumber, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;int&lt;/span&gt; secondNumber)&lt;br /&gt;{&lt;br /&gt;  &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;return&lt;/span&gt; 0;&lt;br /&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;Αν τρέξουμε πρώτα το Τεστ, θα δούμε ότι είναι κόκκινο. Αν συμπληρώσουμε τώρα το σωστό κώδικα στην Add:&lt;br&gt;&lt;br&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;int&lt;/span&gt; Add(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;int&lt;/span&gt; firstNumber, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;int&lt;/span&gt; secondNumber)&lt;br /&gt;{&lt;br /&gt;  &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;return&lt;/span&gt; firstNumber &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;+&lt;/span&gt; secondNumber;&lt;br /&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;
Τώρα το τεστ γίνεται πράσινο.&lt;br&gt;&lt;br&gt;Ωχ... πολλά έγραψα... σόρρυ παιδιά. :-)&lt;br&gt;&lt;br&gt;Πέτρος&lt;br&gt;</description></item><item><title>Απ: Code Validation?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/8405.aspx</link><pubDate>Thu, 05 Jan 2006 21:16:22 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:8405</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/8405.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=34&amp;PostID=8405</wfw:commentRss><description>Μάλλον έχεις μπλέξει το unit testing με άλλες μορφές testing. Όταν λές ότι σπας τον κώδικα σου σε μικρά κομμάτια που τα ελέγχεις εξονυχιστικά, κάνεις ένα από τα βήματα του unit testing. Από την άλλη, ο έλεγχος σε πραγματικές συνθήκες, ελέγχει άλλα πράγματα, όχι το κάθε μικρό κομμάτι, και κατά κανόνα ελέγχει μόνο τις πιο συνηθισμένες διαδικασίες στην εφαρμογή.&lt;br&gt;&lt;br&gt;Επιπλέον, αν κάποιος δεν γράψει τα τεστ που ελέγχουν κάποιες λάθος καταστάσεις, πως περιμένεις να τις βρεις? Μπορεί κάποιοι να λένε ότι κάνουν unit testing αλλά στην πραγματικότητα να έχουν γράψει μερικά ελλειπή test scripts κατόπιν εορτής. Αυτό δεν λέγεται unit testing. Ούτε θα σου πιάσει το unit testing προβλήματα συνεργασίας μεταξύ των κομματιών της εφαρμογής. Όπως δεν θα πιάσει το user testing αυτά τα ανεξήγητα runtime exceptions, απλά γιατί σε πραγματική χρήση ο χρήστης θα πάει να κάνει αυτό που δεν είχες ελέγξει στο beta testing.&lt;br&gt;&lt;br&gt;Εδώ συγκρίνεις ανόμοια πράγματα. Δεν ελέγχει κανείς τη συμπεριφορά μιας βαλβίδας για κινητήρα αυτοκινήτου φτιάχνοντας ολόκληρο το αυτοκίνητο και βγάζοντας το για βόλτα. Ούτε ελέγχονται τα υποσυστήματα ενός επεξεργαστή φτιάχντοντας τον επεξεργαστή από το μηδέν και ελέγχοντας τί κάνει στο τέλος. Αν γινόταν αυτό, η κατασκευή ενός νέου αυτοκινήτου ή ενός επεξεργαστή θα χρειαζόταν δεκαετίες. Από την άλλη, δεν περιμένεις ποτέ ότι αν δουλεύουν όλα τα κομμάτια σύμφωνα με τις προδιαγραφές τους, θα δουλεύει και το αυτοκίνητο ή ο επεξεργαστής σωστά. Φυσικά και θα ελέγξεις ότι τα εξαρτήματα δουλεύουν καλά μεταξύ τους, και φυσικά και θα ελέγξεις και το τελικό αυτοκίνητο ή επεξεργαστή ότι δουλεύει σωστά. Αν όμως περιμένεις να ελέγξεις το αυτοκίνητο για να καταλάβεις ότι η βαλβίδα φθείρεται εύκολα ... ή ότι τα τρανζίστορ που διάλεξες δεν δουλεύουν στις συχνότητες που θέλεις ... είναι πολύ αργά.&lt;br&gt;&lt;br&gt;Άλλο το unit testing, άλλο το integration testing, άλλο το feature testing, άλλο το user testing. Το καθένα ελέγχει διαφορετικά πράγματα, γίνεται σε διαφορετικές φάσεις της ανάπτυξης μιας εφαρμογής, από διαφορετικά άτομα και ανακαλύπτει διαφορετικά λάθη. Το καθένα από αυτά δεν υποκαθιστά τα άλλα.&lt;br&gt;&lt;br&gt;Και οι ελληνικές εφαρμογές ERP είναι "διάσημες" για τα προβλήματα τους. Δεν μπορούν να χρησιμοποιηθούν σαν παράδειγμα.</description></item><item><title>Απ: Code Validation?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/8404.aspx</link><pubDate>Thu, 05 Jan 2006 20:58:22 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:8404</guid><dc:creator>Χρήστος Γεωργακόπουλος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/8404.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=34&amp;PostID=8404</wfw:commentRss><description>&lt;P&gt;Όταν γράφεις unit tests, προσπαθείς να φανταστείς όλα τα στραβά που μπορεί να εμφανιστούν και να τα κάνεις handling. Αυτό δεν σημαίνει σε καμία περίπτωση ότι θα τα σκεφτείς όλα. Είναι απλά μια καλή μέθοδος για να πιάσεις τουλάχιστον τις πιο σημαντικές περιπτώσεις, γιατί σε βοηθάει να δεις τα πράγματα από μια άλλη οπτική γωνία από αυτή που γράφεις τον κυρίως κώδικα.&lt;/P&gt;
&lt;P&gt;Για όλες τις άλλες περιπτώσεις που δεν μπορείς να σκεφτείς ούτε όταν γράφεις τον κυρίως κώδικα, ούτε όταν γράφεις τα unit test, κάνεις error handling με τέτοιο τρόπο ώστε να ενημερωθείς για το σφάλμα που παρουσιάστηκε στο run-time και να φροντίσεις να το διορθώσεις εκ των υστέρων. Μιά τέτοια μορφή error handling είναι και τα asserts που αναφέρθηκαν.&lt;/P&gt;
&lt;P&gt;Όπως λέει και η θεωρία της τεχνολογίας λογισμικού, η απόλυτη τεκμηρίωση του κώδικα είναι θεωρητικά εφικτή, είναι όμως τόσο περίπλοκη που&amp;nbsp;είναι πρακτικά αδύνατο να υλοποιηθεί για την πλειοψηφία των σημερινών εφαρμογών. Γι' αυτό το λόγο δεχόμαστε την παραπάνω διαδικασία και χρησιμοποιούμε unit tests για να πιάσουμε τα "χοντρά-χοντρά" και σωστό error reporting για να πιάσουμε και τα άλλα που ξέρουμε ότι υπάρχουν αλλά δεν μπορούμε να τα σκεφτούμε από πριν.&lt;/P&gt;</description></item><item><title>Απ: Code Validation?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/8402.aspx</link><pubDate>Thu, 05 Jan 2006 20:35:42 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:8402</guid><dc:creator>Frontier</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/8402.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=34&amp;PostID=8402</wfw:commentRss><description>Και για να μην παρεξηγηθώ: δεν αμφισβητώ αυτά που λες, αμφισβητώ το ότι το Unit Testing ελέγχει τα πάντα. Η απόδειξη είναι ότι παρ'όλο που χρησιμοποιείται ευρέως (ακόμα και σε ελληνικές εμπορικές εφαρμογές), πάλι συμβαίνουν runtime exceptions που οδηγούν σε τερματισμό της εφαρμογής.&lt;br&gt;
&lt;br&gt;Με τη λογική που αναφέρεις, το unit testing, εφ'όσον έλεγξε τα πάντα (τι πρέπει να δεχθεί μια τάξη, τι να επιστρέψει κ.λπ) σε πραγματικές συνθήκες εκτέλεσης κώδικα, δεν θα έπρεπε να "εντοπίζει" αυτά τα προβλήματα πριν εμφανισθούν; Ξέρω τουλάχιστον δύο περιπτώσεις ελληνικών εφαρμογών ERP που ενώ έχουν υποστεί εκτεταμένο unit-testing, εξακολουθούν να εμφανίζουν απροσδιόριστα σφάλματα κατά την εκτέλεσή τους.
Γιαυτό επιμένω ότι καλό μεν το unit-testing, αλλά επ'ουδενί αντικαθιστά τα debug builds και την χρήση τους από testers σε πραγματικές συνθήκες.&lt;br&gt;
&lt;br&gt;Εκεί που θέλω να καταλήξω είναι ότι καλά μεν όλα αυτά, αλλά αν δεν γράφει ο άλλος σωστό κώδικα... έχασε! Και δυστυχώς οι περισσότεροι προγραμματιστές σήμερα, λόγω της άκρατης χρησιμοποίησης των ευκολιών που τους διατίθενται (βιβλιοθήκες, frameworks κλπ) δεν ξέρουν τι γράφουν, τι χρησιμοποιούν (dependencies), εξ'ου και τα τόσα προβλήματα.
&lt;br&gt;
&lt;br&gt;Σταματώ εδώ γιατί νομίζω ότι βγήκαμε αρκετά off-topic :)</description></item><item><title>Απ: Code Validation?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/8401.aspx</link><pubDate>Thu, 05 Jan 2006 20:23:13 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:8401</guid><dc:creator>Frontier</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/8401.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=34&amp;PostID=8401</wfw:commentRss><description>Ωραία όλα αυτά, αλλά αφού χρησιμοποιούνται ευρέως (σε μεγάλες εφαρμογές), γιατί πάλι  συμβαίνουν run-time exceptions;&lt;br&gt;&lt;br&gt;Μπορεί να είναι καλό το unit testing, αλλά δεν δέχομαι ότι πιάνει τα πάντα ή ελέγχει τα πάντα, τουλάχιστον αυτό δεν έχει αποδειχθεί ακόμα.&lt;br&gt;&lt;br&gt;Για τις εφαρμογές μου, φροντίζω να τις "σπάω" σε απλά και μικρά κομμάτια, ώστε να μπορώ να ελέγχω το κάθε ένα εξονυχιστικά. Το unit testing πρακτικά δεν μου έχει δώσει κάποιο όφελος προς το παρόν, μιας που π.χ αν χρησιμοποιείς μια strong-type language (και με overloading) "κόβεις" ό,τι δεν σου αρέσει, αποφεύγοντας το bloat. Εκεί που χρειάζεται περισσότερο το unit testing είναι σε typeless γλώσσες, όπου τα πάντα μπορούν να συμβούν.&lt;br&gt;&lt;br&gt;Άποψή μου τα παραπάνω, δεν είναι απαραίτητα αποδεκτά απ'όλους.</description></item><item><title>Απ: Code Validation?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/8397.aspx</link><pubDate>Thu, 05 Jan 2006 19:45:35 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:8397</guid><dc:creator>Χρήστος Γεωργακόπουλος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/8397.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=34&amp;PostID=8397</wfw:commentRss><description>&lt;P&gt;Πσσσσσ....., Παναγιώτη έγραψες.... άψογο παράδειγμα....&lt;/P&gt;</description></item><item><title>Απ: Code Validation?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/8384.aspx</link><pubDate>Thu, 05 Jan 2006 01:48:35 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:8384</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/8384.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=34&amp;PostID=8384</wfw:commentRss><description>Τα xUnit frameworks μπορεί να μην υπήρχαν, αλλά το Unit testing υπήρχε από το ... 70 και πριν. Η βασική ιδέα προέρχεται από τα ηλεκτρονικά όπου κάθε εξάρτημα ελέγχεται στέλνοντας κανονικά αλλά και περίεργα σήματα στους ακροδέκτες του και ελέγχοντας τα σήματα στις εξόδους. Αυτή η τεχνική χρησιμοποιήθηκε από την αρχή σχεδόν και στον προγραμματισμό. Αναφέρω το 1970 απλά και μόνο γιατί το πρώτο παράδειγμα που μου έρχεται στο μυαλό είναι μια ιστορία του Fred Brooks (μπορεί να κάνω και λάθος) που περιέγραφε ένα προγραμματιστή compiler για ένα mainframe, ο οποίος έφτιαχνε μικρά τεστάκια για κάθε νέα λειτουργία που δημιουργούσε. Μιλάμε για γλώσσες πριν καν εμφανιστεί η C!&lt;br&gt;&lt;br&gt;Αν το unit testing αντιστοιχεί στον έλεγχο της απόκρισης ενός εξαρτήματος σε διάφορα σήματα, τα asserts είναι αντίστοιχα με τις ασφάλεις και τα ρελέ. Χρησιμοποιούνται για να "σκάνε" όταν περάσει κάποιο απρόσμενο ή επικίνδυνο σήμα. Και δεν τις αφαιρείς από το τελικό προϊόν. &lt;br&gt;&lt;br&gt;Όπως οι ασφάλειες δεν αντικαθιστούν τον έλεγχο απόκρισης, έτσι και τα assert δεν αντικαθιστούν το unit testing. Τα asserts θα εξασφαλίσουν ότι ο κώδικας θα "σκάσει" σε κάποιες συγκεκριμμένες συνθήκες, αλλά δεν ελέγχουν τί συμβαίνει σε όλες τις άλλες περιπτώσεις. Αν έχεις μια μέθοδο που υπολογίζει, πχ. δόσεις δανείου, ένα assert θα εμποδίσει την εισαγωγή αρνητικών τιμών αλλά δεν μπορεί να ελέγξει την ορθότητα του αποτελέσματος για θετικές τιμές. Αυτό μόνο με Unit testing μπορεί να γίνει. &lt;br&gt;&lt;br&gt;Το γεγονός ότι τα unit-testing frameworks έχουν μεθόδους με το όνομα assert ή verify δεν σημαίνει ότι βασίζονται στη λογική των assertions. Τα assertions βρίσκονται μέσα στον κώδικα, όπως οι ασφάλειες μέσα σε μία συσκευή. Μια μέθοδος Test.Assert δεν έχει σχέση με τον κώδικα, απλά συγκρίνει τα πραγματικά με τα επιθυμητά αποτελέσματα και μαρκάρει το κάθε τεστ σαν επιτυχία-αποτυχία. Είναι σαν τον ακροδέκτη ενός παλμογράφου ή ενός πολύμετρου που τον ακουμπάς σε ένα σημείο του κυκλώματος για να δεις αν το σήμα που παίρνεις είναι αυτό που περίμενες.&lt;br&gt;&lt;br&gt;Τέλος, με το unit-testing βρίσκεις τελείως άλλα και διαφορετικά προβλήματα απ' ότι οι χρήστες. Για την ακρίβεια, όταν κάποιος χρήστης τρέχει την εφαρμογή και ελέγχει τιμές δεν κάνει καν unit-testing. Αυτό που περιγράφεις ονομάζεται feature testing. Ο χρήστης θα βρει τα ποιό συνηθισμένα προβλήματα και κυρίως αυτά που έχουν να κάνουν με τα χαρακτηριστικά που ξέρει καλύτερα. To unit-testing από την άλλη, ελέγχει κάθε μέθοδο και κλάση για να εξασφαλίσει ότι γυρίζει τα αναμενόμενα αποτελέσματα για οποιεσδήποτε παραμέτρους εισόδου. Ο χρήστης δεν μπορεί να τρέξει όλα τα τεστ κάθε φορά που θα του δώσεις ένα πρόγραμμα, ενός τα unit-tests εκτελούνται πάντα, όλα και αυτόματα. Δεν το εκτελεί ένας συγκεκριμμένος άνθρωπος, ούτε βασίζεται σε κάποια λογική.</description></item><item><title>Απ: Code Validation?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/8379.aspx</link><pubDate>Wed, 04 Jan 2006 21:40:41 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:8379</guid><dc:creator>Frontier</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/8379.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=34&amp;PostID=8379</wfw:commentRss><description>Ο όρος "παλαιότερα" αναφερόταν στο ότι αυτά "ήρθαν" με αντικειμενοστρεφείς γλώσσες ευρείας χρήσης, όπως η C++. Unit testing το 1992 δεν υπήρχε, αυτό στο υπογράφω, τουλάχιστον με την έννοια που έχει τώρα.&lt;br&gt;&lt;br&gt;Οπωσδήποτε μια μέθοδος μόνο δεν είναι αρκετή, απλά εγώ χρησιμοποιώ asserts περισσότερο γιατί χρησιμοποιώ μια εφαρμογή με debug builds (εσωτερικά πάντα και σε επιλεγμένους χρήστες), μιας που οι χρήστες συνήθως βρίσκουν περισσότερα πιθανά προβλήματα απ'ότι o unit tester (το unit testing έχει κάποια λογικοί, οι χρήστες πολλές φορές όχι) :)&lt;br&gt;&lt;br&gt;Ουσιαστικά μπορείς να υλοποιήσεις unit testing με asserts, αφού σε αυτό στηρίζεται η όλη λογική ύπαρξής του. Εκεί που δέχομαι ότι το unit testing είναι περισσότερο απαραίτητο είναι σε γλώσσες προγραμματισμού όπως VB και C# που δεν έχουν strong typing όπως η C++.</description></item><item><title>Απ: Code Validation?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/8375.aspx</link><pubDate>Wed, 04 Jan 2006 20:53:37 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:8375</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/8375.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=34&amp;PostID=8375</wfw:commentRss><description>&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/cs/Themes/default/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;Frontier wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" class="txt4"&gt;Άλλος ένας απλός τρόπος είναι με debug builds και με χρήση ASSERT όπου χρειάζεται, ώστε να ξέρεις τι ακριβώς χτύπησε. &lt;BR&gt;&lt;BR&gt;Η μέθοδος αυτή είναι πιο "παλιά" από το unit testing, αλλά και πιο απλή στην εφαρμογή της.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Τα asserts δεν είναι παλιότερα ή απλούστερα από το unit testing, αλλά έχουν διαφορετική χρήση. &lt;BR&gt;Το unit testing χρησιμοποιείται για να ελέγξει κανείς πως συμπεριφέρεται ένα κομμάτι κώδικα (μια μέθοδος πχ.) όταν καλείται με διαφορετικούς τρόπους (π.χ. μεταβλητές εκτός ορίων, περίεργες αρχικές καταστάσεις). Για να πετύχει κανείς το ίδιο πράγμα με asserts θα πρέπει να γεμίσει τον κώδικα του με πολλά διαφορετικά asserts, τα οποία μπορεί και να μην εκτελεστούν ποτέ. &lt;BR&gt;Τα asserts από την άλλη ρίχνουν exceptions όταν ανακαλύψουν ότι απέτυχε ένας έλεγχος, πχ. αν μια τιμή είναι εκτός ορίων. Τα asserts είναι χρήσιμα και στα κανονικά builds, όχι μόνο στα debug builds, καθώς τα πιο περίεργα λάθη εμφανίζονται όταν η εφαρμογή τρέχει κανονικά. &lt;/P&gt;
&lt;P&gt;Καμμία από τις δύο λύσεις δεν αρκεί από μόνη της. Τα asserts κάνουν πολύ πιο εύκολο τον εντοπισμό κάποιων λαθών, κυρίως στην τελική έκδοση της εφαρμογής. Μόνο το unit testing όμως ελέγχει ότι μία μέθοδος δουλεύει σωστά με διαφορετικές παραμέτρους.&lt;/P&gt;</description></item><item><title>Απ: Code Validation?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/8361.aspx</link><pubDate>Wed, 04 Jan 2006 19:28:53 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:8361</guid><dc:creator>Frontier</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/8361.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=34&amp;PostID=8361</wfw:commentRss><description>Άλλος ένας απλός τρόπος είναι με debug builds και με χρήση ASSERT όπου χρειάζεται, ώστε να ξέρεις τι ακριβώς χτύπησε.&lt;br&gt;&lt;br&gt;Η μέθοδος αυτή είναι πιο "παλιά" από το unit testing, αλλά και πιο απλή στην εφαρμογή της.</description></item><item><title>Απ: Code Validation?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/5727.aspx</link><pubDate>Mon, 26 Sep 2005 04:23:27 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:5727</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/5727.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=34&amp;PostID=5727</wfw:commentRss><description>Για validation μπορείς να χρησιμοποιήσεις το &lt;A href="http://www.gotdotnet.com/team/fxcop"&gt;FxCop&lt;/A&gt;, το οποίο ουσιαστικά είναι ένα static code analyzer. Έχει πολλούς κανόνες και μπορείς να ορίσεις και άλλους δικούς σου.</description></item><item><title>Απ: Code Validation?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/5712.aspx</link><pubDate>Mon, 26 Sep 2005 00:49:18 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:5712</guid><dc:creator>Χρήστος Γεωργακόπουλος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/5712.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=34&amp;PostID=5712</wfw:commentRss><description>Έχει ενσωματωμένο και δεν χρειάζεται το NUnit. Υπόψη, το NUnit δεν κάνει μαγικά από μόνο του, χρειαζεται να γράψεις εσύ 2-3 γραμμές κώδικα για κάθε ρουτίνα που θέλεις να ελεγξεις, ώστε να του πεις πως αρχικοποιούνται τα πράγματα και τι παραμέτρους να περάσει στη ρουτίνα. Αυτό είναι μια σχετικά εύκολη αλλά πολύ βαρετή δουλιά, αλλά τα αποτελέσματα είναι καθοριστικά για το development που κάνεις.</description></item><item><title>Απ: Code Validation?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/5711.aspx</link><pubDate>Mon, 26 Sep 2005 00:34:05 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:5711</guid><dc:creator>pontifikas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/5711.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=34&amp;PostID=5711</wfw:commentRss><description>Ώστε αυτό είναι το unit testing. Το VS2005 Δεν κάνει Unit Testing?&lt;br&gt;</description></item><item><title>Απ: Code Validation?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/5710.aspx</link><pubDate>Sun, 25 Sep 2005 23:43:13 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:5710</guid><dc:creator>Χρήστος Γεωργακόπουλος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/5710.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=34&amp;PostID=5710</wfw:commentRss><description>Unit testing ίσως; Ψάξε για το NUnit...</description></item><item><title>Code Validation?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/5709.aspx</link><pubDate>Sun, 25 Sep 2005 23:36:07 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:5709</guid><dc:creator>pontifikas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/5709.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=34&amp;PostID=5709</wfw:commentRss><description>Ας πούμε γράφω την εξής loopιά&lt;br&gt;
&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;int&lt;/span&gt; [] foo &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;int&lt;/span&gt;[4];&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;int&lt;/span&gt; foobar &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; 0;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;for&lt;/span&gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;int&lt;/span&gt; i &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; 0  ; i &amp;lt;=5 ; ++i)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    foobar+=  foo [ i ];&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;br&gt;
Αυτό το πράγμα όπως βλέπετε θα δημιουργήσει είναι ένα index ot of range
exception. Υπάρχει τρόπος μέσω του VS Να κάνω έλεγχο του Loop (και
γενικά του κώδικα) ώστε να καταλάβω ότι εκεί θα βαρέσει.&lt;br&gt;
&lt;br&gt;
Γενικά υπάρχει δυνατότητα προσομοίωσης του προγράμματος και εξάλλειψης
όλων των πιθανών σφαλμάτων πρίν το τρέξω κανονικά?(Μην πεί κανείς "Με
το μάτι"&lt;img src="/cs/emoticons/emotion-4.gif" alt="Stick out tongue [:P]" /&gt; ) &lt;br&gt;
&lt;br&gt;</description></item></channel></rss>