The beginning of wisdom for a programmer is to recognize the difference between getting [a] program to work and getting it right. A program which does not work is undoubtedly wrong; but a program which does work is not necessarily right. It may still be wrong because it is hard to understand; or because it is hard to maintain as program requirements change; or because its structure is different from the structure of the problem; or because we cannot be sure that it does indeed work. (Jackson 1975)

Why study software engineering? In short, software pervades modern systems, from the phones that we carry to “smart bulbs” and other Internet of Things (IoT) devices that connect to the Internet. The F-35 Lightning II relies upon millions of lines of code for flight operations. Yet despite its prevalence, we’re colossally bad at developing and managing software. Perhaps you can relate to the following cartoon:

Good Code

How do we develop good code? How do we avoid million-dollar mistakes with complex systems that rely on software for basic functionality? We will study these issues in this course, from software development fundamentals to techniques to manage software projects. As suggested by the prior quote, success requires a paradigm shift: a functional program (e.g., one that passes its tests) is only the starting point when the final product should be dependable, secure, and maintainable.

Unlike many other computer science courses, there are few easy answers. Design alternatives involve trade-offs. Dependability and security increase costs. Technical competence is necessary, but not sufficient, when interacting with stakeholders. We will explore these challenges and learn how to contribute to the development of large software systems. The analytical and critical thinking skills that you develop will serve you for years to come, far longer than individual technologies and beyond “simple” software development projects.

Instructor

Name Dr. Joel Coffman
Office Fairchild 6G-139
Phone 719 333-7664 (office)
Email joel.coffman@usafa.edu
Website https://joel-coffman.github.io/

Course Description

Develops a theoretical and applied understanding of the concepts and techniques of software engineering emphasizing agile methodologies, software architectures, project planning and management, risk management, requirements engineering, prototyping, goal modeling, design techniques and quality measures, security considerations and protections, quality assurance techniques, testing methodologies, configuration management and control, sustainment, and tool support.

Prerequisites

  • Comp Sci 220: Data Structures and Systems Programming

Additional Topical Requirements

Object-oriented design and programming skills to include class definition, object instantiation, visibility constructions, inheritance, polymorphism, dynamic dispatching, associations, and aggregations (e.g., as developed by Comp Sci 330: Software Design and Development).

Course Goal

Cadets shall apply modern software engineering and project management practices to develop robust, secure, and reliable software systems.

Course Outcomes

Upon completion of this course, you will be able to do the following:

  1. Formulate and analyze the requirements for a software system
  2. Create, model, and evaluate the design of a software system to ensure that the design satisfies the system’s requirements
  3. Prepare written software engineering artifacts, such as project plans, schedules, and reports
  4. Apply the principles of the Software Engineering Code of Ethics and Professional Practice to the development of software systems
  5. Employ software project management principles to orchestrate team efforts, mitigate risks, and produce high quality software systems
  6. Apply software development fundamentals to the design, implementation, and testing of a software system
  7. Assess the dependability and security of a software system

Textbook

Sommerville, Software Engineering, 10th edition, Pearson, 2016. ISBN: 0-13-394303-8 / 978-0-13-394303-0

Fowler, UML Distilled: A Brief Guide to the Standard Object Modeling Language, 3rd edition, Addison-Wesley Professional, 2004. ISBN: 978-0134865126

Policies

Academics with Honor Policy and Academic Principles and Honor Guidance (Dean’s Honor Video)

Classroom Standards

Laptops may be used in class as long as they are not distracting to other students. Phones should not be used in class with the exception of taking pictures of “board work” for future reference. Any other uses should be cleared first with the instructor.1

Meeting deadlines is important; late work will not be accepted without prior coordination. That is, you must notify me in advance if you will submit work after the deadline; otherwise, you will not receive credit for late submissions. Except for extraordinary circumstances, late work will be penalized 25% for each 24-hour period past the deadline. The late penalty is a cap on the maximum grade that may be awarded for the late work.

Grading

Final grades will be based on the following graded events:

Assessment Type Number Points (Prog) Points (Final)
Quizzes 30 50 100
Project / Assignments 8 200 325
Graded Reviews (GRs) 3 100 325
Final Exam 1   250

The project comprises multiple deliverables as outlined on the schedule.

If you believe that an assignment has been graded incorrectly, you have one week from the date that assignment was returned to request a regrade. Your request must be accompanied by a detailed written explanation of why you believe you deserve additional credit. Requiring a written explanation saves time when regrading, demonstrates greater mastery of the material on your part, and improves your technical writing skills.

Final grades will be determined using the standard grading scale: ± will be assigned using ±2 thresholds – e.g., 92% will be an A- and 88% will be a B+.

Success Strategies

You can excel in this course. The following list highlights some strategies designed to help you succeed and to minimize your stress throughout the semester.

  • Be prepared for each and every lesson. Be ready to engage actively in learning activities and discussions.
  • Do not multi-task when completing learning activities. Distractions significantly reduce learning.
  • Work ahead of due dates. Like the real world, this course gives you the latitude to shoot yourself in the foot, particularly if you choose to wait until the last minute to work on assignments and in lieu of extraordinary circumstances. I reserve the right to decline extra instruction (EI) requests on the day that assignments are due.
  • We will study the tools and techniques to succeed in software engineering. Paraphrasing von Bismark, learn from the mistakes of others rather than repeating them yourself.
  • Your honor is extremely important. Do not compromise your integrity by violating academic security or by taking unfair advantage of your classmates.
  • Seek assistance whenever needed. I am committed to helping you succeed.

  1. The impetus for this policy is research that suggests smartphones may be detrimental to learning (Tossell et al. 2015).