Hi Carl-Daniel,

Thank you so much for reading the projects list and for sharing your
thoughts!

It seems you touched two topics in your email: first one is feedback on
gsoc projects, and second one is unit tests vs testing on real hardware.

In general, the project descriptions at this stage do not need to be fully
detailed. We will certainly get there a bit later, when discussing projects
with potential contributors. And your feedback is really important.

Missing context:
> …
> Emulate hardware and filesystem in platform-independent way for unit tests.


“For unit tests” meant to be the context :)
Dummy is used in unit tests wherever it makes sense, however sometimes it
is not enough. For example, as you said, it is important to test flashrom
hardware drivers, but this can’t be done with dummy.
This project specifically, is continuing existing effort, so yes there will
be good guidance for students and also examples of what’s already done.

I do acknowledge that flashrom
> has gotten lots of refactoring, but I'm a bit afraid the changelogs
> suggest that in many cases "TEST=builds" seems to have been the only
> test that was performed. It's a good thing to have unit tests, but tests
> on real hardware should be performed if a driver has been refactored.
> After all, people rely on flashrom to not break their hardware.


Unit tests are not the replacement of tests on real hardware. However,
there is a class of code errors that unit tests can catch (and human eye
can miss), and so code is in better shape when it comes to hardware testing.
Also, just to be fair, for *some* of the patches unit tests are sufficient.
For some, not for all of them, of course.

On Sat, Feb 19, 2022 at 1:14 AM Nico Huber <nic...@gmx.de> wrote:

> Hi Carl-Daniel,
>
> On 04.02.22 21:59, Carl-Daniel Hailfinger wrote:
> > I'm glad that there is an effort to participate in GSoC again and I hope
> > it will be successful.
> >
> > Reading through the current GSoC ideas list, I would like to share a few
> > thoughts.
> >
> > Unfortunately, some of these ideas are missing a bit of context or may
> > cause needless code churn.
>
> please don't see the project ideas as a detailed manual what a student
> should do. Sure, we could provide more details, but I guess there should
> be a balance. IMO, there should be enough room for a student to bring
> forward their own ideas. Eventually, all details need to be discussed
> before the implementation is started, of course.
>
> > Missing context:
> > - Design and implement new CLI based on libflashrom and extend the API
> > as necessary. That would be the fourth or fifth user interface for
> > flashrom. Now if you mean cli_classic.c should be rewritten to use
> > libflashrom, that's something different. The idea doesn't specify more
> > details, but please note that any CLI will have to be supported for the
> > next 20 years and subsequent generations of developers may not be
> > willing to do that.
>
> I don't see a problem with additional CLIs. It depends on their purpose.
> The idea is not to implement another flashrom frontend that supports all
> features of cli_classic, but rather to allow simpler implementations
> that are dedicated to specific use cases. For instance, a CLI that
> copies data from / to a single flash region. With a stable API and
> command-line syntax that would need close to 0 maintenance compared
> to an all-in-one CLI.
>
> > - Emulate hardware and filesystem in platform-independent way for unit
> > tests. flashrom has builtin code for hardware emulation. Some more
> > hardware is emulated quite well by qemu. There were various patches for
> > qemu floating around to help testing flashrom hardware drivers, but
> > someone (TM) would have to dig through our mailing list as well as
> > others.
>
> Well, you generally don't want to start an emulator within a unit test,
> do you? :) IIRC, the idea is simply to implement whatever is necessary
> to test a single function, for instance the `command()` function of a
> SPI master. I think I once called that emulation if you want to do it
> without the programmer hardware, but you could as well call it mocking.
>
> > Some more guidance for students is definitely necessary.
>
> Yes, of course. IMO, that can happen interactively.
>
> > Code churn:
> > - Refactor arguments parser. The rationale given is "Strings are
> > complicated in C to work with. However, the idea of this is to
> > deduplicate a lot of code.". I agree that strings in C need careful
> > programming. That's also a reason why I doubt rewriting the code would
> > be a good idea. This idea in particular seems to suggest that
> > reinventing a full-blown argument parser building bespoke structures is
> > a way to reduce complexity. In the past, we had proposals to store
> > configuration data and even command line arguments in JSON or XML, then
> > use a system library to parse it. The reasoning for the XML/JSON was
> > that building your own parser was a bad idea. Someone else will come
> > along and refactor things again if we merge a bespoke parser now. "Hey,
> > thanks for your contribution, it will be replaced in the next GSoC" is
> > not something we would want to advertise.
>
> I don't think is going to explode. Nobody said something about drawing
> non-standard dependencies in. We just want to avoid further code
> duplication. Like most programmer code that takes arguments follows
> the same pattern to process it, e.g. check if it's an integer, if
> it's in range etc. One could also call it the natural evolution of
> extract_programmer_param(). So basically, do what we always did, but
> with a little more strategy.
>
> > I do acknowledge that flashrom
> > has gotten lots of refactoring, but I'm a bit afraid the changelogs
> > suggest that in many cases "TEST=builds" seems to have been the only
> > test that was performed. It's a good thing to have unit tests, but tests
> > on real hardware should be performed if a driver has been refactored.
> > After all, people rely on flashrom to not break their hardware.
>
> I'm also concerned about the current, real-hardware test coverage.
> However, personally, I draw a line between changes that affect internal
> "BIOS" programming and those that don't. Internal programming must work
> flawlessly. OTOH, external programmers are less scary, worst case (e.g.
> downgrading flashrom is not an option) somebody needs to apply a hot-
> fix. If there are big concerns about the internal programmers, we can
> always limit refactoring to external ones. Actually, to avoid future
> code duplication, we wouldn't have to touch existing drivers at all.
> But it also has its benefits to have a uniform code base.
>
> Nico
>


-- 
Anastasia.
_______________________________________________
flashrom mailing list -- flashrom@flashrom.org
To unsubscribe send an email to flashrom-le...@flashrom.org

Reply via email to