CS 275 Software Development Spring 2020 

Course Syllabus

Dr. David A. Reimann, Professor
Department of Mathematics and Computer Science
Albion College
Albion, Michigan
Office 252 Putnam
Office Hours 2:15 - 3:30 pm, Monday.
2:15 - 5:00 pm, Wednesday.
2:15 - 3:00 pm, Thursday.
I am also available by appointment at other times. Email me or talk to me before or after class to set up a meeting outside my regular office hours.
I am often in my office at many other times. Come see me if you need help - that is why I am here!
E-mail dreimann@albion.edu
Website http://zeta.albion.edu/~dreimann/
Phone 517-629-0426 (Office)
517-629-0361 (Secretary)
Course CS 275
Course Name Software Development
Sections CS 275 - 01 (CRN: 6004)
Credit 1 Unit
Core/Category This course does NOT fulfill a mode nor category requirement. However, it does meet the natural sciences divisional requirement.
An introduction to the techniques of developing large software projects including unit testing, version control and build management. Covers the popular industrial languages C and C++ and includes a large-group programming project.
Prerequisites CS 173
Meeting Times
and Locations

Lecture - M W F 11:45 am - 12:50 pm in 223 Palenske
Website http://zeta.albion.edu/~dreimann/Spring2020/courses/cs275/
Schedule http://zeta.albion.edu/~dreimann/Spring2020/courses/cs275/schedule.php
Required Books Ian Somerville, Engineering Software Products, Pearson, 2020.
Student Learning Outcomes

This learning objectives for this course are aligned with learning objectives from Computer Science Curricula 2013: Curriculum Guidelines for Undergraduate Degree Programs in Computer Science, a product of The Joint Task Force on Computing Curricula Association for Computing Machinery (ACM) IEEE Computer Society.

This learning objectives of this course are mainly aligned with the "Software Engineering (SE)" knowledge area.

Knowledge Units Student Learning Outcomes
SE/Software Processes
  1. Describe how software can interact with and participate in various systems including information management, embedded, process control, and communications systems. [Familiarity]
  2. Describe the relative advantages and disadvantages among several major process models (e.g., waterfall, iterative, and agile). [Familiarity]
  3. Describe the different practices that are key components of various process models. [Familiarity]
  4. Differentiate among the phases of software development. [Familiarity]
  5. 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. [Familiarity]
  6. Explain the concept of a software lifecycle and provide an example, illustrating its phases including the deliverables that are produced. [Familiarity]
  7. Compare several common process models with respect to their value for development of particular classes of software systems taking into account issues such as requirement stability, size, and non-functional characteristics. [Usage]
SE/Software Project Management
  1. Discuss common behaviors that contribute to the effective functioning of a team. [Familiarity]
  2. Create and follow an agenda for a team meeting. [Usage]
  3. Identify and justify necessary roles in a software development team. [Usage]
  4. Understand the sources, hazards, and potential benefits of team conflict. [Usage]
  5. Apply a conflict resolution strategy in a team setting. [Usage]
  6. Use an ad hoc method to estimate software development effort (e.g., time) and compare to actual effort required. [Usage]
  7. List several examples of software risks. [Familiarity]
  8. Describe the impact of risk in a software development lifecycle. [Familiarity]
  9. Describe different categories of risk in software systems. [Familiarity]
  10. Demonstrate through involvement in a team project the central elements of team building and team management. [Usage]
  11. Describe how the choice of process model affects team organizational structures and decision-making processes. [Familiarity]
  12. Create a team by identifying appropriate roles and assigning roles to team members. [Usage]
  13. Assess and provide feedback to teams and individuals on their performance in a team setting. [Usage]
  14. Using a particular software process, describe the aspects of a project that need to be planned and monitored, (e.g., estimates of size and effort, a schedule, resource allocation, configuration control, change management, and project risk identification and management). [Familiarity]
  15. Track the progress of some stage in a project using appropriate project metrics. [Usage]
  16. Compare simple software size and cost estimation techniques. [Usage]
  17. Use a project management tool to assist in the assignment and tracking of tasks in a software development project. [Usage]
  18. Describe the impact of risk tolerance on the software development process. [Assessment]
  19. Identify risks and describe approaches to managing risk (avoidance, acceptance, transference, mitigation), and characterize the strengths and shortcomings of each. [Familiarity]
  20. Explain how risk affects decisions in the software development process. [Usage]
  21. Identify security risks for a software system. [Usage]
  22. Demonstrate a systematic approach to the task of identifying hazards and risks in a particular situation. [Usage]
  23. Apply the basic principles of risk management in a variety of simple scenarios including a security situation. [Usage]
