資訊系統 民國百年年序 問題因應

Post on 11-Jan-2016

58 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

資訊系統 民國百年年序 問題因應. 行政院主計處電子處理資料中心 宣導團隊 (02)2380-3878 anne0105@dgbas.gov.tw 宣導網址 http://y100.dgbas.gov.tw. 目錄. 壹、前言 貳、釋疑 參、工作時程規劃 肆、因應步驟 伍、委外考量 陸、 緊急應變 處理 柒、結論. 附錄. 各資訊系統 原始碼 清查表. 各程式語言 之日期關鍵 字詞一覽表. 資料庫 的清查. 搜尋關鍵 字詞的工具. 壹、前言. 國人環境因素考量,以民國年份顯示紀年 或可 能 仍以 2 位數規劃與設計民國年欄位,導致 - PowerPoint PPT Presentation

TRANSCRIPT

資訊系統民國百年年序

問題因應

行政院主計處電子處理資料中心 宣導團隊 (02)2380-3878 anne0105@dgbas.gov.tw

宣導網址 http://y100.dgbas.gov.tw

2

壹、前言貳、釋疑參、工作時程規劃肆、因應步驟伍、委外考量陸、緊急應變處理柒、結論

目錄

3

附錄

各資訊系統原始碼清查表

各程式語言之日期關鍵字詞一覽表

資料庫的清查

搜尋關鍵字詞的工具

4

壹、前言

國人環境因素考量,以民國年份顯示紀年或可能仍以 2 位數規劃與設計民國年欄位,導致錯誤顯示依程式文數字右靠的邏輯,民國 100年呈現「 00」錯誤計算如民國 100年有人退休年資( 00年- 70年 = -70年),再乘以退休基數,依會計常識,負數的金額代表負債!

此即所謂的「資訊民國百年問題」

5

解說百年蟲舊型電腦的記憶體及儲存空間有限撰寫程式時為了節省空間,把日期記成 "YYMMDD"

Dim iYear, iMonth, iDayiYear = CInt(Left(dtNow, 2))+1911iMonth = Month(dtNow)iDay = Day(dtNow)

dtNow char(06)

6

00/08/01

00/09/30

00/09/17

00/09/18

00/09/18

00/09/18

00/09/18

○○

○○

005123458

○○

實例

民國 100年查詢銀行帳戶之交易明細,會發生什麼情形 ?

7

貳、釋疑

民國年欄位資訊的用途資料的儲存 ( 如出生欄位 ) 、計算 ( 如程式中的公式 ) 、顯示( 如螢幕 ) 、印表 ( 如証明單、收費單…等 )

民國百年問題只發生在資訊系統它不像 Y2K(千禧年危機 ) 涉及硬體設計、操作系統 OS、程式語言、與業務資訊應用系統,甚至發生於嵌入式設備

民國百年問題只發生在我國百年問題雖比千禧年的問題簡單許多,衝擊性亦輕,但卻也不容等閒視之。因為百業電腦化,且涉及國情習慣

Y2K時未「一併處理民國百年」問題人事更迭,或許在電腦年序可能的問題上沒有特別留意欄位長度的陷阱,仍或可能習慣性地使用 2 位數

極少例子與硬體或軔體有關,亦宜檢視

8

可能的風險

社會觀感、民眾權益醫療系統

工廠程控

金融系統

稅務系統

司法系統 電信系統

9

如何面對

需要處理的問題只是一件小事但涵蓋範圍可是很龐大認為是一樁危機但如期完成則是轉機

成立專案小組確定業務與資訊單位合作,尤其要高階主管支持專案成員中最好有熟悉系統、程式和業務者決定清倉重點優先序確實執行清倉、風險評估、修正與測試

需要擔心的事情規劃適當時程,及早因應事先擬定緊急應變處理,降低風險

10

參、工作時程規劃

專 案 管 理清倉 影響評估 修正 上線測試

緊急應變處理

自行維護 委外or

11

規劃工作時程之原則

視業務系統之多寡與繁複、業務影響大小等因素,建議時程可按後續說明之處理程序步驟,採日期倒推法規劃最好有 2 至 3 個月的緩衝期作為測試後的觀察期,以處理遺漏部分最好在民國 99 年 9 月底前全部完成

