<bijan.parsia, christos.kotselidis@manchester.ac.uk>
(bug reports welcome!)
Reflection is the process of examining one own thoughts, beliefs, experiences, concepts, etc. in order to gain self-knowledge and insight
rar
archive (e.g., mbassbp2_cw1.rar
)Bijan_Parsia_cw1.zip
instead of mbassbp2_cw1.zip
Metacognition is thinking about thinking
A cognitive bias is a systematic departure from rationality.
Be very careful here!
Aim for the sweet spot!
A student who has mastered the [Core Body of Knowledge (CBOK) will be able to develop a modest-sized software system of a few thousand lines of code from scratch, be able to modify a pre-existing large-scale software system exceeding 1,000,000 lines of code, and be able to integrate third-party components that are themselves thousands of lines of code. Development and modification include analysis, design, and verification, and should yield high-quality artefacts, including the final software product.
IEEE & ACM ACM 2009 Software Engineering Curriculum Recommendations.
wc
?wc.py
get us?QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers. Orders a sfdeljknesv.
— Bill Sempf (@sempf) September 23, 2014
McConnell: 22.2 Recommended Approach to Developer Testing
Readability is part of understandability. But you can have readable methods or functions and an impossible to grasp architecture.
def get_file_list():
# Get list of arguments from the command line, minus "wc.py"
args_list = sys.argv[1:]
...
or
def get_max_width():
max_val_list = []
for rec in file_log:
max_val_list.append(rec.get_max_value())
return max(max_val_list)
Thanks to the brave student who volunteered their code!
def get_file_list(**args**):
# Get list of arguments from the command line, minus "wc.py"
args_list = args[1:]
...
so we can test by:
>>> import wc
>>> get_file_list(['wc.py', '-l', 'filename.txt'])
Thanks to the brave student who volunteered their code!
What about:
#all the module's code
wc()
Thanks to the brave student who volunteered their code!
We want to import the module without running anything!
#all the module's code
if __name__ = "__main__":
wc()
Now, import wc
doesn't run wc()
Thanks to the brave student who volunteered their code!
Refactoring is a transformation of code into sufficiently functionally equivalent code that has "better" internal properties.
"Martin Fowler defines as "a change made to the internal structure of the software to make it easier to understand and cheaper to modify without changing its observable behavior" (Fowler 1999)" — McConnell, 24.2
Technical debt is "the obligations incurred by a software organization when it chooses an expedient design or construction approach that increases complexity and is more costly in the long term."
If you don't know the scope, it's probably not (fully) intentional
Do you always have to pay down your debt?
Although it might seem that the best way to develop a high-quality product would be to focus on the product itself, in software quality assurance you also need to focus on the software-development process.
— McConnell, 20.2
Poor quality processes raises the the risk of poor quality products
The General Principle of Software Quality is that improving quality reduces development costs. McConnell, 20.5
Counterintuitive principle!