computer science class

roobaraga
Syllabus_Spring2019.doc

Fundamentals of Software Engineering

Course Description

Creating software that is a joy to use and at the same time serves a useful purpose takes more than just programming. Programming accounts for only about 15% of the total effort spent on the typical software project [Boehm, 1987]. The rest of the time is spent establishing requirements, designing a solution, verifying results, planning, coordinating, communicating and in general managing the development process and associated products. Software engineering is an area of study concerned with this broader view of software development.

Software engineering follows a tradition of engineering in other disciplines. There are established branches of engineering for constructing bridges (civil engineering), engines (mechanical engineering), and various electrical devices (electrical engineering). Engineering is the application of scientific knowledge and practical experience to the production of useful objects. Software engineering aspires to apply the same systematic, disciplined and quantitative approach to the production of software.

At university the discipline of software engineering is covered in two courses: CS449 and CS451R.

Broadly speaking, the distinguishing characteristics of the two courses are:

CS449 (SE1)

· Students work individually on a small project with deliverables for each phase of the software life cycle.

· Design and implementation are emphasized.

· Students follow an Agile methodology.

CS451R (SE2)

· Students work as a team on a medium-sized project with deliverables for each phase of the software life cycle.

· Requirements elicitation and project management are emphasized.

· Students follow a more traditional planned methodology.

CS449 covers the fundamentals of software engineering with an emphasis on technical practices relevant to individual performance. In this class you will learn a systematic and disciplined process for

developing software and apply it to the requirements of a small individual project. The focus will be on design, implementation and unit testing techniques.

Credit Hours: 3 credit hours

Prerequisites: CS303

Textbook and Supplies

Required: a good reference book on Android programming. I recommend Android Programming: The Big Nerd Ranch Guide, by Bill Phillips and Brian Hardy. (2015, 2nd edition is most current)

Other good books on Android include:

· Hello Android (third edition) by Pragmatic Programmers

· Professional Android 4 Application Development by Reto Meier

Another excellent reference for learning Android is the online training offered by Google .

Most readings will come from extensive lecture notes posted on the lesson page .

If you would like an outside reference for many of the software engineering topics covered,

· recommend:

· Software Engineering, Ian Sommerville; Addison-Wesley.

· Software Engineering, A Practitioner's Approach, Pressman, McGraw-Hill.

· Fundamentals of Software Engineering, Ghezzi, et. al., Prentice Hall.

· Software Engineering, Principles and Practices, Hans Van Vliet, John Wiley & Sons.

Safari is a valuable source for reference material.

Web Site

Most of the information related to the course will be made available on the course Canvas site. From the web site you can view lecture notes, download/take assignments, upload completed assignments, check progress, etc.

Assessment

Grades will be assessed based on the following scale:

· Homework/labs: 15%

· Class participation: 5%

· Project: 20%

· Project planning: 2%

· Sprint#1: 3%

· Sprint#2: 3%

· Sprint#3: 3%

· Sprint#4: 3%

· Sprint#5: 3%

· Sprint#6: 3%

· Exam 1: 20%

· Exam 2: 20%

· Final: 20%

Letter grades, based on percentages:

A: 94+

A-: 90-93

B+: 87-89

B: 83-86 B-: 80-82 C+: 75-79

C: 70-74 C-: 67-69 D+: 62-66

D: 58-61 D-: 55-57

F: 0-54

Students in the School of Computing & Engineering must complete the course with at least a C for the course to meet graduation requirements.

Late submissions policy:

5% penalty per day for project submissions. No late submission of homework or online quizzes. Advance arrangements must be made if you will be absent on exam day. Missed exams without advance arrangements may require documentation of illness or other condition beyond student’s control.

Incompletes

All students must complete the course during the semester in which they enrolled. Incompletes will ONLY be granted if they are due to documented circumstances beyond the student’s control, and only if the amount of outstanding work is such that the student can complete it without attending any additional classes. Failure to complete course work on time is not grounds for an Incomplete.

Course Topics

· Introduction to Software Engineering

· Software Development Process

· Introduction to Agile Methods

· Scrum Methodology

· Software Modeling

· Software Design

· API Design and Use

· Automated Unit Testing

· Assertions and Design By Contract

· Error handling and Exceptions

Learning Outcomes

· Understand different software development processes and how to choose between them

· Understand fundamental principles of design including abstraction, information hiding, coupling and cohesion

· Understand good coding practices including visual modeling, version control, design patterns, refactoring, exceptions, assertions, automated unit testing

· Gain the ability to accurately estimate the time and effort needed to complete routine software development tasks

· Gain the ability to predict personal productivity and control performance in order to meet quality targets

· Gain experience with making engineering tradeoffs

Course Outline

The course Canvas site contains the outline and necesssary background materials.