Conjoint analysis based on a orthogonal design - spss

I'm having some issues regarding a conjoint analysis. Excuse me if some of the terms I use are wrong, but it has been some time since I last worked with SPSS - and my teacher was Danish.
Task object
I am to make a series of concept travelpackages (attributes and attribute notes/levels).
This far I've got things under control - I've reduced the number of packages from 81 to 9, with the help of 'orthogonal' design.
These 9 packages have been rated by some people (1-10), on a questionnaire.
Then I've been asked to write a syntax which evaluates my conjoint plan:
CONJOINT PLAN= 'C:\Users\MYNAME\DROBBOXFOLDER\Conjoint_cards.SAV'
/DATA='C:\Users\MYNAME\DROBBOXFOLDER\Respondents.SAV'
/SCORE=Card_1 TO Card_9
/SUBJECT=ID
/FACTORS= SMS Minutter Data Tryghed
/PRINT=ALL
/PLOT=ALL.
However I keep getting this error:
SUBJECT SUBCOMMAND -- Subject variable is not on data file.
Execution of this command stops.
At this point I've been to the dark pages of Google and back for an answer to what I am doing wrong, but nothing so far. The answer is probably staring me in the face. But I will appreciate any help or pointers as to what I'm doing wrong.
Problem solved:
So apparently one shouldn't follow a guide to the letter. My datafile didn't contain a ID, so removing this from my syntax solved the problem.

Related

Is the chrome devtools doc wrong about the Dominator concept in memory analysis?

https://developers.google.cn/web/tools/chrome-devtools/memory-problems/memory-101#dominators
This is the first time I'm exposed to this concept. After some study, I can understand it now. But when I head back to the doc, what's documented looks pretty confusing to me.
What the heck is "Dominator objects are comprised of a tree structure because each object has exactly one dominator. "? From my understanding, an object can possibly have multiple dominators.
Besides, the description to the diagram below says Node 2 dominates nodes 3, 4, and 6. But isn't Node 2 dominating all nodes but node 1?
I just need someone in the know to confirm this because I can't imagine such awful information in the google doc.

Tiny YOLOv3 (Darknet) training "too quickly" and produces different output

I am pretty new to YOLO/Darknet and am walking in circles with the solutions. I have looked at the Github and Stackexchange fora pages corresponding with similar issues, but none seems to directly address this output issue (i.e. where the region IOU line is missing). Here is my output (training/testing):
Here is my directory structure:
Other details:
I am using the AlexeyAB fork.
6 classes in total (following this convention of annotating occluded and truncated items, so two "items" with three classes each)
I'm using 200+ training images (definitely too few, but I don't know if this is the root cause of my troubles).
There is no predictions.png, just predictions.jpg. However, I don't think this should be an issue.
I followed this tutorial.
Any help is very much appreciated; thank you in advance!
If it finish too soon on training, try adding -clear 1at the end of your training command.
EDIT:
This is the correct answer (ergo why I accepted it), but lacks an explanation. The "-clear 1" flag is, according to this answer, clears past stats.

daily quote for each page with latex