SE/Tools and Environments
  1. Describe the difference between centralized and distributed software configuration management. [Familiarity]
  2. Describe how version control can be used to help manage software release management. [Familiarity]
  3. Identify configuration items and use a source code control tool in a small team-based project. [Usage]
  4. Describe how available static and dynamic test tools can be integrated into the software development environment. [Familiarity]
  5. Describe the issues that are important in selecting a set of tools for the development of a particular software system, including tools for requirements tracking, design modeling, implementation, build automation, and testing. [Familiarity]
  6. Demonstrate the capability to use software tools in support of the development of a software product of medium size. [Usage]
SE/Requirements Engineering
  1. List the key components of a use case or similar description of some behavior that is required for a system. [Familiarity]
  2. Describe how the requirements engineering process supports the elicitation and validation of behavioral requirements. [Familiarity]
  3. Interpret a given requirements model for a simple software system. [Familiarity]
  4. Describe the fundamental challenges of and common techniques used for requirements elicitation. [Familiarity]
  5. List the key components of a data model (e.g., class diagrams or ER diagrams). [Familiarity]
  6. Identify both functional and non-functional requirements in a given requirements specification for a software system. [Usage]
  7. Conduct a review of a set of software requirements to determine the quality of the requirements with respect to the characteristics of good requirements. [Usage]
  8. Apply key elements and common methods for elicitation and analysis to produce a set of software requirements for a medium-sized software system. [Usage]
SE/Software Design
  1. Articulate design principles including separation of concerns, information hiding, coupling and cohesion, and encapsulation. [Familiarity]
  2. Use a design paradigm to design a simple software system, and explain how system design principles have been applied in this design. [Usage]
  3. Construct models of the design of a simple software system that are appropriate for the paradigm used to design it. [Usage]
  4. Within the context of a single design paradigm, describe one or more design patterns that could be applicable to the design of a simple software system. [Familiarity]
  5. For a simple system suitable for a given scenario, discuss and select an appropriate design paradigm. [Usage]
  6. Create appropriate models for the structure and behavior of software products from their requirements specifications. [Usage]
  7. Explain the relationships between the requirements for a software product and its design, using appropriate models. [Assessment]
  8. For the design of a simple software system within the context of a single design paradigm, describe the software architecture of that system. [Familiarity]
  9. Given a high-level design, identify the software architecture by differentiating among common software architectures such as 3-tier, pipe-and-filter, and client-server. [Familiarity]
  10. Investigate the impact of software architectures selection on the design of a simple system. [Assessment]
  11. Apply simple examples of patterns in a software design. [Usage]
  12. Describe a form of refactoring and discuss when it may be applicable. [Familiarity]
  13. Select suitable components for use in the design of a software product. [Usage]
SE/Software Construction
  1. Describe techniques, coding idioms and mechanisms for implementing designs to achieve desired properties such as reliability, efficiency, and robustness. [Familiarity]
  2. Build robust code using exception handling mechanisms. [Usage]
  3. Describe secure coding and defensive coding practices. [Familiarity]
  4. Select and use a defined coding standard in a small software project. [Usage]
  5. Compare and contrast integration strategies including top-down, bottom-up, and sandwich integration. [Familiarity]
  6. Describe the process of analyzing and implementing changes to code base developed for a specific project. [Familiarity]
  7. Describe the process of analyzing and implementing changes to a large existing code base. [Familiarity]
  8. Rewrite a simple program to remove common vulnerabilities, such as buffer overflows, integer overflows and race conditions. [Usage]
  9. Write a software component that performs some non-trivial task and is resilient to input and run-time errors. [Usage]
SE/Software Verification and Validation
  1. Distinguish between program validation and verification. [Familiarity]
  2. Describe the role that tools can play in the validation of software. [Familiarity]
  3. Undertake, as part of a team activity, an inspection of a medium-size code segment. [Usage]
  4. Describe and distinguish among the different types and levels of testing (unit, integration, systems, and acceptance). [Familiarity]
  5. Describe techniques for identifying significant test cases for integration, regression and system testing. [Familiarity]
  6. Create and document a set of tests for a medium-size code segment. [Usage]
  7. Describe how to select good regression tests and automate them. [Familiarity]
  8. Use a defect tracking tool to manage software defects in a small software project. [Usage]
  9. Discuss the limitations of testing in a particular domain. [Familiarity]
SE/Software Evolution
  1. Identify the principal issues associated with software evolution and explain their impact on the software lifecycle. [Familiarity]
  2. Estimate the impact of a change request to an existing product of medium size. [Usage]
  3. Use refactoring in the process of modifying a software component. [Usage]
  4. Discuss the challenges of evolving systems in a changing environment. [Familiarity]
  5. Outline the process of regression testing and its role in release management. [Familiarity]
  6. Discuss the advantages and disadvantages of different types of software reuse. [Familiarity]
