Tuesday, May 27, 2014

การวัดคุณภาพของระบบ

http://hpc.ee.kmutnb.ac.th/~vara/perf/node119.html

ตัววัดประสิทธิภาพของระบบที่คงทนต่อความเสียหาย

ความสามารถของการคงทนต่อความเสียหายมีความสำคัญ ในการออกแบบระบบคอมพิวเตอร์ใดๆ ในการระบุความสามารถของการคงทนต่อความเสียหาย จำเป็นต้องมีความต้องการตัววัดประสิทธิภาพเพิ่มขึ้นหลายประการ ได้แก่ ความน่าเชื่อถือ (Reliability), ความสามารถในการคงการบริการ (Availability), ความปลอดภัย (Safety), ความสามารถในการสร้างประสิทธิผล (Performability), ความสามารถในการบำรุงรักษา (Maintainability), ความสามารถในการทดสอบ (Testability) โดยมีนิยามดังต่อไปนี้
  1. ความน่าเชื่อถือ (Reliability): ความน่าเชื่อถือของระบบ $R(t)$ เป็นฟังก์ชั่นของเวลา นิยามเป็นความน่าจะเป็นแบบมีเงื่อนไขของระบบที่จะทำงานอย่างถูกต้องตลอดช่วงเวลา $[t_0, t]$ โดยที่ระบบทำงานอย่างถูกต้องที่เวลา $t_0$ อีกนัยหนึ่งความน่าเชื่อถือ คือความน่าจะเป็นที่ระบบจะทำงานได้อย่างถูกต้องตลอดช่วงเวลาที่เลือกไว้ ความไม่น่าเชื่อถือ $Q(t)$ เป็นฟังก์ชั่นของเวลา นิยามเป็นความน่าจะเป็นแบบมีเงื่อนไขของระบบที่จะทำงานอย่างไม่ถูกต้องในช่วงเวลา $[t_0, t]$ โดยที่ระบบทำงานอย่างถูกต้องที่เวลา $t_0$ $Q(t)$ อาจถูกเรียกว่าเป็นความน่าจะเป็นที่ระบบจะทำงานล้มเหลวในช่วงเวลาที่เลือกไว้ ความน่าเชื่อถือเป็นตัววัดที่ใช้มากที่สุดในการระบุคุณลักษณะของระบบ ที่การล้มเหลวในการทำงานไม่สามารถยอมรับได้ หรือระบบที่ไม่สามารถซ่อมแซมได้ ตัวอย่างเช่น การประยุกต์ใช้งานในอวกาศ ช่วงเวลาการทำงานจะยาวนาน บางครั้งถึงสิบปี หรือการประยุกต์ใช้งานระบบคอมพิวเตอร์ในการควบคุมการบิน ช่วงเวลาการทำงานอยู่ในระดับชั่วโมง ความน่าเชื่อถือของการทำงานในช่วงดังกล่าวอยู่ในระหว่าง 0.9999 หรือสูงกว่า รูปแบบการแสดงความน่าเชื่อถือ อย่างสั้นสามารถทำได้โดยใช้เลขจำนวนเต็มแทนเลข 9   ตัวอย่างเช่น 0.9999999 แทนด้วย $0.9_7$ ความเข้าใจที่สำคัญประการหนึ่งคือความแตกต่างระหว่าง ความคงทนต่อความเสียหาย กับ ความน่าเชื่อถือ ความคงทนต่อความเสียหาย สามารถเพิ่มความน่าเชื่อถือได้ แต่ระบบที่คงทนต่อความเสียหาย ไม่จำเป็นต้องมีความน่าเชื่อถือสูง เราสามารถออกแบบระบบให้คงทนต่อความเสียหายทั้งในฮาร์ดแวร์ และ ซอฟต์แวร์ แต่ถ้าความน่าจะเป็นที่จะเกิดความล้มเหลวสูงมาก ความน่าเชื่อถือของระบบก็จะต่ำ เช่นเดียวกัน ระบบที่มีความน่าเชื่อถือสูงไม่จำเป็นต้องความคงทนต่อความเสียหาย ถ้าระบบออกแบบอย่างง่ายไม่ซับซ้อน และใช้อุปกรณ์หรือส่วนประกอบที่มีคุณภาพสูง ความน่าจะเป็นที่ระบบจะเสียหายย่อมต่ำ ดังนั้นความน่าเชื่อถือของระบบจึงสูงได้
  2. ความสามารถในการคงการบริการ (Availability): ตัววัดประสิทธิภาพที่สำคัญอีกประการหนี่งใน การแสดงถึงประสิทธิภาพของระบบในแง่ของความสามารถในการให้บริการ คือ ความสามารถในการคงการบริการ ความสามารถในการคงการบริการ $A(t)$ เป็นฟังก์ชั่นของเวลา นิยามว่าเป็นความน่าจะเป็นที่ระบบทำงานอย่างถูกต้อง และสามารถบริการตามฟังก์ชั่นได้ ณ. เวลา $(t)$ ความสามารถในการคงการบริการ แตกต่างจากความน่าเชื่อถือคือ ความน่าเชื่อถือนิยามในช่วงการทำงาน $[t_0, t]$ ในขณะที่ความสามารถในการคงการบริการนิยาม ณ. เวลา $(t)$ ระบบสามารถมีความสามารถในการคงการบริการสูง แม้ว่าจะเกิดการหยุดบริการบางครั้งในช่วงการทำงาน ถ้าช่วงเวลาดังกล่าวสั้นมากๆ หรืออีกนัยหนึ่งความสามารถในการคงการบริการ ขึ้นอยู่กับความสามารถในการทำงานของระบบ และความสามารถในการซ่อมระบบให้ทำงานได้ในเวลาอันสั้น การวัดอีกลักษณะหนึ่งของความสามารถในการคงการบริการ คือส่วนของเวลาที่ระบบทำงานตามฟังก์ชั่นอย่างถูกต้องเทียบกับเวลาทั้งหมด ถ้าเราต้องการโดยสารทางเครื่องบิน เราต้องการเครื่องบินที่มีความน่าเชื่อถือสูง ในทางกลับกัน ถ้าเราต้องการใช้โทรศัพท์เราต้องการระบบโทรศัพท์ที่มีความสามารถในการคงการบริการสูง
  3. ความปลอดภัย (Safety): ความปลอดภัย $S(t)$ คือความน่าจะเป็นที่ระบบจะทำงานอย่างถูกต้องตามฟังก์ชั่น หรือหยุดการทำงานตามฟังก์ชั่นโดยไม่ส่งกระทบเสียหายต่อระบบอื่น หรือส่งผลเสียหายต่อชีวิต และทรัพย์สินที่เกี่ยวข้องกับระบบ ความปลอดภัยเป็นการวัดคุณลักษณะ Failed-Safe ของระบบ ถ้าระบบทำงานไม่ถูกต้อง อย่างน้อยเราต้องการให้ระบบหยุดการทำงานอย่างปลอดภัย ตัวอย่างเช่นถ้าระบบนักบินอัตโนมัติไม่สามารถทำงานได้ ความเสียหายดังกล่าวก็ไม่ควรจะกระทบต่อการควบคุมด้วยมือปกติของเครื่องบิน หรือในกระบวนการผลิตทางเคมี วาล์วควบคุมจะมีการกำหนดตำแหน่งของวาล์วเมื่อเกิดการเสียหายหรือไม่มีกำลังในการทำงานเช่น Fail-Open หรือ Fail-Close เพื่อให้ระบบยังมีความปลอดภัย และไม่ก่อให้เกิดสภาพอันตราย เช่น ความดันเกินพิกัด ความปลอดภัยต่างจากความน่าเชื่อถือ เนื่องจากความน่าเชื่อถือเป็นความน่าจะเป็นที่ระบบจะทำงานอย่างถูกต้อง ส่วนความปลอดภัยเป็นเป็นความน่าจะเป็นที่ระบบจะทำงานอย่างถูกต้อง หรือหยุดการทำงานโดยไม่มีความเสียหาย
  4. ความสามารถในการสร้างประสิทธิผล (Performability): ระบบคอมพิวเตอร์ที่คงทนต่อความเสียหาย สามารถทำงานได้ตามฟังก์ชั่นในขณะที่มีการเสียหายของฮาร์ดแวร์ และซอฟต์แวร์ อย่างไรก็ตามถึงแม้จะทำงานได้ ระดับของประสิทธิภาพอาจลดลงจากสภาวะปกติ ตัวอย่างเช่น ในระบบคอมพิวเตอร์ที่มีตัวประมวลผลหลายตัว ระบบอาจคงทำงานได้แม้ว่ามีการเสียหายของตัวประมวลผลบางตัว แต่ประสิทธิภาพโดยรวมของระบบก็จะลดลงตามส่วน ในรูปของอัตราความสามารถในการประมวลผล หรือขนาดของหน่วยความจำ ในตัวอย่างนี้ถึงแม้ว่าระบบจะยังสามารถทำงานได้ ประสิทธิภาพก็ลดลง ความสามารถในการสร้างประสิทธิผล $P(t)$ ของระบบเป็นฟังก์ชั่นของเวลา นิยามเป็นคือความน่าจะเป็นที่ระบบจะมีประสิทธิภาพที่ระดับ $L$ หรือสูงกว่า ณ. เวลา $t$ ตัวอย่างของ ประสิทธิภาพที่ระดับ $L$ ได้แก่ระดับของประสิทธิภาพอาจเป็นจำนวนตัวประมวลผลที่ยังคงทำงานอยู่ Graceful Degradation คือการเสื่อมสภาพอย่างค่อยเป็นค่อยไป เป็นคุณลักษณะที่สำคัญอีกประการหนึ่ง Graceful Degradation เป็นความสามารถของระบบที่จะลดประสิทธิภาพการทำงานของระบบอัตโนมัติ ตามความเสียหายของฮาร์ดแวร์ และ ซอฟต์แวร์
  5. ความสามารถในการบำรุงรักษา (Maintainability): การออกแบบระบบคอมพิวเตอร์ทุกอย่างมีเป้าหมายเพื่อระบบสามารถบำรุงรักษาได้ ความสามารถในการบำรุงรักษาเป็นการวัดความสะดวกที่จะบำรุงรักษาระบบเมื่อเกิดความเสียหาย ถ้าจะกล่าวในรูปของการวัดเชิงปริมาณ ความสามารถในการบำรุงรักษา M(t) เป็นความน่าจะเป็นที่ระบบที่เสียหายจะสามารถฟื้นคืนกลับมาทำงานตามสภาวะปกติ ภายในระยะเวลา $t$ ได้ กระบวนการฟื้นคืนสภาพประกอบด้วยการหาต้นตอปัญหาที่เสียหาย การซ่อมและการนำระบบฟื้นคืนมาทำงานตามปกติ
  6. ความสามารถในการทดสอบ (Testability): การทดสอบหมายถึงการสอบสภาพการคงอยู่และคุณภาพบางประการในระบบ ตัวอย่างเช่น ตัวประมวลผลสมควรจะต้องทำงานได้สามพันล้านคำสั่งต่อวินาที เราอาจจะต้องออกแบบการทดสอบว่าตัวประมวลผลสามารถจะทำงานได้จริงหรือไม่ ความสามารถในการทดสอบ คือความสามารถที่จะทดสอบคุณลักษณะบางประการของระบบ
  7. ความสามารถในการพึ่งพา (Dependability): ความสามารถในการพึ่งพาเป็นการ รวมแนวคิดของตัววัดประสิทธิภาพทั้งหมดที่กล่าวมา ความน่าเชื่อถือ (Reliability), ความสามารถในการคงการบริการ (Availability), ความปลอดภัย (Safety), ความสามารถในการสร้างประสิทธิผล (Performability), ความสามารถในการบำรุงรักษา (Maintainability), ความสามารถในการทดสอบ (Testability) หรืออีกนัยหนึ่งเป็นการวัดคุณภาพการบริการของระบบ

Software Architecture

  • 1. LAYERED ARCH.
  • 2. MVC
  • 3. รู้จักกับ SOA

  • 1. LAYERED ARCH.

What is a layered architecture ?

A multilayered (software) architecture is using different layers for allocating the responsibilities of an application.
Well, this concept is not new, and it applies also to most real world organizations. Most of them work more or less the same way: they divide the tasks that are required to come up with a finished product (or service).
As an example, think about the way a restaurant works. The main actors are :
    • the customer
    • the waiter
    • the Chef
They all have different responsibilities that can be briefly described as below:
The customer:
    • decides what he’d like to eat
    • eats
    • asks for the bill
    • pays
The waiter:
    • takes the order
    • forward it to the Chef
    • serves the meal
    • brings the bill
    • clean the table
The Chef:
    • cooks (or gets the food out of the freezer)
It makes sense to have the waiter taking the customer’s order and asking the Chef to cook the desired meal. You wouldn’t let the customer go into the kitchen and take whatever he feels like having at anytime

Why a layered architecture ?

Now that you know what a layered architecture is, the reasons why it is a good idea to build your site / application following those principles must be pretty obvious.
    • clear separation of responsabilities — each layer being only responsible for itself
    • exposed workflow — as opposed to the spaghetti code we’ve all see way too many times
    • ability to replace one or several layers implementation with minimum effort and side effects.

Anatomy of a layered architecture

In practice, you need to know what the 3 main layers are:
    • the Data Access layer
    • the Business Logic layer
    • the Graphical User Interface layer

Data Access Layer — DAL

The Data Access Layer — DAL — is as its name implies the layer at which the data is processed. It’s typical CRUD operations. Create, Retrieve, Update and Delete.
The DAL is composed of one or many Data Access Object  (DAO)
The DAL is the lowest layer of our application. On top of it, is — in this simple example — the Business Logic Layer.

Business Logic Layer — BLL

The Business Logic Layer — BLL — is obviously where all the Business Logic is implemented.
Business logic is a non-technical term generally used to describe the functional algorithms that handle information exchange between a database and a user interface.
For small applications, the BL is pretty basic if / else clauses that determine which functions should be called. It might look something like this:
if user.firstname.lower()[:1] == "j":
    #do something with user
else:
    #do something else

Most of the time, we’ll have the basic CRUD operations. The Usermanager class should look like this:

class UserManager:
    def create(self,user):
        pass

    def retrieve(self,user):
        pass

    def update(self,user):
        pass

    def delete(self,user):
        pass

    #insert additional methods here

In order to talk to the DAL, the UserManager class has to instantiate a new UserDAO class

ตัวอย่าง Business logic (UserManager class) เรียกใช้ UserDAO
class UserManager:
    def __init__(self):
     self.dao = UserDAO()

    def retrieve(self,user)
        #perform some business logic here if needed
        userRetrieved = self.dao.retrieve(user)

        #perform additional business logic here if needed
        return userRetrieved
