CS 384 Software Engineering II
Total Credits: 3 cr
Course Coordinator: Clinton Jeffery
URL: http://www2.cs.uidaho.edu/~cs384
Current Catalog Description: Continuation of CS 383, Individual projects
are developed. Prereq: CS 383.
Textbook: Same text used in CS 383.
References: Numerous piece of reference material are provided on the
course web site.
Course Goals: The fundamental goal of this course is to develop each
student's ability to apply a systematic and engineering approach to the development
of software systems and products. This is the second course in a two semester
sequence in software engineering with concentration on the later portion of
the software development process. This course addresses the major areas in the
development of large-scale software systems with a focus on detailed design,
implementation, testing, and project management.
The course teaches students about a wide spectrum of modern techniques available
for performing activities in each of these areas. Material presented in this
course addresses topics identified in the Software Engineering Body of Knowledge,
SWEBOK, developed and published by IEEE Computer Society.
The course continues using small groups to complete major development assignments.
The student's communication skills will be enhanced by activities requiring
both written and oral communication. Discussion of legal, ethical, social, and
professional issues will be covered in conjunction with presentation of software
engineering concepts. Grading is based on a combination of individual work as
evidenced by performance on homework assignments, exams, and a written report,
as well as how each student performed in team-based activities.
At the start of each major section or phase of the course, small teams will
be formed. In CS 384 teams will be used to refine a detailed design decomposition,
implement code, and thoroughly test the code. In each team, students will collaborate
to accomplish the work needed to successfully complete that phase of the project.
All teams will be given the same work product to use as a baseline. In most
cases, this work product will be selected from among those submitted in the
previous phase and which represents a solid, reasonable starting point for the
current project phase.
After completing this course a student should be able to effectively decompose
a high level design representation to define program modules, effectively convert
a design into code, and thoroughly test code at the unit level and as an integrated
system. Through the required work in small teams, students will improve their
team participation skills.
Prerequisites by Topic:
- Proficient programming skills in a high level language such as C++ or
Java (IV-8)(CS 121, CS 210)
- Ability to use basic software development tools (CS 270, CS 383)
- Understanding of software development life cycles and constituent processes
(CS 383)
- Ability to interpret and understand a system's operational specification
(CS 383)
- Knowledge of high-level / architectural design representations and ability
to document a system's design (CS 383)
- Ability to understand and analyze situations for ethical issues (CS
383)
Major Topics Covered in the Course: The following major topics are
covered in the course. Along with each topic are listed the ABET Criteria associated
with the topic and the CS Body of Knowledge topic identified in the CC 2001.
- Design refinement and its documentation (IV-7, IV-8, IV-16) (SE1)
- Code development (IV-7, IV-8) (SE2)
- Unit testing (IV-7, IV-8) (SE6)
- Integration (IV-7, IV-8) (SE6)
- System testing (IV-7, IV-8) (SE6)
- Defect management (IV-7) (SE6)
- User documentation (IV-16)
- Release and maintenance processes (IV-7) (SE 7)
- Software engineering measurement (IV-7) (SE 11)
- Project management (IV-7) (SE 8)
- Legal, ethical, social, and professional issues in software product
development (IV-17)(SP 2, SP 4, SP 5, SP 6, SP 7)
Laboratory projects (specify number of weeks on each): Some of the
laboratory activities identified below may overlap.
- Develop code to implement the project design (3 weeks) (SE 2)
- Conduct a code review (1 week) (SE 6)
- Use a revision control system (throughout the semester) (SE3)
- Write a test plan (1 week) (SE 6)
- Test the implementation at the module or unit level (1 week) (SE 6)
- Test the implementation as a system (1 week) (SE 6)
- Automate portions of testing (2 weeks) (SE 3, SE 6)
- Document defects (throughout testing) (SE 3, SE 6)
- Update design specification (as needed) (SE 1)
- Write usage documentation and installation instructions appropriate
for the product (1 week)
- Conduct a final project presentation and demonstration (1 week)
- Write a paper on software engineering ethics (2 weeks) (individual)
(IV-16, IV-17) (SP 2, SP 4, SP 5, SP 6, SP 7)
Estimated Curriculum Category Content:
| Area |
Core |
Advanced |
Area |
Core |
Advanced |
| Algorithms |
|
|
Data Structures |
|
|
| Software Design |
|
3 cr |
Prog. Languages |
|
|
| Computer Arch |
|
|
Other |
|
|
In this course, we use the Software Design Category to indicate that the
courses focuses on application of software design and development processes
to the application under development. Although the vast majority of activity
in this course is contained within the Software Design category, some attention
is paid to other areas as needed to support effective development of the application.
Oral and Written Communications: Every student is required to submit
at least 4 written reports (not including exams, tests, quizzes, or commented
programs) of typically 3-20 pages and to make 3 oral presentations of typically
10 - 15 minutes duration. Include only material that is graded for grammar,
spelling, style, and so forth, as well as for technical content, completeness,
and accuracy.
- Working in their team, each student will contribute to the refinement
of a detailed design specification for the assigned application, in-code
documentation, a report describing the capabilities of an assigned software
development tool, a software test plan, and application usage documentation.
A portion of each student's grade on these activities is based on input
from other members of his/her team to help ensure that each student does
a reasonable share of the work. For each assignment, each team is expected
to make a formal presentation of their work to the class. All team members
will participate in the preparation and delivery of the presentation.
Social and Ethical Issues: At appropriate points in the presentation
of software engineering concepts, social and ethical issues are addressed.
- The foundation of an engineering approach to software product development
was created in direct response to the need to achieve legal, ethical, moral,
and professional objectives. In this course students should gain an appreciation
of their responsibility to deliver high quality code that meets the user's
requirements.
Theoretical Content:
- Software testing theory and coverage criteria
- Software engineering measurement
Problem Analysis:
- Working in a team to understand the product design and how it intends
to implement the requirements.
- Discovering, reproducing and understanding the causes of application
failures, then developing solutions to resolve the failure.
Solution Design:
- Refine a design decomposition based on the application's architectural
design that has sufficient detail to permit members of the development team
to work semi-independently and concurrently on implementation.
- Translation of the system's design into properly functioning code.
- Design a test suite that thoroughly evaluates the behavior of their
product. Devise an approach to accomplish all or part of this testing with
automation.
Course Outcomes: The following list documents the course outcomes
and crossreferences them to the BSCS program
outcomes. The letter at the beginning of each reference identifies the program
outcome supported. The numbers sequentially identify the course outcome for
this course. After completing CS 384 a student should know or be able to:
- Maintain and update a requirements specification to reflect the as-built
product. (b-1)
- Design a test suite to determine whether the system meets requirements.
(c-1)
- Convert a software detailed design into code. (c-2)
- Perform unit, integration, and system tests. (c-3)
- Analyze bug reports and test failures to evaluate what failed and how
to correct it. (c-4)
- Divide labor to permit members to work concurrently on implementation.
(d-1)
- Collaborate to achieve team objectives. (d-2)
- Understand the importance of testing a software product thoroughly.
(e-1)
- Document the reporting and fixing of bugs. (f-1)
- Document testing procedures and outcomes. (f-2)
- Develop a set of user documentation including on-line references or
help. (f-3)
- Conduct a code review. (f-4)
- Write installation and/or configuration instructions. (f-5)
- Update requirements and/or design documents to reflect changes during
development. (f-6)
- Conduct a final project presentation, including a demonstration, and
an acceptance test. (f-7)
- Write a technical report. (f-8)
- Demonstrate proficiency with a revision control system. (i-1)
- Construct appropriate scripts/files and use common software configuration
and build tools such as autoconf and make. (i-2)
- Use an automated test tool. (i-3)
- Demonstrate awareness of principles and pitfalls of software engineering
measurement. (k-1)
- Know basics of software testing theory and different kinds of test coverage
criteria. (k-2)