CSIS 111B: Fundamentals of Computer Programming: Lessons

Lesson 2

Structured Design Concepts


By the end of this lesson you will be able to:

  • Understand how the binary numbering system works
  • Describe character encoding and how it applies to computer programming
  • Define the Systems Development Life Cycle and describe the activities that occur at each stage of the life cycle.
  • Understand the importance of software testing and describe commonly used approaches
  • Describe testing levels and understand the types of activities performed at each level


Understanding Binary Character Encoding

Understanding how the binary numbering system works and what encoding is, will give you a better understanding of later programming concepts you will learn in this class and in future programming classes. The process of encoding converts information from a source into symbols for communication or storage.

Lecture on Binary Character Encoding

This is a lecture about binary character encoding I recorded previously.

Here is a Visual Studio solution you can download, view and run in Visual Studio to help you see how computers encode different data types.

Table of Contents

What Is The Systems Development Life Cycle (SDLC)?

The Systems Development Life Cycle (SDLC) is the set of activities that revolve around a new software product, from its inception to when the product matures and perhaps retires.

Developing an information system involves more than just writing the code. Various other activities also need to be performed in the right order to develop a successful product. Collectively, these activities are known as the systems development life cycle. The activities that comprise the SDLC process are shown in Figure 3-1, Planning, Analysis, Design, Development, Implementation & Testing, and Maintenance.

Systems development life cycle flow chart emphasizing its circular nature.
Figure 3-1: Activities which comprise the Systems Development Life Cycle.
Table of Contents

The SDLC Process

In this section, you’ll learn about the different activities and roles involved in each stage of the SDLC process.

The systems development life cycle starts when the need for a new software application is identified. A business manager is usually the person who is the sponsor of the project. He or she analyzes the need, checks how the project fits with the overall strategy of the business, arranges the funding, and initiates the staffing process for the project.

A project manager is probably the first person hired by the business manager. The project manager is responsible for the overall execution of the project. His or her key responsibilities are to make sure that the project stays on budget and finishes on time. The project manager is also responsible for hiring team members and for facilitating cooperation within the team.

Understanding Systems Planning

The objective of the Planning stage is to conduct a preliminary analysis, propose alternative solutions, describe costs and benefits and submit a preliminary plan with recommendations. This is also where the organization's goals of for system are identified and defined. This step can and should involve all of the stakeholders of the system.

Understanding Systems Requirements Analysis

Requirements analysis is the process of determining the detailed business requirements for a new software system.

Requirements analysis is one of the most important steps in the application life cycle. Precise, complete, well-documented requirements are critical to the success of the project. These requirements can be functional or nonfunctional. Functional requirements specify exactly what the system is designed to accomplish. In contrast, non-functional requirements are quality requirements such as scalability, security, reliability, and so on.

A business analyst is responsible for analyzing business needs and converting them into requirements that can be executed by the development team.

Understanding the Systems Design Process

The design process is used to create plans, models, and architecture for how the software will be implemented. The design process generates detailed technical specifications that will be used for developing the system. The output of the design process is a set of technical models and specifications that provide guidance to the developers and other team members during the software development activity. The output of the design process is more abstract than concrete. At this point, no real system exists that you can interact with.

Some of the most important participants in this stage:

  • Architect: An architect designs the technical blueprint of the system. This includes identifying components and services, their behavior, and how they interact with each other and with the external world.
  • User-experience designer: A user-experience designer creates the user experience of the system. This includes designing the user interface (UI) elements; designing navigation between various forms, screens, or pages; and so on.

Understanding Systems Development

The systems development activity involves implementing design by creating software code, databases, and other related content.

Systems development is the portion of the SDLC process in which the business requirements are implemented in working code based on the design that was created in the previous activity. At the end of this activity, you have concrete output in form of a software system with which users can interact.

Critical participants in system development include the following:

  • Developers: Developers write code based on the requirements gathered by the business analyst, the architecture laid down by the architect, and the user experience developed by the user-experience designer.
  • Database administrators (DBAs): DBAs are responsible for implementation and maintenance of the software’s databases. DBAs also plan for data integrity, security, and speed.
  • Technical writers: Technical writers develop the system manuals and help files that will be delivered along with the application.
  • Content developers: Content developers are subject matter experts who develop the content for the system. For example, if the application is a movie review website, just deploying the website is not enough—you also need to make sure that the site has enough content to gather user interest.

Understanding Systems Implementation & Testing

Software testing verifies that the implementation matches the requirements of the system.

Software testing is used to assure the quality of the final product. Testing can identify possible gaps between the system expectations described in the requirements document and actual system behavior.

Among the most critical participants in the software testing activity are the testers who verify the working application to make sure that it satisfies the identified requirements. When these testers identify any defects in the application, they assign each defect to an appropriate person who can fix it. For example, a code defect would be assigned back to a developer so he or she could remedy the error.

Understanding Release Management

