Software Configuration Management

Geometric decorationStatistics:

  • 53% of software projects overrun their schedules and budgets
  • 31% are cancelled
  • Only 16% are completed
  • Projects made by large American software companies approximate to only 42% of clients’ requests.

Source: Keyes, J. (2004). Software Configuration Management. Boca Raton: Auerbach

SCM basic tasks:

Development and production of:

  • Configuration identification
  • Configuration change control
  • Configuration status accounting
  • Configuration auditis

Integration: consists on putting together the individual software parts in one single big project.

Types:

  • Merge: parallel development on the same stuff
  • Assembly: development of different pieces

Resultado de imagen para software configuration management

Software Configuration Management started in the 1950s, when configuration management, that was used for hardware and production control, was applied in software development.

Nearly all components that comprise modern information technology, such as Computer Aided Software Engineering (CASE) tools, Enterprise Application Integration (EAI) environments, Extract/Transform/Load (ETL) engines, Warehouses, EII, and Business Intelligence (BI), contain a great deal of metadata as well as his own repository and designer. That’s why metadata CM activities must be used in order to have effective information management.

The purpose of Software Configuration Management is to establish and maintain the integrity of the products of the software project throughout the project’s software life cycle. Software Configuration Management involves identifying configuration items for the software project, controlling these configuration items and changes to them, and recording and reporting status and change activity for these configuration ítems.

Configuration Management is practiced in one or another form as part of any software engineering project where several individuals or organizations have to coordinate their activities.

Software Engineering Institute. Capability Maturity Model Integration, Version 1.1 CMMI for Systems Engineering and Software Engineering (CMMI-SE/SW, V1.1) (CMU/SEI-2000-TR-018, ADA388775). Pittsburgh, PA: Software Engineering Institute, Carnegie Mellon University, 2000.

The reason for using SCM system is to keep track of the changing entities of a software product in a non degrading state. It provides the framework for interfacing different activities and defining the mechanisms necessary for coordinating parallel activities of different groups.

Software Configuration Management (SCM) A Practical Guide. http://energy.gov/sites/prod/files/cioprod/documents/scmguide.pdf

Best Practices: There are many practices that are advised to achieve proper SCM. What this implies is that just using SCM isn’t a solution, as SCM can be done poorly. Poor SCM won’t provide the results or benefits that one may expect. The first point is to make sure to store your important data in a secure place. Apart from storing the important files, one should also save who made what, when, and save previous versions of the modified file. A common technique that makes the process easier is to break the project down into components. Components are simpler by themselves and allow programmers to work in different parts of the project at the same time. A task that isn’t done by SCM software is to keep track of which versions work together. This means that, if a file in version 3 only works with version 2 of some other file, you have to keep track of the working version.

What Is Software Configuration Management? From: https://www.pearsonhighered.com/samplechapter/0321200195.pdf

Team members:

Andres Barro Encinas A00226225 @A_00226225

Hermess Espínola González A01631677 @herm13s

Miguel Miranda Plascencia A01631246 @mmiranda_96

Gerardo Cesar Juarez Lopez A00226860  @geratrex

The Software Development Process

Brown Hotdog on a Brown Plate

What is a software development process?

The software development process is a structure imposed on the development of a software product. It is a splitting of software development work into distinct phases containing activities with the intent of better planning and management.

There are several models or methodologies, each describing approaches to a variety of tasks or activities that take place duri  ng the process. Common methodologies include the waterfall, prototyping, iterative and incremental development, spiral development, rapid application development, extreme programming and various types of agile methodology. Free stock photo of schedule, startup, to do, concept 

Process Steps

SE processes are composed of many activities/steps:

  • Requirement Analysis
    • While the customer probably believe they know what the software is to do, it is common that you need to recognize incomplete, ambiguous or contradictory requirements.
  • Specification
    • In this step a precise description of the software is to be written. 
  • Software architecture
    • Design an abstract representation of the system. Architecture is concerned with making sure the software system will meet the requirements of the product, as well as ensuring that the future req  uirement can be addressed.
  • Implementation
    • Very self explanatory, code the design.
  • Testing
    • Testing the software.
  • Documentation
    • For the purpose of future maintenance and enhancement.
  • Training and support
    • It is very important to have training classes for the most enthusiastic software users, incorporate the rest of the organization into adopting the new software.
  • Maintenance
    • Maintaining and enhancing software to co  pe with the new problems or new requirements. It may be necessary to add code and determine how the software works. 

 

Extreme Programming

Extreme programming  (XP) is a popular Agile development process at many companies and industries because it stresses customer satisfaction.

Resultado de imagen para extreme programming photos

