I am pretty sure the build cache is not in use on Jenkins. It would have to
live somewhere persisted across runs, which I don't think is default. And
we'd be seeing much lower build times.

Kenn

On Mon, Jan 7, 2019 at 9:42 AM Mikhail Gryzykhin <mig...@google.com> wrote:

> @Jason
> I believe that we want to get some coverage report as a PR pre-commit
> check, so that we can utilize it as part of code review. Removing
> parallelization increases pre-commit duration greatly (see the big drop
> on this graph
> <http://104.154.241.245/d/_TNndF2iz/pre-commit-test-latency?orgId=1&from=now-6M&to=now>)
> and I believe that's what Michael worries about.
>
> If we'd want to run coverage jobs in background on master, then it is
> possible to do a separate job.
>
> --Mikhail
>
> Have feedback <http://go/migryz-feedback>?
>
>
> On Mon, Jan 7, 2019 at 9:33 AM Jason Kuster <jasonkus...@google.com>
> wrote:
>
>> Michael, could we solve that problem by adding an additional build with
>> those features disabled specifically for generating coverage data over
>> time? Any tradeoffs to doing something like that?
>>
>> On Mon, Jan 7, 2019 at 8:23 AM Michael Luckey <adude3...@gmail.com>
>> wrote:
>>
>>> Unfortunately I am a bit worried, that enabling code coverage will not
>>> come for free at the moment. As far as I understand the current state of
>>> the build system, we would either have to disable parallel builds or the
>>> build cache, which I assume both to be enabled currently on precommit runs.
>>> I am trying to get some numbers here, but it might well be, that someone
>>> did already that evaluation. So I d be happy to get further insights if
>>> someone with deeper knowledge to the setup could jump in here.
>>>
>>> This situation will probably be resolved after an upgrade to gradle5,
>>> but unfortunately this seems to be not easily doable right now.
>>>
>>> michel
>>>
>>>
>>>
>>> On Mon, Jan 7, 2019 at 4:21 PM Maximilian Michels <m...@apache.org>
>>> wrote:
>>>
>>>> Code coverage would be very useful, regardless of what tool we use to
>>>> measure
>>>> it. Especially when reviewing PRs, because it provides a quantitative
>>>> measure
>>>> which can help reviewer and contributor to decide if testing is
>>>> sufficient.
>>>>
>>>> I'd prefer to use specific tools instead of one-fits-it-all tool but
>>>> I'm open to
>>>> whatever works best. The process of setting the tooling up is likely
>>>> going to be
>>>> iterative.
>>>>
>>>> @Mikhail If you want to setup anything and present it here, that would
>>>> be
>>>> awesome. (Of course discussion can continue here.)
>>>>
>>>> On 03.01.19 19:34, Heejong Lee wrote:
>>>> > I think we should also consider false positive ratio of the tool.
>>>> Oftentimes
>>>> > deeper analysis easily produces tons of false positives which make
>>>> people less
>>>> > interested in static analysis results because of triaging overheads.
>>>> >
>>>> > On Thu, Jan 3, 2019 at 4:18 PM Scott Wegner <sc...@apache.org
>>>> > <mailto:sc...@apache.org>> wrote:
>>>> >
>>>> >     Discussion on software engineering practices and tools tends to
>>>> gather many
>>>> >     opinions :) I suggest breaking this out into a doc to keep the
>>>> discussion
>>>> >     organized.
>>>> >
>>>> >     I appreciate that you've started with a list of requirements. I
>>>> would add a few:
>>>> >
>>>> >     6. Analysis results should be integrated into the code review
>>>> workflow.
>>>> >     7. It should also be possible to run analysis and evaluate
>>>> results locally.
>>>> >     8. Analysis rules and thresholds should be easily configurable.
>>>> >
>>>> >     And some thoughts on the previous requirements:
>>>> >
>>>> >      > 2. Tool should keep history of reports.
>>>> >
>>>> >     Seems nice-to-have but not required. I believe the most value is
>>>> viewing the
>>>> >     delta during code review, and also maybe a snapshot of the
>>>> overall state of
>>>> >     master. If we want trends we could also import data into
>>>> >     s.apache.org/beam-community-metrics <
>>>> http://s.apache.org/beam-community-metrics>
>>>> >
>>>> >      > 4. Tool should encorporate code coverage and static analysis
>>>> reports. (Or
>>>> >     more if applicable)
>>>> >
>>>> >     Is the idea to have a single tool responsible for all code
>>>> analysis? We
>>>> >     currently have a variety of tools running in our build. It would
>>>> be
>>>> >     challenging to find a single tool that aggregates all current
>>>> (and future)
>>>> >     analysis, especially considering the different language
>>>> ecosystems. Having
>>>> >     targeted tools responsible for different pieces allows us to
>>>> pick-and-choose
>>>> >     what works best for Beam.
>>>> >
>>>> >
>>>> >     On Thu, Jan 3, 2019 at 3:43 PM Mikhail Gryzykhin <
>>>> mig...@google.com
>>>> >     <mailto:mig...@google.com>> wrote:
>>>> >
>>>> >         Let me summarize and answer main question that I see:
>>>> >         1. Seems that we do want to have some statistics on coverage
>>>> and
>>>> >         integrate automatic requirements into our build system.
>>>> >         2. Implementation is still to be discussed.
>>>> >
>>>> >         Lets talk about implementation further.
>>>> >
>>>> >         My requirements for choice are:
>>>> >         1. Tool should give us an option for deep-dive into findings.
>>>> >         2. Tool should keep history of reports.
>>>> >         3. Tool should give an option to break build (allow for
>>>> hardcoded
>>>> >         requirements)
>>>> >         4. Tool should encorporate code coverage and static analysis
>>>> reports.
>>>> >         (Or more if applicable)
>>>> >         5. Tool should support most or all languages we utilize in
>>>> beam.
>>>> >
>>>> >         Let me dive into SonarQube a bit first. (All up to my
>>>> understanding of
>>>> >         how it works.)
>>>> >         Hits most of the points, potentially with some tweaks.
>>>> >         This tool relies on reports generated by common tools. It
>>>> also tracks
>>>> >         history of builds and allows to navigate it. Multi language.
>>>> I'm still
>>>> >         working on figuring out how to configure it though.
>>>> >
>>>> >         Common thresholds/checks that are suggested by SonarQube:
>>>> >         Many checks are possible to apply to new code only. This
>>>> allows not to
>>>> >         fix legacy code, but keep all new additions clean and neat
>>>> (ish).
>>>> >         Test coverage by line/branch: Relies on cubertura report.
>>>> Usually
>>>> >         coverage by branch is suggested. (all "if" case lines should
>>>> be tested
>>>> >         with positive and negative condition result)
>>>> >         Method complexity: Amount of different paths/conditions that
>>>> method can
>>>> >         be invoked with. Suggested max number is 15. Generally
>>>> describes how
>>>> >         easy it is to test/understand method.
>>>> >         Bugs/vulnerabilities: Generally, output of Findbug. Reflects
>>>> commonly
>>>> >         vulnerable/dangerous code that might cause errors. Or just
>>>> errors in
>>>> >         code. I believe that sonar allows for custom code analysis as
>>>> well, but
>>>> >         that is not required.
>>>> >         Technical debt: estimations on how much time will it take to
>>>> cleanup
>>>> >         code to make it shiny. Includes code duplications, commented
>>>> code, not
>>>> >         following naming conventions, long methods, ifs that can be
>>>> inverted,
>>>> >         public methods that can be private, etc. I'm not familiar
>>>> with explicit
>>>> >         list, but on my experience suggestions are usually relevant.
>>>> >         More on metrics can be found here:
>>>> >
>>>> https://docs.sonarqube.org/latest/user-guide/metric-definitions/
>>>> >
>>>> >         Suggested alternatives:
>>>> >         https://scan.coverity.com/
>>>> >         This tool looks great and I'll check more on it. But it has a
>>>> >         restriction to 14 or 7 builds per week (not sure how will
>>>> they estimate
>>>> >         our project). Also, I'm not sure if we can break pre-commit
>>>> based on
>>>> >         report from coverity. Looks good for generating historical
>>>> data.
>>>> >
>>>> >         https://docs.codecov.io/docs/browser-extension
>>>> >         I'll check more on this one. Looks great to have it
>>>> integrated in PRs.
>>>> >         Although it requires plugin installation by each developer. I
>>>> don't
>>>> >         think it allows to break builds and only does coverage. Am I
>>>> correct?
>>>> >
>>>> >         Regards,
>>>> >         --Mikhail
>>>> >
>>>> >         Have feedback <http://go/migryz-feedback>?
>>>> >
>>>> >         On Thu, Jan 3, 2019 at 2:18 PM Kenneth Knowles <
>>>> k...@apache.org
>>>> >         <mailto:k...@apache.org>> wrote:
>>>> >
>>>> >             It would be very useful to have line and/or branch
>>>> coverage visible.
>>>> >             These are both very weak proxies for quality or
>>>> reliability, so IMO
>>>> >             strict thresholds are not helpful. One thing that is
>>>> super useful is
>>>> >             to integrate line coverage into code review, like this:
>>>> >             https://docs.codecov.io/docs/browser-extension. It is
>>>> very easy to
>>>> >             notice major missing tests.
>>>> >
>>>> >             We have never really used Sonarqube. It was turned on as a
>>>> >             possibility in the early days but never worked on past
>>>> that point.
>>>> >             Could be nice. I suspect there's a lot to be gained by
>>>> just finding
>>>> >             very low numbers and improving them. So just running
>>>> Jacoco's
>>>> >             offline HTML generation would do it (also this integrates
>>>> with
>>>> >             Jenkins). I tried this the other day and discovered that
>>>> our gradle
>>>> >             config is broken and does not wire tests and coverage
>>>> reporting
>>>> >             together properly. Last thing: How is "technical debt"
>>>> measured? I'm
>>>> >             skeptical of quantitative measures for qualitative
>>>> notions.
>>>> >
>>>> >             Kenn
>>>> >
>>>> >             On Thu, Jan 3, 2019 at 1:58 PM Heejong Lee <
>>>> heej...@google.com
>>>> >             <mailto:heej...@google.com>> wrote:
>>>> >
>>>> >                 I don't have any experience of using SonarQube but
>>>> Coverity
>>>> >                 worked well for me. Looks like it already has beam
>>>> repo:
>>>> >                 https://scan.coverity.com/projects/11881
>>>> >
>>>> >                 On Thu, Jan 3, 2019 at 1:27 PM Reuven Lax <
>>>> re...@google.com
>>>> >                 <mailto:re...@google.com>> wrote:
>>>> >
>>>> >                     checkstyle and findbugs are already run as
>>>> precommit checks,
>>>> >                     are they not?
>>>> >
>>>> >                     On Thu, Jan 3, 2019 at 7:19 PM Mikhail Gryzykhin
>>>> >                     <mig...@google.com <mailto:mig...@google.com>>
>>>> wrote:
>>>> >
>>>> >                         Hi everyone,
>>>> >
>>>> >                         In our current builds we (can) run multiple
>>>> code quality
>>>> >                         checks tools like checkstyle, findbugs, code
>>>> test
>>>> >                         coverage via cubertura. However we do not
>>>> utilize many
>>>> >                         of those signals.
>>>> >
>>>> >                         I suggest to add requirements to code based
>>>> on those
>>>> >                         tools. Specifically, I suggest to add
>>>> pre-commit checks
>>>> >                         that will require PRs to conform to some
>>>> quality checks.
>>>> >
>>>> >                         We can see good example of thresholds to add
>>>> at Apache
>>>> >                         SonarQube provided default quality gate config
>>>> >                         <
>>>> https://builds.apache.org/analysis/quality_gates/show/1>:
>>>> >                         80% tests coverage on new code,
>>>> >                         5% technical technical debt on new code,
>>>> >                         No bugs/Vulnerabilities added.
>>>> >
>>>> >                         As another part of this proposal, I want to
>>>> suggest the
>>>> >                         use of SonarQube for tracking code statistics
>>>> and as
>>>> >                         agent for enforcing code quality thresholds.
>>>> It is
>>>> >                         Apache provided tool that has integration
>>>> with Jenkins
>>>> >                         or Gradle via plugins.
>>>> >
>>>> >                         I believe some reporting to SonarQube was
>>>> configured for
>>>> >                         mvn builds of some of Beam sub-projects, but
>>>> was lost
>>>> >                         during migration to gradle.
>>>> >
>>>> >                         I was looking for other options, but so far
>>>> found only
>>>> >                         general configs to gradle builds that will
>>>> fail build if
>>>> >                         code coverage for project is too low. Such
>>>> approach will
>>>> >                         force us to backfill tests for all existing
>>>> code that
>>>> >                         can be tedious and demand learning of all
>>>> legacy code
>>>> >                         that might not be part of current work.
>>>> >
>>>> >                         I suggest to discuss and come to conclusion
>>>> on two
>>>> >                         points in this tread:
>>>> >                         1. Do we want to add code quality checks to
>>>> our
>>>> >                         pre-commit jobs and require them to pass
>>>> before PR is
>>>> >                         merged?
>>>> >
>>>> >                             Suggested: Add code quality checks listed
>>>> above at
>>>> >                             first, adjust them as we see fit in the
>>>> future.
>>>> >
>>>> >                         2. What tools do we want to utilize for
>>>> analyzing code
>>>> >                         quality?
>>>> >
>>>> >                             Under discussion. Suggested: SonarQube,
>>>> but will
>>>> >                             depend on functionality level we want to
>>>> achieve.
>>>> >
>>>> >
>>>> >                         Regards,
>>>> >                         --Mikhail
>>>> >
>>>> >
>>>> >
>>>> >     --
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >     Got feedback? tinyurl.com/swegner-feedback
>>>> >     <https://tinyurl.com/swegner-feedback>
>>>> >
>>>>
>>>
>>
>> --
>> -------
>> Jason Kuster
>> Apache Beam / Google Cloud Dataflow
>>
>> See something? Say something. go/jasonkuster-feedback
>> <https://goto.google.com/jasonkuster-feedback>
>>
>

Reply via email to