I want create calendar planner from 1/1/2019 to 31/2/2019:
In Main.tex: I use \pgfcalendar{cal}{2019-01-01}{2019-02-31} to create pdf.
One page = one day
Now i want add each different quote to each day.
How write code in quote.tex and connect in Main.tex.
Thanks
\pgfcalendar{cal}{2019-01-01}{2019-02-31}
{%
\LARGE\bfseries
\pgfcalendarweekdayname{\pgfcalendarcurrentweekday},
\pgfcalendarcurrentday{}.
\pgfcalendarmonthname{\pgfcalendarcurrentmonth}
\pgfcalendarcurrentyear{}
%}
\pagebreak
==========
I'd suggest setting up a daily quote in Excel with all the bells and whistles of formulas to extract the weekday, day, month and year from a date. I pulled some random quotes from the Internets to compile with each of the first 100 days...
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{daily_quote.csv}
Number,Date,Day,Month,Year,DayOfWeek,Quote,Author
1,2019-01-01,1,January,2019,Tuesday,"We are what we repeatedly do. Excellence, therefore, is not an act but a habit.",Aristotle
2,2019-01-02,2,January,2019,Wednesday,The best way out is always through.,Robert Frost
3,2019-01-03,3,January,2019,Thursday,Do not wait to strike till the iron is hot; but make it hot by striking.,William B Sprague
4,2019-01-04,4,January,2019,Friday,Great spirits have always encountered violent opposition from mediocre minds.,Albert Einstein
5,2019-01-05,5,January,2019,Saturday,"Whether you think you can or think you can't, you're right.",Henry Ford
6,2019-01-06,6,January,2019,Sunday,I know for sure that what we dwell on is who we become.,Oprah Winfrey
7,2019-01-07,7,January,2019,Monday,"I've missed more than 9000 shots in my career. I've lost almost 300 games. 26 times, I've been trusted to take the game winning shot and missed. I've failed over and over and over again in my life. And that is why I succeed.",Michael Jordan
8,2019-01-08,8,January,2019,Tuesday,You must be the change you want to see in the world.,Mahatma Gandhi
9,2019-01-09,9,January,2019,Wednesday,What you get by achieving your goals is not as important as what you become by achieving your goals.,Goethe
10,2019-01-10,10,January,2019,Thursday,You can get everything in life you want if you will just help enough other people get what they want.,Zig Ziglar
11,2019-01-11,11,January,2019,Friday,"Whatever you do will be insignificant, but it is very important that you do it.",Mahatma Gandhi
12,2019-01-12,12,January,2019,Saturday,"Desire is the starting point of all achievement, not a hope, not a wish, but a keen pulsating desire which transcends everything.",Napoleon Hill
13,2019-01-13,13,January,2019,Sunday,Failure is the condiment that gives success its flavor.,Truman Capote
14,2019-01-14,14,January,2019,Monday,Vision without action is daydream. Action without vision is nightmare.,Japanese Proverb
15,2019-01-15,15,January,2019,Tuesday,"In any situation, the best thing you can do is the right thing; the next best thing you can do is the wrong thing; the worst thing you can do is nothing.",Theodore Roosevelt
16,2019-01-16,16,January,2019,Wednesday,"If you keep saying things are going to be bad, you have a chance of being a prophet.",Isaac B Singer
17,2019-01-17,17,January,2019,Thursday,Success consists of doing the common things of life uncommonly well.,Unknown
18,2019-01-18,18,January,2019,Friday,"Keep on going and the chances are you will stumble on something, perhaps when you are least expecting it. I have never heard of anyone stumbling on something sitting down.","Charles F Kettering, Engineer and Inventor"
19,2019-01-19,19,January,2019,Saturday,Twenty years from now you will be more disappointed by the things that you didn't do than by the ones you did do. So throw off the bowlines. Sail away from the safe harbor. Catch the trade winds in your sails. Explore. Dream. Discover.,Mark Twain
20,2019-01-20,20,January,2019,Sunday,Losers visualize the penalties of failure. Winners visualize the rewards of success.,Unknown
21,2019-01-21,21,January,2019,Monday,Some succeed because they are destined. Some succeed because they are determined.,Unknown
22,2019-01-22,22,January,2019,Tuesday,Experience is what you get when you don't get what you want.,Dan Stanford
23,2019-01-23,23,January,2019,Wednesday,Setting an example is not the main means of influencing others; it is the only means.,Albert Einstein
24,2019-01-24,24,January,2019,Thursday,"A happy person is not a person in a certain set of circumstances, but rather a person with a certain set of attitudes.",Hugh Downs
25,2019-01-25,25,January,2019,Friday,"If you're going to be able to look back on something and laugh about it, you might as well laugh about it now.",Marie Osmond
26,2019-01-26,26,January,2019,Saturday,"Remember that happiness is a way of travel, not a destination.",Roy Goodman
27,2019-01-27,27,January,2019,Sunday,"If you want to test your memory, try to recall what you were worrying about one year ago today.",E Joseph Cossman
28,2019-01-28,28,January,2019,Monday,What lies behind us and what lies before us are tiny matters compared to what lies within us.,Ralph Waldo Emerson
29,2019-01-29,29,January,2019,Tuesday,We judge of man's wisdom by his hope.,Ralph Waldo Emerson
30,2019-01-30,30,January,2019,Wednesday,The best way to cheer yourself up is to try to cheer somebody else up.,Mark Twain
31,2019-01-31,31,January,2019,Thursday,"Age is an issue of mind over matter. If you don't mind, it doesn't matter.",Mark Twain
32,2019-02-01,1,February,2019,Friday,"Whenever you find yourself on the side of the majority, it's time to pause and reflect.",Mark Twain
33,2019-02-02,2,February,2019,Saturday,"Keep away from people who try to belittle your ambitions. Small people always do that, but the really great make you feel that you, too, can become great.",Mark Twain
34,2019-02-03,3,February,2019,Sunday,The surest way not to fail is to determine to succeed.,Richard B Sheridan
35,2019-02-04,4,February,2019,Monday,"Take the first step in faith. You don't have to see the whole staircase, just take the first step.",Dr Martin Luther King Jr
36,2019-02-05,5,February,2019,Tuesday,Act or accept.,Anonymous
37,2019-02-06,6,February,2019,Wednesday,"Many great ideas go unexecuted, and many great executioners are without ideas. One without the other is worthless.",Tim Blixseth
38,2019-02-07,7,February,2019,Thursday,The world is more malleable than you think and it's waiting for you to hammer it into shape.,Bono
39,2019-02-08,8,February,2019,Friday,Sometimes you just got to give yourself what you wish someone else would give you.,Dr Phil
40,2019-02-09,9,February,2019,Saturday,"Motivation is a fire from within. If someone else tries to light that fire under you, chances are it will burn very briefly.",Stephen R Covey
41,2019-02-10,10,February,2019,Sunday,People become really quite remarkable when they start thinking that they can do things. When they believe in themselves they have the first secret of success.,Norman Vincent Peale
42,2019-02-11,11,February,2019,Monday,Whenever you find whole world against you just turn around and lead the world.,Anonymous
43,2019-02-12,12,February,2019,Tuesday,Being defeated is only a temporary condition; giving up is what makes it permanent.,"Marilyn vos Savant, Author and Advice Columnist"
44,2019-02-13,13,February,2019,Wednesday,I can't understand why people are frightened by new ideas. I'm frightened by old ones.,John Cage
45,2019-02-14,14,February,2019,Thursday,Setting an example is not the main means of influencing others; it is the only means.,Albert Einstein
46,2019-02-15,15,February,2019,Friday,The difference between ordinary and extraordinary is that little extra.,Unknown
47,2019-02-16,16,February,2019,Saturday,The best way to predict the future is to create it.,Unknown
48,2019-02-17,17,February,2019,Sunday,Anyone can do something when they WANT to do it. Really successful people do things when they don't want to do it.,Dr Phil
49,2019-02-18,18,February,2019,Monday,"There are two primary choices in life: to accept conditions as they exist, or accept the responsibility for changing them.",Dr Denis Waitley
50,2019-02-19,19,February,2019,Tuesday,Success is the ability to go from failure to failure without losing your enthusiasm.,Sir Winston Churchill
51,2019-02-20,20,February,2019,Wednesday,Success seems to be connected with action. Successful people keep moving. They make mistakes but don't quit.,Conrad Hilton
52,2019-02-21,21,February,2019,Thursday,Attitudes are contagious. Make yours worth catching.,Unknown
53,2019-02-22,22,February,2019,Friday,Do not let what you cannot do interfere with what you can do.,John Wooden
54,2019-02-23,23,February,2019,Saturday,"There are only two rules for being successful. One, figure out exactly what you want to do, and two, do it.",Mario Cuomo
55,2019-02-24,24,February,2019,Sunday,"Sooner or later, those who win are those who think they can.",Richard Bach
56,2019-02-25,25,February,2019,Monday,Vision doesn't usually come as a lightening bolt. Rather it comes as a slow crystallization of life challenges that we one day recognize as a beautiful diamond with great value to ourselves and others.,Dr Michael Norwood
57,2019-02-26,26,February,2019,Tuesday,"Success is a state of mind. If you want success, start thinking of yourself as a success.",Dr Joyce Brothers
58,2019-02-27,27,February,2019,Wednesday,Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.,Samuel Beckett
59,2019-02-28,28,February,2019,Thursday,Flops are a part of life's menu and I've never been a girl to miss out on any of the courses.,Rosalind Russell
60,2019-03-01,1,March,2019,Friday,Cause change and lead. Accept change and survive. Resist change and die.,"Ray Norda, Chairman, Novell"
61,2019-03-02,2,March,2019,Saturday,"Winners lose much more often than losers. So if you keep losing but you're still trying, keep it up! You're right on track.",Matthew Keith Groves
62,2019-03-03,3,March,2019,Sunday,"An idea can turn to dust or magic, depending on the talent that rubs against it.",Bill Bernbach
63,2019-03-04,4,March,2019,Monday,An obstacle is often a stepping stone.,Prescott
64,2019-03-05,5,March,2019,Tuesday,Life is trying things to see if they work,Ray Bradbury
65,2019-03-06,6,March,2019,Wednesday,"If you worry about yesterday's failures, then today's successes will be few.",Anonymous
66,2019-03-07,7,March,2019,Thursday,Life is 10% what happens to us and 90% how we react to it.,Dennis P Kimbro
67,2019-03-08,8,March,2019,Friday,"We are all inventors, each sailing out on a voyage of discovery, guided each by a private chart, of which there is no duplicate. The world is all gates, all opportunities.",Ralph Waldo Emerson
68,2019-03-09,9,March,2019,Saturday,Knowing is not enough; we must apply. Willing is not enough; we must do.,Johann Wolfgang von Goethe
69,2019-03-10,10,March,2019,Sunday,"In matters of style, swim with the current; in matters of principle, stand like a rock.",Thomas Jefferson
70,2019-03-11,11,March,2019,Monday,"I think and think for months and years. Ninety-nine times, the conclusion is false. The hundredth time I am right.",Albert Einstein
71,2019-03-12,12,March,2019,Tuesday,"Where the willingness is great, the difficulties cannot be great.",Machiavelli
72,2019-03-13,13,March,2019,Wednesday,Strength does not come from physical capacity. It comes from an indomitable will.,Mahatma Gandhi
73,2019-03-14,14,March,2019,Thursday,You are what you think about all day long.,Dr Robert Schuller
74,2019-03-15,15,March,2019,Friday,What you do speaks so loudly that I cannot hear what you say.,Ralph Waldo Emerson
75,2019-03-16,16,March,2019,Saturday,"Success is not to be measured by the position someone has reached in life, but the obstacles he has overcome while trying to succeed.",Booker T Washington
76,2019-03-17,17,March,2019,Sunday,"Talent is formed in solitude, character in the bustle of the world.",Johann Wolfgang von Goethe
77,2019-03-18,18,March,2019,Monday,"To avoid criticism do nothing, say nothing, be nothing.",Elbert Hubbard
78,2019-03-19,19,March,2019,Tuesday,"If you want to make your dreams come true, the first thing you have to do is wake up.",JM Power
79,2019-03-20,20,March,2019,Wednesday,By working faithfully eight hours a day you may eventually get to be boss and work twelve hours a day,Robert Frost
80,2019-03-21,21,March,2019,Thursday,"I've learned that no matter what happens, or how bad it seems today, life does go on, and it will be better tomorrow.",Maya Angelou
81,2019-03-22,22,March,2019,Friday,The art of being wise is the art of knowing what to overlook.,William James
82,2019-03-23,23,March,2019,Saturday,"When I hear somebody sigh, ‘Life is hard,' I am always tempted to ask, ‘Compared to what?'",Sydney Harris
83,2019-03-24,24,March,2019,Sunday,Don't let life discourage you; everyone who got where he is had to begin where he was.,Richard L Evans
84,2019-03-25,25,March,2019,Monday,In three words I can sum up everything I've learned about life: It goes on.,Robert Frost
85,2019-03-26,26,March,2019,Tuesday,"You gain strength, courage and confidence by every experience in which you stop to look fear in the face.",Eleanor Roosevelt
86,2019-03-27,27,March,2019,Wednesday,Sometimes even to live is an act of courage.,Seneca
87,2019-03-28,28,March,2019,Thursday,"Do first things first, and second things not at all.",Peter Drucker
88,2019-03-29,29,March,2019,Friday,The only people who find what they are looking for in life are the fault finders.,Foster's Law
89,2019-03-30,30,March,2019,Saturday,Defeat is not bitter unless you swallow it.,Joe Clark
90,2019-03-31,31,March,2019,Sunday,I am an optimist. It does not seem too much use being anything else.,Winston Churchill
91,2019-04-01,1,April,2019,Monday,Positive anything is better than negative thinking.,Elbert Hubbard
92,2019-04-02,2,April,2019,Tuesday,People seem not to see that their opinion of the world is also a confession of character.,Ralph Waldo Emerson
93,2019-04-03,3,April,2019,Wednesday,"Those who wish to sing, always find a song.",Swedish Proverb
94,2019-04-04,4,April,2019,Thursday,"If you're going through hell, keep going.",Winston Churchill
95,2019-04-05,5,April,2019,Friday,"The sun shines and warms and lights us and we have no curiosity to know why this is so; but we ask the reason of all evil, of pain, and hunger, and mosquitoes and silly people.",Ralph Waldo Emerson
96,2019-04-06,6,April,2019,Saturday,Life is a shipwreck but we must not forget to sing in the lifeboats.,Voltaire
97,2019-04-07,7,April,2019,Sunday,"Enduring habits I hate…. Yes, at the very bottom of my soul I feel grateful to all my misery and bouts of sickness and everything about me that is imperfect, because this sort of thing leaves me with a hundred backdoors through which I can escape from enduring habits.","Friedrich Nietzsche, The Gay Science, 1882"
98,2019-04-08,8,April,2019,Monday,There is no education like adversity.,Disraeli
99,2019-04-09,9,April,2019,Tuesday,He who has a why to live can bear almost any how.,Friedrich Nietzsche
100,2019-04-10,10,April,2019,Wednesday,Adversity introduces a man to himself.,Unknown
\end{filecontents*}
\usepackage{datatool}
\begin{document}
\DTLloadrawdb[keys = {
Number,
Date,
Day,
Month,
Year,
DayOfWeek,
Quote,
Author
}]
{DailyQuote} % DB name
{daily_quote.csv} % Filename
\raggedright
\DTLforeach
{DailyQuote}
{\Day = Day,
\Month = Month,
\Year = Year,
\DayOfWeek = DayOfWeek,
\Quote = Quote,
\Author = Author
}{
\clearpage
\section*{\DayOfWeek, \Month~\Day, \Year}
\Quote~\textit{\Author}
}
\end{document}