時程 完成項目98.10 組成專案團隊、宣導

98.11~98.12 全面清倉、影響評估完成99.01~99.06 修正、測試完成99.07~99.09 取代完成,應付失漏或突發狀況

辦理完成委外作業

12

肆、因應步驟

資訊技術演進神速, 2000年以前,應用系統平台多屬傳統主機型態,程式語言多集中於COBOL 、 FORTRAN等,因應方法單純今日歷經 Client-Server 、 Web-Base 、 Web2.0等規劃或設計風潮演化,使用軟體語言工具很多

建議各機關必須針對個別軟體環境分類,搜集所使用的各種軟體語言工具的日期年份的習慣性程式寫法;找出關鍵字詞,彙成關鍵字詞庫,以之當 key 進行原始碼的搜尋,找出有民國年的欄位,然後修正、測試和取代舊程式

13

因應步驟 (接續 )

針對程式及資料庫,其步驟說明如下: 一、清查二、分類三、搜尋四、修正五、測試六、正式上線

14

一、清查工作內容

1.原碼程式,分:(1)需編譯者(2)直譯者按「各資訊系統原始碼清查表」全面清查

2.資料(庫)

15

二、分類工作內容

1.將各資訊系統原始碼依程式語言工具歸類

2.搜集有關民國年的各資訊系統,及該程式語言工具寫法,擬出關鍵字詞( 含運算的公式 )

3.彙總各資訊系統關鍵字詞成關鍵字詞檔

4.可參考「各程式語言之日期關鍵字詞一覽表」

16

三、搜尋工作內容

搜尋方式有二途徑:1.從原碼找起(1)逐步以一個資訊系統的原碼檔為對象(2)依關鍵字詞搜尋有無民國年的定義或公式

2.從結果異常找起(1)建立一個測試環境,系統年份設定為2011(2)按功能或系統分類,測試民國年份是否正

常顯示 100年

17

四、修正工作內容

1.執行修正前,務必先作好原始程式碼完整備份及擬妥回復程序;避免修正或測試失敗

2.執行修正與測試的日期宜選在假日;避免失敗而影響正常作業

3.team work狀況下,宜妥善分配 team member負責修正之程式群,避免重覆修正,免除版本控制之問題

4.修正原始程式碼,並應記錄5.若原碼程式檔非直譯語言,需重新編譯執行

檔至原執行檔所在之目錄夾

建議於測試環境執行

18

五、測試工作內容

1.建立測試環境為之( 與正式作業分開為宜 )

2.檢視相關的儲存、計算、顯示、印表…等功能是否無誤

19

六、正式上線工作內容

1.確認測試成功後,上線至正式系統,完成原始程式碼修正作業

資料庫部份: HOW使用關鍵字詞搜尋資料庫!

20

Ps :常見的困難無工具可用,如何有系統地搜尋:建議仿 windows 檔案搜尋方式;先設定 Source 置放之程式目錄夾為尋找範圍,再以 keyword一一搜尋 ( 閱讀時需在適當的編輯器 )或寫一簡單程式,以關鍵字詞檔表列搜尋產出對應的原碼檔名和關鍵字,再從原碼檔名逐檔修正 ( 較麻煩 ) 。EX :檢查檔案字串程式( 免費的、 IMC 開發 )

或如使用有料的 UltraEdit、或免費的編輯器 NOTEPAD+ + 搜尋關鍵字詞。

版本落差:原始碼已遺失,或維護版本已經沒有記錄或可由儲存、計算、顯示、印表…等功能逆推回去或使用反組譯工具還原 ( 麻煩,不保證 100%,且需專業 )

建議先利用測試環境,從結果異常找起的方法搜尋完全委外:建議仿版本落差方式,瞭解可能的民國年呈現的業務資訊作業,與委外廠商確認或只好再專案委外辦理。此外,與各委外的廠商連繫,瞭解該系統的民國年設計模式,以為奧援。

21

伍、委外考量

尋求委外服務之考量委外參考事項如何因應委外經費問題

22

尋求委外服務之考量

自行維護

委外或

人員充足

時間足夠

現有資訊人員已培養其他部門同仁

系統不大加派人手部份委外

原廠商有能力、人力支援修正作業

另委請其他信譽良好的廠商修正

排擠其他業務經費支應

原委外開發

經費足夠已於 99年編列預算

23

委外參考事項 (1/2)

委外廠商是否有充裕的支援? 充裕的人力 瞭解該項業務的能力與經驗 充足的時間 純熟的技術能力 後勤支援能力 委外廠商是否能協助解決民國百年問題?1.委外服務之專案管理能力

執行專案能力 承包專案的經歷

2.委外服務供應商之替代方案 如期完成與保證 超過時程的應變方案

24

委外參考事項 (2/2)

3.如何篩選委外廠商 熟悉本系統架構、程式語言的廠商 具備專案能力的廠商 具有經驗且尚有餘力的廠商 負責且風評佳(實績) 收費合理項目清楚

建議書徵求文件應包含哪些項目? 完全更正責任 範圍的釐定

評估、檢視、更正、測試哪些系統? 限時完成與罰則 工具的應用及費用的涵蓋 本身所能提供之機器設備、人力時間配合等等 廠商資格 廠商提出具體解決程序與處理方法的計畫

25

如何因應委外經費問題 (1/2)

是否有維護合約?是 否

建議於今年底,提早辦理明 (99)年的維護,並將百年序問題列維護合約中,且要求於 99年04月之前完成檢視、更正及測試

則只能在既有經費中調整優先順序,以辦理委外

26

如以委外處理本案,如何計價?依據採購法計價規定,或採總價法或採按件數計價,以所費的人月計價建議單位先了解廠商處理步驟、方法,然後估算人月,會有清楚且合理的計價方式個人認為這純是清查和修改的工作,工具使用恰當,則只是人力使用,技術門檻不高,計價不宜太高

如何因應委外經費問題 (2/2)

27

陸、緊急應變處理

目的減少百年蟲風險,以確保正常運作

再完備的測試也可能有疏漏一旦發生危機進行替代作業

緊急因應處理在日期資料顯示或印出之前,寫一可檢查民國年的 API程式,以轉換欄位位數暫時因應僅為治標不治本的緊急因應方法,且時間不宜拖延太久因為尚有儲存民國年欄位資訊的資料檔或資料庫需要更正,若直接於程式中引用計算,仍會出現百年問題

28

柒、結論

民國百年問題只發生在國內基於國情,政府機關提供民眾的資訊係採民國記年,國際資訊業者不一定會關注這個課題

及早正視,速謀動員改正政府資訊多少具有公文書特質,必須為民眾所信賴,自然必須正確無誤

29

End

敬請指教

Q & A

相關資料下載處https://itschool.dgbas.gov.tw/epaper/980702/index2.htm

30

各資訊系統原始碼清查表

系統名稱 功能模組程式 資料庫 檢測結果 因應方法

檢測項目:民國年欄位長度檢測期限:修正期限:負責同仁:

31

資料庫的清查

先確認儲存「日期」所採用之資料類型為何,及欄位長度是否足夠配合擴充欄位長度

資料欄位類型 處理方式

西元年方式

無民國百年問題,不需變動

字元字串

如為日期欄位,原長度為 6位,遇民國百年時會遭截斷,需將長度擴充為 7位以上

如為年度欄位,原長度為 2位,同理,需將長度擴充為 3位以上

數值

資料型別設定為 int,欄位長度不需擴充

因為 int值域範圍為 -2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647),可以容納 7位長度的值

32

各程式語言之日期關鍵字詞一覽表Java、JSP程式語言之日期關鍵字詞

A SP、V B程式語言之日期關鍵字詞

A SP.NET程式語言之日期關鍵字詞

D ELPHI程式語言之日期關鍵字

33

Java 、 JSP 程式語言之日期關鍵字詞

程式語言 與日期有關的語法 搜尋之關鍵字

任何語言 常見以「民國年 =西元現年 -1911」計算公式 ( 任何程式語言均採用 )

搜尋「 1911 」

JAVA 、JSP

