Dr. Sarah Heckman
Mr. James Tetterton
CSC 216 Software Development Fundamentals
3 Credit Hours
The second course in computing, intended for majors and minors. Emphasis is on exploring encapsulation; polymorphism; composition; inheritance; finite state machines; linear data structures [including array lists, linked lists, stacks, queues, and the tradeoffs in implementation]; and recursion [including recursive linked lists] in the context of the software development lifecycle including the processes and practices for designing, implementing, and testing high quality software.
Prerequisite Introduction to Computing – Java (NC State CSC 116) with a grade of C or higher
Corequisite Software Development Fundamentals Lab (NC State CSC 217)
As a student, you are expected to know and understand the material covered in CSC 116, and only a minimal amount of time will be spent on a brief refresh of this information.
This is a course on the fundamentals of computer science; programming; and software engineering practices, tools and skills using Java. Students taking this course are expected to have an understanding of loops, conditional logic, objects, classes, file I/O, arrays, and composition (the has-a relationship between objects).
Upon satisfactory completion of this course, you should be able to:
- Describe the utility of inheritance, abstract classes, interfaces, and polymorphism in object-oriented systems, and design, implement, and test programs which use these language features;
- Identify the phases of a simple model of the software life cycle, and employ these phases in developing software;
- Describe basic design modeling techniques, including UML class diagrams and simple design patterns (e.g., model/view/controller), and indicate how and when to use them;
- Identify and compare the basic kinds of software testing, describe when to use each method, and design and implement test code;
- Navigate and extract information from the Java API, and employ the Javadoc tool to construct internal documentation of source code;
- Use software engineering best practices like pair programming, test-driven development, code coverage, static analysis, version control, continuous integration, and documentation with supporting tooling to design, implement, and test object-oriented systems.
- Design, implement, and test a finite state machine;
- Identify when recursion is useful, and design, implement, and test recursive algorithms and simple recursive data structures;
- Implement, test, and use a stack, queue, array-based list, and linked list.
Grading and Course Work
Your final grade will be calculated from three guided projects, two multi-part projects, and weekly quizzes. The grade ranges provide flexibility for the specific semester of instruction and details will be found in the syllabus for your semester of instruction
|3 Guided Projects||12 – 16%|
|2 Projects||40 – 44%|
|Weekly Quizzes||40 – 48%|
The primary, up-to-date, consistent source of information for this course are the lecture notes and videos. You are expected to read them and understand them thoroughly. You are also expected to do all of the practice exercises. Videos to go with this course are available at the Engineering Online website.
Textbooks – please choose one of the following:
Building Java Programs (5th Ed) by Reges and Stepp. If you already have a copy from CSC 116, please use this textbook.
CSC 216 – Software Development Fundamentals Zybooks.
Both textbooks will include material covered in CSC 116 for pre-requisite review and both cover some of the learning outcomes from CSC 216. Supplemental materials will be provided for topics not covered in the textbooks.
Computer and Software Requirements
Please review minimum computer specifications recommended by NC State University and Engineering Online.
Code and Submission Tools. You must use Eclipse for project/code development, NC State’s GitHub for program submission, Gradescope for submission of written documents, Google Forms for exercise submissions, Moodle for any other submission or work items, Piazza as a course forum, and MyDigitalHand for office hours request.
Eclipse is an industrial-strength Integrated Development Environment (IDE) that incorporates many of the tools that you will use this semester. GitHub is a web application around Git, which is a version control system. You will submit all programming assignments to instructor supplied repositories in NC State’s GitHub. This includes both code and ancillary documents. The initial labs and guided projects have copious information/tutorials on how to use Eclipse and GitHub. Gradescope supports grading written documents; you will submit your design and black box test plan documents there. Google forms are for in-class exercises that are completed while watching lectures. Moodle is a learning management system that will have links to course materials, resources, lectures, videos, assignments, and quizzes. Piazza is a course forum where students may ask and help answer questions about the course and assignments. The teaching staff will also monitor and answer questions that students may have about the course and assignments. MyDigitalHand is an office hour queuing system that will support online office hours for all sections of CSC 216/217.