|
Software Engineering This website demonstrates using wikis as teaching and learning tool. The course instructor is also happy to share the teaching materials here with those who find it readable. |
Lecture /
Software Engineering - Lecture OverviewA Software Engineering Lecture by Steven Choy What will you get after completing this course? What do you need to do in the coming 8 months? How about the course contents and their organization? Do you need to buy a textbook for the course study? What will you do in tutorial class? Are there any practical and laboratory exercises for you? Do you need to do assignments or projects?
his lecture gives you the basic definitions of many concepts in software engineering. You will learn about the importance of software engineering, the basic of software development activities, and the key roles in software engineering.
The Unified Modeling Language (UML) is a standard language for specifying, visualizing, constructing, and documenting the artifacts of software systems. This lecture first gives you an overview of UML. It then describes two fundamental notations of UML: use case diagrams, and class diagrams. For each of them, it describes the basic semantics, provides examples for explanation, and goes into a deeper view of them.
In this lecture, we will continue to learn UML modeling. We will have a look at the other three fundamental notations of UML: interaction diagrams (sequence diagrams and collaboration diagrams), statechart diagrams, and activity diagrams.
Requirements engineering is the foundation of all other software engineering activities. In this lecture, you will study the first part of requirement engineering, namely requirements elicitation. Requirements elicitation is about bringing out the requirements that originally reside in people's minds.
In requirement analysis, developers formalize the requirements specification and examine in more detail boundary conditions and exceptional cases. Developers validate, correct and clarify the requirements specification if any errors or ambiguities are found. Requirements analysis results in a system model that aims to be correct, complete, consistent, and unambiguous.
In the lecture, we will have an overview on system design concepts and activities. We then focus on how to design the initial subsystem decomposition. We will also discuss how to identify design goals.
In this lecture, we go on to study the design activities needed to address the design goals and to refine the subsystem decomposition. In particular, we will study mapping of subsystem to hardware, design of a persistent data management, specification of an access control policy, design of the global control flow, and handling of boundary conditions.
Object design is about identifying additional solution-domain objects and refining existing objects. Object design includes the following activities: Reuse: use inheritance and composition/delegation, identify off-the-shelf framework, and apply design patterns; Service specification: describe interface of classes precisely; Restructuring: transform the object model to increase code reuse or meet other design goals such as readability and maintainability; Optimization: address performance goals such as response time and throughput.
Design patterns take the reuse concept a step further. A design pattern encapsulates a specific way that a number of different objects work together. Different design patterns can be applied in certain situations to achieve specific benefits. You will learn the following commonly-used software design patterns: Abstract Factory, Factory Method, Adapter, Strategy, Bridge, Facade, Singleton, Observer
In the previous lectures, we learned to refine a system design model into an object design model. In this lecture, we are ready to turn the object design model into executable code. Following the direction of normal transformation--from model to code--we are said to be forward engineering a system. Reversing the direction of normal transformation--for example, recovering a model from executable code--we are said to be reverse engineering a system. If we transform existing code into better quality code, we are said to be refactoring the code. In this lecture, you will also learn how to write code to implement associations in the object models, how to code the contracts with Java exceptions, and how to implement object models in a relational database.
In this lecture, we start to learn Software Testing. You learn the meaning and use of test cases, test stubs and test drivers. Testing typically proceeds from unit testing via integration testing to system testing. You will also learn the common techniques available in each of the three types of testing.
In this lecture, we continue to learn software testing. It covers system testing, regression testing, and documenting testing. We will also have a brief touch on how JUnit is used to automate unit testing in Java.
Software Configuration Management (SCM) is the discipline of monitoring and controlling change in the evolution of software system. More specifically, you learn the following concepts and activities in the process of SCM: configuration item identification, promotion management, release management, branch management, variant management, and change management.
The previous lecture covered change management dealing with the managerial aspect of software engineering. In this lecture, we continue with a managerial topic, namely project management. It is possible to devote a whole course to project management. Our treatment on the subject will therefore be quite brief. The following are the main topics in this lecture: Role of a Project Manager, Project Development Phrases, Project Development Activities, Project Organization, and Risk Management.
In this lecture, we will revisit the activities described in previous lectures from the perspective of software life cycle modeling. Software life cycle models enable managers and developers to deal with the complexity of the process of developing software. We will study some well-known software life cycle models that help us better understand, measure, and control the software development process. Those models make the software development activities and their dependencies visible and manageable.
In this lecture, we will study methodologies as guidance for the project manager to select and customize the methods in software engineering to the specific project environment. A software engineering methodology is a collection of methods, best practices, guidelines, templates and tools for developing and managing a software system. In particular, we will cover Rational Unified Process (RUP) and Extreme Programming (XP).
We discuss a number of topics that do not cover in the textbook. They include code complexity measurement, certification for software development professional, and ethics and practices of software engineering.
|