Course Home

Syllabus

Calendar

Readings

Lecture Notes

Assignments

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TCS-2411 SOFTWARE ENGINEERING, TRIMESTER 3, 2005/2006

 

 

course brief

Software Engineering (SE) is simply about “how you engineer software”. Similar to other so called hard engineering disciplines, a properly executed and engineered software project undergoes through well defined activities that ensures the final product or service required of the software meets the needs of the client, is completed on time and within budget, stands the tests and stresses while in operation, and includes provisions for upgrades and maintenance in the future.

In essence, software is abstract and intangible. It is not constrained by materials, or governed by physical laws or by manufacturing processes. It is not just a collection of computer programs or computer files, or those including configuration and documentation files. A properly engineered software is a basically just a ‘product’, and just like any other products, software is judged for its quality against defined standards.

There is no single ‘ideal’ approach to software engineering. The wide diversity of different types of systems and organizations that use software systems means that there will certainly be a diversity of approaches to software development.

HOW THIS COURSE IS ORGANIZED

This course on software engineering is an active learning course through hands-on work and instructor-led lectures and tutorials. Students will be exposed to software engineering principles and processes that form the thrust of the subject matters taught.

Students will also be involved in simple programming exercises through mandatory class assignments working in both Windows and Linux (Unix) environments to complement and reinforce learning. The motto for this course is: “You cannot learn how to swim from just reading a manual on ‘How to Swim’. You must also jump into the pool and start swimming”.

References and real examples of the software engineering processes in practice will be provided as the course progresses. In addition, the computer programming exercises in class assignments have been designed to progressively provide students with actual practices and techniques used in industry. It has also been designed that the integration of the modular programs developed over the entire assignment schedule will finally produce two fully functioning software ‘products’ (projects), one running on Windows and the other running on Linux. To achieve this, it is therefore extremely important that students complete the full set of assignments in this course.

The pre-requisites for this course are Computer Programming (I) and Computer Programming (II) covering both C and C++ computer languages. This course is not a software programming course per se. However, programming is required for class assignments, which were designed to demonstrate and elucidate the various techniques in software construction, the core activity in software engineering.

COURSE GRADING

 

For the final grade, students will be assessed on their attendance, participation and performance in class through graded assignments (2 separate projects with 15% points for each project), a mid-term examination (10%) and a final examination (60%).

 

COURSE TEXTBOOKS

(1) Roger S Pressman, "Software Engineering – A Practitioner’s Approach", McGraw Hill, Sixth Edition 2005 (a.k.a. ‘The Good Book 1’).

(2) Ian Sommerville, "Software Engineering”, Addison Wesley, Seventh Edition 2004 (a.k.a. ‘The Good Book 2’).

OVERVIEW OF COURSE STRUCTURE 

 

 

No

KNOWLWDGE AREAS IN SOFTWARE ENGINEERING

1

Software Requirements

 

This knowledge area deals with information regarding the requirements of the software that will be built following established software engineering principles.  It covers the purpose of the software (e.g. to solve what real-world problems), the description of the product, the functionality of the product, the system requirements (environment in which the product will be deployed), the processes of gathering requirements information (user interviews, existing information, literature research), the analyses of the gathered information producing some conceptual models, subsequently producing documentation and specifications based on gathered information, validating or checking back the software requirements specifications with the client, users etc for their agreement, discuss and negotiate with the client where necessary on the practical considerations of implementation (e.g. phased approach), schedule (dates, times, resources and duration), costs etc. 

 

2

Software Design

 

This knowledge area deals with the translation of the software requirements into suitable design models using textual and graphical descriptions (ERD, DTD, UML2 diagrams, etc), software requirements analyzed to produce both the structural and behavioral descriptions of the software internal structure, the architecture, the components and the interfaces, the strategies of design and techniques (problem solving, abstraction, coupling, encapsulation, reusable design patterns, etc), data-oriented design, function-oriented design, object-oriented design, component-based design, software application layers, software application architectures, handling events, handling and error trapping, application concurrency, data persistence and storage, and deployment distribution.

 

3

Software Construction

 

This knowledge area deals with the translation of software design into the production of software codes, by minimizing construction complexity for ease of understanding using software constructs like small routines, subroutines, functions, procedures, reusable components, etc, enforcing uniform coding and commenting styles to ensure ease of change, ease of testing and modifications, applying software coding standards and recommended practices, e.g. using specialized tools (Integrated Development Environments – IDE, syntax checker, code generators, unit testing tools, etc), using the right and flexible language for construction, using established algorithms and patterns, using ready made and available objects and software libraries, developing standard user interfaces, etc. 

 

4

Software Testing

 

