_._,_._,_
Groups.io Links:You receive all messages sent to this group.
View/Reply Online (#395) | Reply To Group | Reply To Sender | Mute This Topic | New Topic
Your Subscription | Contact Group Owner | Unsubscribe [tvau...@onyxpoint.com]
_._,_._,_
My personal number one measure of module quality is documentation, hands down. Nothing else comes close.
That means a README that provides a good overview of the module’s structure, scope, requirements, and capabilities, and a *thorough* REFERENCE(.md) document. As a module quality consideration, I don’t really care whether the reference documentation is automatically generated. I do care that it covers every public member of the module, accurately and precisely explaining the significance, allowed values, default values, and relationships among them. Strings-derived documentation can be pretty poor, so I don’t attribute much weight to whether docs were generated that way. If I have to look at manifests or other technical artifacts to determine whether the module supports my needs or how to prod it into doing so then that’s a fail in my book.
Good documentary comments are high on my list for code quality, too. Consistent code style comes in here as well, but not so much most specific style choices. A good test suite (that passes) also makes the cut, and in it, I would prefer to see both unit tests and functional tests. I don’t particularly object to the voxpupuli puppet-lint checks, but I consider those a weak proxy for a subjective analysis of the module code.
I appreciate that most of that is difficult for a computer to evaluate.
John Bollinger
From: voxp...@groups.io <voxp...@groups.io>
On Behalf Of David Hollinger via groups.io
Sent: Friday, October 29, 2021 9:44 AM
To: voxp...@groups.io
Cc: puppet...@googlegroups.com
Subject: Re: [voxpupuli] Do you have opinions on what module quality means?
Caution: External Sender. Do not open unless you know the content is safe.
‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
_._,_._,_
Groups.io Links:
You receive all messages sent to this group.
View/Reply
Online (#398) |
Reply To Group |
Reply To Sender |
Mute This Topic |
New Topic
Your
Subscription | Contact Group Owner |
Unsubscribe [John.Bo...@StJude.org]
_._,_._,_
Email Disclaimer: www.stjude.org/emaildisclaimer
Consultation Disclaimer: www.stjude.org/consultationdisclaimer
_._,_._,_
Groups.io Links:You receive all messages sent to this group.
After reading through all the replies, there are bits and pieces from many people that seem to cover most of my opinions. I am going to try and collect those here:What about this idea? Instead of trying to "measure quality" as a metric, maybe try to expose individual checks or metrics about various aspects of a module and let the user decide "is this high quality for me, or not"?I like this idea. Present a reasonable set of data about things different users may care about, or might should care about, along with a link to some docs explaining why people care about the listed things.
Regarding unit tests, I find the utilization of rspec-puppet-facts (and thereby facterdb) to be a must. I have this opinion for two reasons:1) as a maintainer, it ensures that my tests work for all the things I have listed in metadata.json (or at least those supported by the gems) which is great in general and especially important when the supported OS lists gets modified.2) as a user, if I am looking into how a module works it helps me see that the maintainer is testing across all the needed OS's quickly and without having to read every line of every spec test looking for OS combos that I care about.
As a user, I want to see that there are at least minimal tests covering public bits - aka at least a "it { is_expected.to compile.with_all_deps }" run via rspec-puppet-facts on each supported os. I prefer to see more but also understand that many people who write puppet code are not nearly as comfortable writing tests.
Regarding integration tests, I love to see them but it takes a lot more knowledge to write them than it does to write a good puppet module. I would love to see straight away that a module has them (and that CI executes them) but wouldn't hold it against an author that they don't have any.
Personally, I find having a module documented with puppet-strings to be critical for two reasons:1) it provides lots of useful information within the source code of the module2) it enables the programmatic generation of a REFERENCE.md file that can then be read on GitHub/GitLab and rendered on the Forge.Examples can also be contained within this and there by be referenced by users in either location too. I think README.md should have a very minimal set of examples in it. Most examples should be kept closer to what they are describing via puppet-strings IMO.Speaking of the README.md, I think looking for select key sections would be worthwhile. I think it should contain the following at a minimum:- an H1 title at the top- badges- that show the version released on the Forge and link to the module on the Forge- build status- license (ideally via the shields.io badge that reads the license file)- an H2 Usage section- an H2 Reference section that contains at least text referencing REFERENCE.md- an H2 Changelog section that at least contains text referring to CHANGELOG.md
One other thing I wish there was a good way to flag on, maybe as part of metadata-json-lint, is when author, summary, license, source, project_page, and issues_url are not filled out in an expected format (or absent all together).
Ben,As you describe the summary scores for new users that makes sense. One UI idea i just had as i read your reply was the following:- Give an overall summary score "4.3" or something- Have a "+" or ">" button that can expand that score and show the components that went into it- For each line item show how much each line was worth. This way you can total up the score.- Also show the things that were missing and how many points they were worth. This way module developers know what needs to be fixed/improved in order to raise their score.Just an idea I had and wanted to "brain dump" while it was fresh.-Nick
_._,_._,_
Groups.io Links:You receive all messages sent to this group.
_._,_._,_
_._,_._,_
Groups.io Links:You receive all messages sent to this group.
_._,_._,_