So if I understand correctly, in TDD there is a specific bit of code (lets
call it C) that you build a test for. Then, instead of using the
application and trying to trigger code C, you invoke the test which
directly calls code C and then reports a result based on whatever input you
gave it, right?
On Aug 19, 2013 9:43 AM, "Alex Lourie" <[email protected]> wrote:

> Correct.
>
>
> On Mon, Aug 19, 2013 at 11:27 AM, David Gomes <[email protected]>wrote:
>
>> So say this code for example:
>>
>>
>> http://bazaar.launchpad.net/~elementary-apps/pantheon-terminal/trunk/view/head:/src/TerminalWidget.vala#L37
>>
>> Sometimes we have some issues with ReGex (see
>> https://code.launchpad.net/~voldyman/pantheon-terminal/colon-fixed/+merge/180735
>> ).
>>
>> Is that the kind of thing we can use TDD for? Like have a bunch of URLs
>> and see if Terminal detects them or not without any GUI, just terminal
>> Found/Not Found messages?
>>
>> ~David "Munchor" Gomes
>>
>>
>> On Mon, Aug 19, 2013 at 1:38 AM, Craig <[email protected]> wrote:
>>
>>> David,
>>>
>>> I understand and appreciate the difficulty; however, I've had exactly
>>> zero questions about TDD. Like I said in the original post, I'm happy to
>>> answer any questions you may have.
>>>
>>> Please take me up on that offer any time.
>>>
>>> Thanks,
>>> Craig
>>> On Aug 18, 2013 6:57 PM, "David Gomes" <[email protected]> wrote:
>>>
>>>> This, this and this.
>>>>
>>>> And also many of the developers like me aren't really experienced with
>>>> TDD and will have to take some time to study, learn and adapt to it. You
>>>> can't just come here and tell developers, many of whom inexperienced young
>>>> amateur programmers, to start using TDDs. Take me, for example, I never had
>>>> proper programming education, I'm 17 years old. I know what TDD is but I've
>>>> never used it before. You have to understand TDD is something very
>>>> enterprise-ish and "professional" that "big serious" companies do.
>>>>
>>>> Look, I'm not saying we can't do it or we shouldn't do it or we won't
>>>> do it - I'm just saying you need a better approach to what you're doing. I
>>>> realize how useful and important TDD can be, but many of us might just be
>>>> too busy having fun.
>>>>
>>>> Regards,
>>>> David
>>>>
>>>> PS. I really hope I wasn't rude, I mean all I said in the nicest of
>>>> ways.
>>>>
>>>>
>>>>
>>>> On Sun, Aug 18, 2013 at 11:58 PM, Daniel Foré 
>>>> <[email protected]>wrote:
>>>>
>>>>> This all sounds great and I think everybody is pro-testing, however
>>>>> I've yet to see a reproduce-able example or a guide regarding any kind of
>>>>> tests being implemented (especially by those extremely vocal about their
>>>>> importance). Not books or articles about why testing is good, but 
>>>>> something
>>>>> that actually shows a person how to write tests for their apps.
>>>>>
>>>>> So, as Linus would say, "Talk is cheap. Show me the code."
>>>>> —
>>>>> Sent from Mailbox <https://www.dropbox.com/mailbox> for iPhone
>>>>>
>>>>>
>>>>> On Sun, Aug 18, 2013 at 3:47 PM, Craig <[email protected]> wrote:
>>>>>
>>>>>> Hi Alex,
>>>>>>
>>>>>> tl;dr: Unit tests are pretty much necessary to have an architecture
>>>>>> on which you can run automatic system-level tests, and if you aren't
>>>>>> automating then testing becomes too impractical.
>>>>>>
>>>>>> When you describe "system tests" you are actually describing what are
>>>>>> called "acceptance tests" or "behavioral" tests (
>>>>>> http://www.extremeprogramming.org/rules/functionaltests.html). Unit
>>>>>> tests test small units of code such as classes or functions. Traditional
>>>>>> TDD relies primarily upon unit tests, and those are primarily what I'm
>>>>>> referring to.
>>>>>>
>>>>>> One of the primary purposes of unit testing is to ensure good code
>>>>>> architecture. If you don't unit test, you probably won't have good access
>>>>>> points for your acceptance tests (how do you verify that that Gtk.Label 
>>>>>> has
>>>>>> the correct text when you can only access the top level window?), so
>>>>>> automation will be out of the question. And if you aren't automating then
>>>>>> you can't continuously integrate (running all tests every time a change 
>>>>>> is
>>>>>> made to the repository in order to find bugs as soon as they are made).
>>>>>> Honestly, if you aren't automating then testing becomes too impractical.
>>>>>> On Aug 18, 2013 5:10 PM, "Alex Lourie" <[email protected]> wrote:
>>>>>>
>>>>>>> Hi Craig
>>>>>>>
>>>>>>> For the clarification purposes, I'd like to separate 'automatic
>>>>>>> tests (system testst)' and 'unittests'. I consider them different 
>>>>>>> things.
>>>>>>> Unittests are pieces of code that test some other pieces of the code.
>>>>>>> System tests are scripts/code/steps that test that your program (or 
>>>>>>> part of
>>>>>>> it) works. Unittests are usually run automatically (by, say, unittesting
>>>>>>> framework). System tests could be run automatically or manually. There 
>>>>>>> are,
>>>>>>> sometimes, frameworks for that, but in most cases it's either manual or
>>>>>>> custom developed.
>>>>>>>
>>>>>>> Unittests are (usually) developed by the same developer who
>>>>>>> developed the original code, just as in your TDD example. System tests 
>>>>>>> are
>>>>>>> best developed by external party (such as users).
>>>>>>>
>>>>>>> From here on, I can agree with you on point 1, and the naming.
>>>>>>>
>>>>>>> Basically, we all agree that having *testing *is a good practice
>>>>>>> and a feasible way to manage the complexity of software. But unittesting
>>>>>>> cannot test the logical connections between the blocks of code in the
>>>>>>> program. That's the job for system testing.
>>>>>>>
>>>>>>> I don't care how we call it. The more *systematic *testing we do
>>>>>>> for Elementary the better it's going to be, and the more chances we 
>>>>>>> have to
>>>>>>> sustain growth.
>>>>>>>
>>>>>>> So I would just like to see testing implemented. Any kind of it.
>>>>>>>
>>>>>>>
>>>>>>> On Sun, Aug 18, 2013 at 10:56 PM, Craig <[email protected]> wrote:
>>>>>>>
>>>>>>>> Hi Alex,
>>>>>>>>
>>>>>>>> To correct you on a couple of things:
>>>>>>>>
>>>>>>>> 1. TDD **does not** require you to have all or even several of the
>>>>>>>> tests written before hand. It simply requires you to have the test 
>>>>>>>> written
>>>>>>>> for the next change you are about to make. The idea is to write a 
>>>>>>>> test, run
>>>>>>>> the test to watch it fail (this helps verify you wrote your test
>>>>>>>> correctly), add the simplest code to make the test pass, run the test 
>>>>>>>> to
>>>>>>>> watch it pass (and verify your code additions worked). Then you rinse 
>>>>>>>> and
>>>>>>>> repeat.
>>>>>>>>
>>>>>>>> 2. TDD is actually a simplified form of what developers do already.
>>>>>>>> That is, you usually write some code, run your code, then visually 
>>>>>>>> verify
>>>>>>>> that it worked. TDD just crystalizes this process in code which can be
>>>>>>>> executed later. TDD isn't hard, so it's well within the capacity of 
>>>>>>>> all of
>>>>>>>> our devs; however, it does taking some getting used to. TDD is the 
>>>>>>>> best and
>>>>>>>> fastest way to develop quality code and it's the ONLY practical way to
>>>>>>>> raise the ceiling on the amount of code complexity a team of a given 
>>>>>>>> size
>>>>>>>> can handle (there is a lot of research and professional heuristics 
>>>>>>>> about
>>>>>>>> this). If a developer doesn't have the will to do this, they aren't 
>>>>>>>> taking
>>>>>>>> their discipline seriously and, frankly, are a danger to any project 
>>>>>>>> that
>>>>>>>> values quality. Besides, I've never met a developer who has hit the
>>>>>>>> complexity ceiling *and* who has practiced TDD who doesn't advocate 
>>>>>>>> this
>>>>>>>> kind of testing.
>>>>>>>>
>>>>>>>> With those corrections in mind, I can't see any difference between
>>>>>>>> your first point and "real TDD". I agree that your 2nd point is a good
>>>>>>>> idea. Automated testing can't capture everything, and it's definitely
>>>>>>>> important to have some hands-on testing that we could run through a few
>>>>>>>> times every release. But we should always be working toward automated
>>>>>>>> testing so developers can, you know, develop.
>>>>>>>>
>>>>>>>>
>>>>>>>> On Sun, Aug 18, 2013 at 2:05 PM, Alex Lourie <[email protected]>wrote:
>>>>>>>>
>>>>>>>>> Ok, I have not added a single line of code to elementary yet, and
>>>>>>>>> gave some decent amount of headache to real devs around here. I have 
>>>>>>>>> though
>>>>>>>>> participated in development of many products, small and large, and so 
>>>>>>>>> here
>>>>>>>>> it goes.
>>>>>>>>>
>>>>>>>>> TDD in its pure form requires having tests written and ready
>>>>>>>>> before the code is written. Then failing tests are being implemented 
>>>>>>>>> one by
>>>>>>>>> one, having the code both tested and working in the end of this 
>>>>>>>>> process. I
>>>>>>>>> highly doubt that any of Elementary devs have the capacity or the 
>>>>>>>>> will to
>>>>>>>>> follow this. Especially, when many of our projects are built using 
>>>>>>>>> 'try and
>>>>>>>>> error' methodology, that is they follow the 'Hey! Let's try this!' 
>>>>>>>>> rule.
>>>>>>>>> Which is awesome, as it allows fast development and really quick 
>>>>>>>>> release
>>>>>>>>> cycles.
>>>>>>>>>
>>>>>>>>> Now, what I think would fit Elementary much better is simply
>>>>>>>>> testing (yes, that QA thing everyone loves and adores) - the T from 
>>>>>>>>> TDD,
>>>>>>>>> which is the most important part. The best way to do that is, of 
>>>>>>>>> course, to
>>>>>>>>> create a bunch of automatic tests, but that's not really feasible 
>>>>>>>>> either.
>>>>>>>>> So as I see it, we can do 2 things:
>>>>>>>>>
>>>>>>>>> 1. Start looking into unittesting as much and as early as
>>>>>>>>> possible, and have devs starting to create tests. This has the 
>>>>>>>>> benefit of
>>>>>>>>> devs learning to create unittests and having some of the code tested, 
>>>>>>>>> and
>>>>>>>>> also, potentially, at some point, it could help moving to real TDD.
>>>>>>>>> 2. Start creating manual test procedures for basic staff. Yes, it
>>>>>>>>> requires a lot of human power and time, but also do translations. 
>>>>>>>>> This is
>>>>>>>>> the most boring part of software engineering, but it is the one that 
>>>>>>>>> can
>>>>>>>>> bring balance to the force. Also, some of these can sometimes be 
>>>>>>>>> automated
>>>>>>>>> too, so it's not all that aweful.
>>>>>>>>>
>>>>>>>>> I personally think we need both 1 and 2. I am a strong believer in
>>>>>>>>> testing as means to improve the product. But TDD is probably an 
>>>>>>>>> overshoot
>>>>>>>>> in our case. We need to start with *something*, and right now we don't
>>>>>>>>> really have it.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Sun, Aug 18, 2013 at 8:41 PM, Craig <[email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> Hello,
>>>>>>>>>>
>>>>>>>>>> I posted the following message on Google Plus yesterday, but it
>>>>>>>>>> occurred to me that the weekend may not be prime time for checking 
>>>>>>>>>> that
>>>>>>>>>> social network. I think this message is pretty important, so I want 
>>>>>>>>>> to post
>>>>>>>>>> it again here: (I apologize in advance for its length)
>>>>>>>>>>
>>>>>>>>>> Congratulations to all the developers who made Luna such a
>>>>>>>>>>> success!  You've done a great job and delivered an incredible Linux
>>>>>>>>>>> experience!
>>>>>>>>>>>
>>>>>>>>>>> I know I bring this up periodically, but I'm concerned that Luna
>>>>>>>>>>> + 1 and future releases will take more and more time to release, 
>>>>>>>>>>> and/or
>>>>>>>>>>> that you will quickly reach a ceiling with respect to the amount of 
>>>>>>>>>>> code
>>>>>>>>>>> we'll be able to maintain before quality degrades.
>>>>>>>>>>>
>>>>>>>>>>> The cause for my concern is the nature of complexity: as
>>>>>>>>>>> software grows (that is, as code is added), bugs grow exponentially
>>>>>>>>>>> (complexity increases exponentially with logic, and bugs grow 
>>>>>>>>>>> linearly with
>>>>>>>>>>> complexity). If we don't start working toward solutions that will 
>>>>>>>>>>> scale
>>>>>>>>>>> with this problem, we **will** hit a ceiling with respect to the 
>>>>>>>>>>> amount of
>>>>>>>>>>> complexity we will be able to support (this means fewer features or
>>>>>>>>>>> less-powerful features). I promise.
>>>>>>>>>>>
>>>>>>>>>>> I know some in the community are working toward this goal, but I
>>>>>>>>>>> think it's going to take a concerted effort on the part of the 
>>>>>>>>>>> developers
>>>>>>>>>>> to take this problem seriously. I urge you all to take this problem 
>>>>>>>>>>> as
>>>>>>>>>>> seriously as you take the rest of the user experience (because bugs 
>>>>>>>>>>> are, at
>>>>>>>>>>> the end of the day, a sharp degradation of the user experience).
>>>>>>>>>>>
>>>>>>>>>>> In my experience, the silver bullet for combating this problem
>>>>>>>>>>> is test driven development. If you look around the software 
>>>>>>>>>>> development
>>>>>>>>>>> industry, code is improving, and it's largely because TDD is 
>>>>>>>>>>> catching on.
>>>>>>>>>>> And Google is a good role model in this regard (not just for us, 
>>>>>>>>>>> but for
>>>>>>>>>>> everyone--they are pioneers of code quality). If you're a developer 
>>>>>>>>>>> and
>>>>>>>>>>> you're unfamiliar with TDD, take some time and research it. It will 
>>>>>>>>>>> pay
>>>>>>>>>>> dividends immediately. If you have any questions about development, 
>>>>>>>>>>> I'm
>>>>>>>>>>> happy to provide my advice as a professional developer. Also, read 
>>>>>>>>>>> up on
>>>>>>>>>>> Google's testing strategies (I recommend
>>>>>>>>>>> http://www.amazon.com/Google-Tests-Software-James-Whittaker/dp/0321803027_How
>>>>>>>>>>>  Google Tests Software_).
>>>>>>>>>>>
>>>>>>>>>>> You guys are a _great_ UX shop, now let's become a great code
>>>>>>>>>>> shop. I hope this analogy doesn't offend anyone who is passionate 
>>>>>>>>>>> about
>>>>>>>>>>> their tech brands, but my advice is this:
>>>>>>>>>>>
>>>>>>>>>>> Design like Apple, develop like Google.
>>>>>>>>>>>
>>>>>>>>>>> I really push you developers to continue to strive to hone your
>>>>>>>>>>> craft the way Daniel and Cassidy (and any other UX designers) are 
>>>>>>>>>>> learning
>>>>>>>>>>> to hone theirs.
>>>>>>>>>>>
>>>>>>>>>>> P.S., Sorry for the book, and I hope you all take this as
>>>>>>>>>>> respectful, constructive criticism. _Please_ ask me anything about
>>>>>>>>>>> development, especially with respect to how we can keep quality 
>>>>>>>>>>> high using
>>>>>>>>>>> processes rather than sheer developer effort (so as to free you 
>>>>>>>>>>> developers
>>>>>>>>>>> to work on interesting problems rather than bug hunting).
>>>>>>>>>>>
>>>>>>>>>>> Thanks for reading,
>>>>>>>>>>> Craig
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Mailing list: https://launchpad.net/~elementary-dev-community
>>>>>>>>>> Post to     : [email protected]
>>>>>>>>>> Unsubscribe : https://launchpad.net/~elementary-dev-community
>>>>>>>>>> More help   : https://help.launchpad.net/ListHelp
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Alex Lourie
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Alex Lourie
>>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> Mailing list: https://launchpad.net/~elementary-dev-community
>>>>> Post to     : [email protected]
>>>>> Unsubscribe : https://launchpad.net/~elementary-dev-community
>>>>> More help   : https://help.launchpad.net/ListHelp
>>>>>
>>>>>
>>>>
>>
>> --
>> Mailing list: https://launchpad.net/~elementary-dev-community
>> Post to     : [email protected]
>> Unsubscribe : https://launchpad.net/~elementary-dev-community
>> More help   : https://help.launchpad.net/ListHelp
>>
>>
>
>
> --
> Alex Lourie
>
> --
> Mailing list: https://launchpad.net/~elementary-dev-community
> Post to     : [email protected]
> Unsubscribe : https://launchpad.net/~elementary-dev-community
> More help   : https://help.launchpad.net/ListHelp
>
>
-- 
Mailing list: https://launchpad.net/~elementary-dev-community
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~elementary-dev-community
More help   : https://help.launchpad.net/ListHelp

Reply via email to