SE/Software Reliability
  1. Explain the problems that exist in achieving very high levels of reliability. [Familiarity]
  2. Describe how software reliability contributes to system reliability. [Familiarity]
  3. List approaches to minimizing faults that can be applied at each stage of the software lifecycle. [Familiarity]
SE/Formal Methods
  1. Describe the role formal specification and analysis techniques can play in the development of complex software and compare their use as validation and verification techniques with testing. [Familiarity]
  2. Apply formal specification and analysis techniques to software designs and programs with low complexity. [Usage]
  3. Explain the potential benefits and drawbacks of using formal specification languages. [Familiarity]
Performance Evaluation
Grade Element Possible Points
Tests 300 (3 @ 100 points each)
Final Project 200
Projects 500 (10 @ 50 points each)
Total Possible Points 1000+

See Schedule for specific dates.
Your Points Percentage Your Grade Interpretation
93.0-100.0 4.0 Represents work outstanding in quality. The student not only shows unusual mastery of the required work for the course, but also has independently sought out and used additional related materials, demonstrating the ability to discover new data, to develop new insights and to bring them to bear on the work at hand.
90.0-92.9 3.7  
87.0-89.9 3.3  
83.0-86.9 3.0 Represents work which is higher in quality than that of a 2.0, or more than satisfactory. The student has shown the ability and the initiative to fulfill more than the basic requirements of the course.
80.0-82.9 2.7  
77.0-79.9 2.3  
73.0-76.9 2.0 Represents work which fulfills all of the basic requirements for the course. It means that the student has a grasp of the material and techniques or skills sufficient to proceed with more advanced courses in the area.
70.0-72.9 1.7  
67.0-69.9 1.3  
60.0-66.9 1.0 Represents work seriously attempted but which is below the 2.0 level in quantity and quality. The student is advised not to continue advanced work in the field.
0-59.9 0.0 Represents work unsatisfactory in either quantity or quality. It results in the student's not being able to continue with further work in the field and results in no credit, although it is recorded on the permanent record.
  I Incompletes may be given only because of illness, or other unavoidable circumstances, as approved by the Petitions Committee. An Incomplete is not to be issued to a student who simply has failed to turn in some assigned work before the end of the semester. The "I" grade should be used rarely and for legitimate reasons. A final grade of Incomplete must be removed within four weeks after the end of the semester in which it was incurred, unless the deadline is extended by the Petitions Committee. Grades of "I" count as zeros in the calculation of the end-of-semester grade point average, and, if they are not removed within the required time, become zeros automatically on the student's record.

The following is the Albion College statement on attendance: "Regular attendance in all classes is expected. Every absence from class is inevitably a loss — usually one which can never be made up. A student has the responsibility to inform his or her faculty member, whenever possible in advance, of an absence due to serious or prolonged illness, and verification of absences due to emergency reasons, may be obtained from the Office of Residential Life."

In this course class absences are only excusable in documented extreme cases of unforeseen hardship or official College event, as described in the Student Handbook. Please notify me in writing (email is preferred) prior to official college events (sporting, class trips, etc.) that make it impossible for you to attend class. If you miss class because of participation in an official College event you must make prior arrangements with me. In extreme cases of unforeseen hardship, please contact me as soon as possible. In either case, you are still responsible for all material and assignments.

In cases where you have not taken personal responsibility, you will forfeit the possibillity of earning points. No credit will be given for a missed test or other scheduled in-class assignment, nor will late assignments be accepted.

You will have an opportunity to review your grade and other unreturned assignments for four weeks after the start of the subsequent semester. After that time, I will discard all unclaimed materials.

Academic Integrity and Expectations

As an academic community, Albion College is firmly committed to honor and integrity in the pursuit of knowledge. Therefore, as a member of this academic community, each student acknowledges responsibility for his or her actions and commits to the highest standards of integrity. In doing so, each student makes a covenant with the college not to engage in any form of academic dishonesty, fraud, cheating, or theft.

The goal of this course is for you to learn a rigorous academic discipline, not penmanship, typing, or other forms of plagiarism. Chapter III of the Student Handbook details instances and penalties for academic dishonesty. It also describes acceptable usage of the campus computing/networking facilities. In this class you are expected to do your own work unless explicitly stated.

Here are some things which will be considered cheating:

  • Using or turning in another's work as you own - with or without their permission.
  • Allowing someone else to use or turn in your work as theirs - in whole or in part.
  • Joint effort on an assignment with individual submissions represented as individual work.
  • If a student cannot explain why the solution is correct or how the solution was obtained.
Here are some things which are encouraged:
  • A submission using help from the instructor, student assistants, or the texts.
  • Discussion of the concepts related to the course material.
  • Discussion of assignments to understand what is required.

Typically, I grade papers one problem at a time. If you turn in someone else's work as you own, it really stands out. Please do your own work! If you are having trouble on an assignment come see me as soon as possible - I'm here to help!

