[tor-dev] Chutney code refactoring

Nick Mathewson nickm at freehaven.net
Fri Apr 17 22:01:42 UTC 2020


On Wed, Apr 15, 2020 at 11:45 PM c <c at chroniko.jp> wrote:

Skipping over some design stuff that seems reasonable.

 [...]
> Here is what I have been considering lately, with the code overall. I
> hope that laying it out in points will help both myself and others try
> to divy up what could be improved about the code, work on it piecewise,
> and make sure nothing is reimplemented incorrectly. I know I'm new to
> the code and thus have not looked into it thoroughly enough to
> understand everything about it, but again, something in the back of my
> head is telling me that if it's this difficult to understand now, then
> it can stand to be changed. So please take my criticism lightly and
> only where it applies. I could be wrong about some things as well. But,
> as a testing suite, this is the place we absolutely need to be sure we
> get right, because with a hard-to-reason testing suite, we open
> ourselves up to bugs within the tests themselves.

Agreed totally.

> - Documentation especially for methods that the tests are supposed to
>   call. In `Node` class, there is a comment "Users are expected to call
>   these" with `__init__` and three other functions declared. `__init__`
>   is fairly self-explanatory but the other three could stand to have
>   the same docstrings that we are giving other functions. I think this
>   should be my first task, before trying to mess with anything that
>   moves. That way, we have a clearer overview of the testsuite's API,
>   and then we can work the implementation around that.

This seems plausible, though I would caution that we shouldn't expect
to find a great separation between the external and internal parts of
chutney right now.  It's been built up piece by piece over time
without a wholly consistent vision, so it probably doesn't have the
best isolation between its layers.

This documentation project would also IMO benefit from a high-level or
module-level overviews on what things exactly chutney does.  Some of
its tasks are well-documented, but others are less so.

If you want to work on this it would be helpful to maybe start by
listing (here or elsewhere) some places where you *don't* feel like
you could (or would want to) write documentation: those would be a
good target for devs who _have_ worked on Chutney before.

> - Once it's clear to all of us (meaning, not only the core Chutney
>   devs, but also outsiders such as myself) what the current interface
>   does, we can see the strengths of that interface, maybe some design
>   flaws if we deem any to exist, and some improvements we can make with
>   the interface. What I mean is: here is the place to make any
>   necessary adjustments to the API before we dive into implementation.

+1.  Though I think this is likely to be an ongoing change that we see
over time, since

> - Now we visit the implementation. By this point I (and other non-core
>   developers) should have a better understanding on what the tests
>   *should* be doing, that we can then proceed to verify the correctness
>   of the tests' implementations themselves. Here's where I would like
>   to revisit cleaning up the code so that we make use of functions to
>   abstract and "atomize" certain aspects of the code (like the
>   currently-unused function isBoostrapped), where we should introduce
>   more self-documenting names (as suggested, replace getAttribute names
>   with isAttribute names for when we want to return bool values), et
>   cetera.

Yes.  I think there are other steps that could help at this stage too,
including:
  * More tests for the various parts of chutney, and refactoring to
make them more testable.
  * Making chutney comply with one or more of the python style
checking tools that are out there.

> I'm outlining what *I* think the approach should be, and in hopes that
> everything else will line up and make more sense for us all. I do want
> to make sure I know what the code should be doing, because while I
> could inspect the code line by line and go through the logic branches
> myself, I'm going to be perfectly honest and say it gives me a
> headache :) I think it's much easier to reason about with
> compartmentalised, self-documenting (and docstringed) components, than
> to try to step through the code as it runs and take it in as one giant
> piece.
>
> Because, we're testing a complex piece of software (Tor). Tor itself
> can do a lot of things that can throw us off especially if we're less
> familiar with its implementation, yet. And that throws off our
> understanding of how Chutney is supposed to work, as well. A lot of the
> tests currently seem to be very conditional -- they pass or fail with
> little rhyme or reason, which is of course the best type of issues to
> debug :P -- so I don't see the test results helping me as well as
> refactoring the testsuite first.

This is an good vision for how Chutney should go; I really support this idea.

> Again, let me know if I have anything wrong, made any unjust
> assumptions, showed my ignorance, et cetera. I'm going into this boldly
> and I hope that's the right call.
>
> Caitlin
> _______________________________________________
> tor-dev mailing list
> tor-dev at lists.torproject.org
> https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-dev


More information about the tor-dev mailing list