アジャイルソフトウェア開発の奥義 第2版

「ソフトウェア設計」に関する書籍としていい感じだなと思った。

アジャイルソフトウェア開発の奥義 第2版
 オブジェクト指向開発の神髄と匠の技
f:id:masawan-guitar:20170312005209j:plain
SBクリエイティブ:アジャイルソフトウェア開発の奥義 第2版

広告を非表示にする

入社試験問題と解答のサンプル

入社試験問題と解答のサンプルを作成した。

============================
■ 問題
会社での仕事において、
まるで自己保身に走るような仕事しかしないスケールの小さい男(会社員・25歳)が成長していく過程、
幸せになるためのプロセスを思い描いてください。
彼が何かしら成長した過程が分かるように、何かしらの幸せを感じ取れるように、
あなたが思い描いた内容を1,000,000文字以内で解答してください。(100点)

■ 解答(例)

おれはまず、自分を守る。毎日、毎日、朝から晩まで、自分だけを守る。

仕事を終えると①周りの人を集め②飲み会を行って③仕事上の他人の些細なミスを言いふらし、他人の欠点を継続的に言う。そうすることで、自分は、①´リーダーシップがあり面倒見が良く②´コミュニケーション能力が高く③´指導ができる、いわゆる仕事ができる男だという気持ちになれる。

①~③を長期で継続的に個人的に繰り返し行うことで ①´~③´を周りの人たちに誇示できる、自分だけのハッピーセットお酒の席でネガティブキャンペーン、いい戦略だ。

保身のためには「自分を大切にできない人は、他人を大切にすることなんてできない」と宣言をする。
そうすることにより、なぜか、自分を守ることが正当化された感じはあった。

ある日、自分を守るための、非常に殺傷能力の高い嫌がらせを思いついた。その嫌がらせを試してみる相手を探した。会社の先輩Aさんに、その嫌がらせを試してみようと思った。目的は、殺傷能力の検証。
Aさん
を確実に人生のどん底に陥れる詳細な手順を作成した。しかし、陰険で陰湿な方法を取るのは嫌いだ。

なので、会社の先輩Aさん本人に、これから行おうとしている殺傷能力の高い嫌がらせの詳細手順をレビューしてもらった。会社の先輩Aさんはこう言いました。
『頼むからこんなことをするのは辞めてくれよ』
そりゃそうだ。思いとどまった。

どうせ生きるなら、エンジニアとして生きるなら、数学自然科学を基礎とした工学と唯一無二の芸術工学を主軸とし、人文科学社会科学知見を主軸とし、その2つの大きな主軸が総合的に力を合わせて生み出される「他人をささやかに思いやる強さ」を見極めて用いて、「周りの人が嬉しい感情になるような快適な環境を構築していくこと」を目的として仕事をしてみよう。そう思えた。

そんな時、好きな女性が出来た。
おれはこの愛する女性を守る。あなたを守る、一生愛していると伝えた。そうやって再婚した。

その後、愛する嫁との間に子供が生まれた。
おれは嫁と子供を一生守る。お、おまえたちは、お、お父さんの宝物だ。

自分以外の守るものが出来て、大切なものを守ることを覚えて、その「愛情」が成長してくると、
その守る範囲を広げていきたいと思うようになってきた。

家族以外の他人も、もしかしたら守れるんじゃないか?と思ってくる。
ま、お山の大将にはなりたくないけど
自分」を守るのと同じように「他の人」も守れるんじゃないのか? そんな仕事もしていこう。

まず、会社の隣の席の人らへん1人を守る。
2人を守る。3人を守る。そして「チームのみんな」を守る。
気が付くとそこには「愉快な仲間たち」ができていた。

上司」1人を守る。その上の「上司」を守る。「社長」を守る。「株主」を守る。
そのため、お給料はほんの少しだけど、上がった。
雀の涙ほどのお祝い金ももらった。QUOカードももらったよ。

顧客」の立場になって、サービス向上のため「組織全体継続的業務改善繰り返し行えるような仕組み」を作り、その継続的な改善を監視、維持していく。そんな「仕組み」を守る。そして「組織全体」が守られる。

お客様に『おたくの会社がダメなのは何故ですか?組織全体継続的業務改善繰り返し行える仕組みが無いからですよ。すぐ個人のせいにしているような揚げ足取りクソじじいお説教しているからダメなんですよ。』といった感じの内容のクレームを言わせないようにする。
おれたち全員で「会社」を守る。

そして、おれは、個人的に、揚げ足取りクソじじいのみ叩きのめした。

=============================================================================
〇〇 〇〇 様

           採用試験選考結果のご通知

