Ever thought "Massey should offer a paper in X"? This document describes the paper that I personally think would most improve the Computer Science offerings at Massey's Albany campus. As a lowly PhD student, I don't have the power to actually create a paper, but maybe one day, somewhere <wink>. This is a work in progress, but feel free to discuss it with me, anyway.
The assignments are just examples, of course, and they don't include the files necessary to actually do most of them. I'm sure you get the drift.
The textbooks need to be revised a bit, although they're only suggested reading anyway. I haven't completely read all of these, although I've heard good things about those that I haven't, or have at least read portions of them. Availability would need to be looked at, and there are probably some freely available books that would be good here (like Dive into Python).
In terms of language, the course would centre on C, because that is the language that the students should already be familiar with. However, other languages (here Java and Python, but other languages could easily be used, depending on the lecturer's preference) would also be looked at, demonstrating the similarities and differences of the overall concepts when applied in each language. This has the additional benefit of introducing students to a wider range of languages than just C/C++; this may also bridge between the majority of C/C++ papers and a few high level papers that concentrate more on Java.
159.2xx Development Methodologies
12.5
This course aims to examine the software development process, including the tools and methodologies that are commonly used, to develop an understanding of each methodology, and when its use is appropriate.
Still to be written
Topics covered are tools for collaborative work, documentation, unit testing, open-source vs closed-source development, using other people's code, 'Engineering' vs Agile methodologies, Extreme Programming, choosing the appropriate language, debugging tools and .NET.
Still to be written(65 words)
On successful completion of this course the student should be able to:
159.101 Programming Fundamentals.
It is recommended, but not required, that students have completed 139.177 Written Communication for Information Sciences.
The course is assessed by four small assignments, two larger assignments, and an examination. This seems like a lot of work, but isn't: the small assignments are small, and if you can do them, you can almost certainly pass that part of the examination.
There are no required or strongly recommended texts for this paper. The following texts are recommended:
Still to be written
It is estimated that the average work load (in hours) for this paper is as follows:
| Lectures | 39 | 3 hrs/week x 13 weeks |
| Tutorials | 13 | 1 hr/week x 13 weeks |
| Assignments and Personal Study | 104 | 8 hrs/week (approx) x 17 weeks |
| Examination Study | 13 | |
| Total | 169 | ie 12 hrs/week (approx) during semester and 12 hrs/week (approx) during study breaks and exam period |
3 hours of lectures per week, with an optional 1 hour tutorial.
| Week | Topic | Contents |
| 1 | Introduction | Brief introduction to (or revision of) tools that will be used: Python, gcc, Java, and using the (cmd.exe / bash) command line. |
| 2 | Tools for collaborative work | Revision control (CVS, Subversion), using diff, and applying patches. |
| 3 | Documentation | Various coding conventions/style guides, emphasising documentation (Java, Python, C/C++), testing in documentation (doctest), automatic creation of documentation (pydoc, javadoc, ccdoc/ doxygen) |
| 4 | Unit Testing | An introduction, and examples in C (Check), Python ( unittest), and Java (JUnit). |
| 5 | Debugging | A practical look at using common debugging tools, including gdb, jdb , and pdb. A (brief) look at profiling (using the Python profiler as an example), emphasising that optimising is always left to last. |
| 6 | Open-source vs. Closed-source | A look at the legal and economic concerns of open-source vs. closed-source development, the history of open-source/closed-source development, and the typical differences in development styles (including looking at commerical open-source software, as compared to free open-source software). |
| 7 | Piggybacking | Using code by other people (both open-source and closed-source). Issues with reliability and licensing (including the basics of GPL, LGPL, BSD, MIT, Mozilla Public License, and the Academic Free License). Ideally including a guest lecture by someone like Paul Sumpter. |
| 8 | 'Engineering' vs. Agile Methodologies | Feature Driven Development, Crystal family, Adaptive Software Development, Scrum/Sprints |
| 9 | Extreme Programming (XP) | An in-depth look at one popular agile ('lightweight') methodology. User stories, release planning, pair programming, XP unit testing. |
| 10 | Choosing a language | "There is no 'best' language, just ones more suited to particular tasks". Consideration of when to use interpreted languages (Python, Perl), compiled languages (C, C++, Java), declarative languages (Prolog), functional languages (Haskell). |
| 11 | .NET | (Brief) introduction to Microsoft's .NET, and comparison to Java/J2EE and Parrot. |
| 12 | Course Summary | |
| 13 | Revision | |
This assignment is worth 2% of your total grade. It is due XX/XX/XXXX (week 3).
After completing this assignment, you should be familiar with using basic revision control tools, including using diff, patch, and CVS.
Hand in (electronically) a directory listing of assignment_one_a and assignment_one_b (before making any changes to them), a copy of the context diff of "one.txt" and "two.txt", a copy of the "three.txt" file after patching, and a copy of the revision history for "four.txt".
This assignment is worth 4% of your total grade. It is due XX/XX/XXXX (week 4).
After completing this assignment, you should be capable of documenting code in various formats, and writing doctest code.
Submit (electronically) your documented "assignment_two.c", "assignment_two.cpp", "assignment_two.java", and "assignment_two.py".
This assignment is worth 4% of your total grade. It is due XX/XX/XXXX (week 5).
After completing this assignment, you should be capable of writing simple unit tests.
Submit (electronically) your unit test module.
This assignment is worth 4% of your total grade. It is due XX/XX/XXXX (week 6).
Submit (electronically) a description of each error you found, along with a brief explanation of how the error could be fixed.
This assignment is worth 15% of your total grade. It is due XX/XX/XXXX (week 9).
Write a 500 word report on one of the following research topics.
You will be marked on report presentation (20%), evidence of research (30%), ability to summarise research (20%) and demonstration that you understand the material, with an emphasis on the conclusions you draw (30%).
Submit (electronically) your report, ensuring that you have correctly referenced any sources you have used (you may use APA or IEEE style references).
This assignment is worth 20% of your total grade. It is due XX/XX/XXXX (week 12).
You are receiving this assignment in week one for a reason - you should start working on it as soon as possible, and gradually work on it as the semester progresses, applying new skills as they are gained.
Submit (electronically) a copy of the patch you created (including the unit test modules), and a 500 word document outlining your experience of the development process, roughly composed as follows:
You will be graded on the coding of the patch (25%), your unit tests (10%), following the appropriate documentation/coding style (15%), suitably formatting your report (10%), and the content of the report (40%).
| Institution | Paper | Summary |
| AUT | 406701: Software Engineering | The process of systems development, looking at project management, developer performance, and measuring this. |
| 407703: Software Project Management | Similar to the above, but more in-depth and for larger organisations. | |
| The AUT papers
concentrate more on management and evaluating performance than looking at
the different methodologies and tools that are available for software
development. There does not appear to be any component looking at
documentation/testing/debugging, or comparing open-source and proprietory
development. | ||
| Auckland | COMPSCI 280: Applications Programming | Developing applications with Visual Basic.NET, aimed at business students, rather than computer scientists. |
| COMPSCI 732: Software Tools and Techniques | An advanced course examining research issues related to tools and techniques for software design and development; the exact content may differ from year to year. | |
| The
Auckland undergraduate paper is
only really related in that it uses .NET; as a business-student-orientated
paper, it is unlikely to cover different methodologies. The postgraduate
paper sounds very similar to this paper, although, as it is postgraduate,
much more detailed and in-depth. | ||
| Waikato | COMP153B,S Practical Programming | Visual programming, programming constructs, graphical user interfaces, data types and manipulation, problem solving techniques, documentation and testing. |
| Introduces documentation and testing, but doesn't go
any further. | ||
| Massey (Turitea) | 159.254: Software Engineering A | Rather like the first AUT paper, above. |
| 159.351: Software Engineering B | Rather like the second AUT paper, above. | |
| Much the same as the AUT papers
above, concentrating more on large organisations and management, rather
than methodologies themselves. | ||
| Victoria | COMP 102: Introduction to Computer Program Design | The course focuses on programming and the design of programs, algorithms and data structures. |
| COMP 201: System and Program Development | A course on software development and information management including object-oriented design, large-scale system construction, and an introduction to software engineering. | |
| COMP 301: Software Engineering Principles | The organisation, management, analysis, design and implementation of large-scale computer systems. | |
| The first paper sounds more like
159.201,
although
"the design of programs" could include similar material, but since it
is a 100-level paper, it is unlikely to go into much depth. The second
paper sounds like many of the other papers listed here - concentrating
on large-scale system construction and software engineering. The third
paper also sounds like that, perhaps with some material that is covered
in Information Systems at Massey.
| ||
| Canterbury | COSC 224 - Introduction to Software Engineering | This course introduces current software engineering techniques and addresses the issues of developing large, complex software systems. |
| Cosc314 - Software Engineering | A study of "programming in the large", specifically related to software engineering. Both the underlying theory and practical applications are covered. Small groups of students work together on a major software development project throughout the year. Concentrates on Java and UML. | |
| Much the same as the AUT papers above,
concentrating more on large organisations and management, rather than
methodologies themselves. | ||
| Otago | INFO 221 Application Software Development | The general principles and methods of application software development. Development of problem-solving skills through the application of this knowledge in the construction of practical software applications. |
| COSC 345 Software Engineering | This paper covers the development of large-scale, reliable, and maintainable software systems. Topics include software specification; software design; system design; formal specification; prototypes; system maintenance; code reading and browsing; software reuse; project management; human factors; documentation; standards for software and documentation; verification and validation; configuration management; and software evolution. | |
| The first paper sounds like it may contain similar
material to the debugging/testing part of this proposed course. The second
paper sounds similar to the rest, but (as it is a 300-level paper), much
more in depth. | ||
This work is licensed under a Creative Commons License
Created by Tony Meyer, 15th January 2004.
Last updated 16th August 2004.