<bijan.parsia, christos.kotselidis@manchester.ac.uk>
(bug reports welcome!)
Intellectual property is any articulable, tangible production of a mind whose physical realisations are restricted by law (in production, distribution, etc.)
Name | Establishment | Enforcement |
---|---|---|
Copyright | Automatic, immediate | Civil and Criminal |
Patent | Application; exposure before application destroys it | Mostly civil |
Trademark | Application and vigorous defense | Mostly civil |
Trade Secret | Automatic (by not telling people) and NDAs | Mostly civil |
Copyright is a licensable monopoly of tangible expression of an idea with respect to reproduction, derivation, display, distribution, and the like.
A patent is a licensable monopoly of the use or sale of a "non-obvious" invention (of a process, machine, design (sometimes), mechanism, procedure, etc.
A trade secret is an invention which is not disclosed
Our discussion will be adequate if it has as much clearness as the subject-matter admits of, for precision is not to be sought for alike in all discussions, any more than in all the products of the crafts...for it is the mark of an educated [person] to look for precision in each class of things just so far as the nature of the subject admits...
— Aristotle, Nicomachaen Ethics, Book 1, 3
We demand rigidly defined areas of doubt and uncertainty!
— Douglas Adams, The Hitchhiker's Guide to the Galaxy
A defect in a software system is a quality level (for some quality) that is not acceptable.
What counts as a defect is often determined late in the game!
If your program crashes then it
If your program crashes, and the cause is in your code, then it
(Does QA hate you? — scroll for the cartoons as well as the wisdom.)
This is a logical, not temporal, order.
The penalty for failing to define the problem is that you can waste a lot of time solving the wrong problem. This is a double-barreled penalty because you also don't solve the right problem.
—McConnell, 3.3
miniwc
from the specWhat were the challenges you encountered?
What challenges were inherent to the problem?
What challenges were environmental?
ID | Lines | Words | Char | |
---|---|---|---|---|
j02654hg_Lab1 | 1 | 8 | 83 | fizzbuzzgolf.py |
mbax9jc7_Lab1 | 1 | 7 | 94 | fizzbuzzgolf.py |
mbaxtmb3_Lab1 | 1 | 13 | 104 | fizzbuzzgolf.py |
mbaxtod2_Lab1 | 9 | 15 | 134 | fizzbuzzgolf.py |
mbaxtsd2_Lab1ERROR | 13 | 23 | 155 | fizzbuzzgolf.py |
Beware of bugs in the above code; I have only proved it correct, not tried it.
— Don Knuth, Figure 6: page 5 of classroom note
—Grace Hopper's Bug Report
Testing is inescapable; good testing takes work
A test case is a repeatable execution situation of a software system that produces recordable outcomes. A test is a particular attempt of a test case
1+1
to a calculator to return 2
1+1
A test case is a repeatable execution situation of a software system that produces recordable outcomes. A test is a particular attempt of a test case
The fundamental challenge of testing is generalisability
Testing shows the presence, not the absence of bugs.
—Edsger W. Dijkstra, Nato Software Engineering Conference, pg 16 1969
"We used the following test suite to stress test our application".
X and Y
sum
X=1
and Y=1
2
The next most significant subset of [Modification Requests (MRs)] were those that concern testing (the testing environment and testing categories)—24.8% of the MRs. ...it is not surprising that a significant number of problems are encountered in testing a large and complex real-time system...First, the testing environment itself is a large and complex system that must be tested. Second, as the real-time system evolves, so must the laboratory test environment evolve.
Making Software, pg. 459.
Two programs are functionally equivalent just in case they implement exactly the same functionality.
The functionality of a software system is the required behaviour of the system
Not ideal, as non-functional behaviour may be required
The functionality of a software system is the behaviour of the system that performs some user task
In either cause, the functionality is a subset of all behaviour
Two programs are functionally equivalent just in case they implement exactly the same functionality
The functionality of a program are those behaviours which performs a user task
Functionality may be changing, unknown, or misunderstood
The set of functionally equivalent programs depends on the functionality parameter
Compare a "normal" FizzBuzz solution with a golf version:
Given a set of required functionalities F, and two systems, S1 & S2, S1 is functionality equivalent (with respect to F) to S2 if S1 and S2 enact F.
So, if two programs are behaviourly equivalent then they are functionally equivalent.
What happens if S1 and S2 don't quite enact the same F?
Given a set of required functionalities F, and two systems, S1 & S2, which enact functionality sets F1 & F2 (respectively), where, F1 ≠ F2 ≠ F, S1 is sufficiently functionally equivalent to S2 wrt F if F1 and F2 share "enough" of an overlap with F.
Obviously, "enough" is a parameter!
wc
example!wc
has more functionality (and user-notable behaviour) than miniwc.py
wc
s!wc --help --version
vs. wc --version --help
wc
wc
example!wc
has more functionality (and user-notable behaviour) than miniwc.py
wc
s!wc --help --version
vs. wc --version --help
wc