拝啓

先日は、当社の社員採用試験にお越し頂き、誠にありがとうございました。
厳正なる選考の結果、誠に残念ではございますが、今回は採用を見合わせていただくことになりました。
ご希望に添えず恐縮ですが、何卒、ご了承くださいます様お願い申し上げます。

インターネット上では

 1.採用を見送らせていただく
 2.採用を見合わせていただく

そのどちらが良いのか?的な、論争はございますけれども
仮に、そんな指摘をしてきたとしても、その類の指摘をしてきたとしても
指導ができる男として全く認められず、
そして、ガンジー的な観点(非暴力)からも、今回の選考結果が覆ることはございません。

ただ、ガンジーなら、「あなたを許す」と思います。
ガンジーには到底及びません。そんなこと言っちゃあ、どの業界の人間だって同じです。

選考の結果につきましては、
豚肉屋としての覚悟を持って一生を捧げている我々の言葉でこの状況を例えるなら、
そうは問屋が卸さないってもんです。

つまり、あなたは【不採用】です。

~~~~~~

【試験結果:0点】 ☆彡さそり座のあなたの今日のラッキーアイテム『モツ煮込み』

0点の理由としては、揚げ足取りクソじじいを叩きのめしているためです。

冒頭にある①と②を継続的に行うことにより何かしらの仲間ができる可能性に期待しております。

③はどうなんでしょうかね?①と②ならほんと酒好きなんだなーって思いますが
③を継続的に行ってる人が『お酒の席で仕事がもらえるんだぞ』という内容の
いわゆる大人プレイの利点について指導しているのを見ると、なんだかなあと思います。
③のような「企業文化」をできる限り残していきたくないものです
当社は、人事評価制度において「加点重視」の方針を取っております。

周りの人が嬉しい感情になるような快適な環境を構築していくことを目的として仕事をされてから、
その後、良い感じで成長してきたなと思いましたし、良いお父さんになっていくなあと期待をしていたのですが、なぜ、いきなり狂気に目覚めてしまったのか、分かりません。
きっと良い人間であろうとするがゆえに、その一方で、心の中に闇を抱えてしまったのかと見受けられます。無理をせず、体を壊さないようにして頂きたいと思います。

しかしながら、最後に、揚げ足取りクソじじいを叩きのめした時点で全てが台無しの人生です。
それが非常に残念です。

仮に、全員で会社を守っている頃には、もうその頃には、人によって意図的にさじ加減を変えて、他人が出した成果物に対して、後出しで、利点と欠点の両方があるものを、偉そうに欠点のみをあげつらって、『おまえのためを思って指導してるんだよ』等、恩着せがましくデカい声で、朝からお説教してるような自己中、威張り腐ってるようなクソじじいは、必然的に、この世には居ないはずです。

多数の企業の中から当社に応募頂きましたことに感謝するとともに、
〇〇様のより一層のご活躍をとことんお祈り申し上げます。とことん豚♪(とことんとん)

                          敬 具
平成Ο年Ο月Ο日
まさわん商店。~豚肉卸売問屋直営店~
代表取締役社長
ロドリゲス・ミッチェル・五郎

=============================================================================

■ ブログ管理者(解答者)の見解など、まとめ

(1)会社、会社の組織に関わる人たちのために、大切にするものは他にもたくさんあるとは思います。
 もし見つけたら、それらをどんどん追加していく方向で。
 ひとまずはそれでいいのではないか?と思ってます。これでいいのだ。
 (解答例の改変、及び、削除はNG、追加のみOKとさせて頂きます。ご了承ください。)

(2)『目くそ鼻くそを笑う、器の小さいお山の大将』が幸せになっていくためのプロセスや、
 『揚げ足取りクソじじい』は叩きのめされるという勧善懲悪っぽい話をテーマとして、
 はたして、どこでも通用する仕事の方向性、最低限のモラルって何なのかな?というところを
 あーだこーだと考えてみたものです。
 要点の1つは「仕事上の他人の些細なミスを言いふらし、他人の欠点を継続的に言う
 "お酒の席でネガティブキャンペーンしているお山の大将"。"個人のせい"がダメなんですよ。」

 「個人のせいにせず、何かしらの仕組みを構築すると、個人の能力が上がりにくい」
 といった意見もあると思います。
 その対策、つまり、個人の能力が向上しやすくなるための対策は、
 現場での経験を積むことはもちろんのこと、指導する内容を残して使いまわす等もあるけど、
 人事評価制度「加点重視の方針」にてフォローしていくべきなのかなあと思います。
 本人の努力が報われる環境をと。人事評価制度を作る、変更する、改善するといった話につながります。

