Generated on Tue Oct 25 10:19:18 2022

CS 371: Software Development (JSON)

Catalog description: Software specification, design, testing, maintenance, documentation; informal proof methods; team implementation of a large project.

Prerequisites: At least a C- in CS 271 and CS 272    (Catalog Link)

Credits: 4 (3+2P)

Coordinator: Jonathan Cook

Textbook: Software Engineering, Pfleeger and Atlee, 4th Edition
    (also: course handouts)

BS degree role: required

Course Learning Objectives

  1. Understand and explain the activites and structure of different styles of software development processes, including waterfall, (spiral,) iterative, and agile methodologies
  2. Apply requirements knowledge and techniques to create functional and non-functional requirements for a software system
  3. Apply high and low level design ideas to create an object-oriented design of a software system
  4. Use good design and programming ideas to implement individual and team software systems in compiled OOP languages
  5. Apply white and black box testing techniques and tools to individual and team software development
  6. Use UML class diagrams (and sequence diagrams) to capture aspects of system design and/or requirements (domain)
  7. Use practical software development tools, including version control systems, automated build tools, and testing tools

Course Practicum Requirements

  1. Some individual programming, in Java
  2. Project software development in Java or other compiled, non-scripting OO language
  3. Usage of a version control system (Subversion or Git) for at least the project
  4. Usage of automated build tools (make, Ant, or other) for individual and project software
  5. Usage of a unit testing tool (JUnit or other) in at least one assignment
  6. Usage of a code coverage tool (Jacoco or other) in at least one assignment
  7. Usage of a UML tool to create class diagrams in at least project work

Course Topics

  1. Overall software development lifecycle; software process and process models; agile methods; project and team management
  2. Requirements: system specification; functional and non-functional requirements; problem domain modeling in UML
  3. Design: design principles; architecture and levels of design; object-oriented design; design modeling in UML; cohesion and coupling; design patterns
  4. Programming: programming styles; code documentation; good programming practices
  5. Testing: validation and verification; errors, faults, and failures; black box vs. white box testing; equivalence partitioning; control flow graphs; coverage testing; reliability, availability, other -ilities; opt: formal methods
  6. Deployment and Maintenance: version management; documentation; types of maintenance
  7. Ethics: professional ethics and responsibilities; codes of ethics; opt: certification

Course Improvement Decisions

(Course improvement decisions or recommendations from past assessments)

  1. 15 April 2018: Regression testing should be covered better

ABET Outcome Coverage

(Provide Mapping to ABET Student Outcomes)

  1. (a) An ability to apply knowledge of computing and mathematics appropriate to the discipline (Knowledge Application)
  2. (b) An ability to analyze a problem, and identify and define the computing requirements appropriate to its solution (Problem Analysis)
  3. (c) An ability to design, implement, and evaluate a computer-based system, process, component, or program to meet desired needs (Design & Implementation)
  4. (d) An ability to function effectively on teams to accomplish a common goal (Teamwork)
  5. (e) An understanding of professional, ethical, legal, security and social issues and responsibilities (Professional Responsibility)
  6. (f) An ability to communicate effectively with a range of audiences (Communication)
  7. (h) Recognition of the need for and an ability to engage in continuing professional development (Professional Development)
  8. (i) An ability to use current techniques, skills, and tools necessary for computing practice (Techniques & Tools)
  9. (k) An ability to apply design and development principles in the construction of software systems of varying complexity (Complexity & Scale)

Other Notes

(Any important notes or issues to consider)

  1. none