The beginning of wisdom for a programmer is to recognize the difference between getting his 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, Principles of Program Design, 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-117
Phone 719 333-6803 (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. Analyze requirements for a complex software system and identify appropriate architectural approaches.
  2. Design, implement, test, and maintain software to satisfy the requirements of a software system.
  3. Communicate software requirements and designs effectively in writing.
  4. Apply ethical reasoning together with professional standards 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. Identify the appropriate software process model(s) for particular software system needs.
  7. Apply techniques from security and reliability engineering to create dependable software systems

Textbook

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

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

Policies

Academics with Honor and Academic Principles and Honor Guidance

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)
Project / Assignments 8 200 375
Graded Reviews (GRs) 3 125 375
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.

  • Come prepared for each and every class. Be ready to engage actively in class activities and discussions.
  • 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: Chad C. Tossell, Philip Kortum, Clayton Shepard, Ahmad Rahmati, and Lin Zhong, “You Can Lead a Horse to Water But You Cannot Make Him Learn: Smartphone Use in Higher Education,” British Journal of Educational Technology, Vol. 46, No. 4, pp. 713–724, July 2015 (press release).