By Developers, For Developers
PDF Pg | Paper Pg | Type | Description | Fixed on | Comments |
---|---|---|---|---|---|
17 | TYPO | Unnecessary comma: “…on a team creating, an | 2010-04-11 | ||
26 | TYPO | In sidebar, missing “a”: “But there are few capabilities…” should be “But there are a few capabilities…”. | 2010-04-11 | ||
12 | ERROR | The subscript on page 12 is not showing in the iPhone (.mobi?) version. I am using Stanza 2.1.1 and it all just reads as “( T)”. It’s fine in the PDF version. | 2012-04-05 | ||
10 | TYPO | “… behavior of the the code in a test.” should be “… behavior of the code in a test.” | 2010-04-11 | ||
32 | TYPO | In the sample code, the call to “checkExpected” shouldn’t be commented out. | 2010-04-11 | ||
59 | TYPO | “LedDriver_TurnAllOff( ) is not masking the bits” should read “LedDriver_TurnOff( ) is not masking the bits” | 2010-04-11 | ||
77 | SUGGEST | “You could refactor the tests so that more of the tests depend on the query functions.” It’s worth pointing out that just relying on the query functions stop you testing that the hardware address is still being set, which is the main point of the driver. | 2010-04-11 | ||
81 | ERROR | The reference to “Excerpt from: Taming the Embedded Tiger” looks messed up on iPhone version. | 2012-04-05 | ||
12 | TYPO | Just under the diagram at the top of the page, “unknownable unknowns” should be “unknowable unknowns”. | 2010-04-11 | ||
17 | TYPO | In the section “My Big AH-HAH!”, the phrase “working on a team creating, an embedded communications system” seems to have a comma where one isn’t needed. | 2010-04-11 | ||
29 | SUGGEST | “I have setup” should probably be “I have set up” | 2010-04-11 | ||
32 | ERROR | checkExpected() is commented out in teardown() for some reason | 2010-04-11 | ||
37 | TYPO | “Remember the script create the header, sourse and test file. ” should probably be “Remember the script creates the header, sourse and test files.” | 2010-04-11 | ||
59 | TYPO | “It’s simple. LedDriver_TurnAllOff( ) is not masking the bits that should not be affected.” should probably refer to LedDriver_TurnOff() instead of LedDriver_TurnAllOff(). | 2010-04-11 | ||
89 | TYPO | different tenses: “This kludge works, but it was ugly.” should probably be “This kludge works, but it is ugly.” | 2010-04-11 | ||
97 | TYPO | Missing period at end of sentence “In the next few subsections we’ll look at some common unit test approaches that could be at least partially replaced by TDD” - also, not sure if all of the approaches are technically “unit tests” | 2010-08-06 | Nick \n \nthanks for the fixes. can you say more about your last comment. \n \n-- period added -- | |
121 | SUGGEST | Confused by the test call to ScheduleTurnOn() in “LightScheduler_ScheduleTurnOn(3, EVERYDAY, 1200);” as the block diagrams (e.g., Figure 8.4) only have three interface functions for LightScheduler: Add, Remove, and Wakeup. Something seems to be inconsistent. Also, consider changing the name of ScheduleTurnOn() (or Add() or whatever) to have a better name: light id, enum date, and time in integer minutes is not obvious from ScheduleTurnOn. | 2010-08-06 | updated the diagrams earlier. I also added a note that not all interface functions are shown. this is typical of informal usage of uml. | |
122 | TYPO | incomplete phrase “We develop right up the unknown” | 2010-04-11 | ||
130 | SUGGEST | TimeService_SetPeriodicAlarmInSeconds() and TimeService_CancelPeriodicAlarmInSeconds() show up here, kind of out of the blue; I don’t think they have been shown previously; should there be a test for them? | 2010-10-07 | ||
131 | SUGGEST | it might help readability if the same day/minute representation/naming of Time was used within ScheduledLightEvent; e.g. “time | 2010-10-07 | I have them different because to the scheduler, there it is only concerned with minute of day, where the time service has other kinds of minuted, like minuteOfHour. These are not shown, yet anyway. \n \nI could make them both be minuteOfDay. \n \nOK, I changed it. it is more descriptive. \n | |
131 | SUGGEST | DoesLightRespondToday2() appears here out of the blue; DoesLightRespondToday() appears on the next page (132); maybe the “2” is a refactored version? | 2010-04-11 | ||
152 | TYPO | Line 8 has “…cygwin isa…” where it should have “…cygwin is a…” | 2010-04-11 | ||
152 | TYPO | Line 10 has “…need a to…” where it should have “…need to…” | 2010-04-11 | ||
154 | TYPO | Line 2 has “an build” where it should have “a build” | 2010-04-11 | ||
97 | TYPO | Line 8 has “…big bucket to time…” where it should have “…big bucket of time…” | 2010-04-11 | ||
44 | TYPO | At the end of the paragraph “Manage Dependencies”, the text is “during initialized” and should be “during initialization”. | 2010-05-04 | ||
37 | TYPO | In point number 4, “sourse” should be spelled “source”. | 2010-05-04 | ||
60 | TYPO | Somewhere in the test runs starting at the top of page 59 (“OK (4 tests, 4 ran, 4 checks, 0 ignored, 0 filtered out)”) and 2/3 of the way down page 60 (“OK (6 tests, 6 ran, 7 checks, 0 ignored, 0 filtered out, 1 ms)”), an extra check was added. I’m getting 6 tests and 6 checks at the same point. | 2010-08-06 | I'll be doing a big update to this chapter when it is converted to Unity. That will fix it. \n \n--- I think it all adds up now. | |
67 | TYPO | Second sentence, “treat this runtime errors” should be “treat this runtime error”. | 2010-05-04 | ||
97 | TYPO | The quote at the top of the page is attributed to Professor Wagstaff, while in the first paragraph it’s Professor Flagstaff. | 2010-05-04 | ||
97 | TYPO | “The most popular answer I have heard, from polling conference attendees, is 50%. That is a big bucket to time.” Should that be, “…a big bucket OF time”? | 2010-05-04 | ||
27 | OK | The example for AllTests.cpp did not work for me. CppUTest has a file called AllTests.cpp that calls CommandLineTestRunner::RunAllTests instead of a RUN_ALL_TESTS macro. That does work for me. | 2010-05-04 | RUN_ALL_TESTS is in the mainline CppUTest. It's will be in the next official release. \n \nadded a temporary margin note | |
56 | TYPO | “test files are in place and part of out automated build.” out —> our | 2010-05-04 | ||
75 | OK | “There are magic numbers in the LedDriverTest.cpp file for the boundary values. They could be removed, but I’ll leave them for now.” Not so: you had us remove them on page 70. | 2010-05-04 | The magic numbers are still there in the tests for the boundary values: 0 and 17 \n \nI could pull the paragraph. is it confusing? | |
80 | TYPO | “Here is where your development system and Dual-Targetting come into play” Targetting —> Targeting | 2010-05-04 | ||
183 | TYPO | In the section, “Eclipse IDE” the sentence “No need to start and editor war here, but I like the eclipse with CDT | 2010-05-04 | ||
146 | TYPO | “CppUTest has a build in” should probably be “CppUTest has a built-in” | 2010-05-04 | ||
150 | SUGGEST | just a style thing - when possible, I like to use calloc() instead of malloc for operations like: buffer = (char *)calloc(buffer_size); instead of: buffer = (char *)malloc(buffer_size); just seem to make the intent clearer (possibly at the expensive of some run-time overhead clearing the buffer). | 2010-10-07 | ||
152 | TYPO | “FormatOutputSpy_GetOupu” should be “FormatOutputSpy_GetOuput” in: void setup() { | 2010-05-04 | ||
139 | TYPO | “makes sure the code handles is design maximum” is —> its | 2010-05-04 | ||
93 | SUGGEST | Is the spelling “Adaptor” correct, rather than “Adapter”? At best, it seems English instead of American. | 2010-05-21 | ||
203 | TYPO | 2nd paragraph - evolved, designs we (should be “were”) not improved | 2010-09-07 | ||
43 | ERROR | Figure 3.1 is a UML class diagram | 2010-08-06 | ||
82 | SUGGEST | 5.1 add bullet to list:
| 2010-08-06 | ||
75 | SUGGEST | “TDD generated unit tests often are more like gray-box tests” | 2010-08-06 | ||
173 | SUGGEST | the CMocked generated .c file of 255 lines - don’t want it listed in the book but in the PDF it be would nice to have the down-load link so we could look at the code | 2010-12-28 | ||
31 | ERROR | Spurious #endif at the bottom of page. | 2010-08-06 | ||
84 | SUGGEST | section 5.3 | 2010-08-06 | ||
33-34 | TYPO | With the refactored test code, I don’t see where the tests actually call any assertions (the call to checkExpected() in the teardown is commented out). And a note on that: I find it surprising for the tests not to have their own assertions—not that they can’t call checkExpected themselves, but factoring that out to the teardown seems a little odd [not horrible to figure out with just 2 tests, but I think it’d be hard to figure out with multiple test groups, some of which factor out to teardown, some of which don’t, and multiple tests, some of which will have some assertions of their own]. | 2010-08-06 | I don't think this was an error, but I have changed the example. | |
46 | TYPO | The sentence reads: “Instead, we must passed the LED’s address to the driver during initialization. ” but probably should say “pass” instead of “passed” | 2010-08-06 | ||
46 | TYPO | The sidebar for Dependency Injection is at the top of the page. It seems like it would fit better at the end of the “Manage Dependencies” section since it’s really not a sidebar and instead directly in the flow | 2010-08-06 | ||
50 | SUGGEST | The State Machine on p50 may already be too complicated, but I was wondering if maybe you could color code the states with Red/Green/Refactor (maybe red shading to green for refactor? or maybe just green, or maybe blue or..) | 2010-08-06 | Color added | |
53 | TYPO | Feathers quote reads “vise”, not “viCe” in the original. I was thinking we were going to get something really racy when the sidebar heading was “Software Vice”, maybe something about how tawdry you feel after writing code that may or may not work because it’s not tested, or how addictive that green bar is, like another shot of heroin to a junkie. | 2010-08-06 | ||
93 | SUGGEST | When I mentioned the Gang of Four in the People’s Republic of China everyone got really tense so those are some No-Longer-Politically-Correct people. Even disregarding that, it seems like the straight-forward authors names should be in the text, with maybe a footnote to the unfortunately named Gang Of Four… | 2010-08-06 | ||
113 | TYPO | The text reads " it can be 8:42—or even leap day“. Maybe it should be ”or even a leap day" (added an “a”); however, I think it might make more sense if it were a leap second given the context. | 2010-08-06 | i left leap year in as there is now a leap day/year example in the book. | |
113 | TYPO | The text reads “supposed to happen at 8:42—you either get | 2010-08-06 | ||
120 | TYPO | The box for TimeService in the picture on this page and page 121 is smudged, not crisp like the other boxes. | 2011-03-18 | odd -- I can't seem to effect the font focus | |
122 | SUGGEST | Rather than the first test being “ScheduleOnTodayNotTimeYet”, why not do the creation test first? It seems to work out that way quite often anyway. | 2010-10-06 | i still have the test in question first, but explain that it is not the first test, just one that lets us envision what we'll need. then I go on to do it incrementally showing more steps. | |
129 | SUGGEST | The code for Light_Scheduler_Wakeup() seems to unnecessarily introduce This is not called for given the code in the method, so I’m suggesting it be taken out. If there is a reason for it, I’m really curious to know what it is! [FWIW, I think the reason is that the code is reverse-engineered om the refactored solution that has checkEvent() function. Even so, unless you’re really suggesting proactively introducing pointers for arguments to functions you might want to extract later, it seems like lightEvent doesn’t belong here] | 2010-10-06 | I will address these and similar suggestions after new content is completed. | |
134 | OK | I would definitely want to test DoesLightRespondToday in isolation for two reasons: So my suggestion is, rather than testing as you did to follow up below (ScheduleWeekEndItsFriday, etc.), to instead hammer DoesLightRespondToday with tests, and then have perhaps only a Wakeup tests for yes, no, and error. The tests will then more closely match the code they’re testing (after all, Wakeup does not have that complex logic). The question of how to control visibility is coming up, I hope… | 2010-10-07 | you will see later that we agree completely. | |
136 | SUGGEST | While I’m not morally opposed to assertions in the setup or teardown, I think it’d be better if there were also a specific test for them since figuring out what the heck went wrong is often pretty difficult with the assertion outside the test. In this case, if the destroy fails to cleanup the callback, every single test will fail, which will mean quite a bit of noise to work through to find the golden nugget of truth. Instead, how about have a DestroyRemovesCallback test? And while you’re at it… it would probably also useful to decide and test what happens when you Destroy a Destroyed Schedule. | 2010-10-07 | ||
137 | SUGGEST | It’d be a shame if the code in ScheduleTwoEventsAtTheSameTime didn’t use the previously defined whenItBecomes() function… | 2010-09-07 | ||
138 | TYPO | Shouldn’t the code snippet for LightScheduler_Create show | 2010-08-06 | good catch... fixed | |
140 | ERROR | In the RejectsTooManyEvents, 128 comes out of nowhere. Shouldn’t that come from a query to the LightScheduler, or instead just be in a do{} while{} that stops only when your patience runs out (say 100000 iters) or when there’s a Fail_TooManyEvents returned? | 2010-08-06 | added 128 to the test list | |
144 | ERROR | I realize that you’re not creating a random number source suitable for gaming, however: - I think that you have to run the RandomMinute_Get 300 times (on page 145) shows that the number of iterations used on page 144, only 100, is insufficient. It’s important that tests be repeatable, and in order to do that, the test for “all in range” needs to be bumped up considerably (100x or so, which will still be fast)—especially if you’re making no consideration for an even distribution—to give good confidence that there’s not some less-likely random number lurking out there (e.g., if the translation function from [0, 1) -> [–30, 30] improperly handles the outer limits, a fairly common mistake) | 2010-08-06 | to make sure the test consistently passes I added srand(). | |
146 | TYPO | Not on the page, but in the source code off the web, one of the functions spells “Fake” as “Fack” | 2010-08-06 | ||
28 | TYPO | Description calls for sprintf test case to test for null, but example shows the string “Hey”. B4 tested for a null string. | 2010-08-06 | ||
265 | SUGGEST | Visual Studio | 2010-09-07 | I downloaded VS 2010 express. It could not convert the dsw and dsp files. I changed the book text to state that whatever VS you use, make sure you have command line build capability. | |
37 | ERROR | The code that is supposed to inject a failure won’t do so. | 2010-10-06 | ||
17 | SUGGEST | Ambiguous / unclear sentence: “Implicit in development is what used to work, continues to work in the next release.” Suggest change to ‘Implicit in using TDD with automated tests, is that during further development we can be sure that what used to work continues to work in the next release.’ | 2010-10-06 | ||
19 | SUGGEST | Suggest need to add something about Lean to explain the phrase ‘institutionalizes waste’ in “TDD is defect prevention. DLP institutionalizes waste.” (footnote, with URL) | 2011-02-22 | can you suggest a good url, right away.. \n \ngood suggestions, but no change made. \n \n | |
32 | SUGGEST | Ambiguous / unclear sentence: “A weakness in these tests are that they do not check that sprintf( ) is Suggest change to ‘* i.e. that sprintf is not writing* additional characters after the | 2010-10-06 | ||
32 | SUGGEST | Ambiguous / unclear sentence: “A weakness in these tests are that they do not check that sprintf( ) is Suggest change to ’ …string terminator. *[new paragraph] The following tests*…’ | 2010-10-06 | ||
37 | ERROR | (this probably duplicates #44681) Code is unmodified (3,“hey”) but test fails expecting 2 and getting 1! Code should be changed. | 2010-10-06 | ||
270 | TYPO | Top of the page: “He is…” => “Here is…” | 2010-10-07 | ||
277 | TYPO | “Two-stage structInitialization” | 2010-10-07 | ||
41 | TYPO | Seems to be an ‘are’ missing from: “expect( ) and given( ) are free form helper functions that are accessible | 2010-10-06 | ||
41 | SUGGEST | The paragraph “You might think that Unity and CppUTest … but (and reword “You may notice that …”) | 2010-10-06 | ||
44 | TYPO | “When this patterns is broken” - pattern | 2010-10-06 | ||
44 | SUGGEST | Perhaps clearer to add ‘so far’ into “What you have not seen so far is Test Driven Development.” | 2010-10-06 | ||
45 | SUGGEST | AmerEnglish: “are a couple mechanism” - ‘couple of’ | 2010-10-06 | ||
45 | SUGGEST | AmerEnglish: “a couple modularity options” - ‘couple of’ | 2010-10-06 | ||
124 | TYPO | “We used the some of the capabilities of C” - too many ’the’s | 2010-10-07 | ||
210 | TYPO | The last paragraph on the page reads incorrectly. The duplicate switch statement code smell is exactly the problem that | 2010-10-07 | ||
216 | TYPO | First paragraph | 2010-10-07 | ||
244 | TYPO | Title Global Free-for-ll should read Global Free-for-all | 2010-10-07 | ||
38 | ERROR | Example referenced should pass, not fail, right? | 2010-10-06 | ||
44 | ERROR | (or maybe a typo) | 2010-10-06 | ||
55 | TYPO | The next test will force the driver to use the pass in ledAddress. -> ‘passed-in’ | 2010-10-06 | ||
59 | SUGGEST | Watching the test case fail, shows that the test can detect a wrong result. -> Comma is not needed. | 2010-10-06 | ||
85 | SUGGEST | “cut in one use of the new code” / “compiling before cutting to it” -> confusing usage of “cut” directly after talking about cutting / copying / pasting. I would suggest something like using “replace one instance of the old code with the new code” and “compiling before switching to it”. | 2010-10-06 | ||
92 | TYPO | Building the code, all the test run. -> tests | 2010-10-06 | ||
48 | TYPO | “test come pretty quickly” -> tests | 2010-10-06 | ||
54 | TYPO | “Can it can detect a specific failure?” -> do the can-can, or maybe remove one… | 2010-10-06 | ||
145 | TYPO | “FakeLightController_getLastState( ) returns a a 0, 1, or UNKNOWN_STATE” -> too many “a” | 2010-10-07 | ||
154 | TYPO | Why not just expose scheduleEvent( ) and eliminate LightSched- uler_ScheduleTurnOn( ). -> should end with question mark | 2010-10-06 | ||
184 | TYPO | we’ll use a the ST Micro-Electronics -> no the needed | 2010-10-07 | ||
192 | TYPO | In addition -> should be followed by a comma. This occurs in a few spots (pg 186, 145) | 2010-10-07 | ||
203 | TYPO | The LedDriver, LightScheduler, RandomMinute, CircularBuffer, FormatOutput and FlashDriver demonstrate design -> should have what these are, something like “the X, Y, Z objects demonstrate” | 2010-10-07 | ||
225 | TYPO | Those condition check -> checks | 2010-10-07 | ||
229 | TYPO | Isn’t better to wait? -> Isn’t it better | 2010-10-07 | ||
229 | TYPO | A nice side effect of the application driving the interface, it is less likely that -> would suggest a rewording. Something like: A nice side effect of the application driving the interface is that hardware implementation details are less likely to pollute the application’s core | 2010-10-07 | ||
233 | TYPO | phone call with you cell phone -> your | 2010-10-07 | ||
234 | TYPO | You can find many answers that question -> to that question | 2010-10-07 | ||
242 | TYPO | You ask what is this conditional for? -> suggest quotes: You ask, “what is this conditional for?” | 2010-10-07 | ||
243 | TYPO | how out of control this con get, -> can | 2010-10-07 | ||
243 | TYPO | Like many code problems, Long Parameter List tend to happen -> tends | 2010-10-07 | ||
244 | TYPO | Will-Nilly -> Willy-Nilly. This is repeated a few times, even in the glossary | 2010-10-07 | ||
244 | TYPO | The code show no real distinction -> shows | 2010-10-07 | ||
247 | TYPO | As we refactor I’ll introduce -> add comma after refactor | 2010-10-07 | ||
248 | TYPO | It’s more common add the comments -> common to add | 2010-10-07 | ||
247 | TYPO | I’ll introduce a some helpful -> no need for the a | 2010-10-07 | ||
249 | TYPO | Dereferencing the event for day and minute will get lower the abstraction level. -> Not sure what the intent is here. Maybe trying to say “will lower the”? | 2010-10-07 | ||
253 | TYPO | We introduced pointer -> We introduced a pointer | 2010-10-07 | ||
261 | TYPO | the Time functions are are caught directly -> redundant are | 2010-10-07 | ||
267 | TYPO | Technical Dept -> Debt | 2010-10-07 | ||
272 | SUGGEST | When you are modifying Legacy Code (as Michael calls code without tests) -> You’ve already defined legacy in this way, keep it DRY :-) | 2010-10-07 | \nEasier than it sounds for writing too. :-) | |
277 | TYPO | Code that has dependency -> Code that has a dependency | 2010-10-07 | ||
281 | TYPO | can be quiet involved -> quite | 2010-10-07 | ||
286 | TYPO | MockIO intercept calls to IO_Read( ) and IO_Write( ) -> intercepts | 2010-10-07 | ||
290 | TYPO | role of tests in and environment -> an | 2010-10-07 | ||
304 | TYPO | explicitly included as inputs to linker -> explicitly included as inputs to the linker | 2010-10-07 | ||
16 | TYPO | Missing . on footnote 1 | 2010-12-28 | ||
18 | SUGGEST | This should be in the blurbissimo: “You don’t need a | 2010-12-28 | I think your suggestion is to insert "This book is about writing those tests" I did that and adjusted some fo the following words. | |
18 | SUGGEST | “As the production code grows, so does a valuable suite of unit | 2010-12-28 | ||
20 | TYPO | there are spaces after the ( and before the T of each of the constants in the text. | 2010-12-28 | ||
24 | SUGGEST | “Just as with any skill, such as playing pool or skiing black diamonds,TDD skills take time to develop.” Should that be singular skill in the last clause? | 2010-12-28 | ||
24 | TYPO | “code rot” hyphenate? | 2010-12-28 | ||
25 | TYPO | “nonembedded code too” needs a comma before “too”. There are other cases of this, too, so search for it. | 2011-02-11 | ||
32 | SUGGEST | For the bullets, I’d use identical opening words, either all ‘A’ or all nothing. Additionally, the fact that the second word of a key phrase is italicized but not capitalized seems odd. | 2010-12-28 | ||
32 | TYPO | “good for first example” at bottom para is missing the word “a” | 2010-12-28 | ||
34 | SUGGEST | para between code snippets. “These tests” in sentence 1 and “these tests” in sentence 2 seem like we’re talking about the same tests. | 2010-12-28 | ||
34 | SUGGEST | I can’t help but want the tests to include a literal before the markup as well as after, i.e. “X%sX” | 2010-12-28 | changed it to \n \n \n TEST_ASSERT_EQUAL(12, sprintf(buffer, "Hello %s\\n", "World")); \n \nthanks | |
36 | TYPO | in “to read, understand and evolve,”, second from bottom para, the final serial comma is, say some, missing. Probably just tell me “delivered as designed”. I won’t bring it up again. :) | 2011-02-22 | time for another sed script, or leave it for the copy editor :-) \n \n \naahhh... sed cant' do it. context needed. \n \ncopy editor's will have to do that one. \n \ncopy editor made this all consistent. | |
38 | TYPO | “you will seen another solution” at top para. | 2010-12-28 | ||
39 | TYPO | “You can find a more on Unity” | 2010-12-28 | ||
39 | TYPO | “You, of course can use whichever test harness you prefer.” interjected “of course” wants trailing comma? | 2010-12-28 | ||
42 | TYPO | “expected <2 0x2> | 2010-12-28 | ||
44 | SUGGEST | “make sure that pattern” reads like “be sure that the concept of pattern”, instead of “be sure that the four-stage pattern” | 2010-12-28 | ||
46 | TYPO | First para of prev page: “lead you through some of first steps” | 2010-12-28 | ||
46 | SUGGEST | 3rd para of previous page: “But C is not an OO language, but”, the too “buts” seem awkward. | 2010-12-28 | ||
46 | TYPO | Last para prev page: “module is self-contained part of a system” -> “…is a self-contained…” | 2010-12-28 | ||
46 | TYPO | Liskov quote in 2nd para has double opening quotes. | 2010-12-28 | ||
20 | OK | static void given(int charsWritten) | 2010-12-28 | the terminating nul character is at buffer[strlen(expected)], so + 1 is correct. \n \nthanks though, I ran a test to check it out. | |
24 | OK | void given(int charsWritten) | 2010-12-28 | he terminating nul character is at buffer[strlen(expected)], so + 1 is correct. thanks though, I ran a test to check it out. | |
279 | TYPO | 2nd paragraph, first line says: “If the respect if low enough,” It should be: | 2010-12-28 | ||
177 | TYPO | 2nd paragraph, 2nd sentence: remove the word “to” from: | 2010-12-28 | ||
44 | TYPO | test-driven-development-for-embedded-c_b9_0.pdf, | 2010-12-28 | ||
115 | TYPO | warrantee -> warranty | 2010-12-28 | ||
118 | TYPO | “take an honest look at you current process” -> your | 2010-12-28 | ||
66 | TYPO | “TDD’s crooked path has less risk | 2010-12-28 | ||
63 | TYPO | Missing plural in final paragraph on page: “Structural changes, while hunting down a failing test, can make it very difficult to get back to all test passing.” | 2010-12-28 | ||
65 | TYPO | Missing plural in first sentence of last paragraph: “Why do these small step?” | 2010-12-28 | ||
68 | TYPO | Missing hyphen, first sentence of section 4.1, should be: “The simple-minded implementation from…” | 2010-12-28 | ||
69 | TYPO | Missing hyphen, second sentence of the first paragraph, should read: “If you want to have well-written tests,” | 2010-12-28 | ||
70 | TYPO | 4th paragraph: Replace the ? with . in the sentence “Let’s find the problem?” | 2010-12-28 | ||
71 | TYPO | Last paragraph, add the hyphen: “It’s easier to see the ideas in the code when you extract them and wrap them in an intention-revealing name.” | 2010-12-28 | ||
72 | TYPO | 2nd sentence on page, add the ‘a’: “…like the stones in a mountain stream.” | 2010-12-28 | ||
76 | TYPO | In the paragraph under the “Test Boundary Conditions” heading, change “no” to “not”: “In that case the design would no call for boundary checking.” | 2010-12-28 | ||
76 | TYPO | In the paragraph under the “Test Boundary Conditions” heading, “out of bounds” is not hyphenated, while on the next page it is repeatedly hyphenated when used in the same manner. | 2010-12-28 | ||
77 | TYPO | Remove the second comma in the next to last sentence on the page: “For instance, an out-of-bounds for an array on the stack, can corrupt the stack.” | 2010-12-28 | ||
82 | TYPO | Apostrophe abuse in the sentence just above the second download link: “It let’s the test check that…” | 2010-12-28 | ||
89 | ERROR | The run in the middle of the page shows the following: ………..!. 1. If there’s a bang mark among the periods, doesn’t that mean a test was ignored and, therefore, there should be 1 Ignored? | 2010-12-28 | good catches. | |
44 | ERROR | “2. Run just the makefile from the code/unity directory.” - in B9 version of code zip, there is no makefile in that directory | 2010-12-28 | ||
44 | ERROR | “You can find the needed test files in code/unity/stdio.” - in B9 version of code zip, SprintfTest.cpp is under \\code\\tests\\stdio\\ | 2010-12-28 | added references to both unity and cpputest test files | |
129 | TYPO | “…might find you whole system being initialized in the test case” -> your | 2010-12-28 | ||
136 | TYPO | “The test doubles can monitoring data intended for” | 2010-12-28 | ||
136 | TYPO | “…intended for the DOC and and provide” - one ‘and’ | 2010-12-28 | ||
146 | TYPO | “Now that the test fixture are assembled” -> fixtures | 2010-12-28 | ||
157 | TYPO | “and are ready to something | 2010-12-28 | ||
0 | TYPO | I’m using the ePub version so the page number won’t be accurate if I give it, but the error is a double “the”: “as you design the the interface” I assume that’s all you need to find it. | 2010-12-28 | ||
0 | 0 | TYPO | I’m using the ePub version so the page number won’t be accurate if I give it, but the error is a double “the”: In “Taking a Step Back before Claiming Done”: “There are magic numbers in the LedDriverTest.cpp file” This should be .c since we are still using Unity tests at this point. | 2010-12-28 | |
128 | SUGGEST | I might go further in the diagram. The first point I make is that YourClass is much easier to test without all the non-dependent crap around. The second point is that even if we remove all the non-dependent classes, we still may well have a bunch of collaborators in the scene, and some of them may be awkward. That’s your second image. The third is that we still may want to microtest without those remaining dependents that are awkward. And a third image accordingly. | 2011-02-11 | Mike, thanks. I sum it all up with, use the real collaborator if you can and a fake if you must. Maybe I'll rethink how i say that.but it is supposed to make people think about what is needed. | |
129 | TYPO | The test doubles are… This is not nearly strong enough, including the previous remark about not simulators. I find this needs to be shouted at geeks, so they grasp it. (My continuing campaign to call them microtests is precisely because of the difficulties people have with this concept.) | 2011-02-11 | Not sure if I shouted, but i did add more about this. thanks. | |
33 | ERROR | “TEST_ASSERT_EQUAL(4, sprintf(buffer, ”hey“));” should be 3 not 4 (as on page 34) | 2010-12-28 | ||
34 | TYPO | “A weakness in these tests are…” - is | 2010-12-28 | ||
316 | TYPO | “TEST_ASSERT_FALSE(expected, actual) - Checks any boolean condition” - so the parameter should be ‘(boolean condition)’ | 2010-12-28 | ||
66 | TYPO | “The LedDriver is not * complicated example” - add ‘a’ | 2010-12-28 | ||
92 | TYPO | “A case can be made for not adding the | 2010-12-28 | ||
315 | SUGGEST | Move last sentence in D3 “You can find the complete list of Unity assertion macros in unity.h.” as a parenthesis to the first sentence “Here is a short list of [some of] the TEST checks supported by Unity. (You can find the complete list of Unity assertion macros in unity.h)” | 2010-12-28 | ||
322 | TYPO | “If your target is this contained in I/O” - do you mean ‘constrained’? | 2010-12-28 | ||
317 | TYPO | “If your target is this contained in I/O” - do you mean ‘constrained’? | 2010-12-28 | ||
322 | TYPO | Too many ‘environments’ and ‘putchars’ in: | 2010-12-28 | ||
135 | SUGGEST | at IL, we teach that the name for collaborators you want to double is “awkward collaborators”. it turns out that there are a lot of ways to be awkward. | 2011-02-11 | ||
46 | TYPO | “does not setup the next step” should be “does not set up the next step.” “Setup” is a noun. | 2011-02-11 | ||
81 | OK | In the Runtime Error discussion, the stub .c and .h files do not match the downloaded code. Driver usage is not shown. You do show the test case, so I can figure it out from there. | 2011-02-22 | maybe it was not right earlier, but looks fine now. BTW there is no production version supplied that logs the runtime errors. | |
185 | TYPO | The opening sentences of 9.3, Surgically Inserted Spy, are nonsense as if a copy/paste corrupted: 9.3 Surgically Inserted Spy …I do rather enjoy the image of a circular puffer, but you probably intended the P to be a B! | 2011-02-11 | ||
118 | OK | It also makes it hard to see what code is | 2012-04-02 | can you say more about this \n \nnot sure what the problem is | |
349 | TYPO | Stephne should be Stephen | 2011-02-11 | Thanks! | |
23 | TYPO | We’ll conclude with a few guidelines >> on on << writing and maintaining tests | 2011-02-11 | ||
22 | TYPO | .The we go test by test developing our first module. Maybe the correct sentence is “Then we go test…” | 2011-02-11 | ||
146 | TYPO | In figure 7.5, box labeled “Depended On Component”. Should that be “Dependent On Component”? | 2011-02-11 | i think it should be depended upon component, but Gerard named it in his book. thanks for the comment | |
41-42 | ERROR | Same as #42601 in ePub on Sony Reader (pages 41 and 42 in this edition). | 2012-04-05 | ||
23 | TYPO | One on too much in: | 2011-02-22 | ||
22 | TYPO | Missing “n” in: | 2011-02-22 | ||
325 | ERROR | Re “There are no Visual Studio | 2011-02-22 | I changed the text to mention only vc 6. I might post some other VS support version on my website. | |
324 | TYPO | “Ububtu” -> Ubuntu | 2011-02-22 | thx | |
44 | ERROR | Strange effect with () and []. | 2011-02-22 | th | |
92 | SUGGEST | Copyright banners are being pulled in as part of some code modules imported into the book. This looks untidy and is distracting / noisy. Perhaps you could have a word with the gerbils ;-) | 2011-02-22 | Not the gerbils fault. fixed, thanks. | |
23 | TYPO | The zip file’s URL disappears off the right margin in PDF (though the hyperlink works OK) | 2011-02-22 | type setter to fix | |
64 | TYPO | Two full stops at “Dependency Injection..” | 2011-02-22 | ||
68 | TYPO | Spurious ‘of’ in “And finally, do the simplest thing possible of to get this…” | 2011-02-22 | ||
86 | TYPO | 2 x ‘the’ in “that the the test” | 2011-02-22 | ||
97 | TYPO | “..couple more helper function,” needs to be “…functions” | 2011-02-22 | ||
98 | TYPO | “in in the sidebar” | 2011-02-22 | CE missed this one, thanks! | |
99 | TYPO | Remove ‘the’ from “described the like this:” | 2011-02-22 | ||
107 | TYPO | No need for ‘of’ in “some of common questions” | 2011-02-22 | another got by the CE | |
118 | TYPO | “FLSE” -> “FALSE” | 2011-02-22 | ||
118 | TYPO | ‘had’ should be ‘hard’ in “It also makes it had to see” | 2011-02-22 | ||
124 | TYPO | Page relates a story, but lacks the usual story attribution and formatting | 2011-03-15 | in b11 it looks like the other stories. | |
124 | TYPO | “tests scripts” should be “test scripts” | 2011-03-15 | ||
124 | TYPO | Bit late to comment that ‘challenge’ is used 4 times in 4 lines! “Using Test-Driven Development for embedded software has its challenges. | 2011-03-15 | ||
135 | TYPO | Should it be ‘they’ instead of ‘then’ in | 2011-03-15 | ||
168 | TYPO | Should LightScheduler_Wakeup() really be part of setTimeTo()? | 2011-03-15 | it's not any more | |
169 | ERROR | reactionDay has appeared from nowhere in processEventDueNow() - not in parameter list. | 2011-03-15 | ||
169 | ERROR | ‘today’ has also appeared from nowhere in processEventDueNow(). Unless I’m missing something, we seem to be jumping ahead here without failing tests ;-) | 2011-03-15 | ||
169 | ERROR | Adding a test that uses TUESDAY seems to be at odds with adding code that checks for EVERYDAY? | 2011-03-15 | ||
170 | ERROR | [sorry to bang the drum, especially if CE has fixed these] We should be seeing incremental changes to processEventDueNow() to add handling for WEEKEND / SATURDAY / SUNDAY, but this is missing from the PDF | 2011-03-15 | explained that not all steps are shown | |
161 | ERROR | MONDAY and EVERYDAY appear a few times before ‘enum Day’ is defined. Even allowing for the principle of failing-test-before-code, this seems wrong. | 2011-03-18 | added a note explaining the literal constants. | |
173 | SUGGEST | “We fast-forwarded through the day matching conditional logic” - now you tell me! | 2011-03-15 | ||
156 | ERROR | LIGHT_ enums appear (several times) before they are defined on p.176 | 2011-03-15 | ||
156 | SUGGEST | Should FakeLightController.h appear here to explain FakeLightController_GetLastId() etc? | 2011-03-15 | redid the area for b11. should be in an appropriate place | |
177 | TYPO | ‘LightScheuler’ has lost it’s D | 2011-03-15 | ||
177 | ERROR | LS_ enums appear before their definition | 2011-03-15 | explained them earlier. | |
179 | TYPO | “are a helpful” ..something, or remove the ‘a’ | 2011-03-15 | ||
179 | TYPO | “the the code” | 2011-03-15 | ||
184 | TYPO | “Ramdomize” appears in a few places in the code | 2011-03-15 | ||
12 | TYPO | The first sentence in the third paragraph reads: “The early phases of a TDD project are mundane to the point of seeming pointlessness.” I believe you want to substitute ‘pointless’ for ‘pointlessness’ here. This is in version B11.0 (it’s not yet an option in the drop-down). | 2011-03-15 | I can't change Jack's words. | |
32 | TYPO | Version B11.0 You mention the “Red-Green-Refactor and Pavlov’s Programmer” sidebar in the first paragraph but say that it is “on the following page” when it’s really on the current page. | 2012-03-30 | ||
32 | SUGGEST | Version B11.0 In the first paragraph in section 1.5 I believe there is a problem with the tense in the sentence “Many developers have adopted it and would not go back to Debug-Later Programming.” Should this be ‘will not’ instead of ‘would not’? Maybe it would be even more impactful to say that they can’t go back (I know I say that all the time), but that’s you’re call. | 2011-03-15 | I think it is right. asked CE to check. | |
58 | SUGGEST | Version B11.0 Between pages 55 and 58 the test is named from LedsOffAfterInitialization to LedsAreOffAfterCreate. The unmentioned change might throw some people off. | 2011-03-15 | ||
58 | ERROR | Version B11.0 In the second paragraph you ask the user to note the type, however the type doesn’t show up in the code snippet in the book. Unless they’re looking at the downloaded code it’s not clear what the type of virtualLeds is. | 2011-03-15 | ||
61 | TYPO | Version B11.0 You mention a schematic in the third paragraph but I haven’t seen it anywhere. | 2011-03-15 | made the words not imply that the reader can look at the schematic. | |
65 | SUGGEST | Version B11.0 Suggest changing “Adding code before required by the tests adds complexity.” in the second paragraph to “Adding code before the tests require it adds complexity.” | 2011-03-15 | ||
55 | ERROR | Version B11.0 Unity’s TEST_FAIL macro doesn’t appear to take any arguments, I think you might want TEST_FAIL_MESSAGE instead. | 2011-03-15 | ||
23 | TYPO | The link for unity is broken. I think you meant: | 2011-03-15 | ||
49 | SUGGEST | In 2.7 #1, it’d be helpful to have a link or cross-reference for where to download the book’s code. It’d also be helpful to have it near the beginning of the chapter. As far as I can tell it is only linked from page 22; it took me a fair bit of backtracking and searching around to find it. | 2011-03-15 | ||
321 | TYPO | ‘when’ -> ‘went’ in “Our conversation | 2011-03-18 | ||
54 | ERROR | Code doesn’t compile. Missing a semicolon after TEST_GROUP, and TEST_FAIL should be TEST_FAIL_MESSAGE. Patch: -#if 0 /* START: StartingPoint */ -TEST_GROUP(LedDriver) TEST_SETUP(LedDriver) @@ –329,10 +330,11 @@ TEST_TEAR_DOWN(LedDriver) TEST (LedDriver, LedsOffAfterInitialization) | 2012-03-23 | fix on the way in 2nd printing. noted in edits for #48877 | |
72 | ERROR | The first exercise states to look for a README.txt in code/SandBox. There is no README.txt there or in that directory subtree. | 2012-03-30 | ||
38 | TYPO | The third line of section 2.2 says “at a couple example…” and should say “at a couple of example…” | 2012-03-30 | ||
55 | TYPO | On the first line of code: TEST_GROUP(LedDriver) this would not compile on my system until I put a semicolon after it: TEST_GROUP(LedDriver); I think the version of Unity that you’re using in your code is different than the one that can currently be downloaded from the Unity project. | 2012-03-23 | fix on the way in 2nd printing. noted in edits for #48877 | |
65 | TYPO | In the sidebar, you use the word “vice” when you mean “vise.” This is also used on the previous page. | 2012-03-30 | ||
25 | TYPO | Middle paragraph on page 25: mentions a shared data item named “length” that does not appear elsewhere in the surrounding text or example code. | 2012-03-30 | ||
xv | TYPO | last sentence, first paragraph of Robert C. Martin’s foreword: | 2012-04-02 | ||
61 | TYPO | On page 61, 6th line from the bottom: TurnOnMutipleLeds should read “LedMemoryIsNotReadable” | 2012-03-30 | ||
25 | TYPO | In the “Fabric of Development” box there are two typos: extra space after comma in: “, by Jack Ganssle” and there should be a period after Ganssle. | 2012-03-30 | ||
133 | TYPO | Typoes in last line: | 2012-03-23 | 1) fixed with new book generation in 2nd printing \n2) duplicated | |
137 | ERROR | In the snippet of code for the LightControllerSpy.c file where lastId and lastState are declared the #include “LightController.h” should probably be #include “LightControllerSpy.h” | 2011-06-20 | ||
136 | TYPO | Line 4: | 2012-03-30 | ||
49 | OK | Is it possible, that the unity version in jgade-code.tgz greetings Answer to brix AT gtnw.de | 2012-04-02 | Not a book errata problem. I think 64 bit support is OK now. But I have not tested it on ubuntu 64 | |
50 | SUGGEST | execution of make -f MakefileCppUTest.mk results in: Needed to modify MakefileCppUTest.mk, change CPPUTEST_CFLAGS = -std=c89 to Using GCC 4.4.5 on Ubuntu 64bit 10.10 | 2012-04-03 | portability problem \nthis line was commented out in the current distribution \nCPPUTEST_CFLAGS = -std=c89 | |
21 | TYPO | Below code for TEST_GROUP_RUNNER(sprintf), the sentence should read “Essentially, this TEST_GROUP_RUNNER() calls the …” instead of “Essentially, this RUN_GROUP_RUNNER() calls the …”. | 2012-03-30 | ||
25 | SUGGEST | For CppUTest test cases to be identical to unity test cases, as stated above the test case code, then the line on page 25, given((sprintf(output, “%s\ | 2012-03-30 | ||
32 | SUGGEST | In the paragraph below the definition of the typedef, the sentence is “Inside the .c file for CircularBuffer, the struct elements can be defined.” | 2012-03-30 | ||
349 | TYPO | Index entry for multiple-use modules should actually be part of the entry for multiple-instance modules which should include a reference to page 32. | 2012-03-30 | ||
41 | TYPO | Just below section “Don’t Let …”. | 2012-03-30 | ||
42 | TYPO | Near bottom of page, ledsAddress is mentioned again, but never defined in code. Was it supposed to be defined in LedDriver_Create on page 40? | 2012-03-30 | ||
324 | TYPO | Appendix Section C.3: TEST Condition Checks In the bulleted list the entry “CHECK (boolean condition)” appears twice, first at the beginning of the list and second on page 325 in paper after “CHECK_FALSE(boolean condition)” | 2012-03-30 | ||
68 | OK | First code block on the page, in the parameters of TEST_ASSERT_EQUAL, change 0xffff to ALL_LEDS_ON | 2012-03-23 | that symbol is local to the .c file. not part of the interface. | |
146 | OK | In the refactor to remove duplications section, the function header has | 2012-03-23 | The day field was not yet needed. at this point in the code's story, we only ahve to match everyday, so there is no need to save it yet. | |
232 | TYPO | In the paragraph before 11.7 Where Are We?, it says “Like I said before, its OK to think ahead; just try to act on the design vision only once the tests to pull it in.” I think there is a word missing. Maybe, “… only once the tests exist to put it in”? | 2012-03-30 | ||
191 | ERROR | 191 first code block: The line IO_Read(address); FakeMicroTime(0, 500); | 2012-04-03 | ||
49 | TYPO | In section 2.6, the following text should say “your” rather than “you”. “I invite you to put you new knowledge to work” | 2012-03-30 | ||
98 | SUGGEST | The line numbers (193 and 211) in the error “report” on top of page 98, is not corresponding to the “downloadable” “TEST (LedDriver, IsOn) | 2012-04-02 | what are the right numbers that you get? My files have other stuff in them to end up with the exact line numbers matching | |
291 | TYPO | Dubious use of “an” in the phrase: | 2012-03-30 | ||
329 | TYPO | Should be: | 2012-04-03 | ||
330 | TYPO | Unity misspelled in: | 2012-03-30 | ||
334 | TYPO | Repetition of: | 2012-03-23 | duplicate of 47282 | |
90 | TYPO | At the last line but one - “Early in a embedded development project” should read “Early in an embedded development project.” | 2012-03-30 | ||
94 | TYPO | About the use of const in code fragments (two places at lines 10 and 16) - “int PlatformSpecificStrStr(const char * s, const char * other) const {…}” should read “int PlatformSpecificStrStr(const char * s, const char * other) {…}” - i.e., the 3rd use of const is misleading. | 2012-04-02 | ||
126 | TYPO | Under the section called “Preprocessor substitution” the function prototype name cpputest_ralloc() should be replaced with cpputest_realloc(). | 2012-03-30 | ||
135 | TYPO | At the end of the third line and continuing onto the fourth line, “FakeTimeSource” should say “FakeTimeService”. Also, at the start of the third paragraph, the call to TEST (LightScheduler, ScheduleOnTodayNotTimeYet) should read TEST (LightScheduler, ScheduleOnEverydayNotTimeYet) to match its implementation on page 134. | 2012-03-30 | ||
78 | TYPO | Fail message for “TEST (LedDriver, OutofBoundsLedsAreAlwaysOff)” should be “Expected FALSE Was TRUE” because “TEST_ASSERT_FALSE” is written in the test code for “OutofBoundsLedsAreAlwaysOff”. | 2012-03-30 | ||
35 | TYPO | need ; | 2012-03-30 | ||
232 | ERROR | This test: TEST (LightController, AddingDriverDestroysPrevious ) doesn’t appear to check anything, which makes it a little unclear. I suppose the test library signals an error if there’s a memory leak, but a comment at the end of the test would probably help clarify that. I didn’t understand it the first few times I read the test. | 2014-08-27 | The surrounding text seems to cover your concern. But would the code speak for itself? This is not the first time in the book that the test harness is doing the leak check under the hood. I'm expecting by this point in the book that readers get that, or that the surrounding words explain it. \n \nThat said, I am changing the test name to mention not leaking. | |
108 | TYPO | Section 6.4, paragraph two reads “… and load tests should help determine whether the system can meets its design limit”. -Either drop the ‘s’ on meets, or drop the word ‘can’. | 2014-08-26 | ||
112 | TYPO | Last sentence of section 6.8 reads “Simulating a sequence of interactions is much less complex than a simulation of the whole and very effective”. -I believe you want this to read “… and (is) very effective” | 2014-08-26 | ||
138 | TYPO | You wrote “TimeService_Set- | 2014-08-27 | ||
19 | OK | In TEST_SETUP, you write to the space to which “expected” points. (One byte is written: the null terminator for the empty string.) However, no space has been allocated for it, and the pointer is not initialized; it’s just a (const) char pointer. The same thing is also done on page 24. | 2014-08-26 | TEST_SETUP is initializing the pointer to point to the literal string "". This is working C. | |
26 | SUGGEST | Judging by the CppUTest output (on pp. 26-27), “checks” appears to refer to the number of checks that failed—not the number of condition checks made, as described on pg. 26. | 2014-08-26 | The first check is the only check to run, The second one was not executed. Added explanatory text. | |
331 | ERROR | Omitted #endif from include guards in D.3. | 2014-08-27 | ||
167 | OK | On the top line of the page, there should be a space between “a” and “printf()-like”. | 2014-08-27 | fixed in p2 | |
1 | 1 | ERROR | Fix Unity IGNORE test. See prag topics topics/10126#30451 | 2014-08-28 | |
114 | ERROR | In the description of ‘Test spy’, there are three ‘CUT’s but second one should be ’DOC’. “so the test can verify that the correct parameters have been passed to the CUT” —> “so the test can verify that the correct parameters have been passed to the DOC” | 2014-08-26 | ||
138 | TYPO | In the third line of the first paragraph of ‘Test the Wiring’, | 2014-08-27 | Checked that wake up should be two words, so I did a global change or h,c,cpp,pml files to s/Wakeup/WakeUp/g | |
153 | TYPO | In the third paragraph (not counting code sections). “If you are using printf() directly, you can do the same thing, initializing FormatOutput_Impl() like this:” ==> “initializing FormatOutput() like this:” (without ’_Impl) | 2014-08-27 | ||
169 | TYPO | Two test outputs say the name of test is “TEST (Flash, ProgramSucceedsReadyImmediately)” but the name is “TEST (Flash, ProgramSucceedsReadyImmediately)” in the page 167 and the code. | 2014-08-27 | ||
169 | TYPO | In the middle, “The Flash_Write() call has the parameters reversed; we get this error:” —> “The IO_Write() call has the parameters reversed; we get this error:” | 2014-08-27 | ||
210 | ERROR | In the first code snippet, it is simply wrong because the .Destroy initializer missed the comma at the end of the line. static LightDriverInterfaceStruct interface = | 2014-08-27 | ||
210 | SUGGEST | In the second code snippet, the ‘brightness’ function pointer is better named like ‘SetBrightness’ to be consistent with others (TurnOn, TurnOff, Destroy, even the generic function name ‘LightDriver_SetBrightness’) void LightDriver_SetBrightness(LightDriver self, int level) | 2014-08-27 | ||
277 | TYPO | From page 277, all instances of “LightScheduler_WakeUp” should be consistent with earlier part of the book. —> “LightScheduler_Wakeup” (‘u’ in lower case) | 2014-08-27 | ||
244 | ERROR | In the code snippet ‘isEventDueNow’, daysMatch() should take today and day as its parameters because it takes (Day, Day) here. ‘daysMatch(Time*, Day)’ version will be followed in the next section. | 2014-08-27 | ||
283 | ERROR | I found that BDD section(14.6) seems contain the wrong code snippet. It the page 283 of pdf(2.0), BDD sections shows two code snippets, However, the text below the second TEST() says “the refactored test is more declarative and …” but two tests are almost the same with the invariant values replaced by TEST_GROUP variables. See.. 2) For the text to be valid, the second code snippet should be in BDD style (given/when/then) and I found the code in that style (i guess you planned to use that code) in the t1/tests/HomeAutomation/LightSchedulerTest.cpp file. | 2014-08-27 | ||
0 | TYPO | BookCode/SandBox/unity/LedDriver/LedDriverTest.c:44 /* TEST_FAIL(“Start here”); */ TEST_FAIL macro does not exist for Unity. Should be TEST_FAIL_MESSAGE. | 2014-08-26 | ||
126 | TYPO | I think that one line is missing in section 8.5. needed for the TimeService is kind of the opposite of the LightControllerSpy." | 2014-09-02 | ||
126 | TYPO | The start of the first sentence in the third paragraph of section 8.5 is missing. | 2014-09-02 | ||
178 | TYPO | In the code says: “FakeMicroTime_Init(0, 50);” | 2014-09-02 | Weird, this is correct in the code but the book is missing a zero. 50 should be 500. | |
320 | TYPO | In the second paragraph, ‘ThreadResume()’ should be ‘ResumeThread()’ | 2014-08-27 | ||
91 | TYPO | “We discussed the need to isolating hardware dependencies” | 2014-08-26 | ||
18 | TYPO | Middle of the page “It’ss” | 2014-08-26 | ||
7 | TYPO | “…cause for to celebrate!” | 2014-08-26 | ||
39 | TYPO | (wrong) It’ss done with another macro, | 2014-08-26 | ||
7 | SUGGEST | Sometimes it’s a cause for to celebrate! | 2014-08-26 | ||
59 | OK | Data type of many parameters in sample are “int” like as below. ex) LedDriver_TurnOn(int ledNumber) I think you should “uint16_t” instead of int. It is the same reason as the author’s suggestion for “LedDrive_Create(uint16_t * address)” at page 55 of PDF. | 2014-08-26 | this is different. ledNumber is just a number. address points to a memory mapped location that is only 16 bits wide. | |
88 | ERROR | The book says “This is a common pattern for | 2014-08-26 | changed it to platform dependency. | |
65 | OK | All helper function names for Led Driver start with a lower case except for IsLedOutOfBounds(). It should follow the naming rule and become isLedOutOfBounds(). | 2014-08-26 | I don't clutter the static name space with the context of the containing object. I've been consistent with this through out the book. | |
68 | OK | In the book, the implementation for LedDriver_IsOn is as follows: return ledsImage & (convertLedNumberToBit(ledNumber)); But it seems the following implementation is correct, since the return type of the function is BOOL: return 0 != ledsImage & (convertLedNumberToBit(ledNumber)); | 2014-08-26 | The way I am doing it is fairly common idiomatic C. | |
107 | TYPO | LedAddress should be written in camel case: ledAddress. | 2014-08-26 | ||
96 | SUGGEST | “Does code like this change very often?” | 2014-08-26 | clarified: Does code like this need to change very often? | |
113 | TYPO | “If a DOC is difficult to set up and get into one or more desired states, it | 2014-08-26 | ||
116 | TYPO | “Identify collaborations that you expect to make automated tests difficult.” collaborations should be “collaborators” by any chance? | 2014-08-26 | ||
117 | TYPO | “Depended Upon Component” should be “Depended On Component.” | 2014-08-26 | ||
119 | SUGGEST | “Time is wrong, day is wrong” should be “Day is wrong, time is wrong” to match the order of words with other test case descriptions. | 2014-08-26 | I'm leaving it, as it is inconsistent as a person may be. | |
132 | SUGGEST | static void scheduleEvent(int id, Day day, int minuteOfDay, int event) function is missing a substitution for scheduledEvent.day: scheduledEvent.day = day; | 2014-08-27 | the day matching will bring that code in. I changed the "Rector the Tests" code so that the day field is not needed until "Complex conditional logic" | |
126 | TYPO | Beginning of sentence lost in creation of 2nd printing. “needed for the TimeService is kind of the opposite of the LightControllerSpy.” should be “The test stub needed for the TimeService is kind of the opposite of the LightControllerSpy.” | 2014-09-02 | ||
141 | TYPO | Test description should be ScheduleTwoEventsAtTheSameTime for TEST (LightScheduler, ScheduleTwoEventsAtTheSameTIme). | 2014-09-02 | ||
139 | ERROR | void LightScheduler_Create(void) has a loop variable ‘i’ but it is not required yet at this point. | 2014-08-27 | ||
149 | TYPO | The text and the code do not match. You say you set the loop counter 225 but it is 300 in the code. Which one is correct? | 2014-08-27 | reworded to get rid of the 225 in the text | |
135 | TYPO | In the following sentence, did you happen to mean “complex day-matching conditional logic?” I thought so because the title of the paragraph is “Complex Conditional Logic.” The next series of tests will help us drive the complete day-matching conditional logic one step at a time. | 2014-08-27 | its OK as is. I dropped the word complete to eliminate confusion. | |
178 | TYPO | The term “RTC tic” is unfamiliar with me. Should it be “RTC tick?” | 2014-08-27 | ||
182 | TYPO | In page 181, the name for a test is WriteSuccessImmediately but the error message says WriteSucceedsReadyImmediately. Error massage seems correct. | 2014-08-27 | ||
168 | TYPO | It’s a minor but the text body says “Figure 23, Flash_Write sequence chart—success case, on page 167” but the title for the figure has () for Flash_Write. | 2014-09-02 | I can't fix this. \nThere is a problem with the figure reference matching the figure. | |
168 | TYPO | Then the call to MockIO_Expect_ReadThenReturn(0, 1<<7); tells the mock to expect a read from location 0x0 and that the mock should return a 1 in bit position 7, signaling the device’s successful completion. Is semicolon after (0, 1<<7) unnecessary? | 2014-08-27 | ||
18 | TYPO | you’ll see It’ss instead of It’s Page: Section: | 2014-08-26 | ||
226 | TYPO | The code snippets say “LightScheduler_WakeUp” but the text says “LightScheduler_Wakeup.” The codes are correct. | 2014-08-27 | ||
248 | ERROR | In TEST (Time, NotWeekendDays), CheckThatTimeDoesNotMatch(WEEKEND); is missing after givenThatItIs(FRIDAY); | 2014-08-27 | ||
250 | TYPO | Regarding email discussion with Dr. Newcomer, " and ’ matching is incorrect. | 2014-08-27 | ||
202 | TYPO | TEST (LightController, AddingDriverDestroysPrevious ), both text and code, have unnecessary space between Previous and ). | 2014-08-27 | I found the extra spaces only in the code | |
246 | TYPO | In the following sentences, the numbers do not match. To mimic the concept of a partial abstraction in C and a | 2014-08-27 | ||
198 | SUGGEST | You say “As I mentioned earlier, it is critical to allocate a LightDriverStruct dynamically. You can see that we have by the struct dereferencing of base.” but you have not mentioned it anywhere. | 2014-08-27 | That was confusing. I'm not sure what I was trying to get across. Made the words better and relevant. | |
271 | TYPO | In the sentence above LegacyFlashtest.cpp, MockIO_Expect_Read() should be MockIO_Expect_ReadThenReturn). | 2014-08-27 | ||
273 | OK | NUL should be NULL in the following sentence: It makes sense that giving strtok() a pointer to a literal string causes a segmentation fault when strtok() starts inserting its NUL characters into read-only memory holding the literal string. | 2014-08-27 | NUL is correct for the zero character. NUUL is typically for pointers. | |
275 | TYPO | In the following sentence, principle should be principal: We’ll start to pay down some of the principle on the technical debt and reduce the interest payments on future visits to this code. | 2014-08-27 | ||
299 | TYPO | The GroupName and TestName() pairs must be unique in the test build. | 2014-08-27 | ||
279 | TYPO | In 14.2 Copy-Paste-Tweak-Repeat Antipattern, there are some cut-paste-tweak, which should be copy-paste-tweak. | 2014-08-27 | ||
313 | TYPO | In the 3rd paragraph, there is unnecessary “we”. “These two operating systems are important because | 2014-08-27 | ||
300 | ERROR | The explanation for TEST_ASSERT_FLOAT_WITHIN macro is wrong. Compares two doubles should be compare two floats. | 2014-08-27 | ||
134 | 147 | ERROR | Test case ScheduleWeekEndItsMonday under the section Refactor the Tests cannot pass until the logic added in the Complex Conditional Logic section is added. The test case is added in the correct spot on PDF pg. 137, Paper Book pg. 150. | 2014-08-27 | |
110 | SUGGEST | In Figure 11, one dotted line is missing - from Test to the second right TDOC. | 2014-08-26 | ||
121 | OK | The title for Figure 16 - The light scheduler should be LightScheduler. | 2014-08-26 | it is not meant to be the module name, as there are several objects interacting to do the light scheduleing | |
159 | OK | Quotations for expectedOutput in the both tests are incorrect: “Circular buffer content:\ should be "Circular buffer content:\ <31, 41, 59, 26, 53>\ | 2014-08-27 | The first form is right. the C++ compiler will concatenate those quoted strings into a single string at compile time. | |
166 | ERROR | In Flash memory program flowchart, the description for the while loop “i || d” should be “b7 == 1”. Paper book (1st print) does not have this problem. | 2014-09-02 | ||
166 | SUGGEST | In Flash memory program flowchart, the first action is to write x0 to offset address 0x40. However, the vendor’s manual says “Write 40h or 10h” to any address. Text and sample code do not agree with the vendor’s manual. | 2014-08-27 | Even though the part can do 40 or 10 and any address will do, we need something specific in the test. | |
50 | SUGGEST | The following sentences are little bit misleading. You said “there is no failing test, as expected” first but later said “It fails.” No failing tests without adding a test case is just a false positive. How about modifying the sentence “If you build and run right now, there is no failing test, as expected.” to “If you build right now, there is no compilation errors, as expected.”? I expect this test to compile; there were no interface changes. If you build and run right now, there is no failing test, as expected. Add the test into the TEST_GROUP_RUNNER(). It fails because we did the simplest thing that could possibly work at the end of the previous chapter, and it doesn’t work for this test. | 2014-08-26 | Here are better words to get the ida across \n \nI expect this test to compile; there were no interface changes. Next you want a failing test, but if you build and run right now there is no failing test. The test has not been added into the \nTEST_GROUP_RUNNER(). Once you do, it fails \nbecause we did the simplest thing that could \npossibly work at the end of the previous chapter, \nand it doesn't work for this test. | |
240 | SUGGEST | In the first code snippet, findUnusedEvent function has unnecessary void for its parameter. | 2014-08-27 | ||
281 | ERROR | same to #50940 | 2014-08-27 | ||
268 | SUGGEST | considerStartingANewTestGroup(); exit(SUCCESS); | 2014-08-27 | ||
241 | ERROR | void LightDriver_SetBrightness(LightDriver self, int level) | 2014-08-27 | ||
316 | SUGGEST | Thread_Destroy(Thread self) does not have a link to the online code. | 2014-08-27 | ||
70 | SUGGEST | Console output missing: “>> make” before compiling LedDriver.c | 2014-08-26 | ||
297 | ERROR | In the Unity test file sample a semicolon is missing after the declaration of the test group’s name. This leads to an error during compilation. | 2014-08-27 | ||
293 | ERROR | MinGW and cygwin issues with the eclispe files. Here is the fix: 1) Deleted all the .project, .cproject, .cdtproject and .settings (this is a did) files to get rid of all the now obsolete files. I did something in the structure of the project I don’t really care for. t0,1,2,3 are all contained in the same file tree as the ‘code’ project. It makes unnecessary rebuilds. It is better to turn off each project one at a time. After you are done playing with the code under mingw or cygwin, I suggest getting a real development environment. Use a VM running some form of linux, or a straight linux machine. Any serious effort at TDD will be slowed by the turtle like sped of those emulation environments. | |||
59 | SUGGEST | Picking a nit, but LED 3141 or LED 33 for that matter, induce Undefined Behavior. From the C Standard 6.5.7: “If the value of the right operand is negative or is greater than or equal to the width of the promoted left operand, the behavior is undefined.” | 2014-08-26 | added a note about static analysis and undefined behavior. thanks | |
63 | TYPO | Before the text “Now add the call to RUNTIME_ERROR(); the test passes.”, it says 11 Tests 1 Failures 0 Ignored. However after the above quoted text, it says (after running make) 11 Tests 0 Failures 0 Ignored. Should it not be 12 Tests 0 Failures 0 Ignored ? | 2014-08-26 | ||
305 | TYPO | The first paragraph after the bullet points says: | 2014-08-27 | checks, asserts, assertions are interchangeable. I'll get rid of the all three. | |
200 | TYPO | At the end of the paragraph (on this page) with heading “The Test Safety Net”, the last sentence does not require ‘a’ - it should say "Here is the test for LightController_TurnOn() along with its TEST_GROUP: | 2014-08-27 | ||
253 | TYPO | The text in the brackets needs to be corrected to something like: | 2014-08-27 | ||
18 | TYPO | Second sentence of “Installing Unity Tests” section: | 2014-08-26 | this typo was not in the first printing. | |
all | TYPO | In the .mobi (Kindle) edition there are several missing references that instead say “(as yet) unwritten content” in italics. | 2014-08-28 | Dave says this is fixed | |
24 | TYPO | At bottom of page, ‘This lets you get very precise about which test cases are running’. Seem you forgot the noun following ‘very precise’. Completing this sentence will fill in the idea. lee.larson@smiths-medical.com | |||
179 | ERROR | In the discussion about clocks roll over, since the timer has a microsecond tick period, a 32-bit counter register would roll over after a bit more than 71 minutes instead of 136 years while a 16-bit counter would roll over after a bit more than 65 ms instead of 18 hours. | |||
15 | TYPO | probqably | |||
312 | ERROR | Environment: Windows 10, Cygwin installed February 6th 2016 as described on page 312 jgade-code.zip downloaded make -i -C t1 make -i -C SandBox make -i -f MakefileUnity.mk | |||
312 | ERROR | In order to fix the build for SandBox and MakefileUnity.mk on a Windows 10 / Cygwin 64 bit system do the following: from code\\unity.framework\\extras\\fixture\\build\\MakefileWorker.mk delete these lines: then merge code\\unity.framework\\extras\\fixture\\build\\MakefileWorker.mk | |||
137 | ERROR | tests/HomeAutomation/LightControllerSpy.c #includes “LightController.h”. Shouldn’t it #include “LightControllerSpy.h” so it can pick up the declarations in the header? Plus this would have the implementation transitively include LightController.h. | |||
25 | ERROR | ghenry@ghenry-work:~/src/testing_c/code$ make -f MakefileCppUTest.mk Should this work? | |||
72-73 | ERROR | The output of unity that’s displayed on page 72 is incorrect. It should print 15 tests instead of 16. | |||
93 | ERROR | static void setLedImageBit(int ledNumber) | |||
109 | TYPO | The first sentence of the second paragraph says: “Collaborators can get in the way when is it hard to control their behavior.” (change the order of ‘is it’) | |||
114 | TYPO | The explanation of what a Test Dummy is misspells ‘compiler’ as ‘complier’ | |||
24? | ERROR | “Location 298 of 10301” in the Kindle book — The “Online Resources” URL for Unity (unity.sourceforge.net) is no longer valid. Still, I suggest you use “www.throwtheswitch.org/unity” or else “github.com/ThrowTheSwitch/Unity” instead. | |||
61 | ERROR | Text uses variables ledAddress and ledsAddress but no such names are define in code so far, there is only address loacal variable of funcion LedDriver_Create. | |||
153 | TYPO | Second last paragraph on page “When calls to FormatOutput() have been overridden with FormatOutputSpy(), the output can be accessed by a call to FormatOutputSpy_GetOuput().” | |||
182 | 165 | TYPO | In figure 20 < | ||
xx | TYPO | At the top of the page, “heros” should be “heroes”. | |||
50 | ERROR | When I’m doing the third step from the section “Where are we?” in chapter "Test-Driving Tools and Conventions: make -f MakefileCppUTest.mk Shell shows me what has follow: How can I fix it? | |||
81 | ERROR | TEST (LedDriver, TurnOnMultipleLeds) must be TEST (LedDriver, LedMemoryIsNotReadable) | |||
0 | ERROR | In the make files (MakefileWorker.mk) is a comment “#BTW: I’m just guessing that mingw is 32 bit only”. This is not correct, or at least there is the mingw64 which provides gcc in both 32 bit and 64 bit versions. I think mingw64 is at least as common as the original mingw. To run the first example I had to fix this, as well as include <string.h> in SprintfTest.c to get the declaration of strlen(); |