Software Design and Development
Prerequisites
C or better in CMSC 341 (Data Structures)
Description
This course is an introduction to the basic concepts of software engineering including software lifecycle, requirements analysis, design, coding, testing, and documentation. Professional ethics in computer science and the social impact of computing are discussed. Additional topics may include tools for software development, software metrics, and software maintenance. The objectives of the course are met using classroom presentations, guest lecturers, and a semester-long project developed in a team setting.
Course Outcomes
- Understanding of the software development life cycle and software process models
- Exposure to specific software processes and process improvement
- Know the definitions, goals, and principles of software engineering and how to apply them
- Experience working in a software development team
- Experience taking a leadership role in a software development team
- Enhanced verbal and written communication skills
- Exposure to professional ethics in computer science
Program Outcomes
CMSC 345 supports the CMSC program outcomes:
- (O1) and (O3) through the development of a large software product in a current high-level language, proceeding through all phases of the software development life cycle (SDLC), using tools appropriate to each team’s particular product
- (O2) through multiple written and oral communication assignments
- (O5) through lectures, readings, and discussions regarding current topics in the software engineering sub-discipline
This course also enables CAC student characteristic (d):
- (d) An ability to function effectively on teams to accomplish a common goal
Text
There is no required textbook for this course. Readings will be selected from articles from the current software engineering literature.
Topics
- Software Process Models and Software Processes
- waterfall, spiral, iterative and incremental, evolutionary and throwaway prototyping, agile
- Capability Maturity Model Integrated (CMMI)
- overview of specific processes (e.g., Rational Unified Process, SCRUM, Extreme Programming)
- The Software Development Life Cycle
- Requirements
- product scope
- requirements specification (e.g., use case specifications and diagrams)
- functional vs. non-functional requirements
- user interface requirements
- usability issues
- requirements traceability
- Design
- system architecture
- system decomposition
- data design
- procedural vs. object-oriented design
- design by contract
- Implementation
- coding and commenting standards
- coding goals (e.g., simplicity, efficiency, maintainability)
- refactoring
- configuration management
- code inspection
- Testing
- black box (specification-based) testing
- white box (structural) testing
- unit testing
- integration testing
- system testing
- acceptance testing
- Communication Skills
- working in teams
- formal reports
- diagrams and notations (e.g. UML diagrams)
- oral presentations and demonstrations
Additionally, instructors should schedule speakers (minimum of three) from outside the University. Speakers whose topics reinforce or further explain one or more of the required or optional topics are recommended.
Grading
- Team Grades (65% total)
- Project Artifacts (40%)
- System Requirements Specification (8%)
- System Design Document (8%)
- UI Design Document (8%)
- Code Inspection Report (6%)
- Test Report (6%)
- Administrator Manual (4%)
- Final Product Delivery and Demonstration (5%)
- Final Product (20%)
- Midterm Design Review (Satisfactory/Unsatisfactory)
- Peer Evaluations (possible deduction)
- Project Artifacts (40%)
- Individual Grades (35% total)
- Attendance (5%)
- Quizzes (20%)
- Weekly Verbal and Biweekly Written Status Reports (5%)