Reintroducing spaces into a document

Imagine we have some reference text on hand
Four score and seven years ago our fathers brought forth on this
continent a new nation, conceived in liberty, and dedicated to the
proposition that all men are created equal. Now we are engaged in a
great civil war, testing whether that nation, or any nation, so
conceived and so dedicated, can long endure. We are met on a great
battle-field of that war. We have come to dedicate a portion of that
field, as a final resting place for those who here gave their lives
that that nation might live. It is altogether fitting and proper that
we should do this. But, in a larger sense, we can not dedicate, we can
not consecrate, we can not hallow this ground. The brave men, living
and dead, who struggled here, have consecrated it, far above our poor
power to add or detract. The world will little note, nor long remember
what we say here, but it can never forget what they did here. It is
for us the living, rather, to be dedicated here to the unfinished work
which they who fought here have thus far so nobly advanced. It is
rather for us to be here dedicated to the great task remaining before
us—that from these honored dead we take increased devotion to that
cause for which they gave the last full measure of devotion—that we
here highly resolve that these dead shall not have died in vain—that
this nation, under God, shall have a new birth of freedom—and that
government of the people, by the people, for the people, shall not
perish from the earth.
and we receive snippets of that text back to us with no spaces or punctuation, and some characters deleted, inserted, and substituted
ieldasafinalrTstingplaceforwhofoughtheregavetheirliZesthatthatn
Using the reference text what are some tools (in any programming language) we can use to try properly space the words
ield as a final rTsting place for who fought here gave their liZes that that n
correcting errors is not necessary, just spacing
Weird problem you've got there :)
If you can't rely on capitalization for hints, just lowercase everything to start with.
Then get a dictionary of words. Maybe just a wordlist, or you could try Wordnet.
And a corpus of similar, correctly spaced, material. If suitable, download the Wikipedia dump. You'll need to clean it up and break into ngrams. 3 grams will probably suit the task. Or save yourself the time and use Google's ngram data. Either the web ngrams (paid) or the book ngrams (free-ish).
Set a max word length cap. Let's say 20chars.
Take the first char of your mystery string and look it up in the dictionary. Then take the first 2 chars and look them up. Keep doing this until you get to 20. Store all matches you get, but the longest one is probably the best. Move the starting point 1 char at a time, through your string.
You'll end up with an array of valid word matches.
Loop through this new array and pair each value up with the following value, comparing it to the original string, so that you identify all possible valid word combinations that don't overlap. You might end up with 1 output string, or several.
If you've got several, break each output string into 3-grams. Then lookup in your new ngram database to see which combinations are most frequent.
There might also be some time-saving techniques like starting with stop words, checking them in a dictionary combined with incremental letter either side, and adding spaces there first.
... or I'm over-thinging the whole issue and there's an awk one liner that someone will humble me with :)
You can do this using edit distance and finding the minimum edit distance substring of the reference. Check out my answer (PHP implementation) to a similar question here:
Longest Common Substring with wrong character tolerance
Using the shortest_edit_substring() function from the above link, you can add this to do the search after stripping out everything but letters (or whatever you want to keep in: letters, numbers, etc.) and then correctly map the result back to the original version.
// map a stripped down substring back to the original version
function map_substring($haystack_letters,$start,$length,$haystack, $regexp)
{
$r_haystack = str_split($haystack);
$r_haystack_letters = $r_haystack;
foreach($r_haystack as $k => $l)
{
if (preg_match($regexp,$l))
{
unset($r_haystack_letters[$k]);
}
}
$key_map = array_keys($r_haystack_letters);
$real_start = $key_map[$start];
$real_end = $key_map[$start+$length-1];
$real_length = $real_end - $real_start + 1;
return array($real_start,$real_length);
}
$haystack = 'Four score and seven years ago our fathers brought forth on this continent a new nation, conceived in liberty, and dedicated to the proposition that all men are created equal. Now we are engaged in a great civil war, testing whether that nation, or any nation, so conceived and so dedicated, can long endure. We are met on a great battle-field of that war. We have come to dedicate a portion of that field, as a final resting place for those who here gave their lives that that nation might live. It is altogether fitting and proper that we should do this. But, in a larger sense, we can not dedicate, we can not consecrate, we can not hallow this ground. The brave men, living and dead, who struggled here, have consecrated it, far above our poor power to add or detract. The world will little note, nor long remember what we say here, but it can never forget what they did here. It is for us the living, rather, to be dedicated here to the unfinished work which they who fought here have thus far so nobly advanced. It is rather for us to be here dedicated to the great task remaining before us—that from these honored dead we take increased devotion to that cause for which they gave the last full measure of devotion—that we here highly resolve that these dead shall not have died in vain—that this nation, under God, shall have a new birth of freedom—and that government of the people, by the people, for the people, shall not perish from the earth.';
$needle = 'ieldasafinalrTstingplaceforwhofoughtheregavetheirliZesthatthatn';
// strip out all non-letters
$regexp_to_strip_out = '/[^A-Za-z]/';
$haystack_letters = preg_replace($regexp_to_strip_out,'',$haystack);
list($start,$length) = shortest_edit_substring($needle,$haystack_letters);
list($real_start,$real_length) = map_substring($haystack_letters,$start,$length,$haystack,$regexp_to_strip_out);
printf("Found |%s| in |%s|, matching |%s|\n",substr($haystack,$real_start,$real_length),$haystack,$needle);
This will do the error correction as well; it's actually easier to do it than to not do it. The minimum edit distance search is pretty straightforward to implement in other languages if you want something faster than PHP.