1. Date date1 = new Date(); 2. SimpleDateFormat dateFormat = new

SimpleDateFormat("yyyyMMddHHmmss");3. Calendar date =

Calendar.getInstance(TimeZone.getTimeZone("GMT+8"));

4. GregorianCalendar gcl = new GregorianCalendar();

year=gc1.get(Calendar.YEAR);  

1. Date2.SimpleDateForm

at3. Calendar4.GregorianCalend

ar或 YEAR

JavaScript

1. var today=new Date();2. getYear(), 取得 (西元年 -1900)(97-11=民國

86 年 )

1. Date2.11

VBScript

1. Dim myDateString myDateString = Date()2. d="April 22, 2001" if IsDate(d) then document.write(CDate(d)) end if3. document.write(Now)

1. Date2. IsDate 或 CDate3. Now

34

ASP 、 VB 程式語言之日期關鍵字詞

程式語言 與日期有關的語法 搜尋之關鍵字

ASP

1.tname1 = "pc_res_"+cstr(year(date())-1911)

2.writetime = year(now) & "/" & month(now) & "/" & day(now) & " " & hour(now) &":" & minute(now) & ":" & second(now)

3.CDate(now( )+2)4.IsDate("December 31,1999")

1.Date 或year2.now3.CDate4.IsDate

VB

1.Dim dtmTest As Date dtmTest = DateValue(Now)2.Dim MyDate MyDate = Date3.Dim YourDate, NoDate, MyCheck YourDate = #2/12/69#: NoDate =

"Hello"MyCheck = IsDate(MyDate)     ' 傳回 True

MyCheck = IsDate(NoDate)     ' 傳回 False

4.intYear = Year(Now) ' intYear = 2009

1.DateValue 或 Now

2.Date3.IsDate4.Year

35

ASP.NET 程式語言之日期關鍵字詞

程式語言 與日期有關的語法 搜尋之關鍵字

ASP.NET 之C#

1.DateTime d1 = DateTime.Now;2.string date = "01/08/2008"; DateTime dt =

Convert.ToDateTime(date);

1.DateTime 或Now

2.ToDateTime

ASP.NET 之VB.NET

1.Dim d1 As DateTime = DateTime.Now

2.Dim convertedDate As Date convertedDate =

Convert.ToDateTime(value)

1.DateTime 或Now

2.ToDateTime

ASP.NET 之C++

1.DateTime d1 = DateTime::Now;

1.DateTime 或Now

ASP.NET 之J#

1.DateTime d1 = DateTime.get_Now();

1.DateTime 或Now

Foxpro

1.DATE() 求當前日期 ex: 2009-02-03

2.DATETIME() 求當前日期和時間 ex: 2009-02-03 0 : 22 : 33am

1.DATE2.DATETIME

36

DELPHI 程式語言之日期關鍵字

與日期有關的語法 搜尋之關鍵字1. lSendTime.Caption := DateTimeToStr(Now);2. slReplyContent.Add(CurUserID + ' ' +

CurUserName + ' 於 ' + FormatDateTime('yyyy/mm/dd hh:nn:ss', Now) + ' 的回覆內容 :');

3. var d1, d2: TDate; begin

d1 := StrToDate('09/01/2000'); d2 := StrToDate('09/01/2001'); d3 := round(d2-d1); Showmessage(IntTostr(d3)); end;

4. var aa,bb,cc:word; tt:tdatetime; decodedate(now,aa,bb,cc); tt:=encodedate(aa,bb,cc);5. now,date,time :現在的日期時間 Label1.Caption := 'Today is ' + DateToStr(Date); Label1.Caption := DateTimeToStr(Now); Caption := TimeToStr(Time);6. if Chart1.BottomAxis.IsDateTime then...

1.DateTime 或Now

2.FormatDateTime 或 Now

3.TDate 或StrToDate

4.tdatetime 或 decodedate或 Encodedate

5.now 或 date 或time

6.IsDateTime

37

搜尋關鍵字詞的工具

檢查檔案字串

UltraEdit

Notepad++

38

