← Back to team overview

elementary-dev-community team mailing list archive

Re: Congratulations Luna developers!

 

Thanks guys, another noob question, how do we write tests for GUIs? Like
give different inputs to a dialog, or to an entry?
On Aug 21, 2013 9:46 PM, "Jaap Broekhuizen" <jaapz.b@xxxxxxxxx> wrote:

> The whole point of test driven development is tot write tests for
> functionality that does not exist, and then implement the functionality
> based on that test. You just write tests for the functionality you are
> going tot build, and use them as a blueprint for the actual implementation.
>
> --
> Jaap
> Op 21 aug. 2013 22:38 schreef "A. "Xylon" V." <avlabs314@xxxxxxxxx> het
> volgende:
>
>> Ermm, another quick question, how do we write tests for code which hasn't
>> been written yet? Are we supposed to magically predict bugs or what
>> features another developer might add?
>> On Aug 21, 2013 9:35 PM, "Kurt Smolderen" <kurt.smolderen@xxxxxxxxx>
>> wrote:
>>
>>>
>>> This might be one point of view to look at it, but let me try to explain
>>> another. Most of the time I'm a Java and C++ developer. I've been
>>> experimenting with Vala a few times, of which many of them was actually
>>> about hunting bugs in existing programs not written by myself. When
>>> programming in Java, I almost always write tests before actually writing
>>> the main code. The reason for this is twofold:
>>>
>>>    1. My personal experience is that it actually lead to a better
>>>    design as you are forced to think in small chunks of code (the code must be
>>>    testable)
>>>     2. Java has the tools to make writing tests (and run them) very
>>>    easy. JUnit and others are well integrated in IDEs such as Eclipse,
>>>    Netbeans, IntelliJ and others.
>>>
>>> Now let's go back to the bug-hunting stuff. As a Java developer, I
>>> sometimes had to hunt for bugs in programs written by others. Although I
>>> was unfamiliar in almost all the cases with the actual code, it was more
>>> easy to find bugs in code which had tests written for it, compared to the
>>> code which did not include tests. The reason: the code was often much more
>>> structured when tests were written and from the tests it was more easy to
>>> 'guess' the initial developer 'intentions'.
>>>
>>> The reason I'm sharing this is that I actually do not believe that
>>> writing tests will drive new contributors away, but might be a way of
>>> attracting them as their initial 'confrontation' with Elementary code might
>>> be more successful. They stumble upon a bug and decide to have a look at
>>> the code. As Vala is currently missing a decent IDE (such as Eclipse,...)
>>> and debugging isn't as easy due to the fact the code is translated into C,
>>> its often very difficult to analyse the flow of a program. Available tests
>>> might help this initial contributors with analysing the existing code and
>>> actually find (and fix) the bug they were hunting.
>>>
>>> Of course this story also proves that even when people write tests, bug
>>> occurs. And in many cases, bugs occur due to the fact that test are not
>>> 100% correct (for example, they do not sufficiently tests special cases).
>>> But at the same time, if the new contributor wants his code to work, he
>>> probably will adjust the existing tests as well and hence improve the
>>> overall test-quality of the program.
>>>
>>> So in order to conclude: I really think tests might be a way to make it
>>> easier for new contributors to succeed in their willingness to get involved
>>> into the elementary project. However, some things need to be kept in mind:
>>> (1) Vala is currently not that well supported in IDEs which makes it more
>>> difficult for Java/ C#/ C(++) developers to get into it and (2) tools need
>>> to be available which make it easy to write and execute the tests.
>>>
>>> Kind regards
>>> Kurt
>>>
>>> On 21-08-13 18:15, Julien wrote:
>>>
>>> So if I'm not mistaken, TDD requires you to write tests *before*implementing something.
>>>
>>>  This might work well for teams with enough developers that don't have
>>> to rely on volunteers and drive-by contributors, but I don't see this
>>> working out for elementary, at least not at this point.
>>>
>>>  Many contributors fix a few small bugs here and there and don't have
>>> much experience with development, which is why we try to keep the entry
>>> barrier really low for new devs. When I started here, I had no experience
>>> with Vala, Gtk and Launchpad at all, and I just fixed some easy bugs,
>>> implemented some small features in various apps and so on.
>>>
>>>  If we used TDD, we would have to reject most code by new devs, because
>>> they didn't implement tests, and then we'll have to explain to them how to
>>> use tests, and then they'll have to write tests, but that's bad because you
>>> have to write them before you write the actual code ...
>>>
>>>  It's going to be a mess.
>>>
>>>  What might work are regular unit tests, implemented by people who kind
>>> of know what they're doing (we need some documentation for that, maybe add
>>> it to the dev guide). This will give us some of the TDD benefits w/o
>>> deterring potential new devs.
>>>
>>> On Wed, Aug 21, 2013 at 3:29 PM, Craig <weberc2@xxxxxxxxx><weberc2@xxxxxxxxx>wrote:
>>>
>>>
>>> I have never heard a project die because they decided to move to TDD.
>>>> And I heard about lots of hits on the matter.
>>>
>>>
>>>  This. I've heard (and witnessed) a lot of projects drop their defect
>>> percentage from 20% to 3%.  A lot of new-to-TDD developers don't like it at
>>> first because it feels slower, but I don't think those people remember how
>>> much time is spent bug hunting at the end of a release cycle.
>>>
>>>  I think the next step is to find a pilot project and get the lead
>>> developer(s) to agree to work toward TDD. This will probably look like:
>>>
>>>  1) Modifying the project structure to include _test directories
>>>  2) Creating tests with GLib.Test or some such
>>>  3) Coaching/mentoring the developers at TDD
>>>  4) Performing code reviews in which insufficiently tested code is sent
>>> back for revision
>>>
>>> After testing it out for a few months, the community can see how they
>>> like it.
>>>
>>> Does this sound like a reasonable approach? If so, would any project
>>> leads like to volunteer their project? And who in the community would like
>>> to participate in such an experiment?
>>>
>>>
>>> On Wed, Aug 21, 2013 at 4:34 AM, Alex Lourie <djay.il@xxxxxxxxx> wrote:
>>>
>>>> Albert
>>>>
>>>>  We don't need to exaggerate. Though TDD is, indeed, a development
>>>> methodology, it is not supposed to completely change the way everyone works.
>>>>
>>>>  Just consider that writing a good test takes about 10 minutes, and
>>>> that each developer writes one or two tests for new stuff they add (or the
>>>> old one they fix) from time to time. Then, in time, you'll have part of
>>>> your code tested, which is exactly what we're aiming for. Beginning is
>>>> hard, continue something is easier.
>>>>
>>>>  I have never heard a project die because they decided to move to TDD.
>>>> And I heard about lots of hits on the matter.
>>>>
>>>>
>>>>  On Tue, Aug 20, 2013 at 3:37 AM, Albert Palacios <optimisme@xxxxxxxxx>wrote:
>>>>
>>>>> Hi Craig,
>>>>>
>>>>>  Thanks for your explanation and the linked video. I am still
>>>>> agnostic, but I don't want to be the only one who complained about the
>>>>> proposal.
>>>>>
>>>>>  At this point I have more questions than answers, and those will
>>>>> probably be solved with a working example.
>>>>>
>>>>>  But remember, *TDD is a development methodology* not a testing
>>>>> methodology. It will change our development work flow, and will probably
>>>>> move potential volunteers away from the project.
>>>>>
>>>>>  TDD like every other development methodology does not fit every
>>>>> project or team. It can be a hit, and it can even the death of the project.
>>>>>
>>>>>  Albert
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Tue, Aug 20, 2013 at 12:50 AM, Craig <weberc2@xxxxxxxxx> wrote:
>>>>>
>>>>>> Hi Albert,
>>>>>>
>>>>>>  Thanks for your response, you asked a lot of great questions. In
>>>>>> addition to Gufran's earlier response.
>>>>>>
>>>>>>   Can you prove that there will be huge benefits in time/resources?
>>>>>>
>>>>>>
>>>>>>  Well, that depends on what you consider "proof". In the spring, my
>>>>>> company paid several thousand dollars to send me to a conference in San
>>>>>> Jose in which many software development authorities recited, "test driven
>>>>>> development pays itself off in iteration 0". That means the very first time
>>>>>> you write the code it has already paid for itself (because even before you
>>>>>> get the automatic-regression testing benefits, you've already got the
>>>>>> benefits of a better architecture and documentation--because the tests
>>>>>> _are_ the documentation!). I'm sure I can dig up lots of other resources,
>>>>>> but I think it should suffice to say that I've never heard an expert
>>>>>> comment on TDD except to say it's fastest way to develop quality software.
>>>>>> For more information addressing your specific concerns, see the Wikipedia
>>>>>> article's "benefits" section (and read on to the "shortcomings" as it is
>>>>>> also relevant:
>>>>>> http://en.wikipedia.org/wiki/Test-driven_development#Benefits. Even
>>>>>> more importantly, this short video:
>>>>>> http://www.youtube.com/watch?v=DodJQyHsmHI
>>>>>>
>>>>>>
>>>>>>  Can you prove that there will be less bugs? (looks like that if
>>>>>>> tests are not right, bugs will populate equally).
>>>>>>
>>>>>>  It's pretty hard to write bad tests if you're practicing TDD,
>>>>>> because you write the test first, watch it fail, insert the code you need
>>>>>> to make it pass, and then hopefully watch it pass. If you wrote a bad test,
>>>>>> it very probably will pass before you've written the code to make it pass
>>>>>> (which serves to alert the programmer that his test is bad or his software
>>>>>> is doing something unexpected) or the test will fail after he has correctly
>>>>>> written the next line of code (which serves to alert the programmer to
>>>>>> review both the code and his test and identify the source of the problem).
>>>>>> For this reason alone, many, many bugs are eliminated.
>>>>>>
>>>>>>  From what's been said, looks like there will be an extra effort on
>>>>>>> development, adding complexity and more tools to know (not to say maintain).
>>>>>>
>>>>>>  Besides the initial learning curve, development actually goes
>>>>>> _faster_ with TDD (see the aforementioned Wikipedia article--I can provide
>>>>>> more resources on demand) because debugging time becomes exponentially more
>>>>>> expensive as time passes after the bug has been introduced. This is because
>>>>>> the bug can live anywhere in any code that has been added *since the last
>>>>>> time the tests were run* and because the programmer will have an
>>>>>> increasingly difficult time remembering the code he wrote at the time of
>>>>>> the bug as time progresses. With TDD, you are running the tests after every
>>>>>> change (generally you test every time you build), so as soon as you've
>>>>>> broken something you find out about it. This means that the bug is
>>>>>> guaranteed to live in the last change you made, which is a smaller sample
>>>>>> and fresher-in-your-mind than changes you made weeks ago. Regarding your
>>>>>> complexity concern, generally the process isn't complex (it's actually very
>>>>>> simple) and it _simplifies_ development once you learn how to do it. The
>>>>>> most complex part is figuring out how to integrate testing into the CMake
>>>>>> project, and that's only complicated because CMake is complicated.
>>>>>> Regarding tools, there are already testing tools available for Vala,
>>>>>> including GLib (so we don't have to maintain anything). Anyway, testing
>>>>>> tools don't take a terribly long time to learn.
>>>>>>
>>>>>>   Can we focus on the half done things before adding new projects?
>>>>>>> Granite is not ready, documentation is missing, not to talk about the bugs
>>>>>>> that survived Luna release ...
>>>>>>
>>>>>>
>>>>>>  TDD is more valuable the sooner you start implementing it. Even if
>>>>>> you didn't write tests for old code and only started TDD with new code (and
>>>>>> existing defects), you would be doing yourself a huge favor. I'm not
>>>>>> suggesting that everyone stop what they're doing and go back and test every
>>>>>> line of code (although it would be a good thing to chip away at over time),
>>>>>> but practicing TDD on _new_ code can't hurt that much, can it?
>>>>>>
>>>>>> With that in mind, are there any arguments against TDD that outweigh
>>>>>> its merits?
>>>>>>
>>>>>> Thanks again for your questions! :)
>>>>>> Craig
>>>>>>
>>>>>>
>>>>>> On Mon, Aug 19, 2013 at 12:32 PM, Albert Palacios <
>>>>>> optimisme@xxxxxxxxx> wrote:
>>>>>>
>>>>>>> Hi Craig and Gufran,
>>>>>>>
>>>>>>>  I don't agree with TDD, and making a committee. Can you prove that
>>>>>>> there will be huge benefits in time/resources? Can you prove that there
>>>>>>> will be less bugs? (looks like that if tests are not right, bugs will
>>>>>>> populate equally). Can you prove that creating, modifying and fixing code
>>>>>>> is going to be easier?
>>>>>>>
>>>>>>>  From what's been said, looks like there will be an extra effort on
>>>>>>> development, adding complexity and more tools to know (not to say
>>>>>>> maintain).  Can we focus on the half done things before adding new
>>>>>>> projects? Granite is not ready, documentation is missing, not to talk about
>>>>>>> the bugs that survived Luna release ...
>>>>>>>
>>>>>>>
>>>>>>> On Mon, Aug 19, 2013 at 7:27 PM, Gufran <dogabhai@xxxxxxxxx> wrote:
>>>>>>>
>>>>>>>> Count me in.
>>>>>>>> I cant really put forward any point on how should we proceed but
>>>>>>>> I'd definitely love to be with the team.
>>>>>>>> Yes, a *testing committee* is a good idea, maybe something
>>>>>>>> independent of dev community. We can write scripts to automate tests, and
>>>>>>>> we can do that in any language (Python for example), so it would be like a
>>>>>>>> Python coupling between software and tests.
>>>>>>>> Just my two cents :)
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Mon, Aug 19, 2013 at 10:43 PM, Craig <weberc2@xxxxxxxxx> wrote:
>>>>>>>>
>>>>>>>>>  This is cool and important, but I don't think it should stop the
>>>>>>>>> discussion on test driven development. Perhaps this could be a separate
>>>>>>>>> thread? It doesn't sound as though anyone is opposed to TDD, so can we
>>>>>>>>> confirm that? And if no one is opposed, how can we proceed? Can we start
>>>>>>>>> some kind of a "testing committee" to help determine what testing steps are
>>>>>>>>> needed, what framework to use, and how to integrate testing into the
>>>>>>>>> existing project structure (i.e., using CMake)?
>>>>>>>>>
>>>>>>>>>  Does this sound like a good plan? Thoughts?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Mon, Aug 19, 2013 at 12:05 PM, David Gomes <
>>>>>>>>> david@xxxxxxxxxxxxxxxx> wrote:
>>>>>>>>>
>>>>>>>>>> I'll work on it, so far we only have this I made:
>>>>>>>>>> https://dl.dropboxusercontent.com/u/19899464/reviewstutorial.html
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Mon, Aug 19, 2013 at 6:01 PM, Albert Palacios <
>>>>>>>>>> optimisme@xxxxxxxxx> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hi Munchor,
>>>>>>>>>>>
>>>>>>>>>>>  A contribution / bug fixing step by step guide is needed at
>>>>>>>>>>> the developers site. There was a .pdf before the new site change, but now
>>>>>>>>>>> it is impossible to find.
>>>>>>>>>>>
>>>>>>>>>>>  The problem with the old guide is that it encouraged to create
>>>>>>>>>>> your own branch instead of using the ~elementary-dev-community one (this is
>>>>>>>>>>> totally new for me). Obviously, bazaar guides doesn't teach you on using
>>>>>>>>>>> the "elementary-dev-community".
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Mon, Aug 19, 2013 at 6:57 PM, David Gomes <
>>>>>>>>>>> david@xxxxxxxxxxxxxxxx> wrote:
>>>>>>>>>>>
>>>>>>>>>>>>  I always tell people if they make their branches owned by
>>>>>>>>>>>> ~elementary-dev-community I will volunteer to fix the code style myself. I
>>>>>>>>>>>> have all the free time and the will to do it, just people always make their
>>>>>>>>>>>> branches owned by themselves.
>>>>>>>>>>>>
>>>>>>>>>>>>  ~David "Munchor" Gomes
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>  On Mon, Aug 19, 2013 at 4:29 PM, Albert Palacios Jimenez <
>>>>>>>>>>>> optimisme@xxxxxxxxx> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>>  Hi,
>>>>>>>>>>>>>
>>>>>>>>>>>>> Before talking about testing, and advanced development
>>>>>>>>>>>>> techniques for teams with resources, there is one easy and simple thing we
>>>>>>>>>>>>> can do to accelerate development.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Sometimes (very often), bugs are stopped due spaces not
>>>>>>>>>>>>> following the "code style" guidelines. Adding a "code style" validator
>>>>>>>>>>>>> script before compiling, we can prevent uploads with spaces at the end of
>>>>>>>>>>>>> the lines ...  and save a lot of time.
>>>>>>>>>>>>>
>>>>>>>>>>>>> For example, just executing the next line before compiling:
>>>>>>>>>>>>>
>>>>>>>>>>>>> find . -type f -print0 | xargs -0 sed -i 's/[ \t]*$//'
>>>>>>>>>>>>>
>>>>>>>>>>>>> We will remove every "white space" at the end of any line,
>>>>>>>>>>>>> including new lines with tab spaces.
>>>>>>>>>>>>>
>>>>>>>>>>>>> This can sound stupid, but it is absurd to block bug fixes
>>>>>>>>>>>>> during several days due white spaces at the end of lines.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>  --
>>>>>>>>>>>>> Mailing list: https://launchpad.net/~elementary-dev-community
>>>>>>>>>>>>> Post to     : elementary-dev-community@xxxxxxxxxxxxxxxxxxx
>>>>>>>>>>>>> Unsubscribe : https://launchpad.net/~elementary-dev-community
>>>>>>>>>>>>> More help   : https://help.launchpad.net/ListHelp
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Mailing list: https://launchpad.net/~elementary-dev-community
>>>>>>>>>> Post to     : elementary-dev-community@xxxxxxxxxxxxxxxxxxx
>>>>>>>>>> Unsubscribe : https://launchpad.net/~elementary-dev-community
>>>>>>>>>> More help   : https://help.launchpad.net/ListHelp
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Mailing list: https://launchpad.net/~elementary-dev-community
>>>>>>>>> Post to     : elementary-dev-community@xxxxxxxxxxxxxxxxxxx
>>>>>>>>> Unsubscribe : https://launchpad.net/~elementary-dev-community
>>>>>>>>> More help   : https://help.launchpad.net/ListHelp
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Mailing list: https://launchpad.net/~elementary-dev-community
>>>>>>>> Post to     : elementary-dev-community@xxxxxxxxxxxxxxxxxxx
>>>>>>>> Unsubscribe : https://launchpad.net/~elementary-dev-community
>>>>>>>> More help   : https://help.launchpad.net/ListHelp
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> Mailing list: https://launchpad.net/~elementary-dev-community
>>>>> Post to     : elementary-dev-community@xxxxxxxxxxxxxxxxxxx
>>>>> 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     : elementary-dev-community@xxxxxxxxxxxxxxxxxxx
>>> Unsubscribe : https://launchpad.net/~elementary-dev-community
>>> More help   : https://help.launchpad.net/ListHelp
>>>
>>>
>> --
>> Mailing list: https://launchpad.net/~elementary-dev-community
>> Post to     : elementary-dev-community@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~elementary-dev-community
>> More help   : https://help.launchpad.net/ListHelp
>>
>>

Follow ups

References