09.08.2016, 18:42, "Zachary Turner via lldb-dev" <lldb-dev@lists.llvm.org>: > There are a lot of reasons for the lack of tests. Off the top of my head, > two of the biggest ones are: > > 1) Some areas of LLDB have been historically hard to test. The unwinder and > core dumps come to mind. You can't really just check in an 800MB core dump > into the repo.
Side note: core dumps are often higly compressible, so they may have quite reasonable size e.g. in .xz format > 2) Tests are very heavyweight. You have to write a Makefile. You have to > write a Python script that uses the SB API. you have to write a C program. > Then you have to figure out the right incantation of dotest.py to run your > test. Once you've done this many times it becomes easier, but the barrier to > entry is high. > > #1 can be improved through the use of unit tests and fuzzing. Sure, it's > hard to generate a full blown executable that contains every edge case the > unwinder might ever experience and then have it try to unwind through there. > Especially considering that the unwinder behaves differently on every > platform. But it's much more manageable to write a unit test that constructs > a particular sequence of bytes in memory, passes it to the unwinder, and > checks the return value of some function that is supposed to handle that. > It's still not entirely simple, since the unwinder is partially heuristic, > but at least it's more manageable. > > There are also ways we can write IR by hand and have llc generate some byte > code for us and then pass that to those same functions. Again, it's not like > we can just start doing this overnight, but there are ways. The question is > just how serious of an effort are we prepared to make and how much time are > we prepared to put into making this testable versus implementing new > features, fixing bugs, etc. > > #2 could potentially be improved by lit style tests. As I mentioned in my > last post, think lldbinline style tests. Not appropriate for everything, but > certainly for a lot of things. If you only had to have one file which is a C > program with some annotations in the file, that is a much lower barrier to > entry. > > Again, the real question is just how much effort are we actually prepared to > put into this? I'd love it if there were entire days or weeks that were just > testing weeks, where all we did was add new tests (or refactor code to make > it more testable) and people didn't work on anything else. I've been > inactive for a while because I've had to prioritize work on some things in > LLVM, but I could make time for something like that. > > On Mon, Aug 8, 2016 at 6:12 PM Vedant Kumar via lldb-dev > <lldb-dev@lists.llvm.org> wrote: >> FWIW, as a happy lldb user, it's exciting to read about these planned >> developments. >> >> I have two follow-up questions about the section on 'Testing Strategy >> Evaluation': (1) what is lldb's policy on including test updates with bug fix >> commits and functional changes, and (2) how is this policy enforced? >> >> AFAICT, it seems that lldb is not as strict about its test policy as other >> llvm >> sub-projects. That could be to its detriment. Here are some very rough >> numbers >> on the number of commits which include test updates [1]: >> >> - lldb: 287 of the past 1000 commits >> - llvm: 511 of the past 1000 commits >> - clang: 622 of the past 1000 commits >> - compiler-rt: 543 of the past 1000 commits >> >> NFC commits make these numbers a bit noisy. But, unless lldb has a much >> higher >> ratio of NFC commits to functional changes as compared to other llvm >> sub-projects, this is a concerning statistic. >> >> best, >> vedant >> >> [1] Based on ToT = r278069. >> >> HAS_TEST=0 >> TOTAL=1000 >> for HASH in $(git log --oneline -n$TOTAL | cut -d' ' -f1); do >> git show --stat $HASH | grep "|" | grep -q test && HAS_TEST=$((HAS_TEST+1)) >> done >> echo $HAS_TEST "/" $TOTAL >> >>> On Aug 8, 2016, at 2:57 PM, Zachary Turner via lldb-dev >>> <lldb-dev@lists.llvm.org> wrote: >>> >>> >>> >>> On Mon, Aug 8, 2016 at 2:40 PM Kate Stone via lldb-dev >>> <lldb-dev@lists.llvm.org> wrote: >>> LLDB has come a long way since the project was first announced. As a >>> robust debugger for C-family languages and Swift, LLDB is constantly in use >>> by millions of developers. It has also become a foundation for bringing up >>> debugger support for other languages like Go and RenderScript. In addition >>> to the original macOS implementation the Linux LLDB port is in active use >>> and Windows support has made significant strides. IDE and editor >>> integration via both SB APIs and MI have made LLDB available to even more >>> users. It’s definitely a project every contributor can be proud of and I’d >>> like to take a moment to thank everyone who has been involved in one way or >>> another. >>> >>> It’s also a project that shows some signs of strain due to its rapid >>> growth. We’ve accumulated some technical debt that must be paid off, and >>> in general it seems like a good time to reflect on where we'll be headed >>> next. We’ve outlined a few goals for discussion below as well as one more >>> short-term action. Discussion is very much encouraged. >>> >>> Forward-Looking Goals >>> >>> 1. Testing Strategy Evaluation >>> >>> Keeping our code base healthy is next to impossible without a robust >>> testing strategy. Our existing suite of tests is straightforward to run >>> locally, and serves as a foundation for continuous integration. That said, >>> it is definitely not exhaustive. Obvious priorities for improvement >>> include gathering coverage information, investing in more conventional unit >>> tests in addition to the suite of end-to-end tests, and introducing tests >>> in code bases where we depend on debugger-specific behavior (e.g.: for >>> expression evaluation.) >>> I know this is going to be controversial, but I think we should at least do >>> a serious evaluation of whether using the lit infrastructure would work for >>> LLDB. Conventional wisdom is that it won't work because LLDB tests are >>> fundamentally different than LLVM tests. I actually completely agree with >>> the latter part. They are fundamentally different. >>> >>> However, we've seen some effort to move towards lldb inline tests, and in a >>> sense that's conceptually exactly what lit tests are. My concern is that >>> nobody with experience working on LLDB has a sufficient understanding of >>> what lit is capable of to really figure this out. >>> >>> I know when I mentioned this some months ago Jonathan Roelofs chimed in and >>> said that he believes lit is extensible enough to support LLDB's use case. >>> The argument -- if I remember it correctly -- is that the traditional view >>> of what a lit test (i.e. a sequence of commands that checks the output of a >>> program against expected output) is one particular implementation of a >>> lit-style test. But that you can make your own which do whatever you want. >>> >>> This would not just be busy work either. I think everyone involved with >>> LLDB has experienced flakiness in the test suite. Sometimes it's flakiness >>> in LLDB itself, but sometimes it is flakiness in the test infrastructure. >>> It would be nice to completely eliminate one source of flakiness. >>> >>> I think it would be worth having some LLDB experts sit down in person with >>> some lit experts and brainstorm ways to make LLDB use lit. >>> >>> Certainly it's worth a serious look, even if nothing comes of it. >>> >>> >>> 4. Good Citizenship in the LLVM Community >>> >>> Last, but definitely not least, LLDB should endeavor to be a good citizen >>> of the LLVM community. We should encourage developers to think of the >>> technology stack as a coherent effort, where common code should be >>> introduced at an appropriate level in the stack. Opportunities to factor >>> reusable aspects of the LLDB code base up the stack into LLVM will be >>> pursued. >>> >>> One arbitrary source of inconsistency at present is LLDB’s coding standard. >>> That brings us to… >>> >>> Near-Term Goal: Standardizing on LLVM-style clang-format Rules >>> >>> We’ve heard from several in the community that would prefer to have a >>> single code formatting style to further unify the two code bases. Using >>> clang-format with the default LLVM conventions would simplify code >>> migration, editor configuration, and coding habits for developers who work >>> in multiple LLVM projects. There are non-trivial implications to >>> reformatting a code base with this much history. It can obfuscate history >>> and impact downstream projects by complicating merges. Ideally, it should >>> be done once with as much advance notice as is practical. Here’s the >>> timeline we’re proposing: >>> >>> Today - mechanical reformatting proposed, comment period begins >>> >>> To get a preview of what straightforward reformatting of the code looks >>> like, just follow these steps to get a clean copy of the repository and >>> reformat it: >>> • Check out a clean copy of the existing repository >>> • Edit .clang-format in the root of the tree, remove all but the line >>>“BasedOnStyle: LLVM” >>> • Change your current working directory to the root of the tree to >>>reformat >>> • Double-check to make sure you did step 3 ;-) >>> • Run the following shell command: "find . -name "*.[c,cpp,h] -exec >>>clang-format -i {} +" >>> Very excited about this one, personally. While I have my share of qualms >>> with LLVM's style, the benefit of having consistency is hard to overstate. >>> It greatly reduces the effort to switch between codebases, a direct >>> consequence of which is that it encourages people with LLVM expertise to >>> jump into the LLDB codebase, which hopefully can help to tear down the >>> invisible wall between the two. >>> >>> As a personal aside, this allows me to go back to my normal workflow of >>> having 3 edit source files opened simultaneously and tiled horizontally, >>> which is very nice. >>> >>> _______________________________________________ >>> lldb-dev mailing list >>> lldb-dev@lists.llvm.org >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev >> >> _______________________________________________ >> lldb-dev mailing list >> lldb-dev@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev > , > > _______________________________________________ > lldb-dev mailing list > lldb-dev@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev -- Regards, Konstantin _______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev