Subscribed unsubscribe Subscribe Subscribe

SE Can't Code

A Tokyo based Software Engineer. Not System Engineer :(

Udacity「Software Development Process」を修了した.

ここ最近ひたすら最適な開発プロセスとはなんだろうかと考えている。特に海外との協働、ロケーションが遠く離れたところとの連携や言語の壁によるコミュニケーションコストに対して、どうすればエンジニア同士が気持ち良く開発ができるのだろうか、と。たとえば僕は一つ、仕事でデータ解析におけるGitフローを考えて、現場に反映しようとしている。きっと上手くいかないだろうが、こうした開発プロセスをきちんと定義していくことはこれから先必ずやらなければならないことだろうということで、取り組んでいる。

そうしたモチベーションから、世の中一般的な、あるいは最新の開発フローというものはどういうものなのかと、いろいろ調べていた。DevOpsやGutHubフロー、書籍もろもろソフトウェア工学として定義されているものは沢山あるが、その中でUdacityで開発プロセスについての講義があったので受講してみた。

www.udacity.com


シラバスを見て、「多いな、、」という印象を抱きながら受講したが、案の定こいつを修了するのに二ヶ月くらいかかってしまった。内容はそんなこと知ってるよ、ということから、僕が丁度考えていたGitフローだったり、UMLモデリングデザインパターン、テスト、XPによるAgile開発、リファクタリングなど、ソフトウェアの開発プロセスで必要となるコンテンツが盛りだくさんだった。肩透かしを食らったところもちょこちょこあったが、デザインパターンとか入社1年目の時に勉強して以来だったので、改めて知識の再確認が出来たりして良かった。僕の場合、そうした再確認というところが多かったが、一度ぶち抜きで勉強してみると、「あ、こことここが繋がるのね!」というちょっとした気付きを得ることが出来たりもした。


ここらへんのプロセスを整える仕事ってTechLeadレベルの役目だと思うんだけど、うちの会社にはエンジニアのポジションが細かく分かれてはいないので僕が勝手に考えて勝手にアナウンスしたりしている。こうしたプロセスの概念や基本スキルをベースに、DevOpsあたりの周辺技術を習得するとさらに良い開発プロセスが作れると思うので、ソフトウェアの開発プロセスなどは現場レベルで常に追求していくべきだと思う。



Syllabus

Lesson 1: Introduction and Overview

  • Importance of Software Engineering
  • Discipline of Software Engineering
  • The Software Crisis
  • Software Phases

Lesson 2: Life Cycle Models

  • Introduction with Barry Bohem
  • Requirements Engineering
  • Design
  • Maintenance
  • Software Process Model Introduction
  • Waterfall Process
  • Spiral Process
  • Evolutionary Prototyping Process
  • Rational Unified Process
  • Agile Process
  • Choosing a Model
  • Lifecycle Documents

Lesson 3: Integrated Development Environment

Lesson 4: Version Control Systems

  • Interview with John Britton
  • Version Control System Introduction
  • Two Main Types of VCS
  • Introduction to Git
  • Git Workflow
  • Git Demo: Intro to Git
  • Git Demo: Git + Eclipse
  • Git Demo: Github
  • Git Recap: Local Repositories
  • Git Recap: Remote Repositories

Lesson 5: Requirements Engineering

  • Interview with Jane Cleland-Huang
  • General RE Definition
  • Software Intensive Systems
  • Functional and Nonfunctional Requirements
  • User and System Requirements
  • Modeling Requirements
  • Analyzing Requirements
  • Requirements Prioritization
  • Requirements Engineering Process

Lesson 6: OO Software and UML

  • Object Orientation Introduction *UML Structural Diagrams: Class Diagrams
  • Class Diagram: Creation Tips
  • UML Structural Diagrams: Component Diagram
  • UML Structural Diagram: Deployment Diagram
  • UML Behavioral Diagram: Use Case
  • Use Case Diagram: Creation Tips
  • UML Behavioral Diagrams: Sequence
  • UML Behavioral Diagrams: State Transition Diagram

Lesson 7: Software Architecture

  • Interview with Nenad Medvidovic
  • What is Software Architecture?
  • Prescriptive vs. Descriptive Architecture
  • Architectural Evolution
  • Architectural Degradation
  • Architectural Recovery
  • Architectural Elements
  • Components, Connectors, and Configuration
  • Deployment Architectural Perspective

Lesson 8: A Tale of Analysis and Design

  • Analyzing Requirements
  • Refining Classes and Attributes
  • Adding Attributes
  • Identifying Operations
  • Refining the Class Diagram

Lesson 9: Design Patterns

  • Patterns Catalogue
  • Pattern Format
  • Factory Method Pattern
  • Strategy Pattern
  • Choosing a Pattern
  • Negative Design Patterns

Lesson 10: Unified Software Process

  • Use-Case Driven
  • Inception Phase
  • Elaboration Phase
  • Construction Phase
  • Transition Phase
  • Phases and Iterations

Lesson 11: General Concepts

  • Failure, Fault and Error
  • Verification Approaches
  • Pros and Cons of Approaches
  • Testing Introduction
  • Testing Granularity Levels
  • Alpha and Beta Testing
  • Black and White Box Testing Introduction

Lesson 12: Black-Box Testing

  • Systematic Functional Testing Approach
  • Test Data Selection
  • Category Partition Method
  • Produce and Evaluate Test Case Specifications
  • Generate Test Cases from Test Case Specifications
  • Model Based Testing
  • Finite State Machines

Lesson 13: White-Box Testing

  • Coverage Criteria Intro
  • Statement Coverage
  • Control Flow Graphs
  • Test Criteria Subsumption
  • MC/DC Coverage

Lesson 14: Agile Development Methods

  • Cost of Change
  • Agile Software Development
  • Extreme Programming (XP)
  • XP’s Values and Principles
  • Test First Development
  • Refactoring
  • Pair Programming
  • Continuous Integration
  • Testing Strategy
  • High Level Scrum Process

Lesson 15: Software Refactoring

  • Reasons to Refactor
  • Refactoring Demo
  • Refactoring Risks
  • Cost of Refactoring
  • When Not to Refactor
Remove all ads