This is how the BLL and DAL are linked together. The UserManager calls the appropriate UserDAO method after having performed its Business Logic.

Graphical User Interface — GUI

The Graphical User Interface — GUI — is the only visible part of the application. It may have several representations:
    • html / css (+ javascript)
    • flash / flex
    • Silverlight / WPF
    • Cocoa / Cocoa touch
In short, the goal of the GUI is to collect the input data and pass it along to the Business Logic Layer and wait for the enriched data or success/failure message to come back, in order to provide a visual feedback that the action has been processed (flashing message, redirection to another page …).
How does that happen ? First, the GUI has to create a new BO with the input data:
userFromGUI = User("Jon","Doe","john.doe@example.com")
Then it passes it along to the appropriate method of the manager, in our case, the UserManager from the BLL userManager = UserManager()  
(เรียกใช้ BLL และใน BLL ค่อยไปเรียกใช้ DAL อีกที เพื่อทำ CRUD กับ Data)
#in this case we expect a User to be returned
userFromDB = userManager.retrieve(userFromGUI)
Then we process the data we’ve received: (แสดงผลผ่าน GUI)
if userFromDB is not None:
    print "Welcome back %s" % (userFromDB.firstname)
else:
    pint "Looks like we've no information about you."
In its simplest aspect, this is all the GUI has to do. Set the data, pass it along, and behave according to the data that has been returned.

__________________________________________________________________________________________________

Presentation, Business, and Data Layers