We, as students and faculty, have the privilege and challenge of promoting higher standards of ourselves, the College, and society in general. Here are several expectations we should have this semester.

What you should expect of me. What I expect from you.
To attend class regularly and punctually and to adhere to the class schedule. To attend class regularly and punctually.
Come to class prepared. Come to class prepared.
Grade and return work in a reasonable amount of time. Fulfill all course assignments and requirements.
Know course material thoroughly and prepare and present it conscientiously. Uphold academic honesty in all activities.
Maintain scholarly, professional, and courteous demeanor in class. Maintain scholarly, professional, and courteous demeanor in class.
Be available at reasonable times for consultation. Keep all appointments except for extreme cases.

Communication is essential in any relationship. Our student-teacher relationship is no exception. If you have any concerns with the class material or logistics, please talk to me as soon as possible.

Tips for Success

There are a variety of effective teaching and learning styles. Part of the challenge of college is learning your individual particular learning style and how to learn from a variety of teaching styles. I will try and use several ways of presenting the material to help you learn the course material. Ultimately you are responsible for learning the material. Here are some things that will help you succeed in this course:

  • Come to class and be on time.
  • Be engaged in class; listen, take good notes, and ask questions as they arise.
  • Read the book, noting any important concepts and unresolved questions.
  • Review your notes.
  • Form a study group with others in the course.
  • Do the assigned problems and as many others as you can, even partially. Solve problems. Solve problems with notes. Solve problems without notes. Solve problems as a group. Solve problems individually. Solve problems!
  • Learn and understand key definitions
  • Come see me in my office if you are having trouble solving a problem.
  • Visit the Quantitative Studies Center for additional help.
  • Focus on learning the material, not just on earning a grade.
  • Keep all returned material, particularly quizes and tests.
  • I want you to succeed in the course, but the learning is your responsibility!

Tips for Problem Solving

One of the goals of this course is for you to improve you problem solving skills. Here are some general problem solving steps.

  • Read and understand the problem.
  • What do you need to know?
  • What do you know?
  • Devise a plan for solving the problem. Is this problem similar to others you have solved?
  • Carry out your plan.
  • Verify you solution.
  • Repeat steps as needed.
  • Note what you have learned solving the problem.
  • Can your solution be generalized?

Academic Support

Accommodations statement: Accommodations statement: Any student with a disability who believes the requirements of this course may require accommodations or modifications should contact the Learning Support Center (LSC) Director, Dr. Pamela Schwartz, who will work with you to develop a plan for reasonable accommodations based on your information and supporting documentation. If you have completed this process and have requested accommodations through the LSC for this semester, plan to meet with me as early as possible to discuss a plan for implementing these modifications in this class. It is best if we can talk at least one week prior to their implementation. The LSC is located in 114 Ferguson Hall (on the first floor of the administration building) and is open during regular business hours throughout the school year. The main phone is 517/629-0825, and the number for the Adaptive Technology Office is 517/629-0411.

College-Wide Learning Support: Academic support at Albion College is provided through the Academic Skills Center and the Learning Support Center.

  • The Academic Skills Center, located in the Seeley Mudd Building of the Library supports student success at Albion College through the Quantitative Studies Center and the Writing Center. The ASC also operates Study Rooms in various academic areas. For information, visit the ASC website at http://www.albion.edu/asc.
    • The Quantitative Studies Center provides a wide range of support to students in many subject areas. Students are free to drop in for occasional help from trained student tutors or to make appointments for on-going tutorial sessions. QSC staff members are available to assist you with the use of mathematics, statistics, spreadsheets, or graphing calculators in any course. The center also offers workshops on topics such as partial derivatives in chemistry and preparing for graduate school exams. For more information, contact the QSC Director, Karla McCavit, (x0824; kmccavit@albion.edu).
    • The Writing Center provides trained peer consultants prepared to work with writers at every stage of the writing process—from getting started brainstorming to writing drafts, and from organizing ideas to revising or final editing. Writing consultants support students by responding to writing in process, not by proofreading, editing, or writing students' papers. Both drop-in tutoring and scheduled appointments are available during the Writing Center's evening hours. For more information, contact the Writing Center (x0828; writing@albion.edu) or the Director, Scott Hendrix (shendrix@albion.edu).
  • The Learning Support Center, located in 114 Ferguson Hall (the administration building), offers individualized assistance with college-level study strategy and skill development. Students frequently utilize the center to improve grades, reading speed or comprehension. As part of this mission, the LSC also provides individual peer tutoring support for most introductory courses. In addition, the LSC provides assistance and accommodations to students who have documented learning disabilities. For more information, contact the LSC Director, Pamela Schwartz (x0825; pschwartz@albion.edu).

Copyright © 2020, David A. Reimann. All rights reserved.