CSCI 265: Software Engineering
Fall 2024 Course Outline
This document is available at url:
csci.viu.ca/~wesselsd/csci265/outline.html
Calendar Description
CSCI 265 (3) Software Engineering
An exploration of the methods and tools for developing
high quality software. The course includes topics in
program design, program style, algorithm selection,
interface design, debugging and testing, system utilities,
version control, regular expressions and an introduction
to scripting languages.
(3:0:1)
Pre-requisite: Min. "C" in CSCI 161
|
Course Motivation and overview
This course is intended to help you become more effective in both the design and implementation
of larger software projects. This is accomplished in a number of ways:
- through a better understanding of design principles such as data abstraction and modularity;
- through the development of clearer, more comprehensive, and more testable software specfications;
- through the application of standard coding techniques to simplify code debugging and maintenance,
including incremental development, defensive programming techniques, and adhering to a set of code
standards;
- through the use of standard tools for version control, automated program compilation, code profiling,
and automated testing.
The lectures will be used to discuss both the theories and the specific tools, languages, and techniques
we will be applying, while the labs/project will be used to apply this knowledge in practical exercises.
A more detailed list of course topics and course learning outcomes is given
in the Topics and Course Learning Outcomes
sections below.
Contact information, materials
- Lecturer: Dave Wessels, 753-3245 ext 2436, David.Wessels@viu.ca
- Office hours (Bldg 315, Room 222):
- Fridays noon-2pm
If you need to see me outside office hours please send me an email
(David.Wessels@viu.ca) to arrange a suitable time.
- Delivery mode:
the course is intended to be delivered entirely in-person
(lectures, labs, quizzes, and final exam).
- Textbook: these are optional, but either of the following is recommended
Kernighan and Pike
The Practice of Programming
Published 1999 by Addison Wesley
ISBN: 978-0201615869
| |
Code Complete, 2nd edition
Steve Mcconnell
Published 2004 by Microsoft
ISBN: 978-0735619678
|
- Web material: online material will be available through
http://csci.viu.ca/~wesselsd/csci265/
including links to lab and lecture videos and readings,
lab and project exercises, sample programs, practice problems,
links to external documentation and tutorials, etc.
- Announcements and class emails will be handled through the course VIULearn page.
- Software resources we will be using on the csci server will include: C, C++, bash, make,
git, gdb, gprof, ssh
Timetable
- Lectures (building 470, room 111)
Mon,Wed: 1-2:30
- Labs (Bldg 315 Room 115)
F24N01: Wed 10:30-11:30
F24N02: Fri 9:30-10:30
F24N03: Fri 10:30-11:30
(each student is registered in one of those three lab sessions, labs
will begin in the first week of classes, i.e. Sept 4/6)
Assessment
- 25% Quizzes
- 35% Final exam
- 40% Team Project
Topics
An approximate list of topics is given below,
more detail and an approximate ordering can be found at
csci.viu.ca/~wesselsd/courses/csci265
- Introduction to our linux environment
- Introduction to software process models (waterfall, incremental, agile)
and activities within the software life cycles
- Introduction to programming in the large vs. individual programming
- Software configuration management and version control (using git)
- Shells and shell programming (using bash)
- Linking, loading, separate compilation, and automating builds (with make and C or C++)
- Applied regular expressions (in make)
- System design principles: levels of abstraction, separation of concerns,
information hiding, coupling and cohesion, re-use of standard structures
- Simple refactoring
- Debugging strategies and tools (using gdb)
- Defensive coding practices
- Verification and validation processes
- Inspections, reviews, and audits
- Shell, script, and program interaction (using bash, and C or C++)
- Testing fundamentals:
- unit, integration, validation, and system testing
- test plan creation and test case generation
- black box and white-box testing techniques
- regression testing and test automation
- Effective use of AI-assisted IDEs in code development
Course Learning Outcomes
On successful completion of the course, the student should be able to:
- Design, implement, test, and debug software systems composed
of multiple different programs, including a mix of C++, and bash
files spread across multiple subdirectories in a file system.
- Identify common coding errors that lead to insecure programs
(e.g. buffer overflows, memory leaks, malicious code) and apply
strategies for avoiding such errors.
- Articulate design principles including separation of concerns,
information hiding, coupling and cohesion, and encapsulation.
- Conduct a personal code review (focused on common coding errors)
on a program component using a provided checklist.
- Contribute to a small-team code review focused on component correctness.
- Explain the potential benefits and risks associated with the use of generative AI
in the context of software development.
- Describe how a contract can be used to specify the behaviour of
a program component.
- Apply a variety of strategies to the testing and debugging of
simple programs.
- Analyze the extent to which another programmer's code meets
documentation and programming style standards.
- Describe the different practices that are key components of various
process models.
- Explain the concept of a software lifecycle and provide an example,
illustrating its phases including the deliverables that are produced.
- Describe how programming in the large differs from individual efforts
with respect to understanding a large code base, code reading,
understanding builds, and understanding context of changes.
- Demonstrate the capability to use version control (using git),
build automation (using make), and debuggers (using gdb) in support
of the development of a software product.
- Distinguish between program validation and verification.
- Describe the role that tools can play in the validation of software.
- Describe and distinguish among the different types and levels of testing
(unit, integration, systems, and acceptance)
- Create and document a set of tests for a medium-sized code segment.
- Describe how to select good regression tests and automate them.
Computer accounts
To work on your quizzes and experiment with the tools and languages discussed
during the semester, you will be given accounts for the computer labs.
There is a user id and password associated with each account.
Each student is responsible for their account, and for following
both the departmental and university-college policies. These may be found through
https://scitech.viu.ca/computer-science/computing-resources - Lab and Computer Usage Rules
Individual work:
Other than work conducted as part of the team project, all course work submitted for
assessment (quizzes, lab exercises,
assignments, exams, etc) must be completed as strictly individual work unless explicitly
stated otherwise (not teams or pairs, and not using help from other individuals
or AI tools such as CoPilot or chatGPT).
VIU's Accessibility Services
VIU's Accessibility Services office provides services to students with
Learning Disabilities, mental health disabilities, Attention Deficit
Hyperactivity Disorder, Autism, chronic medical conditions, and
impairments in mobility, hearing, and vision.
If you have a disability requiring academic accommodations in this
course but are not yet registered with Disability Access Services,
please contact them at accessibilityservices@viu.ca or visit them in
BLDG 200 (2nd floor). If you are already registered with AS, please
provide me with your accommodation letter, either in person during my
office hours, or by email.
Appeals of Grades:
Any exercise or examination grade may be appealed. However, the
appeal must be made to the instructor, in writing and attached to the
work in question, and within 7 days of the grade being made
available to the class. The instructor reserves the right to re-grade
the entire piece of work submitted on appeal, not necessarily
just the component that the student believes is in error.
Grade Conversion:
The standard VIU grading scale will be in use.
90-100 |
85-<90 |
80-<85 |
76-<80 |
72-<76 |
68-<72 |
64-<68 |
60-<64 |
55-<60 |
50-<55 |
<50 |
A+ |
A |
A- |
B+ |
B |
B- |
C+ |
C |
C- |
D |
F |
Student Academic Code of Conduct (VIU policy 96.01)
All VIU students are required to familiarize themselves with, and adhere to, the
Student Academic Code of Conduct.
Note that, in accordance with these policies, academic misconduct may result in a final
grade of "F", a report to the Dean and a permanent record in the student's academic file.
Multiple records may result in suspension from the university.