The release management activity is used to manage the deployment, delivery, and support of software releases. Release management includes activities such as packaging and deploying the software, managing software defects, and managing software change requests. Major players in the release management activity include the following individuals:

  • Release manager: The release manager coordinates various teams and business units to ensure timely release of a software product.
  • Operation staff: The operation staff members make sure that the system is delivered as promised. This could involve burning DVDs and shipping them as orders are received, or it could entail maintaining a Software as a Service (SaaS) system on an ongoing basis. Operation staff are also responsible for releasing any system updates (e.g., bug fixes or new features).
  • Technical support staff: These staffers interact with customers and help solve their problems with the system. Technical support can generate valuable metrics about what areas of the system are most difficult for users and possibly need to be updated in the next version of the application.
Table of Contents

Software Testing

Table of Contents

Understanding Testing

Software testing is the process of verifying software against its requirements. Testing takes place after most development work is completed.

As previously mentioned, software testing is the process of verifying that a software application works as expected and fulfills all its business and technical requirements. When there is a difference between the expected behavior and the actual behavior of the system, a software defect (or “bug”) is logged and eventually passed on to an individual who is responsible for fixing it.

Software testing may involve both functional and nonfunctional testing. Functional testing relates to the functional requirements of the system, and it tests those features that make up the core functionality of the system. For example, testing whether users can add items to a shopping cart is an important part of functional testing for an e-commerce Web site. In comparison, non-functional testing involves testing software attributes that are not part of the core functionality but rather part of the software’s nonfunctional requirements, such as scalability, usability, security.

It is important to note that the process of software testing can only help find defects—it cannot guarantee the absence of defects. Complex software has a huge number of possible execution paths and many parameters that can affect its behavior. It is not feasible and often not possible to test all the different situations that such software will encounter in a production environment.

Understanding Testing Methods

Software testing methods are generally divided into two categories:

  • Black-box testing
  • White-box testing

Black-box testing treats the software as a black box, focusing solely on inputs and outputs. With this approach, any knowledge of internal system workings is not used during testing. In contrast, with white-box testing, testers use their knowledge of system internals when testing the system. For example, in white-box testing, the testers have access to the source code.

These two testing techniques complement each other. Black-box testing is mostly used to make sure a software application covers all its requirements. Meanwhile, white-box testing is used to make sure that each method or function has proper test cases available.

Understanding Testing Levels

Testing is performed at various phases of the application development life cycle. Different testing levels specify where in the life cycle a particular test takes place, as well as what kind of test is being performed.

Testing levels are defined by where the testing takes place within the course of the software development life cycle. Five distinct levels of testing exist:

  1. Unit testing: Unit testing verifies the functionality of a unit of code. For example, a unit test may assess whether a method returns the correct value. Unit testing is white-box testing, and it is frequently done by the developer who is writing the code. Unit testing often uses an automated tool that can simplify the development of cases and also keep track of whether a code modification causes any of the existing unit tests to fail. Visual Studio has built-in support for unit testing. You can also use open-source tools such as NUnit to automate unit tests for the .NET Framework code.
  2. Integration testing: Integration testing assesses the interface between software components. Integration testing can be performed incrementally as the components are being developed, or it can be performed as a “big bang” when all the components are ready to work together. The former approach is preferred to the latter because it reduces risk and increases stakeholders’ confidence as the system is being developed. Integration testing can also involve testing the component’s interaction with an external system. For example, if a component relies on data from an external Web service, integration testing ensures that the component is working well with the external application.
  3. System testing: System testing is the overall testing of the software system. At this point, all the system components are developed and are working together and with any external systems.
  4. Acceptance testing: This level of testing is often performed by the customers themselves. There are generally two levels of acceptance testing prior to broad release of a product: alpha testing and beta testing. Alpha testing is performed by a limited group of users, and it is an opportunity to provide an early look at the product to the most important customers and gather feedback. Alpha releases may miss some features and generally lack many nonfunctional attributes such as performance. In the next level of testing, beta testing, you release the product to a wider audience of customers and solicit feedback. In terms of functionality, the beta release of the software is very close to the final release. However, the development teams might still be working on improving performance and fixing known defects.
  5. Regression testing: As the defects in a software application are reported and fixed, it is important to make sure that each new fix doesn’t break anything that was previously working. This is where regression testing comes in handy. With every new fix, software testers usually run a battery of regression tests to make sure that each functionality that was already known to work correctly is still working.
Table of Contents

First Computer Bug

Image of the log entry made by Grace Hopper indicating that relay #70 in panel F had a moth in the relay. The moth is taped to the log page with the text 'First actual case of a bug being found.' written underneath.
On September 9, 1947 at 3:45 p.m., Grace Murray Hopper records the first computer bug in her log book as she worked on the Harvard Mark II. The problem was traced to a moth stuck between a relay in the machine, which Hopper duly taped into the Mark II's log book with the explanation: “First actual case of bug being found.” Computer History Museum
Table of Contents


In this lesson you learned, about the Systems Development LiFe Cycle and the activities that occur at each stage of the life cycle, the importance of software testing and commonly used approaches, about testing levels and the types of activities performed at each level, and how the binary numbering system works and how it applies to computer programming.

Table of Contents