|
|

|
|

|
|
Multimedia University
Cyberjaya » Faculty of Information Technology »
|
|
TCS-2411 Software Engineering » Trimester
III » Session 2005/2006
|
|
|
TCS-2411 SOFTWARE ENGINEERING, TRIMESTER 3, 2005/2006
|
|
|
|

|
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.
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%).
(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
|
|
|