public inbox for libc-help@sourceware.org
 help / color / mirror / Atom feed
From: Mike Frysinger <vapier@gentoo.org>
To: Jeffrey Walton <noloader@gmail.com>
Cc: Peng Yu <pengyu.ut@gmail.com>, libc-help <libc-help@sourceware.org>
Subject: Re: Does glibc has complete test coverage?
Date: Tue, 23 Mar 2021 21:13:39 -0400	[thread overview]
Message-ID: <YFqSQ7zERwbe/aoZ@vapier> (raw)
In-Reply-To: <CAH8yC8n0HH8zQcWLaExHFbMX-bTD5Y5Dxnxk0aeb64d7WoYrPQ@mail.gmail.com>

On 23 Mar 2021 17:02, Jeffrey Walton wrote:
> On Tue, Mar 23, 2021 at 4:43 PM Mike Frysinger wrote:
> > On 23 Mar 2021 11:39, Peng Yu via Libc-help wrote:
> > > https://www.kernel.org/doc/man-pages/missing_pages.html
> > >
> > > "... quite a few kernel and glibc bugs have been uncovered while
> > > writing test programs during the preparation of man pages. "
> > >
> > > I see the above text. It doesn't make too much sense, as it indicates
> > > that glibc does not have complete test coverage.
> > >
> > > Why not taking an approach of always accompanying each line of source
> > > code with appopriate test cases? If this approach is taken, then most
> > > bugs should have been eliminated beforehand?
> >
> > ignoring the legacy aspect (code that's in the tree now but lacks tests),
> > you have diminishing returns when it comes to writing unittests, and, as
> > can be seen in a recent discussion, glibc is pretty tightly coupled to
> > the runtime environment (i.e. the host kernel).  so getting an env that
> > matches all the different code paths is challenging.
> >
> > plus it comes down a bit to this being an open source project for many
> > of us, not a job, and you have to be respectful of balancing quality
> > and developer time with any requests you make on other volunteers.
> >
> > along those lines, this is an open source project where "patches are
> > welcome", so if you wanted to spend your time improving the frameworks
> > and coverage of our tests, we'd welcome you.
> 
> Interns are usually a good choice for writing test cases. It gets them
> familiar with the code, frees up a senior developer's time, and helps
> avoid the developer's bias.
> 
> Test cases are monkey work that should be delegated. When delegation
> does not occur it usually points back to shortcomings in project
> management.

many are good for delegation, but that doesn't mean quantity is the same as
quality.  if we could get 100% coverage but it took weeks to run, but 90%
coverage took <1 hour, is that 10% worth it ?  this isn't exactly hyperbole
when we have targets that run on simulators or FPGAs and have <<1GHz CPUs.

for example, how much of LTP should be part of glibc ?  they have over 1000
"syscall" tests which mostly go through the C library's APIs and can catch
bugs, but they also take a long time to run.

how much should glibc be exercising different kernel versions ?  a lot of
our work & APIs depend heavily on the kernel working correctly.  should
we be running against every Linux release since 3.2 ?  do we test the many
different ways kernels can be compiled ?  do we workaround kernel bugs ?
https://sourceware.org/pipermail/libc-alpha/2021-March/123486.html
https://sourceware.org/pipermail/libc-alpha/2021-March/123582.html

glibc has a matrix of build tools that it can utilize and significantly
affects its behavior & output.  do we try every combo of GCC & binutils
that we support ?

glibc runs on like 20 diff architectures, and many of those have ISA
specific optimizations (like x86_64 SSE/AVX/etc...).  that's another
huge multiplier.

my point is that "100% coverage" sounds fine until you dive down the
rabbit hole and realize it goes forever.

> > also try googling for "100% test coverage" and reading the variety of
> > opinions the wider world has on the topic.
> 
> Sorry, I could not resist.... But you know the funny thing is, when
> you perform a post-mortem to determine why the bug made it into
> production, it usually points to (1) a developer mistake and (2) lack
> of test case.
> 
> If you break (1) or (2) you break the chain for the bug. So you either
> have to hire developers who don't make mistakes or provide complete
> test cases.

i don't think that view lines up perfectly with the real world as you
might like it to.  tests can have bugs too, and i've found plenty of
those.  as in, all the tests pass fine, but that's because the tests
set up an invalid environment that doesn't match the real runtime.

or the tests are there, and the runtime (e.g. kernel) changed.  that
doesn't stop the bug from being introduced because kernel developers
aren't running all of the world's testsuites against their releases.

i'm not saying tests don't add value and we shouldn't write them.  i
write tests constantly.  but i am saying that they aren't the solution
to all of our ails.
-mike

  parent reply	other threads:[~2021-03-24  1:13 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-23 16:39 Peng Yu
2021-03-23 20:41 ` Mike Frysinger
2021-03-23 21:02   ` Jeffrey Walton
2021-03-23 23:09     ` Peng Yu
2021-03-24  1:17       ` Mike Frysinger
2021-03-24  1:13     ` Mike Frysinger [this message]
2021-03-24  3:13       ` Peng Yu
2021-03-24 12:31         ` Adhemerval Zanella
2021-03-24  8:32       ` tomas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YFqSQ7zERwbe/aoZ@vapier \
    --to=vapier@gentoo.org \
    --cc=libc-help@sourceware.org \
    --cc=noloader@gmail.com \
    --cc=pengyu.ut@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).