At the highest and most abstract level, the logical architecture view of any system can be considered as a set of cooperating components grouped into layers. The Figure shows a simplified, high level representation of these layers and their relationships with users.



MVC (Movel/View/Controller) vs 3-Tier

MVC ที่กำลังฮิตกันอยู่ช่วงนี้ มันเป็นอย่างเดียวกันกับ 3-Tier หรือเปล่า…?
ตอบ 3-Tier กับ MVC เป็นคนละเรื่องกัน

สถาปัตยกรรมแบบ 3-Tier 
      เป็นการออกแบบสถาปัตยกรรมของระบบ (System Architecture) โดยมีคอนเซปต์พื้นฐานคือการแบ่งแยกหน้าที่ความรับผิดชอบของแต่ละ tier ให้เด็ดขาดจากกัน ไม่ว่าจะเป็น…
  • Presentation Tier รับผิดชอบในการแสดงผลด้าน UI
  • Business Logic Tier รับผิดชอบในการประมวลผลด้าน business logic และ
  • Data Tier ดูแลในส่วนการจัดการฐานข้อมูล (ในกรณีของ SOA จะมี Service Tier เพิ่มเข้ามาเพื่อดูแลในส่วนการติดต่อสื่อสารกับ service อื่นๆ ซึ่งมีได้มากมายในระบบ)
MVC 
     เป็น design pattern สำหรับ Presentation Tier โดยสถาปัตยกรรมของ MVC คือ การแบ่งหน้าที่ความรับผิดชอบของ Presentation Tier โดยแยกส่วนระหว่าง View กับ Data อย่างชัดเจน
  • Model คือชั้นข้อมูลที่ได้รับการส่งต่อจาก Business Logic Tier
  • Controller คือชั้นควบคุม ที่เป็นตัวกลางระหว่าง User, View และ Model จะทำการควบคุมการทำงานของ Presentation Tier โดยการรับ Model และส่งไปที่หน่วยแสดงผล (View) ที่เหมาะสม รวมถึงรับ activity จาก User ด้วย
  • View คือชั้นการแสดงผล ที่ไม่ได้สนใจโครงสร้างข้อมูล มีไว้เพื่อแสดงผลตามเงื่อนไขของ Controller เท่านั้น

  • 3. รู้จักกับ SOA



ทำไมต้องทำ Software Architecture 



What's SOA ?



SOA's concept


https://www.youtube.com/watch?v=jL1oVENiYT8

Understanding SOA - Part 1 - Architecture


https://www.youtube.com/watch?v=0hyXOuvyq2Q


Understanding SOA - Part 2 - Technologies

https://www.youtube.com/watch?v=zNvyCUO0dyw

Monday, March 17, 2014

Software Engineering 3/56

Software Architecture (3/2556)



คณะ เทคโนโลยีสารสนเทศ  สาขาวิชา วิศวกรรมซอฟต์แวร์
แนวการสอนรหัสวิชา SWE202  ชื่อวิชา(ไทย) วิศวกรรมซอฟต์แวร์
ชื่อวิชา(อังกฤษ) Software Architecture  หน่วยกิต 3(2-2-5)

คำอธิบายรายวิชา
       การเก็บรวบรวมความต้องการของผู้ใช้ การวิเคราะห์และออกแบบระบบโดยใช้ยูเอ็มแอล การทดสอบระบบเฟรมเวิร์คและเอพีไอ สถาปัตยกรรมแม่ข่าย-ลูกข่าย การวิเคราะห์ ออกแบบและพัฒนาระบบแม่ข่าย-ลูกข่ายอย่างง่าย และเทคโนโลยีที่เกี่ยวข้องกับส่วนต่อประสานกับผู้ใช้


จุดประสงค์การเรียนรู้

1.เพื่อให้นักศึกษาเข้าใจแนวความคิดพื้นฐานของวิศวกรรมซอฟต์แวร์

2.เพื่อให้นักศึกษาสามารถวิเคราะห์และประยุกต์ใช้ความรู้การผลิตซอฟต์แวร์ เพื่อแก้ปัญหาที่เกิดขึ้นกับผู้ใช้ได้

