CSCI 265: Software Engineering Notes and Reference Material

Software design and development

Software project life cycles
Specifications and documentation
Planning, abstraction, modularity, and incremental design
12 steps to better software (Joel on software)
Intro to software eng (from Dr. Peter Walsh)
Data abstraction and Procedural abstraction (from Dr. Peter Walsh)
Agile development (wikipedia) and and limitations (B. Collet)

Version control and git

Version control and configuration management (oldish notes)
Revision control (wiki)
Git at viu , example with merge
gitk documentation: from git-scm.com, and from gitolite.com
Git at github
Git homepage (git-scm.com)
tutorial from Lars Vogella
Git magic (by Ben Lynn) (pdf) (SphereDev.org)
Everyday Git (kernel.org)
Git for Computer Scientists (T. Virtanen)
git (wikipedia)

Shells, scripting, and bash

Bash, linux, and more linux
Bash Guide for Beginners (M. Garrels)
Bash Scripting Tutorial (LinuxConfig.org)
A quick guide to writing scripts using the bash shell (D. Rebbechi)
bash/perl scripts for git (kernel.org)

Automated builds, architecture, make, and C++

C++ for java programmers (cs@wisc)
my own scratchpad of notes on make
GNU make (GNU.org)
Automating the creation of makefiles (wikipedia)
Language libraries
Comp. architecture (fetch decode execute, run time stack, memory organization, etc. )
defensive programming (Dr. Walsh's notes)
additional concerns regarding forms and security

Debugging, and defect tracking/reporting

Norman Matloff's "Guide to Faster, Less Frustrating Debugging" (U Cal @ Davis)
GDB, valgrind, and gprof quickref
GDB cheat sheet (yolinux.com)
gdb Tutorial (unknownroad.com)
C++ Programming/debugging (wikibooks.org)
Painless bug tracking (JoelOnSoftware.com)
Bug tracking software (open source)
  - Bugzilla (sandbox): sample bug report, search, and guidelines (pdfs)
  - Trac
  - Redmine

Code standards and inspections

Coding standards, styles, and inspections (oldish notes)
code reviews, and sample standards, (both from possibility.com)
Intro and software inspections (from Dr. Peter Walsh)

Software testing

Testing levels and techniques (oldish notes)
software testing (wikipedia)
test driven development (possibility.com)
Testing types and purposes (testinggeek.com)
Unit and functional testing (ibm.com)
Test automation (wikipedia)
Test plan template (atlascode.com)
Module testing and Testing (from Dr. Peter Walsh)

Software performance and profiling

debugging and profiling with valgrind
GDB, valgrind, and gprof quickref
S. Wolf's guide to gprof (cs.duke.edu)
Profiling tools and tuning (wikipedia)

Character sets and graphical interfaces

Character representations and unicode
Perl gtk2 tutorial (sourceforge.net)
C++ gtk 2 tutorial (gnome.org) Graphics exercise in bash using zenity,
(similar ideas: perl using zenity, C++ using zenity).
GTK for graphics from C++


Additional material and resources

Emacs tutorials
Learning emacs (emacs wiki)
GNU guided tour of emacs
emacs tutorial by K. Waclena (U. of Chicago)

Vim tutorials
my short vim guide
interactive tutorial (openvim)
vim wiki tutorial

CS resources
Tech notes for students
my csci git/submit notes

Java on otter/cubs
Right now java on otter and in the labs is version 1.8 of OpenJDK,
docs available at openjdk.net

Perl and perl's test module
notes on creating/using your own modules in perl
my REALLY old perl notes
introductory notes on perl Test
Perl Programming (TutorialsPoint.com)

When software projects go wrong ...
9 SW Disasters (slideshow)
20 famous SW Disasters (more detail, but includes some fictional events)
When Interfaces Kill (B. Tognazzini)
How to kill patients through bad design (J. Nielsen)

Bash exploit (sept.2014) injection attack
If you've heard a bit about the rather serious old bash exploit, you might find some of this interesting reading:
Redhat security blog
Cert Vulnerability notice

Heartbleed OpenSSL vulnerability
High level overview from Symantec
The git commit that introduced the vulnerability


free CS books from Springer