<?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>Design &amp; Architecture</title><link>https://www.dotnetzone.gr:443/cs/forums/16/ShowForum.aspx</link><description>Θέματα αρχιτεκτονικής και σχεδιασμού εφαρμογών (design patterns, object orientation, κ.α.)</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Re: Test Driven Development</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/1844.aspx</link><pubDate>Thu, 05 May 2005 23:26:32 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:1844</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/1844.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=1844</wfw:commentRss><description>Εκανα ένα γρήγορο test drive στο mbUnit επειδή έτυχε να έχω ένα project που να "κολλάει" με τη χρήση του για ορισμένα γρήγορα test.&lt;br /&gt;&lt;br /&gt;Δυστυχώς (και μετά από κουβέντα και με τον pkanavos) διαπίστωσα οτι το Rollback feature "παίζει" μόνο σε win2003. Που σημαίνει οτι οποιος πτωχός έχει 2000 server (οπως εγώ στη δουλειά) δεν έχει τη δυνατότητα να το αξιοποιήσει.&lt;br /&gt;&lt;br /&gt;Παντως σαν feature είναι από πολύ ως πάαααρα πολύ χρησιμο! Να μια αιτία να γυρίσω γρήγορα στα 2003! &lt;img src="/forums/emoticons/emotion-1.gif" alt="Smile" /&gt; Ειναι γενικά πολύ πληρέστερο από το nUnit, και το θέλω, το θέλω, το θέλω! &lt;br /&gt;&lt;br /&gt;&lt;em&gt;(Ναι γιατρε, θα απεξαρτηθώ...&lt;img src="/forums/emoticons/emotion-1.gif" alt="Smile" /&gt; )&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;Εμμένω πάντως στην αρχική μου άποψη ως προς το test-driven development.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</description></item><item><title>Re: Test Driven Development</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/1841.aspx</link><pubDate>Thu, 05 May 2005 18:09:00 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:1841</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/1841.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=1841</wfw:commentRss><description>&lt;p&gt;Χρησιμοποιώ το MbUnit τον τελευταίο καιρό και το βρίσκω ΚΑ-ΤΑ-ΤΑ-ΠΛΗΚΤΙΚΟ!&lt;br /&gt;Το MbUnit χρησιμοποιεί custom attributes για να μαρκάρει τις κλάσεις και τις μεθόδους που χρησιμοποιούνται για test, καθώς και τί είδους τεστ είναι. Ένα από αυτά είναι και ... το &lt;font color="#ff0000"&gt;&lt;strong&gt;[Rollback] &lt;/strong&gt;&lt;/font&gt;&lt;font color="#000000"&gt;το οποίο μαρκάρει μία μέθοδο και κάνει rollback ότι αλλαγές έχει κάνει, σε οποιαδήποτε βάση! Αυτό το καταφέρνει επειδή το RollbackAttribute χρησιμοποιεί Enterprise Services για να ξεκινήσει ένα transaction πριν εκτελεστεί η μέθοδος και κάνει rollback όταν τελειώσει. Υπάρχουν επίσης και το [SqlRestoreInfo] και [RestoreDatabaseFirst] που χρησιμοποιούνται σε συνδιασμό για να κάνουν backup την αρχική μορφή μιας βάσης και να την κάνουν restore πριν τρέξει κάθε test.&lt;br /&gt;&lt;br /&gt;To MbUnit, πακέτο με addin για το Visual Studio θα το βρεις στο &lt;a target="_blank" title="http://www.testdriven.net/" href="http://www.testdriven.net/"&gt;http://www.testdriven.net/&lt;/a&gt;&amp;nbsp;. Source και άρθρα θα βρεις στο &lt;a target="_blank" title="http://mbunit.tigris.org" href="http://mbunit.tigris.org"&gt;http://mbunit.tigris.org&lt;/a&gt;&amp;nbsp;. Υπάρχει και &lt;a target="_blank" title="http://blog.dotnetwiki.org/archive/2004/07/20/634.aspx" href="http://blog.dotnetwiki.org/archive/2004/07/20/634.aspx"&gt;ένα άρθρο που περιγράφει το [Rollback]&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Το παρακάτω (χοντροκομμένο) παράδειγμα δείχνει πως μπορείς να χρησιμοποιήσεις το [Rollback] και την κλάση DataAssert για να εκτελέσεις test στη βάση και να συγκρίνεις τα αποτελέσματα:&lt;br /&gt;&lt;font size="3"&gt;&lt;/p&gt;&lt;pre class="source"&gt;&lt;table border="0" cellspacing="0" width="100%"&gt;&lt;tr&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td bgcolor="lightgrey" width="15"&gt;&lt;/td&gt;&lt;td bgcolor="lightgrey"&gt;&lt;br&gt;&lt;font face="Lucida Console, Courier" size="2"&gt;&lt;font color="#0000ff" size="3"&gt;&lt;p&gt;using&lt;/font&gt;&lt;font size="3"&gt; System;&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="3"&gt;&lt;p&gt;using&lt;/font&gt;&lt;font size="3"&gt; System.Data;&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="3"&gt;&lt;p&gt;using&lt;/font&gt;&lt;font size="3"&gt; System.Data.SqlClient;&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="3"&gt;&lt;p&gt;using&lt;/font&gt;&lt;font size="3"&gt; MbUnit.Core.Framework;&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="3"&gt;&lt;p&gt;using&lt;/font&gt;&lt;font size="3"&gt; MbUnit.Framework;&lt;br/&gt;using MyRealNamespace;&lt;br/&gt;&lt;font color="#0000ff" size="3"&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt; &lt;br/&gt;namespace&lt;/font&gt;&lt;font size="3"&gt; MyTestNameSpace&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;/font&gt;&lt;font size="3"&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[TestFixture]&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&lt;/font&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="3"&gt;class&lt;/font&gt;&lt;font size="3"&gt; MyTests&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;&lt;/font&gt;&lt;font size="3"&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Test]&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[RollBack]&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&lt;/font&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="3"&gt;void&lt;/font&gt;&lt;font size="3"&gt; ASimpleTest()&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataSet expectedSet=LoadMyExpectedSet();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MyRealClass realObject=new MyRealClass();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataSet actualSet=realObject.LoadCustomers();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataAssert.AreDataEqual(expectedSet,actualSet);&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;realObject.DeleteAllCustomers();&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Assert.AreEqual(0,realObjec.CustomerCount);&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;&lt;br/&gt;}&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;&lt;/font&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/pre&gt;&lt;/font&gt;&lt;/font&gt;</description></item><item><title>Re: Test Driven Development</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/1840.aspx</link><pubDate>Thu, 05 May 2005 17:59:16 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:1840</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/1840.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=1840</wfw:commentRss><description>&lt;p&gt;&lt;font style="BACKGROUND-COLOR: #efefef"&gt;Γενικά και χωρίς να ισχυρίζομαι οτι γνωρίζω πολλά επί του θέματος, εκτιμώ οτι η γενική ιδέα είναι: "Γράψε πρώτα τα τεστ και μετά τον κώδικα που κάνει τα τεστ να πετυχαίνουν".&lt;br /&gt;&lt;br /&gt;Σε καταστάσεις οπου υπάρχει σωστή ανάλυση και σχεδίαση του λογισμικού, και, ακόμα περισσότερο, παγιωμένη αρχιτεκτονική χωρίς "ανακαλύψεις" της τελευταίας στιγμής, πιστεύω οτι όχι απλά βοηθά την ανάπτυξη, την εκτοξεύει. &lt;br /&gt;&lt;br /&gt;Δυστυχώς όμως, εδώ, σε αυτή τη χώρα (και οχι μόνο, υποψιάζομαι), οπου ΔΕΝ υπάρχει συνήθως κανενός είδους ανάλυση, αρκετοί οίκοι λογισμικού ξεκινούν με τον κώδικα "και οπου βγει", οι προδιαγραφές αλλάζουν on the fly στη μέση του project, και το παραδοτέο πιέζεται από υπερβολικά μικρούς χρόνους γιατί κάποιος manager αποφάσισε σε συννενόηση με κάποιον πελάτη που τον πιέζει ο δικός του πελάτης οτι έτσι πρέπει να γίνει (χωρίς να έχει γνώση της προόδου του έργου), εννοιες όπως test-driven development που απαιτούν χρόνο και σωστή οργάνωση πάνε περίπατο.&lt;br /&gt;&lt;br /&gt;Προσωπικά δοκίμασα το nUnit κάνοντας ένα ψιλο-unit testing μια φορά, όταν το project ήταν "παρθένο" και δεν είχα άγχος. Με βοήθησε πολύ να γράψω πρωτα τα tests τα οποία επαληθεύονταν από (σχεδιασμένο εκ των προτέρων) κώδικα. Οταν όμως οι απαιτήσεις αλλαξαν και οι προδιαγραφές άρχισαν να μεταβάλλονται γιατί υπήρχαν διαφοροποιήσεις των απαιτησεων του πελάτη, τα πράγματα δυσκόλεψαν. Ο χρόνος ήταν περιορισμένος και δεν μπορούσα να τον αναλωσω σε tests τα οποία μπορεί να έβγαιναν obsolete από τη μια μέρα στην άλλη.&lt;br /&gt;&lt;br /&gt;Αρα λοιπον, προσωπική μου άποψη είναι οτι αν χρησιμοποιείς ένα σωστό και παγιωμένο domain model, έχεις σχεδιάσει πράγματα σε κάτι πριν αρχίσεις να γράφεις κώδικα (π.χ. UML diagrams, use cases κλπ) και έχεις σαφή εικόνα της αρχιτεκτονικής που θα χρησιμοποιήσεις σε διάφορα επίπεδα (π.χ. χρησιμοποιούμε DAAB και log4net, παει τελείωσε) τότε εχει νόημα. Αλλιώς....φοβάμαι πολύ.&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;</description></item><item><title>Test Driven Development</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/1838.aspx</link><pubDate>Thu, 05 May 2005 17:37:35 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:1838</guid><dc:creator>Panagiotis Kontopoulos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/1838.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=1838</wfw:commentRss><description>&lt;font size="2"&gt;Τον τελευταίο καιρό διάβασα 1-2 βιβλία για TDD και πιστεύω ότι έχει να προσφέρει πολλά&amp;nbsp;σε όλους όσους ασχολούνται με το development. &lt;br /&gt;&lt;br /&gt;Το πρόβλημα μου όμως είναι ότι&amp;nbsp;τα παραδείγματα που αναφέρονται σε αυτά τα βιβλία ασχολούνται κυρίως με αλγόριθμους που επεξεργάζονται δεδομένα στη μνήμη ή εκτελούν κάποιες μαθηματικές πράξεις. Δεν έχω βρει κάποια αναλυτικά παραδείγματα για εφαρμογές που διαχειρίζονται δεδομένα σε βάσεις δεδομένων, ξέρετε βασικές ή περισσότερο πολύπλοκες CRUD&amp;nbsp;εφαρμογές. &lt;br /&gt;&lt;br /&gt;Και όσο να πεις έχει μια δυσκολία να στήσεις μια σειρά καλών Tests&amp;nbsp;cases για διαχείριση δεδομένων σε βάση. Μερικά θέματα είναι : Πρέπει να αφήσεις τη βάση όπως ήταν στην έναρξη των δοκιμών για να μπορέσεις να ξανατρέξεις τα ίδια tests ξανά και ξανά,&amp;nbsp;οι περισσότεροι έλεγχοι σου σχετίζονται&amp;nbsp;με συγκεκριμένες τιμές που πρέπει να βρίσκεις στη βάση, Identity κλειδιά, Master-Detail πίνακες κλπ.&lt;br /&gt;&lt;br /&gt;Εχει κάποιος κάποια εμπειρία στο θέμα? Links,&amp;nbsp;βιβλία, samples&amp;nbsp;?&lt;br /&gt;Και γενικότερα ποια είναι η άποψη σας για το Unit Testing/Test Driver Development? &lt;br /&gt;Καλό/Κακό/Απαραίτητο/Αχρηστο ?&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;</description></item></channel></rss>