(3)「お酒の席でのネガティブキャンペーン」の現場をテーマとして、
 企業文化(企業が有している独特の価値体系や行動規範)とは何だ?とか、
 「人事評価制度」ってどんなものが良いのだろうか?っていうことも考えてみましたが、
 方針としては、いわゆる「"お山の大将"が行う減点重視の方針」よりも、
 「加点重視の方針」を選んだ方が、優れた組織になっていくのかなとは思いました。
 原則として、加点重視の方針(減点する評価方式を廃止)としたほうが、
 企業の様々な関係者にとって、より良い状況が生まれると想定しております。
 従業員の勤勉性、毎日の努力は、
 減点により0に近づくこともなく報われる形となって返ってくるため、
 組織も従業員も成長していきやすくなるような気がしています。
 そのような組織でなければ、従業員は「自分が評価されていない」と認識しやすくなり、
 例えば「勤勉で有益な人材」が、他の企業へ流出しやすくなるのかと思います。
 あくまで傾向の話で。必ずそうなるというものではありませんが。
 仕事をしていくのは、お金を得るという目的だけではないことは最低限の前提として、
 企業が従業員個人の能力を向上しやすくするためには何をする?、
 企業が有益な人材を流出させず、また、確保するためには何をする?
 ということを検討した結果の1つとしては、
 人事評価制度の原則として加点重視の方針(減点する評価方式を廃止)を取る
 ということを挙げておきます。

(4)「加点重視の方針」の例外としては(減点対象としては)
 いったんは「叩きのめす(相手が起き上がれなくなるまで殴りつける)」といった類の
 暴力的な行動としておきます。また、それって人事評価ではなく、常識の範囲内で。
 強いて記載されるとすれば就業規則に定められる話だとは思いますが。
 でも、例えば、あんまりにも相手からしつこい嫌がらせをされているといったような状況であれば、
 (そんな嫌がらせをしてる奴、居るのでしょうか?居たとしても幼稚園児くらいの年齢だと思います)
 自衛のためにも、相手がケガをしない程度におケツに2発3発の蹴りを入れる程度は
 許容範囲なのかなとも思います(賛否両論あるとは思います)。ローカルの暗黙のルールとして。

(5)管理者と実際の知り合いの方々向けのコメントになりますが、
 このブログを見て「私を守ってくださいよ、たっぷり仕事してくれるんでしょ?」的な、
 記載内容を逆手に取ったようなコメントはNGとさせていただきます。

広告を非表示にする

投資家、起業家、企業経営者の話

■IVSウィンターワークショップ2013 Session 5
テーマ: 「人生は挑戦だ!」
(スピーカー)
株式会社ディー・エヌ・エー 顧問 川田尚吾 氏
株式会社gumi 代表取締役社長 國光宏尚 氏
KLab株式会社 代表取締役社長 真田哲弥 氏
ヤフー株式会社 執行役員 小澤隆生 氏
(モデレーター)
インフィニティ・ベンチャーズLLP 共同代表パートナー 小野裕史 
vimeo.com

■べンチャー・キャピタル進化論~経営者と投資家の付き合い方
川田尚吾氏
松山太河氏
赤浦徹氏
渡辺洋行氏
G1ベンチャー2015
www.youtube.com

プロフェッショナル 仕事の流儀
ベンチャー企業経営者 南場智子の仕事 仕事でこそ、人は育つ」
www.youtube.com

広告を非表示にする

SQL Server 2016 データ暗号化

SQL Server 2016 の新機能「Always Encrypted」。
Always Encrypted (データベース エンジン) | Microsoft Docs

以下サイトで、どんなものか確認してみる。
SQL Server 2016 CTP 2.0 の Always Encrypted を使ってみる at SE の雑記

ということらしい。「Always Encrypted」の動作については、また後ほど確認してみるとして。

今のところは、いろいろと検討した結果、管理者側の機能としては、
顧客の「システム担当」が、対称キー作成時のパスワードを
ユーザー情報の登録/更新/参照の際(対称キーOpenの際)に入力した時に、
 ・ユーザー情報を暗号化して登録(更新)できる
 ・ユーザー情報を復号化して参照できる
といった動作にしていくことを予定。
なので「Always Encrypted」を使用しない方法でやってみる。

【1】対称キーの作成(アルゴリズムは AES_256 を指定)
CREATE SYMMETRIC KEY Beck_Sym_Key
WITH ALGORITHM = AES_256
ENCRYPTION BY PASSWORD = '[SymKeyPassword]'
go

f:id:masawan-guitar:20161011003133p:plain

【2】登録時の操作(暗号化)

