Pages

Thursday, 30 June 2011

Module 5: Software Implementation/Coding

What is software construction?
  • Construction - refers to the hands-on part of creating something.
  • Also known as implementation / coding and debugging, verification and validation.
  • Generally focus at coding, debugging, some detailed design and some testing.
Why software construction important?
  • Construction may takes 30% to 80% of the total project time. The larger the time spent, the bigger the work affect the success of the project.
  • Construction is the pivotal activity in software development.
  • Great potential for the average programmer's productivity to improve.
  • Requirements document and design documents can go out of date, but construction's by product, the source code, is always up to date.
  • Ideally software project goes through requirements engineering and modelling activities before construction begins. In reality, construction is the only activity that's guaranteed to be done!
Coding principles



Good programming practices


Defensive programming
  • The programmer makes necessary assumptions and creates code that anticipates potential problems and specification changes.
  • According to Tushar Metha (2009), defensive programming involves finding problem in the existing code, anticipating, preempting, streamlining the code to aid readability and simplify maintainability.
  • A good defensive programmer is sufficiently confident in his/her abilities to ignore the traditional belief that "if it isn't broke, don't fix it."
Software Inspections
  • An 'old school' approach.
  • A process to review, analyze and check static system.
  • focus at source code
  • known as peer reviews or program/code inspections.
  • inspections can check conformance with a specification.
  • cannot check non-functional characteristics (performance, usablity, etc.)
Program/code Inspection Process
  • Focus at detecting defects.
  • program inspections are very effective in discovering defects.
  • A formal process that involve a team of several members.
Advantages of Inspection over Testing

According to Sommerville (2004):
  1. A single inspection session can discover many errors in a software/system.
  2. incomplete versions of a software/system can be inspected without additional cost.
  3. inspections can search for program defects and other quality attributes of a program.
Drawbacks/Issues related to Inspections
  • Difficult to introduce formal inspections into software developments organizations.
  • Software engineers with experience are sometimes reluctant to accept that inspections can be more effective for detecting defects than testing.
  • Managers may be sceptical as inspections require extra costs during modelling and construction.
  • Inspections may take time to arrange and appear to slow down the development process.
Software Reuse

System that are designed by composing existing components that have been used in other systems. there are more reuse-based software engineering:
  • Application system reuse
  • Component reuse
  • Object and function reuse
Requirements for reuse


Benefits of reuse

Reuse problems
  • Increased costs
  • Lack of CASE tool support
  • Not-invented-here syndrome
  • Maintaining a component library can be expensive
  • Finding and adapting reusable components

Thursday, 23 June 2011

Module 4 : Software Design

Design model provides:
  • Software architecture
  • Data structure
  • Interfaces
  • Components

Design important because the model can be assessed for quality and improved before the code is generate, test and conduct.

Characteristics of a good design.


  • Readable
  • Understandable
  • Provide good picture of a system / software
  • Must implement all the requirements that already in analysis model
  • Must consist the requirement that desired by the client/customer.










Design Concept

1) Abstraction

2) Architecture

3) Patterns

4) Separation of concerns

5) Modularity

6) Information hiding

7) Functional Independence

8) Refinement

9) Aspects

10) Refactoring

11) OO Design concept

12) Design classes
















Abstraction: the process or result of generalization by reducing the information content of a concept or an observable phenomenon, typically in order to retain only information which is relevant for a particular purpose.

Architecture: It refers to the overall structure of the software and the ways in which that structure provides conceptual integrity for a system. A good software architecture will yield a good return on investment with respect to the desired outcome of the project, e.g. in terms of performance, quality, schedule and cost.

Modularity: It is the process of elaboration. A hierarchy is developed by decomposing a macroscopic statement of function in a stepwise fashion until programming language statements are reached. In each step, one or several instructions of a given program are decomposed into more detailed instructions. Abstraction and Refinement are complementary concepts.

Refinement: It is the process of elaboration. A hierarchy is developed by decomposing a macroscopic statement of function in a stepwise fashion until programming language statements are reached. In each step, one or several instructions of a given program are decomposed into more detailed instructions. Abstraction and Refinement are complementary concepts.




Design model

Description

    ss="MsoNormal" style="margin-bottom:10.0pt;line-height:115%">

    Data/Class Design

  • Class diagrams transformed into the design class realization and the data structures required implementing the software.


Architectural Design

  • Provides high-level overview of the system with detailed descriptions to be given by other design elements.
  • Defines the relationship between major structural elements of the software, the architectural styles and design patterns that can be used to achieve the requirements of the system and the constraints that affect the way in which the architecture can be implemented

Interface Design

  • Describes how the software communicates with systems that interoperate with it, and with human who use it.

Component-Level Design

  • Defines the data structures, algorithms, interface characteristics, and communication mechanisms allocated to each software component or module.



CASE Tools

  • IBM Rational Software Architect
  • Database Modeling: Enterprise Architect by Sparx Systems Pty Ltd.
Design evaluation
  • According to Shore and Chromatic ( 2007 “A good software design minimizes the time required to create, modify, and maintain the software while achieving run-time performance.
  • Meanwhile, Elssamadisv (2007) said that :-
o Design quality is people-sensitive.

-For instance, design quality is dependent upon the programmers writing and maintaining the code.

o
Design quality is change-specific.

-There are two general ways to make designs of higher quality with respect to this aspect:

·
generalizing from the tools like design patterns, and

· using tests and refactoring as change-enablers

IEEE Standard for Information Technology -Systems Design - Software Design Descriptions (IEEE 1016-2009)

  • This standard specifies an organizational structure for a software design description (SDD).
    • An SDD is a document used to specify system architecture and application design in a software related project.
    • Provides a generic template for an SDD.