What's the point of basis path coverage?

The article at onjava seems to imply that basis path coverage is a sufficient substitute for full path coverage, due to some linear-independence/cyclomatic-complexity magic.
Using an example similar to the article:
public int returnInput(int x, boolean one, boolean two)
{
int y = x;
if(one)
{
y = x-1;
}
if(two)
{
x = y;
}
return x;
}
with the basis set {FF,TF,FT}, the bug is not exposed. Only the untested TT path would expose it.
So, how is basis path coverage useful? It doesn't seem much better than branch coverage.
[Disclaimer: I've never heard of this technique before, it just looks interesting so I've done a few searches and here's what I think I've found out. Hopefully someone who knows what they're talking about will contribute too...]
I think it's supposed to be a better way of generating branch coverage tests, not a complete substitute for path coverage. There's a far longer document here which restates the goals a bit: http://www.westfallteam.com/sites/default/files/papers/Basis_Path_Testing_Paper.pdf
The onjava article says "the goal of basis path testing is to test all decision outcomes independently of one another. Testing the four basis paths achieves this goal, making the other paths extraneous"
I think "extraneous" here means, "unnecessary to the goal of basis path testing", not as one might assume, "a complete waste of everyone's time".
I think the point of testing branches independently, is to break those accidental correlations between the paths which work, and the paths you test, that occur with terrifying frequency when I write both the code and an arbitrary set of branch coverage tests myself. There's no magic in the linear independence, it's just a systematic way of generating branch coverage, which discourages the tester from making the same assumptions as the programmer about correlation between branch choices.
So you're right, basis path testing misses your bug, and in general misses 2^(N-1)-N bugs, where N is the cyclomatic complexity. It just aims not to miss the 2^(N-1)-N paths most likely to be buggy, as letting the coder choose N paths to test typically does ;-)
path coverage is no better than any other coverage metrics - it is just that metrics that shows how much of 'code' has been tested. The fact that you can achieve 100% branch coverage with (TF,FT) set of TCs as well as (TT,FF) means it is all up to your luck if your exit criteria tell you exit after 100% coverage is done.
The coverage should not be a focus for the tester - finding bugs should be and TC is just a way to show the bug just as well as coverage a proxy showing how much of this showing the bug activity has been done. As with all other white box methods - striving for max coverage with minimum costs require actually understanding the code so that you could actually write a defect w/o a TC. TC is just good for regression and as a documentation of the defect.
As a tester coverage is just a hint on how much has been done - only experience can be really helpful as to say how much is enough. As this is difficult to present in numerical values we use other methods i.e. coverage statistics.
Not sure if this makes sense to you I guess judging on the date you are far gone since the date you publish your question...
My recollection from McCabe's work on this exact subject is: you generate the basis paths systematically, changing one condition at a time, and only changing the last condition, until you can't change any new conditions.
Suppose we start with FF, which is the shortest path. Following the algorithm, we change the last if in the chain, yielding FT. We've covered the second if now, meaning: if there was a bug in the second if, surely our two tests were paying attention to what happened when the second if statement suddenly started executing, otherwise our tests aren't working or our code isn't verifiable. Both possibilities suggest our code needs reworking.
Having covered FT, we go back up one node in the path and change the first T to F. When building basis paths, we only change one condition at a time. So we are forced to leave the second if the same, yielding... TT!
We are left with these basis paths: {FF, FT, TT}. Which address the issue you raised.
But wait, you say, what if the bug occurs in the TF case?? The answer is: we should have already noticed it between two of the other three tests. Think about it:
The second if already had its chance to demonstrate its effect on the code independently any other changes to the execution of the program through the FF and FT tests.
The first if had its chance to demonstrate its independent effect going from FT to TT.
We could have started with the TT case (the longest path). We would have arrived at slightly different basis paths, but they would still exercise each if statement independently.
Notice in your simple example, there is no co-linearity in the conditions of the if statements. Co-linearity cripples basis path generation.
In short: basis path testing, done systematically, avoids the problems you think it has. Basis path testing doesn't tell you how to write verifiable code. (TDD does that.) More to the point, path testing doesn't tell you which assertions you need to make. That's your job as the human.
Source: this is my research area, but I read McCabe's paper on this exact subject a few years back: http://mccabe.com/pdf/mccabe-nist235r.pdf

Resources