(例)MST_USERテーブル(CREATE文)

暗号化する項目は[varbinary](max)型。

CREATE TABLE [dbo].[MST_USER](
	[SystemUserID] [uniqueidentifier] NOT NULL,
	[UserID] [varbinary](max) NOT NULL,
	[LoginID] [varbinary](max) NOT NULL,
	[Password] [varbinary](max) NOT NULL,
	[LastName] [varbinary](max) NOT NULL,
	[FirstName] [varbinary](max) NOT NULL,
	[LastNameKana] [varbinary](max) NOT NULL,
	[FirstNameKana] [varbinary](max) NOT NULL,
	[MailAddress1] [varbinary](max) NOT NULL,
	[MailAddress2] [varbinary](max) NULL,
 CONSTRAINT [PK_MST_USER] PRIMARY KEY CLUSTERED 
(
	[SystemUserID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

(1)対称キーをオープンする。対称キーの GUID を Key_GUID 関数で取得して、
 EncryptByKeyでデータを暗号化して INSERT する。

OPEN SYMMETRIC KEY Beck_Sym_Key
DECRYPTION BY PASSWORD = '[SymKeyPassword]'
go

DECLARE @kGuid UNIQUEIDENTIFIER
SET @kGuid = Key_GUID('Beck_Sym_Key')

INSERT INTO MST_USER (
    [SystemUserID],
    [UserID],
    [LoginID],
    [Password],
    [LastName],
    [FirstName],
    [LastNameKana],
    [FirstNameKana],
    [MailAddress1],
    [MailAddress2]
)VALUES(
    NEWID(),
    EncryptByKey(@kGuid, "[UserID]",
    EncryptByKey(@kGuid, "[LoginID]",
    EncryptByKey(@kGuid, "[Password]",
    EncryptByKey(@kGuid, "[LastName]",
    EncryptByKey(@kGuid, "[FirstName]",
    EncryptByKey(@kGuid, "[LastNameKana]",
    EncryptByKey(@kGuid, "[FirstNameKana]",
    EncryptByKey(@kGuid, "[MailAddress1]",
    EncryptByKey(@kGuid, "[MailAddress2]" 
)

(2)対称キーの CLOSE

CLOSE SYMMETRIC KEY Beck_Sym_Key
go

(参考)SELECT文を実行するとデータが暗号化されていることを確認できる。

SELECT * FROM MST_USER

f:id:masawan-guitar:20161010214334p:plain

【3】参照時の操作(復号化)

(1)SELECT文を実行(DecryptByKey で復号化)

対称キーをOPENして、SELECT文を実行。DecryptByKeyでデータを復号化する。

OPEN SYMMETRIC KEY Beck_Sym_Key
DECRYPTION BY PASSWORD = '[SymKeyPassword]'

SELECT TOP 1000 [SystemUserID]
    ,CONVERT(varchar, DecryptByKey([UserID])) AS  [UserID]
    ,CONVERT(varchar, DecryptByKey([LoginID])) AS [LoginID]
    ,CONVERT(varchar, DecryptByKey([Password])) AS [Password]
    ,CONVERT(varchar, DecryptByKey([LastName])) AS [LastName]
    ,CONVERT(varchar, DecryptByKey([FirstName])) AS [FirstName]
    ,CONVERT(varchar, DecryptByKey([LastNameKana])) AS [LastNameKana]
    ,CONVERT(varchar, DecryptByKey([FirstNameKana])) AS [FirstNameKana]
    ,CONVERT(varchar, DecryptByKey([MailAddress1])) AS  [MailAddress1]
    ,CONVERT(varchar, DecryptByKey([MailAddress2])) AS [MailAddress2]
FROM [ProjectManagementSystem].[dbo].[MST_USER]

(2)対称キーの CLOSE

CLOSE SYMMETRIC KEY Beck_Sym_Key

(参考)SELECT文を実行して復号化されたデータを参照。
f:id:masawan-guitar:20161010213804p:plain

※対称キーをDROPする場合

DROP SYMMETRIC KEY Beck_Sym_Key
【4】ユーザ登録を行うプロシージャのサンプル
CREATE PROCEDURE [dbo].[RegistUser]
    @SymKeyPassword varchar(250),
    @UserID varchar(250),
    @LoginID varchar(250) ,
    @Password varchar(max) ,
    @LastName varchar(max) ,
    @FirstName varchar(max) ,
    @LastNameKana varchar(max) ,
    @FirstNameKana varchar(max) ,
    @MailAddress1 varchar(max),
    @MailAddress2 varchar(max)
AS
BEGIN

    DECLARE @OpenCmd nvarchar(MAX)
    SET @OpenCmd =N'OPEN SYMMETRIC KEY Beck_Sym_Key DECRYPTION BY PASSWORD = ''' + @SymKeyPassword + ''' '
    EXECUTE sp_ExecuteSql @OpenCmd

    DECLARE @kGuid UNIQUEIDENTIFIER
    SET @kGuid = Key_GUID('Beck_Sym_Key')

    INSERT INTO MST_USER (
        [SystemUserID],
        [UserID],
        [LoginID],
        [Password],
        [LastName],
        [FirstName],
        [LastNameKana],
        [FirstNameKana],
        [MailAddress1],
        [MailAddress2]
    )VALUES(
        NEWID(),
        EncryptByKey(@kGuid, @UserID),
        EncryptByKey(@kGuid, @LoginID),
        EncryptByKey(@kGuid, @Password),
        EncryptByKey(@kGuid, @LastName),
        EncryptByKey(@kGuid, @FirstName),
        EncryptByKey(@kGuid, @LastNameKana),
        EncryptByKey(@kGuid, @FirstNameKana),
        EncryptByKey(@kGuid, @MailAddress1),
        EncryptByKey(@kGuid, @MailAddress2) 
    )

    CLOSE SYMMETRIC KEY Beck_Sym_Key

END
広告を非表示にする

Visual Studio 2015 Professional VB.NET 単体テストの作成

Visual Studio 2015 Professional VB.NET(以下、VB)にて、MSTestを利用した単体テストの自動化を試しています。ユニットテストフレームワークはたくさんありますが、VisualStudio標準の「MSTest」から使ってみようというところです。

手順を確認した際に、VBにおいてコードエディタ上のコンテキストメニューから「単体テストの作成」が行えない現象が発生する場合がありました(※VB単体テストプロジェクトを手動で作成する方法や、C# の場合には問題なく行えました)。 現時点で、他の端末での動作等は未確認のため、端末依存の問題であるかどうか不明で、また、設定が不足している、VisualStudioの不具合とも断定できない状況ではあります。
ただ、VBにおいても、コードエディタ上で右クリックから単体テストの作成を行えた方が便利と思い、コンテキストメニューから「単体テストの作成」が行えない現象を回避する方法を見つけましたので、記載しておきます。

■前提

前提としては、コードエディタ上のコンテキストメニューに「単体テストの作成」を表示する設定が行われていることです。まずは、「単体テストの作成」をコンテキストメニューに表示する設定を行う必要があります。

以下のサイトはVisualStudio2012の手順にはなりますが、参考になりました。
VisualStudio2015でも同様の手順で設定が行えます。
すがろぐ – visualization

■手順(例)
VBでコードエディタ上のコンテキストメニューから「単体テストの作成」を行うための操作
(1) メニュー[ファイル]から[新規作成]で[プロジェクト]を選択します。


(2) VBのクラスライブラリを選択します。OKボタンを押下します。


(3) (VB)メソッドを追加し、メソッド名を右クリックするとメニューに[単体テストの作成]は表示されているのですが、選択できない状態となっています。


(4) ソリューションエクスプローラーで、ソリューションを右クリック→[追加]→[新しいプロジェクト]を選択します。


(5) C#のクラスライブラリを選択します。OKボタンを押下します。


(6) ソリューションに「VB」と「C#」のプロジェクトがある状態になります。


(7) (C#) クラスを右クリックし、[単体テストの作成]を選択します。


(8) (C#)以下のエラー画面が表示されます。[OK]ボタンを押下します。

f:id:masawan-guitar:20160917085540p:plain

(9) (VB)その後、再度、VBのメソッドを右クリックすると[単体テストの作成]が選択できる状態になっています。[単体テストの作成]を選択します。


(10)(VB)単体テストの作成画面が表示されます。[OK]ボタンを押下します。


(11)(VB)単体テストの作成中のウインドウが表示されます。

f:id:masawan-guitar:20160917085228p:plain

(12)(VB)単体テストのプロジェクト、テストコード(テンプレート)が自動生成されます。

その後、C#のプロジェクトを削除しても、
問題なくVBのコードエディタ上からの右クリックで「単体テストの作成」は行える状況でした。

■バージョン情報

■暫定的なまとめ

Visual Studio 2015 Professional VB.NETにて
コードエディタ上で右クリックメニューから[単体テストの作成]が行えない時には、
ソリューションにC#のプロジェクトを追加して、
一度、C#のコードエディタ上から[単体テストの作成]の操作を行えば、
その後、VBのコードエディタ上での右クリックメニューから「単体テストの作成」が行える状態になる。

広告を非表示にする