Software Dev Notes - 052808
Software Dev Notes - 052808
Software Dev Notes - 052808
1
Computer Software Development
INTRODUCTION TO SOFTWARE
Learning Outcomes:
Fundamentals of Software
Definition: Software refers to a set of instructions and programs that enable a computer or
electronic device to perform specific tasks. It encompasses the non-physical components of a
computer system, contrasting with hardware, which comprises the physical elements.
Essential Characteristics:
Instructions: Software provides step-by-step instructions for the hardware to execute
tasks.
Programs: Comprises executable code, scripts, and other software components.
Software Classification:
2
Computer Software Development
Development Software:
Definition: Facilitates the creation of software applications and systems.
Examples: Integrated Development Environments (IDEs) like Visual Studio, Eclipse.
Middleware:
Definition: Acts as a bridge between system software and application software.
Examples: Database management systems (MySQL, Oracle), web servers.
Firmware:
Definition: Software embedded in hardware to provide low-level control.
Examples: BIOS/UEFI in computers, firmware in IoT devices.
Utility Software:
Definition: Performs specific tasks related to system maintenance and optimization.
Examples: Disk cleanup tools, antivirus programs, backup software.
Factors Influencing Software Classification:
Functionality:
Criteria: The primary purpose and tasks the software performs.
User Base:
Criteria: Target audience, whether general consumers, businesses, or specialized users.
Compatibility:
Criteria: Interoperability with hardware, other software, and operating systems.
Customization:
Criteria: The extent to which the software allows user customization and configuration.
Deployment Model:
Criteria: Whether the software is installed locally or accessed through the cloud.
3
Computer Software Development
Helps users select the right software for their needs, optimizing resource utilization.
Interoperability:
Facilitates integration between different software components within a system.
Maintenance and Updates:
Simplifies the management of updates, patches, and maintenance activities.
Software Functionality
Software functionality refers to the capabilities and features that a software application or system
provides to end-users. It encompasses the tasks and operations the software can perform, aiming
to fulfill specific user needs and requirements.
Key Aspects of Software Functionality:
Core Features: Essential functionalities that form the backbone of the software.
Example: In a word processing software, core features include text editing, formatting, and
document saving.
Advanced Features: Additional capabilities that enhance the software's utility and user
experience.
Example: Advanced search and replace options in a text editor.
User Interface (UI): The graphical or command-line interface through which users interact with
the software.
Example: Graphical user interfaces (GUI) in applications like Microsoft Word.
Interoperability: The ability of the software to work seamlessly with other software or systems.
Example: File compatibility between different versions of the same software.
Categorization of Software Functionality:
Basic Functionality: Fundamental operations necessary for the software's primary purpose.
Example: Basic arithmetic operations in a calculator application.
Specialized Functionality: Specific features catering to unique user requirements.
Example: Advanced data analysis functions in spreadsheet software.
Automated Functionality: Tasks that the software can perform automatically without user
intervention.
Example: Automated data backup in a file management system.
4
Computer Software Development
Software Selection:
Software selection is the process of evaluating, choosing, and acquiring software solutions that
best meet the requirements and objectives of an individual or organization. It involves a
systematic approach to identifying the most suitable software to fulfill specific needs.
Key Aspects of Software Selection:
Needs Assessment: Identifying and documenting the specific requirements and
objectives for which software is needed. It lays the foundation for evaluating software
against defined criteria.
Compatibility: Ensuring that the selected software is compatible with existing hardware,
operating systems, and other software in use. This Prevents integration challenges and
enhances overall system efficiency.
Scalability: Assessing the software's ability to grow and adapt to changing needs over
time. Ensures that the software investment remains viable as requirements evolve.
Criteria for Effective Software Selection:
Usability: The ease with which users can learn and navigate the software. A user-friendly
interface contributes to increased productivity and user satisfaction.
Functionality: Ensuring that the software provides the necessary features to meet specific
requirements. The software should align with the identified needs and goals.
Cost-Benefit Analysis: Weighing the financial investment against the expected benefits and
long-term value. Enables informed decision-making based on a comprehensive assessment of
costs and returns.
5
Computer Software Development
Vendor Support and Reputation. Evaluating the reliability and reputation of the software vendor.
A reputable vendor enhances the likelihood of reliable support and updates.
1. Development: Creating custom software solutions in-house to meet specific and unique
organizational needs. Ideal for organizations with highly specialized requirements that cannot be
fulfilled by off-the-shelf solutions. Offers complete control over the development process. But
requires significant time, resources, and expertise and also Maintenance and updates become the
responsibility of the organization.
2. Purchase: Acquiring pre-built software from a third-party vendor to fulfill specific functions
or tasks. Its Efficient for widely used applications with established features, it Reduces
development time and costs compared to in-house development. However, it May include
unnecessary features or lack customization options and Dependence on vendor for updates,
support, and maintenance.
3. Leasing: Renting software on a subscription basis, typically paid periodically. Its Suitable for
organizations with changing software needs where it Reduces upfront costs and provides
flexibility in scaling. However, Long-term costs may exceed those of a one-time purchase and
also dependency on the leasing model and potential data access issues.
Costs: Evaluate both upfront costs and long-term expenses, including licensing, support, and
maintenance.
Compatibility: Ensure the software is compatible with existing hardware, operating systems,
and other software in use.
Scalability: Assess the software's ability to grow and adapt to changing needs over time.
Vendor Reputation: Consider the reputation and reliability of the software vendor, including
their support services.
Decision-Making Framework:
Needs Assessment: Identify and document specific requirements and objectives for the
software.
Usability and Functionality: Prioritize software that aligns with user needs and provides
necessary features.
6
Computer Software Development
Cost-Benefit Analysis: Weigh financial investment against expected benefits and long-
term value.
Vendor Evaluation: Assess the reputation, support, and reliability of potential software
vendors.
Purposes of Software
1. Definition:
7
Computer Software Development
8
Computer Software Development
9
Computer Software Development
10
Computer Software Development
Software Requirements
Learning Outcomes
By the end of the sub strand, the learner should be able demonstrate understanding of:
software requirements analysis
software specification
computer resources
installation platforms
user vendor agreements
Systematic process of gathering, documenting, and analyzing the needs, expectations, and
constraints that a software system must fulfill.
Key Terms:
Requirements Elicitation: The process of collecting information from stakeholders to
understand their needs and expectations regarding the software.
Requirements Analysis: Involves breaking down elicited information, identifying
dependencies, and organizing it into clear and actionable specifications.
User Stories: Narrative descriptions of software features and functionalities from an end-
user perspective.
Use Cases: Detailed scenarios describing how users interact with the system to achieve
specific goals.
Software Specification:
Software Specification is a detailed document that outlines the functionalities, features, and
constraints of a software system. It serves as a reference for developers, guiding the
implementation process.
Components of Software Specification:
A. Functional Requirements:
Definition: Descriptions of specific features and functions the software must provide.
Examples:
"The system must allow users to create, edit, and delete user profiles."
"The software must support real-time collaboration on shared documents."
B. Non-Functional Requirements:
11
Computer Software Development
Definition: Specifications related to performance, security, usability, and other quality attributes.
Examples:
"The software should load a webpage within 3 seconds under normal operating
conditions."
"The system must encrypt user data to ensure security during transmission."
C. User Interface Design:
Definition: Visual representation of how users will interact with the software.
Components:
Wireframes illustrating page layouts and navigation.
Mockups showcasing the visual design and branding.
Prototypes allowing for interactive exploration of the user interface.
D. System Architecture:
Definition: Technical specifications detailing the software's structure and components.
Includes:
High-level architecture diagrams illustrating major components and their interactions.
Database schema outlining data storage and relationships.
Integration points with external systems.
E. Data Specifications:
Definition: Definitions of data structures, formats, and handling within the software.
Details:
Database tables and fields, specifying data types and relationships.
Data flow diagrams illustrating how data moves through the system.
Validation rules ensuring data integrity.
12
Computer Software Development
C. Consistency:
Maintain uniformity in terminology, formatting, and representation throughout the document.
D. Traceability:
Establish links between requirements, ensuring that each is traceable throughout the development
process.
E. Flexibility:
Allow for future modifications and updates as the project progresses.
13
Computer Software Development
Keep the specification document up-to-date with changes in requirements or project scope.
C. Review and Validation:
Conduct regular reviews and validations with stakeholders to ensure accuracy and alignment
with expectations.
3. Computer Resources:
In the context of software requirements analysis, computer resources refer to the hardware
components and capabilities necessary for software development, deployment, and execution.
Evaluation in Software Requirements Analysis:
Processing Power: Consideration of the CPU's capacity to handle code execution and
computation tasks efficiently.
Memory (RAM): Assessment of the available RAM to support the development
environment and handle data during execution.
Storage: Examination of storage capacity and speed to accommodate project files,
databases, and ensure efficient access.
The software installation platform refers to the environment or infrastructure on which the
software will be installed and executed.
Factors in Software Requirements Analysis:
Compatibility: Ensuring that the software is compatible with the operating system,
hardware, and other software in the target environment.
14
Computer Software Development
User Accessibility: Considering how easily users can install and access the software on
different platforms.
System Requirements: Defining the minimum hardware and software specifications
necessary for installation.
5. User-Vendor Agreement:
The user-vendor agreement outlines the terms and conditions between the end-user and the
software vendor, including licensing, support, and contractual obligations.
Considerations in Software Requirements Analysis:
Licensing Terms: Defining how the software can be used, distributed, and the associated
costs.
Support Agreements: Outlining the level of support provided by the vendor, including
updates, patches, and technical assistance.
Contractual Obligations: Clarifying legal aspects such as data ownership, privacy, and
dispute resolution.
15
Computer Software Development
Software Design
1. Definition:
Software Design refers to the process of transforming user requirements into a well-structured,
feasible, and efficient solution. It involves making decisions on how the software will be built,
considering aspects like architecture, modules, interfaces, and data management.
2. Key Aspects of Software Design:
a. Architectural Design:
Definition: Architectural design focuses on defining the high-level structure of a software
system.
Role: It outlines components, their relationships, and the overall system organization. Decisions
made at this stage impact system performance, scalability, and adaptability.
b. Detailed Design:
Definition: Detailed design involves specifying how each component or module identified in the
architectural design will be implemented.
Role: It delves into the specifics of algorithms, data structures, and interfaces, providing a
blueprint for programmers to follow during coding.
c. User Interface Design:
Definition: User Interface (UI) design deals with creating an intuitive and aesthetically pleasing
interface for end-users.
Role: A well-designed UI enhances user experience, ensuring that the software is user-friendly
and meets the expectations of its intended audience.
d. Database Design:
Definition: Database design involves defining the structure and organization of the data storage
system.
Role: It addresses how data will be stored, accessed, and managed, ensuring data integrity,
efficiency, and security.
e. Algorithmic Design:
Definition: Algorithmic design focuses on designing efficient and effective algorithms to solve
specific problems.
Role: Well-designed algorithms contribute to the software's overall performance and
responsiveness.
3. Principles in Software Design:
a. SOLID Principles:
16
Computer Software Development
17
Computer Software Development
b. Design Patterns:
Definition: Design patterns are reusable solutions to common problems in software design.
Role: Provides proven templates for solving recurring design challenges, promoting best
practices.
6. Evolutionary Nature:
Iterative and Incremental:
Software design is often an iterative process, with designers refining and enhancing the design as
the project progresses.
Feedback Loops:
Continuous feedback from stakeholders, users, and developers helps refine the design based on
real-world usage and requirements.
7. Collaboration and Communication:
Cross-functional Collaboration:
Design involves collaboration between various stakeholders, including developers, UX/UI
designers, and project managers.
Documentation:
Comprehensive documentation is essential for conveying design decisions, rationale, and
guidelines to the development team.
18
Computer Software Development
a. Architectural Design:
Definition: Describes the high-level structure of the software system.
Details: Identifies major components, their relationships, and the overall organization of the
system.
Purpose: Provides a roadmap for the software's construction and evolution.
b. Interface Design:
Definition: Specifies how different components or modules will interact with each other.
Details: Defines the methods, parameters, and communication protocols between system
elements.
Purpose: Ensures consistency and interoperability among system components.
c. Data Design:
Definition: Details how data will be stored, accessed, and managed within the system.
Details: Specifies database structures, relationships, and data manipulation procedures.
Purpose: Ensures efficient data storage, retrieval, and management.
d. Component-Level Design:
Definition: Provides a detailed design for individual components or modules identified in the
architectural design.
Details: Includes algorithms, data structures, and interfaces for each module.
Purpose: Guides programmers during the coding phase, ensuring consistent implementation.
3. Characteristics of Effective Software Design Specifications:
a. Clarity:
Definition: The document should be clear and easily understandable by both technical and non-
technical stakeholders.
Importance: Facilitates effective communication and collaboration among team members.
b. Completeness:
Definition: The document should cover all aspects of the software design without leaving room
for ambiguity.
Importance: Prevents misunderstandings and ensures that every aspect of the design is
considered.
c. Consistency:
19
Computer Software Development
20
Computer Software Development
21
Computer Software Development
22
Computer Software Development
5. Flexibility:
Definition: Allowing for modifications and enhancements without major disruptions.
Considerations:
Implementing modular and loosely coupled components.
Using design patterns for adaptability.
Considering the potential for changes in requirements.
6. Performance:
Definition: Optimizing the software for efficient execution and resource utilization.
Considerations:
Efficient algorithms and data structures.
Minimizing resource-intensive operations.
Conducting performance testing and optimization.
7. Security:
Definition: Integration of measures to protect the software from threats and vulnerabilities.
Considerations:
Implementing secure coding practices.
Encrypting sensitive data.
Incorporating access controls and authentication.
8. Cost-Effectiveness:
Definition: Efficient use of resources to meet project goals within budget constraints.
Considerations:
Evaluating the cost of technology and tools.
Balancing features with development costs.
Anticipating long-term maintenance costs.
9. Usability:
Definition: Ensuring that the software is user-friendly and provides a positive user experience.
Considerations:
Conducting usability testing.
23
Computer Software Development
24
Computer Software Development
Ensuring security is an integral part of the software design process is crucial in today's landscape
where cyber threats are ever-present. Integrating security from the early stages helps build robust
and resilient systems. Here's a comprehensive approach to incorporating security into software
design:
1. Threat Modeling:
Definition: Identifying and evaluating potential security threats and vulnerabilities.
Integration Steps:
Conduct threat modeling sessions during the design phase.
Identify assets, entry points, potential threats, and mitigation strategies.
25
Computer Software Development
28