壹、使用「檢查檔案字串」搜尋關鍵字詞簡介:行政院主計處電子處理資料中心開發專用於搜尋資料夾中搜尋檔案是否有百年問題的關鍵字需配合其他編輯器使用( 預設使用 Notepad++編輯器 )搜尋到的檔案及關鍵字配對會以清單顯示可雙點搜尋結果,直接開啟編輯器進行檢視或修改

39利用「檢查檔案字串」工具

Step 1 : 開啟「檢查檔案字串」工具 選擇欲檢查的目錄所在的磁碟 在「檢查目錄」區選擇欲檢查的

目錄 在「檢查檔案的檔名」區輸入或選擇欲檢查的檔案的檔名的樣式( 預設 *.*)

使用加入字串及移除字串按鈕來增刪欲「比對的字串」清單

確認 ( 或選擇 ) 編輯器的絕對路徑

按「開始檢查」按鈕,開始檢查

40

Step 2 : 滑鼠雙點清單中某筆結果,對該筆檔案進行檢視或編輯

找到的字串

利用「檢查檔案字串」工具

41

貳、使用 UltraEdit 搜尋關鍵字詞簡介文書編輯器提供超強的文字檔或任何原始程式檔編輯、預視、列印功能提供直接編輯十六進位碼功能可編輯 HTML 檔案,以彩色顯示 HTML標記,方便網頁編輯可同時開啟多個檔案編輯提供編譯 java原始程式檔功能 提供多重檔案搜尋及多重檔案取代,一併搜尋目錄夾下所有子目錄夾非免費軟體

42

Step 1 、開啟UltraEdit 工具,選擇「搜尋」-「多重檔案搜尋」

利用 UltraEdit搜尋

43

Step 2 、輸入搜尋關鍵字,如:「 Calendar 」,選擇 source置放之程式目錄夾,按「搜尋」按鈕

利用 UltraEdit搜尋

44

Step 3 、搜尋完成,搜尋之結果在下方窗格

利用 UltraEdit搜尋

45

Step 4 、下方窗格右邊之捲軸,拉至最尾端,顯示共找到之次數及檔案個數

利用 UltraEdit搜尋

46

Step 5 、點選搜尋到「 Calendar 」之某一程式檔「 BackupQ.java 」, 上方窗格會自動開啟「 BackupQ.java 」原始程式檔,即可開始修正程式碼

利用 UltraEdit 搜尋

47

參、使用 Notepad++ 搜尋關鍵字詞簡介:文書編輯器程式語法高亮度顯示及語法摺疊功能高亮度括號及縮排輔助強大的搜尋及取代功能若有彩色印表機,可以把原始碼以多種顏色列印出來( 列印所見即所得 )可以同時開啟多頁面來編輯 ( 支援同時編輯多重文件 )免費的編輯器http://notepad-plus.sourceforge.net/tw/site.htm

48

Step 1 、開啟Notepad++ 工具,選擇「尋找」-「搜尋目錄」

利用 Notepad++搜尋

49

Step 2 、在尋找目標欄輸入搜尋關鍵字,如:「 PF_ADMINISTRATOR 」

利用 Notepad++搜尋

50

Step 3 、在資料夾欄選擇欲搜尋之目標資料夾

按一下 按鈕即跳出瀏覽資料夾的視窗

利用 Notepad++搜尋

51

Step 4 、勾選包含子目錄,按下全找按鈕開始搜尋

利用 Notepad++搜尋

52

Step 5 、搜尋完成,搜尋之結果在下方窗格

圖例:找到 223 筆資料,散佈於 114 個檔案中

利用 Notepad++搜尋

53

Step6 、直接對結果點擊兩下,上方窗格會自動開啟該原始程式檔的指定行數,即可

開始修正程式碼