ลำดับที่
เนื้อหาการเรียนรู้
เอกสารเพ่ิมเติม
Ref
1
  Introduction to Software Engineering
Ch1
2
  Requirement Engineering
Ch5
3
  Software Project Management
Ch4
4
  Software Process Model
Ch2
5
  แบบจำลองระบบ   
Ch7
6
  แบบจำลองระบบ (ต่อ)  
Ch7
7
  แบบจำลองระบบ (ต่อ)
Ch7
8
       download
Ch1-7

  << สอบกลางภาค Midterm >>


9
  UI Design

Ch11
10
  Implementation (Coding)

Ch12
11
  Implementation (Coding)

Ch12
12
  Testing  

Ch13
13
  Testing (ต่อ)


14
  Risk Management


15
  
  

<< สอบปลายภาค Final >>


เอกสารประกอบการสอน และเว็บไซต์อ้างอิง
             เอกสารเนื้อหา  




เกณฑ์การวัดผล คะแนนเต็ม 100 คะแนน
1. คะแนนระหว่างภาคเรียน                   ร้อยละ     30
- การเข้าเรียนละ             ร้อยละ      10
- แบบฝึกหัด /Quiz                             ร้อยละ      10
- โปรเจค                          ร้อยละ      10
2. คะแนนสอบกลางภาคเรียน
3. คะแนนสอบปลายภาคเรียน
4. คะแนนสอบปฎิบัติปลายภาค
ร้อยละ     20
ร้อยละ     30
ร้อยละ     20




Wednesday, February 26, 2014


Software Engineering (2/2556)





Software Engineering

ครั้งที่ 1 (5/6/2013) Introduction of Software Engineer
                            download PPT CH1
                            download PPT CH2
                            ตัวอย่าง Software Project
                            เฉลยคำถาม ครั้งที่ 1 
                                    - คุณภาพของซอฟต์แวร์

ครั้งที่ 2 (12/6/2013) Software Process Model 
                            download PPT CH3
                            download Dia Diagram Editor

                        Term Project
                            ข้อกำหนด TOR - SWE Mobile System
                            ข้อกำหนด TOR ร้านขายเสื้อผ้า

ครั้งที่ 3 (19/6/2013) Agile & System Software 
                        Present Agile
                        download PPT CH6 System Engineering
                        หลักการวาดยูสเคส    
                        แบบฝึกหัด
            
ครั้งที่ 4 (26/6/2013) Requirement Engineering
                        Download PPT CH7 Requirement Engineering        
                        ตัวอย่าง SRS

ครั้งที่ 5 (3/7/2013) Class Diagram
                        Download PPT CH8 Build the Model (Class diagram)

ครั้งที่ 6 (10/7/2013) Class Diagram & Sequence Diagram
                        Download PPT

ครั้งที่ 7 (17/7/2013) Database Design
                        Download PPT

ครั้งที่ 8 (24/7/2013) 
                        - สอบเก็บคะแนน (ปรนัย 15 ข้อ อัตนัย 2 ข้อ) เอาหนังสือเข้าได้  
                        - นำเสนอผลงานของแต่ละกลุ่ม กลุ่มละ 30 นาที 
                            (เอกสาร SRS + แผนภาพต่างๆที่อธิบายให้เข้าใจถึงการทำงานของระบบ )
                        - Lab : Download JDBC
                                  nbu.treefine.info

Midterm (Tue 6/8/2013) 
                        - อัตนัย 7 ข้อ (100 คะแนน 2 ชม.) 
                        - ชี้แจ้งข้อสอบ

ครั้งที่ 9 (7/8/2013)
            Class : แนวคิดการแปลง Analysis Model ไปเป็น Design Model = Design Engineering download PDF
            Lab : 1. Connect old project to the DB
                    2. Create Log in & Sign in page 

ครั้งที่ 10 (14/7/2013)
            Class : download PDF

ครั้งที่ 11
            Class :
            Lab :

ครั้งที่ 12 
            Class :
            Lab : ตัวอย่าง UI Click Here

            ข้อเสนอแนะการออกแบบ UI

ครั้งที่ 14 
             Class : Project Plan Download PPT


แหล่งข้อมูลเพิ่มเติม