This knowledge area deals with the testing of the software program for defects (bugs, errors, etc) and non-conformities.  Technically testing of software is termed validation and verification of software: validation means testing to ensure that the user stated functionalities have been achieved (doing the right things) and verification for achieving absolutely correct results, implementing the correct algorithms, calculations or program flows (doing the things right).  Software testing consists of the static and dynamic tests: static test for verification of the software code and dynamic test for the verification of the behavior of a program while it is running. This area also deals with testing tools (generation of test cases), testing techniques and testing objectives.  Tests should be run on both the “black-box” and “white-box” methodologies for a finite set of test cases, suitably selected from the many and in fact infinite possibilities.  Testing also covers unit tests, integration tests, system tests, performance tests, stress tests, acceptance tests, installation tests, etc.

 

5

Software Maintenance

 

This knowledge area deals with the totality of activities to support the software in a cost-effective manner through the entire software life cycle.  Pre-delivery activities include planning for post-delivery operations, for maintainability, and for logistics determination for transition activities.  Post-delivery activities include software modification, training, and operating or interfacing to a help desk.  Software maintenance is also about the modification of a software product after delivery to correct faults, to improve performance or other attributes, or to adapt the product to a modified environment.  It deals with the need for maintenance, the management of maintenance (tracking and control), cost of maintenance, type of software maintenance (preventive, corrective, proactive, reactive), the processes, categories of maintenance, contractual maintenance issues etc. For maintainability, software must be designed with ease of maintenance (easy to understand design and source codes), can be reversed engineered and forward engineered. 

 

6

Software Configuration Management

 

This knowledge area deals with the management and planning of the software configuration management process, software configuration item identification, software configuration and change control, software configuration status accounting (reporting), software configuration auditing, and software release management (version control) and delivery.  The configuration management process controls the evolution and integrity of the software product by identifying its elements (configuration items and objects), managing and controlling change, and verifying, recording, and reporting on configuration information. There are specialized tools to handle and capture these configuration information like the CVS (Concurrent Versioning System) and repository databases like the “Registry” for Microsoft Operating Systems software.  This knowledge area also deals with the listing or library of all software implemented for the project. 

 

7

Software Engineering Management

 

Software Engineering Management can be defined as the application of management activities—planning, coordinating, measuring, monitoring, controlling, and reporting—to ensure that the development and maintenance of software is systematic, disciplined, and quantified. With respect to software engineering, management activities occur at three levels: organizational and infrastructure management, project management, and measurement program planning and control.  The sub-areas for software engineering management deal with initiation and scope definition, software project planning, software project enactment, review and evaluation, closure or post-completion activities and software engineering measurement.

 

8

Software Engineering Processes

 

This knowledge area deals with processes at two levels: The first level encompasses the technical and managerial activities within the software life cycle processes that are performed during software acquisition, development, maintenance, and retirement. The second level is the meta-level, which is concerned with the definition, implementation, assessment, measurement, management, change, and improvement of the software life cycle processes themselves.  The technical and managerial activities are covered in the first 7 topics in this table (Software requirements, design, construction, testing, maintenance and software engineering management).

 

9

Software Engineering Tools and Methods

 

Software development tools are the computer-based or computer-aided software engineering (CASE) tools that are intended to assist the software life cycle processes.  Tools allow repetitive, well-defined actions to be automated, reducing the cognitive load on the software engineer who is then free to concentrate on the creative aspects of the process.  Tools are often designed to support particular software engineering methods, reducing any administrative load associated with applying the method manually.  Like software engineering methods, they are intended to make software engineering more systematic, and they vary in scope from supporting individual tasks to encompassing the complete life cycle.  There are many CASE tools: Requirements Modeling tools (UML), Design and Construction tools (including source code generators), Testing tools, Maintenance tools, Configuration Management tools, Engineering Management tools (projects), Process Management tools and Quality Management tools.  The software engineering methods cover Heuristic Methods, Formal Methods and Prototyping Methods.

 

10

Software Quality

 

This knowledge area deals with software engineering culture and ethics, value and costs of quality, models and quality characteristics, quality improvement, quality assurance, software validation and verification, reviews and audits, quality requirements, software defects, quality management techniques and quality measurement techniques. 

 

 

COURSE LECTURER / INSTRUCTOR

Name

Wan Ruslan Yusoff

(WRY pronounced as ‘RAI’)

Department:

Faculty of Information Technology (FIT)

Room:

R-4077 Building FOE/FIT

Tel Extension:

X-5426

Email:

wruslan@mmu.edu.my

wruslan@streamyx.com

Hand Phone:

012-3218120

Contact:

Email or SMS or By Appointment

 

 

 


 

 

Last Updated: Tue 07 Feb 2006