You are on page 1of 80

How to Make a Good

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

Business vs. Software

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

 Easy to add new feature, Easy to modify

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

 Coding Rule, Style, Standard, Convention


 MISRA-C : Automotive Coding Convention

 Test Script, Test Pass/Fail, Test Coverage

 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

Debug Later Programming

Programming with Unit Test

01/24/2022 65
Test Framework

01/24/2022 66
Howto
 Fast, Independent, Small Steps, Continuous

TEST(sprintf, NoFormatOperations)
{
char output[5];

memset(output, 0xaa, sizeof output);


TEST_ASSERT_EQUAL(3, sprintf(output, "hey"));
TEST_ASSERT_EQUAL_STRING("hey", output);
TEST_ASSERT_BYTES_EQUAL(0xaa, output[4]);
}

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

Knowledge for SW Architect

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

You might also like