Software Engineering

" .... the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software." - from Software Engineering - Wikipedia.


Introduction to Software Engineering in Java

- A very recent short course from MIT OpenCourseWare (US) by Evan Jones, Olivier Koch and Philippe Cudre-Mauroux. It covers concepts useful to a later MIT course: Elements of Software Construction. (Unfortunately, some parts of this latter course are not open but there are lecture PDFs and quizzes.) There are PDF lecture notes, assignments and related resources. A Thai version of this course is available.

"The focus is on developing high quality, working software that solves real problems."

Software Engineering

- 39 videoed lectures by Rushikesh K Joshi, Umesh Bellur and N.L.Sarda of IIT Bombay (IN).

Topics include: What is Software Engineering?; Software Development Life-cycle (requirements, design, coding, testing, maintenance); Software Requirements Specification (validation, metrics, monitoring, control); System Design (problem partitioning, abstraction, functional versus object-oriented, specification and verification metrics); Coding (top-down & bottom-up, structured, information hiding, style, documentation); Testing (levels, structural, test plane, test cases specification, reliability assessment); Software Project Management (cost, scheduling, staffing, software configuration, quality assurance, monitoring, risk)

Laboratory in Software Engineering

- 22 lectures with PDF notes from MIT OpenCourseWare (US) by Srinivas Devadas and Daniel Jackson introducing concepts and techniques relevant to production of large software systems. There are also assignments and projects. Chinese, Spanish and Portuguese versions of this course are available.

Topics are: Introduction; Object Semantics; Subclassing; Specifications; Testing; Object Model Notations; Code Summary; Introduction to ADTs; Representation Invariants; Abstraction Functions; Dependencies and Decoupling; Exceptions; Equality; Polymorphism; Subtypes and Subclasses; Classes and Interfaces; Usability 1 & 2; Design Patterns; Design Project Experiences 1 & 2; Lecture on Final Project; Guest Lecture.

Java Preparation for 6.170, also from MIT, provides some of the necessary background (see Computer Programming page on Java).

Software Engineering

- 14 interesting videoed contributions from King Mongkut Thonburi University (TH) by an unnamed (?) lecturer. The videos can be accessed on YouTube.

Topics include: Introduction to Software Engineering; Problem Definition; Solution Design; Object-Oriented Design; Solution Implementation; Software Configuration Management and Build Automation; Solution Validation; Solution Deployment and Software Evolution; Software Development Process Paradigns and Continuous Process Improvement; CASE Tools.

Software Engineering for Internet Applications

- An open textbook of 17 Chapters by Eve Andersson, Philip Greenspun, and Andrew Grumet intended for juniors and seniors in computer science and others such as software developers building online communities or other multi-user Internet applications.

"We assume that they know how to write a computer program and debug it. We do not assume knowledge of any particular programming languages, standards, or protocols. The most concise statement of the course goal is that 'The student finishes knowing how to build amazon.com by him or herself.'"

Foundations of Software Engineering

- A foundation course by Kevin Amaratunga at graduate level from MIT OpenCourseWare (US) on modern software development techniques for engineering and IT. There are lecture notes, recitations, assignments, projects and exams with solutions.

"The design and development of component-based software (using C# and .NET) is covered; data structures and algorithms for modeling, analysis, and visualization; basic problem-solving techniques; web services; and the management and maintenance of software. Includes a treatment of topics such as sorting and searching algorithms; and numerical simulation techniques."

Software Engineering Concepts

- A further graduate level course from MIT OpenCourseWare (US): by Nancy Leveson.

".... a reading and discussion subject on issues in the engineering of software systems and software development project design. It includes the present state of software engineering, what has been tried in the past, what worked, what did not, and why."

PDFs cover the following topics: Introducing The Problem; Process and Life Cycle Models; Requirements and Specification; Design; COTS and Reuse; Metrics and Reliability Assessment; Building Confidence (Testing, Analysis, QA, Reviews); Selecting a Programming Language; Team Organization and People Management; Software and System Safety; Putting It All Together.

Software Engineering - Reference

Category:Software engineering - Wikipedia - Lists Subcategories (29) and over 60 Wikipedia Pages in the "Software engineering" category.
Surfing the Net for Software Engineering Notes - A detailed article by Mark Doernhoefer (MITRE Corporation, McLean, VA), published by ACM.
Google Directory - Software Engineering.
FreeTechBooks.com - Free Online Computer Science and Programming Books, Textbooks, and Lecture Notes.
dmoz Open Directory Project - Software Engineering.
Guide to the Software Engineering Body of Knowledge (SWEBOK) - By the IEEE Computer Society, this is the 2004 edition; a revised edition is set for 2010.

Software Engineering Proverbs

A diverse collection by Tom Van Vleck (What I always say is, "You learn something every day, unless you're careful.")

Everybody Knows:

  • Discipline is the best tool.
  • Design first, then code.
  • Don't patch bugs out, rewrite them out.
  • Don't test bugs out, design them out.

His "Software Engineering Stories" are also apt.