Professional Documents
Culture Documents
Software
2015.03.20
Suho Kwon(suho.kwon@gmail.com )
http://blog.naver.com/knix008
Software
Computer software or simply software is
any set of machine-readable instructions
that directs a computer's processor to
perform specific operations.
Computer software includes computer
programs, libraries and their associated
documentation. The word software is also
sometimes used in a more narrow sense,
meaning application software only.
Software is stored in computer memory
and is intangible, i.e. it cannot be touched.
01/24/2022 2
Characteristics of Software Project
Quality is the most important thing in software
development.
Release Manufacturing
01/24/2022 3
Coding Principles
Decoupling
Low coupling
Cohesion
High Cohesion
01/24/2022 4
Reuse
No duplication, One reason for changing
Modularity
01/24/2022 5
Modular Programming
01/24/2022 6
Software Complexity
Increase exponentially in complexity
01/24/2022 7
Refactoring
Improving Source Code Less Defect
Improve Readability Easy to understand
Improve Design Easy to modify
Remove duplication Reduce error
01/24/2022 8
Design Pattern
Reduce duplication
01/24/2022 9
Object-Oriented Programming
Object
A location in memory having a value and possibly referenced by an identifier. An object
can be a variable, a data structure, or a function.
In the class-based object-oriented programming paradigm, "object" refers to a particular
instance of a class where the object can be a combination of variables, functions, and
data structures.
In relational database management, an object can be a table or column, or an
association between data and a database entity (such as relating a person's age to a
specific person).
01/24/2022 10
Object-Oriented Thought Process
How to think?
01/24/2022 11
SOLID (Object-Oriented Design)
01/24/2022 12
Platform
A major piece of software, as an operating system, an
operating environment, or a database, under which various
smaller application programs can be designed to run.
01/24/2022 13
Software Framework
In computer programming, a software framework is an abstraction in
which software providing generic functionality can be selectively
changed by additional user-written code, thus providing application-
specific software.
A software framework is a universal, reusable software environment
that provides particular functionality as part of a larger software
platform to facilitate development of software applications, products
and solutions.
Software frameworks may include support programs, compilers, code
libraries, tool sets, and application programming interfaces (APIs) that
bring together all the different components to enable development of a
project or solution.
01/24/2022 14
Software Framework
Example
01/24/2022 15
Operating System History
01/24/2022 16
Software Framework
Frameworks contain key distinguishing features that
separate them from normal libraries :
Inversion of control : In a framework, unlike in libraries or normal user
applications, the overall program's flow of control is not dictated by the caller,
but by the framework.
Default behavior: A framework has a default behavior. This default behavior
must be some useful behavior and not a series of no-ops.
Extensibility : A framework can be extended by the user usually by selective
overriding or specialized by user code to provide specific functionality.
Non-modifiable framework code: The framework code, in general, is not
supposed to be modified, while accepting user-implemented extensions. In
other words, users can extend the framework, but should not modify its code.
01/24/2022 17
Platform vs. Framework
VS.
01/24/2022 18
Programming
What is programming?
01/24/2022 19
Better Programming
What makes a good code?
01/24/2022 20
Good Code
Everyone can make a code for computer. Few people can
make a code for human.
01/24/2022 21
Readability
Readability can make a big difference in understanding your
code.
01/24/2022 22
Code Review
Readability
Logic
Others…
01/24/2022 23
Coding Style
01/24/2022 24
Any Reference or Tool?
Embedded System Coding Standard : MISRA-C Based
01/24/2022 25
Detecting Bugs
01/24/2022 26
CI(Continuous Integration)
01/24/2022 27
CD(Continuous Delivery)
01/24/2022 28
Embedded System
An embedded system is a computer system with a dedicated
function within a larger mechanical or electrical system,
often with real-time computing constraints.
01/24/2022 29
Real-Time System
In computer science, real-time computing (RTC), or reactive
computing, is the study of hardware and software systems
that are subject to a "real-time constraint”.
Real-time programs must guarantee response within strict time
constraints, often referred to as "deadlines”.
01/24/2022 30
Super Loop(Big Loop)
Check and Run
01/24/2022 31
Event Loop
Each event has a priorities
01/24/2022 32
Real-Time Operating System
CPU Scheduling ( Task Scheduling )
Task : the smallest schedulerable unit – “Function”
Inter-Task Communication
Semaphore, Mutex, Message Queue, Event Flag, Signal,
Mailbox, etc.
Memory Management
Memory Pool
File System
NTFS, FAT32…
01/24/2022 33
RTOS
Example : RTX
01/24/2022 34
General Purpose OS
Linux
01/24/2022 35
General Purpose OS
Windows
01/24/2022 36
Do you want to make it short?
Balloon Effect
01/24/2022 37
Software Engineering
The study and an application of engineering to
the design, development, and maintenance of software.
“The application of a systematic, disciplined, quantifiable
approach to the development, operation, and maintenance
of software"
“An engineering discipline that is concerned with all aspects of
software production"
“The establishment and use of sound engineering principles in
order to economically obtain software that is reliable and works
efficiently on real machines.“
How to make a solution on time, within budget, meeting the
needs with good quality.
01/24/2022 38
Software Project
01/24/2022 39
Software Project Loss
01/24/2022 40
Why Fail and Success?
01/24/2022 41
Requirements
01/24/2022 42
Science vs. Engineering
01/24/2022 43
CMMI(Capability Maturity Model
Integrated)
01/24/2022 44
Process
Software Development Process
A division of software development work into distinct phases (or
stages) containing activities with the intent of better planning
and management.
01/24/2022 45
Software Development Process
Traditional Process Model : Waterfall
01/24/2022 46
When do you want to fix bugs?
01/24/2022 47
Other Processes
Spiral
01/24/2022 48
V-Model
01/24/2022 49
Other Processes
Iterative
01/24/2022 50
Estimation
Schedule?
01/24/2022 51
Incremental & Evolutionary
Modern Software Development Process Model
01/24/2022 52
Feature vs. Component
Component Development Feature Development
01/24/2022 53
Design
UML : Unified Modeling Language
01/24/2022 54
Views
01/24/2022 55
Skills
Practices in Everyday Life
01/24/2022 56
Agile
Agile Methodology
01/24/2022 57
Agile Process
Incremental & Evolutionary
01/24/2022 58
Agile Software Development
01/24/2022 59
Enterprise Agile
01/24/2022 60
Approaching Method
Requirement
Requirement
ss
WATERFALL
Design
Design
Implementatio
Implementatio
nn
Verification
Verification
4 444 :
Documents Documents Unverified Code Software
AGILE
01/24/2022 61
RUP(Rational Unified Process)
01/24/2022 62
The Cost of Defect
Remove defects as early as possible.
01/24/2022 63
Unit Test
A software testing method by which individual units of source
code, sets of one or more computer program modules together
with associated control data, usage procedures, and operating
procedures, are tested to determine whether they are fit for use.
Intuitively, one can view a unit as the smallest testable part of an
application. In procedural programming, a unit could be an entire
module, but it is more commonly an individual function or
procedure. In object-oriented programming, a unit is often an
entire interface, such as a class, but could be an individual method.
Unit tests are short code fragments created by programmers or
occasionally by white box testers during the development process.
It is also known as component testing.
01/24/2022 64
Why Unit Test?
Early bug removal
01/24/2022 65
Test Framework
01/24/2022 66
Howto
Fast, Independent, Small Steps, Continuous
TEST(sprintf, NoFormatOperations)
{
char output[5];
01/24/2022 67
Test Driven Development
Write Test First
01/24/2022 68
How to Achieve Software Quality?
Defect Detection Rates
01/24/2022 69
How to Achieve Software Quality?
Defect Detection Rates Estimation in XP
01/24/2022 70
Software Architecture
Software architecture is the high level structure of a
software system, the discipline of creating such structures,
and the documentation of these structures. It is the set of
structures needed to reason about the software system, and
comprises the software elements, the relations between
them, and the properties of both elements and relations.
01/24/2022 71
Knowledge
Depth Breadth
01/24/2022 72
Why Software Architecture?
How To?
01/24/2022 73
Abstraction
A technique for managing complexity of computer
systems. It works by establishing a level of complexity on
which a person interacts with the system, suppressing the
more complex details below the current level. The
programmer works with an idealized interface (usually well
defined) and can add additional levels of functionality that
would otherwise be too complex to handle.
01/24/2022 74
Partitioning
Problem Partitioning
01/24/2022 75
Software Reuse
Software Reuse Maturity Level
01/24/2022 76
Architectural Style
Pipe-Filter MVC(Model-View-Control)
Client-Server Peer-to-Peer
01/24/2022 77
Implementation Strategy
“T” Shape : Depth First Approach
Feature 1
01/24/2022 78
Software Craftsmanship – Clean Code
“There are two parts to learning craftsmanship: knowledge and
work. You must gain the knowledge of principles, patterns, practices,
and heuristics that a craftsman knows, and you must also grind that
knowledge into your fingers, eyes, and gut by working hard and
practicing.”
“Writing clean code is what you must do in order to call yourself a professional. There is no
reasonable excuse for doing anything less than your best.”
01/24/2022 79
Question & Answer
Thanks!!!
01/24/2022 80