Myth
Myth
S/w Myth: S/w Myths are belief about s/w & the process used to build it.
3 types of Myths
1)Management Myth
2)Customer Myth
3)Developer Myth
Managers with software responsibility, like managers inmost disciplines, are often under
pressure to maintain budgets, keep schedules from slipping, and improve quality.
We have standards and procedures for building software, so developers have everything they
need to know.
We have state-of-the-art software development tools; after all, we buy the latest computers.
Managers with software responsibility, like managers inmost disciplines, are often under
pressure to maintain budgets, keep schedules from slipping, and improve quality.
We have state-of-the-art software development tools; after all, we buy the latest computers.
A customer who requests computer software may be a person at the next desk, a technical
group down the hall, the marketing/sales department, or an outside company that has
requested software under contract.
In many cases,
The customer believes myths about software because software managers and practitioners
do little to correct misinformation. Myths lead to false expectations (by the customer) and,
ultimately, dissatisfaction with the developer.
A general statement of objectives is sufficient to begin writing programs -we can fill in the
details later.
I know what my problem is; therefore I know how to solve it. This primarily is seen evidently
because the clients do not have a firsthand experience in software development and they
think that it's an easy process
Myths that are still believed by software practitioners have been fostered(encouraged) by
over 50 years of programming culture.
During the early days of software, programming was viewed as an art form. Old ways and
attitudes die hard.
A malpractice seen is developers are that they think they know everything and neglect the
peculiarity of each problem.
Software engineering and software process are related concepts within the field of software
development, but they refer to different aspects of the overall software development lifecycle.
Software Engineering:
Software engineering also emphasizes the use of best practices, methodologies, and tools to ensure
that software projects are completed successfully, on time, and within budget. It involves
understanding the needs of stakeholders, defining software requirements, designing architecture
and components, implementing the code, testing thoroughly, and delivering a complete and
functional software product.
Software Process:
Software process, on the other hand, refers to the set of activities, methods, and practices that are
followed during the development of software. It outlines the step-by-step approach that a
development team should follow to create software in a systematic and organized manner. A
software process defines how tasks should be carried out, who is responsible for each task, and how
different tasks are coordinated.
Software processes are often described using software development methodologies or frameworks,
such as the Waterfall model, Agile methodologies (Scrum, Kanban), Spiral model, etc. These
methodologies provide guidelines on how to manage the software development lifecycle, from
requirements gathering to deployment and maintenance. They prescribe the order of activities, the
interactions among team members, and the feedback loops to ensure that the software
development process is effective and efficient.
In essence, software engineering deals with the principles and practices of creating high-quality
software solutions, while the software process deals with the systematic approach and
methodologies used to guide the development of software. Both concepts are crucial in ensuring
that software projects are successful, well-organized, and deliver the desired outcomes.
Software Engineering:
Focus: It emphasizes the systematic design, development, and maintenance of software systems
using engineering principles.
Activities: Involves a wide range of activities including requirements analysis, design, coding, testing,
documentation, and maintenance.
Roles: Involves various roles like software engineers, architects, testers, and project managers.
Output: Produces a complete and functional software product ready for deployment.
Software Process:
Focus: It outlines the structured approach, methods, and practices for carrying out software
development.
Goal: Aims to guide the team in an organized way to ensure the successful completion of software
projects.
Activities: Prescribes the sequence of activities, their coordination, and responsibilities within the
development lifecycle.
Emphasis: Focuses on the procedural aspects of development, such as the order of tasks and
communication flow.
Roles: Defines roles, responsibilities, and interactions among team members, often including roles
like product owner, Scrum Master, etc.
Output: Results in a structured and controlled approach to software development, aligning with the
chosen methodology.
For software design, the goal is to divide the problem into manageable pieces.
5.5M
725
OOPs Concepts in Java
These pieces cannot be entirely independent of each other as they together form the
system. They have to cooperate and communicate to solve the problem. This
communication adds complexity.
Note: As the number of partition increases = Cost of partition and complexity increases
Abstraction
An abstraction is a tool that enables a designer to consider a component at an
abstract level without bothering about the internal details of the implementation.
Abstraction can be used for existing element as well as the component being
designed.
1. Functional Abstraction
2. Data Abstraction
Functional Abstraction
Functional abstraction forms the basis for Function oriented design approaches.
Data Abstraction
Details of the data elements are not visible to the users of data. Data Abstraction
forms the basis for Object Oriented design approaches.
Modularity
Modularity specifies to the division of software into separate modules which are
differently named and addressed and are integrated later on in to obtain the
completely functional software. It is the only property that allows a program to be
intellectually manageable. Single large programs are difficult to understand and read
due to a large number of reference variables, control paths, global variables, etc.
Advantages of Modularity
Disadvantages of Modularity
Modular Design
Modular design reduces the design complexity and results in easier and faster
implementation by allowing parallel development of various parts of a system. We
discuss a different section of modular design in detail in this section:
The use of information hiding as design criteria for modular system provides the
most significant benefits when modifications are required during testing's and later
during software maintenance. This is because as most data and procedures are
hidden from other parts of the software, inadvertent errors introduced during
modifications are less likely to propagate to different locations within the software.
Strategy of Design
A good system design strategy is to organize the program modules in such a
method that are easy to develop and latter too, change. Structured design methods
help developers to deal with the size and complexity of programs. Analysts generate
instructions for the developers about how code should be composed and how pieces
of code should fit together to form a program.
1. Top-down Approach
2. Bottom-up Approach
1. Top-down Approach: This approach starts with the identification of the main
components and then decomposing them into their more detailed sub-components.
2. Bottom-up Approach: A bottom-up approach begins with the lower details and
moves towards up the hierarchy, as shown in fig. This approach is suitable in case of
an existing system.
Software Design
Software design is a mechanism to transform user requirements into some suitable
form, which helps the programmer in software coding and implementation. It deals
with representing the client's requirement, as described in SRS (Software
Requirement Specification) document, into a form, i.e., easily implementable using
programming language.
The software design phase is the first step in SDLC (Software Design Life Cycle),
which moves the concentration from the problem domain to the solution domain. In
software design, we consider the system to be a set of components or modules with
clearly defined behaviors & boundaries.
5.2M
863
Polymorphism in Java | Dynamic Method Dispatch
1. Correctness:Software design should be correct as per requirement.
2. Completeness:The design should have all components like data structures,
modules, and external interfaces, etc.
3. Efficiency:Resources should be used efficiently by the program.
4. Flexibility:Able to modify on changing needs.
5. Consistency:There should not be any inconsistency in the design.
6. Maintainability: The design should be so simple so that it can be easily
maintainable by other designers.
The design process in software engineering encompasses a series of steps and activities aimed at
transforming high-level requirements into a well-structured and feasible software solution. Here are
some key features of the design process in software engineering:
Problem Understanding: The design process begins with a clear understanding of the problem or
requirements that the software is intended to address. This involves collaborating with stakeholders
to gather and analyze their needs.
Requirements Analysis: The design process involves a thorough analysis of the gathered
requirements. This includes identifying functional and non-functional requirements, as well as any
constraints or limitations.
System Architecture: Designing the system's architecture is a critical phase. This involves defining the
overall structure of the software, including high-level components, their relationships, and
interactions.
Component Design: Once the architecture is in place, the design process moves to defining the
detailed design of individual components or modules. This includes specifying interfaces, data
structures, algorithms, and interactions.
Data Design: Designing the data structures that the software will use is an essential aspect of the
process. This includes database design, data modeling, and data flow diagrams.
Interface Design: Designing user interfaces (UI) and application programming interfaces (APIs) is
important for creating user-friendly software and ensuring proper communication between different
parts of the system.
Algorithm Design: Depending on the nature of the software, designing efficient algorithms for tasks
such as data processing, sorting, searching, and optimization might be necessary.
Security and Privacy: The design process includes considerations for security and privacy measures to
protect sensitive data and ensure the software's robustness against potential threats.
Quality Attributes: Designing for quality attributes such as performance, scalability, reliability,
maintainability, and usability is an integral part of the process.
Patterns and Principles: Applying design patterns and principles, such as SOLID principles, helps
create maintainable and flexible software architectures.
Trade-offs and Decisions: The design process often involves making trade-offs between conflicting
design goals or constraints. Decisions about design alternatives and compromises are crucial.
Prototyping: In some cases, creating prototypes of the software or specific features can help validate
design decisions and gather user feedback early in the process.
Documentation: Proper documentation of the design decisions, rationale, and architectural choices is
essential for communicating the design to other team members and for future reference.
Review and Validation: Regular design reviews and validations with stakeholders help ensure that the
design aligns with the requirements and addresses potential issues before implementation.
Iteration and Evolution: The design process is iterative, allowing for adjustments based on feedback
and changing requirements. Designs may evolve as the team gains a deeper understanding of the
problem domain.
Tool Utilization: Various design tools and software, such as modeling tools, diagramming software,
and version control systems, are used to aid in the design process.
Alignment with Development: The design process lays the foundation for the development phase,
providing developers with a clear roadmap for implementation.
Traceability: The design process ensures that design decisions are traceable back to the initial
requirements, enabling accountability and transparency.
Continuous Improvement: As the software is developed and deployed, the design may need to be
refined based on real-world usage and feedback, supporting continuous improvement.
Overall, the design process is a structured approach that guides the creation of software solutions,
from initial concept to detailed specifications. It involves a combination of technical expertise,
creativity, and collaboration to achieve software that meets user needs and quality standards.
https://www.tutorialride.com/software-engineering/software-process-framework.htm