In this process you don’t set a due date for the work, it delivers the software you need as you need it, it emphasizes teamwork, everyone is equal no matter what they do. It enables teams to be highly productive.

Agile flow chart

XP improves communication, simplicity, feedback, respect and courage in software development.

  • Simplicity: We do what is needed and asked for, but no more. take small simple steps  to our goal and mitigate failures as they happen.
  • Communication: We communicate face to face daily. We work together on everything.
  • Feedback: We demonstrate our software our software early and listen carefully and make any changes needed.
  • Respect: Everyone is an important member of the team. Everyone contributes value to the project, even if it’s simply enthusiasm.
  • Courage: We tell the truth about progress and estimates. Don’t fear anything because no one ever works alone. Adapt to changes when ever they happen.

XP tries to deliver the system to the customer as early as possible and implement changes as suggested. It has few and very simple rules to follow, that involves planning, managing, designing, coding and testing. You can see more about the rules here.

Extreme Programming flow chart

 

SDLC

Software Development Life Cycle is an industry technique, an international standard used to design, develop and test software to meet the user expectations. It also helps to reach goals within time and cost estimates.

Stages of SDLCThe SDLC consists of the following stages:

1. Planning

It is performed by the senior members with inputs from the customer, sales department, market surveys and domain expert. This information is then used to plan the basic project approach. Identification of the risks associated with the project. Define the technical approaches that can be followed to implement the project successfully with minimum risks.

2. Defining requirements

Define and document the product requirements and get them approved from the customer or the market analysts.

3. Designing the product architecture

Based on the requirements specified in SRS,usually more  than one design approach for the product architecture is proposed and documented in a DDS (Design Document Specification).

The DDS is then reviewed by the stakeholders and the best approach is selected for the product.

4. Building the product

The development starts, the programming code is generated as per DDS. Developers has to follow the coding guidelines by their organization and programming tools.

5. Testing the product

Testing stage of the product where products defects are reported, tracked, fixed and retested, until reaches standards defined in the SRS.

6. Deployment

Once the product has been developed and tested it’s ready to be released to the market. The product may first be released in a limited segment and tested in a real business environment. Based on the feedback, the product may be released as it is or with suggested enhancements in the targeting market segment. After the product is released in the market, its maintenance is done for the existing customer base.

 

There are several SDLC models:

  • Waterfall model
  • Iterative model
  • Spiral model
  • V-model
  • Big Bang model

History of software engineering

The first time the term “Software Engineering” was heard by a human being was in 1968 at a conference organized by NATO, to discuss the difficulties encountered when developing large and complex systems, It was proposed that the software development process should adopt an engineering approach to reduce the costs and to lead to more reliable software.

In the 70s the fist programming environments were developed, first notions of structured programming, the Pascal programming language, Parnas’s papers on information hiding and the development of Smalltalk, which introduced the notions of object oriented development. Early use of software design methods.

In the 80s the Ada programming language introduces structured programming and information hiding. CASE (Computer Aided Software Engineering) tools are introduced to support design methods, these tools are designed to increase the productivity and reduce the cost of software development. Development of algorithmic approaches to software costing and estimation, the first student textbook on software engineering is released. Later in the 80s OOP had a huge increase in popularity, through languages such as C++ and Objective-C. The first object-oriented design methods.

In the 90s Java is released. The rise of the Internet, international information, e-mail systems. Client – Server distributed architectures are widely used. Component-based software engineering (CBSE) is developed, it is a reuse-base approach to defining, implementing and composing loosely coupled independent components into systems. The Unified Modeling Language (UML) is proposed, integrating several separately developed notations for representing object-oriented systems. Sam Kass created rock, paper, scissors, lizard, Spock.

in the early 00s the use of UML becomes widespread, whereas the use of CASE tools declines. There is a huge increase of scripting languages, such as Python, for software development. C# is developed.  Inexpensive software solutions led to the development of simpler and faster methodologies for software development. Extreme Programming (XP) attempted to simplify many areas of software engineering.

What is (love) software engineering?

According to the IEEE, Software Engineering (SE) means applying the principles of engineering to the software development field, those guys are going places.

Professionals of software engineering are building intangible structures, however, these intangibles structures can have a tangible effect, in example, some software used in medical equipment need to be precise, otherwise it would have a negative effect in the patient.

SE is more than just programming, it includes things such as eliciting customers’ requirements, designing and testing software, problem modeling and analysis, software quality, etc.

Baby don’t hurt me.

Sources:

http://computingcareers.acm.org/?page_id=12

http://www.softwareengineerinsider.com/articles/what-is-software-engineering.html