圖例:對「 Line 42: if ($profilSession == PF_ADMINISTRATOR) { 」 點擊兩下,會自動開啟檔案「 admin.php 」,且自動定位於 42 行處,關鍵字「 PF_ADMINISTRATOR 」會高亮度顯示

利用 Notepad++搜尋

54

附註:使用 11 及 1900 關鍵字說明

日期函數 說明getDate() 傳回日期物件在當月份的日期 , 其值為 1-31

getDay() 傳回日期物件在當週的第幾天 ,0 代表星期天 getMonth() 傳回日期物件的月份 , 0 代表一月 getYear() 傳回日期物件自 1900 年之後算起的年數setDate(x) 設定日期物件在當月份的日期 , 其值為 1-31

setMonth(x) 設定日期物件的月份 ,0代表一月

setYear(x) 設定日期物件的年份 ,參數 x 應該是大於 1900的

整數 舊法 getYear() :系統取得西元年 -1900的結果,程式再減 11= 民

國年新法 getFullYear() :系統取得西元年,程式再減 1911= 民國年

JavaScript 日期函數

55

How使用關鍵字詞搜尋資料庫先行彙總資料庫關鍵字詞,可依下列方向彙總

宣告日期 (Date and Time) 之 Data Types使用日期 (Date and Time) 之 Functions

資料庫關鍵字詞參考資料MySQL參考資料MiCroSoft SQL SERVER參考資料

資料庫之日期關鍵字詞搜尋方式(1)逐步以一個資訊系統的資料庫為對象(2)將資料庫綱要(Database Schema)匯出,並儲存為 資料庫綱要檔

(3)依關鍵字詞搜尋資料庫綱要檔中,有無民國年的定義

56

資料庫之日期關鍵字詞

與日期有關的 Data Types 搜尋之關鍵字

date, timestamp, now, day, year, char(2), char(6),char(8)

date, timestamp, now, day, year, char(2), char(6), char(8)

57

資料庫綱要匯出的範例

MySQL資料庫綱要匯出

SQL Server資料庫綱要匯出

Oracle資料庫綱要匯出

58

壹、 MySQL 資料庫綱要匯出MySQL資料庫綱要 (Database Schema) 匯出使用mysqldump命令列工具程式

59

Step :在命令列中使用 mysqldump1.開啟命令列視窗

2.使用 cd命令切換至MySQL安裝目錄下的 bin 目錄中 例: cd "C:\Program Files\MySQL\MySQL Server 5.1\bin“

3.使用 mysqldump 將 schema匯出來(參數為 -d) 例: mysqldump -d -u user –ppassword --databases Bank MyDB1 > c:\Schema.sql

MySQL 資料庫搜尋

60

貳、 SQL Server 資料庫綱要匯出SQL Server資料庫綱要(Database Schema) 匯出使用 SQL SERVER Management Studio工具

61

Step 1 、開啟 SQL SERVER Management Studio 工具

(以 MiCroSoft SQL SERVER 2005 為例)

MiCroSoft SQL SERVER 2005 資料庫搜尋

62

Step 2 、選擇欲匯出之資料庫 Northwind ,按滑鼠右鍵,點選「工作」-「產生指令

碼」

MiCroSoft SQL SERVER 2005 資料庫搜尋

63

Step 3 、逐步點選「下一步」

MiCroSoft SQL SERVER 2005 資料庫搜尋

64

Step 4 、過程中均點選「全選」,再點選「下一步」

MiCroSoft SQL SERVER 2005 資料庫搜尋

65

Step 5 、點選「編寫指令碼至檔案」,再點選「瀏覽」

MiCroSoft SQL SERVER 2005 資料庫搜尋

66

Step 6 、選擇欲儲存之檔案路徑及輸入檔名「 Northwind 資料庫綱要檔 .sql 」,點選

「儲存」

MiCroSoft SQL SERVER 2005 資料庫搜尋

67

Step 7 、點選「完成」

MiCroSoft SQL SERVER 2005 資料庫搜尋

68

Step 8 、執行中畫面

剩餘多少物剩餘多少物件尚未匯出件尚未匯出

成功成功 !!

MiCroSoft SQL SERVER 2005 資料庫搜尋

69

Step 9 、全部執行完成畫面

MiCroSoft SQL SERVER 2005 資料庫搜尋

70

參、 Oracle 資料庫綱要匯出

Oracle資料庫綱要 (Database Schema) 匯出參考 Oracle export and import

To dump a single schema to disk (we use the scott example schema here)

exp <user>/<password> FIlE=scott.dmp OWNER=scott

top related