8. Just an Example
• Programmer
• Project Management
• Solution Architecture
• System Integration
• Database Administration
• Testing
• Security
• Operation
• Infrastructure
9. - -
English for Communication
000102 - -
English for Academic Purposes (EAP
II)
000103 - -
English for Academic Purposes I
(EAP II)
000112 - -
Thai for Academic Purposrs(???
22. Waterfall Discipline
• Project is divided into sequential phases.
• Emphasis an entire system at one time.
• Tight control is maintained through the use of
extensive written documentation.
24. Waterfall not wrong
• 90% of enterprise firm in Thailand still using
waterfall model.
• It’s big , really big. 100 people involve with
project.
• Match with their procurement process
• Strong Audit process.
• “Trust ??”.
25. Developer Discipline
• Depends on developers themselves
• Mostly, make it fast.
• Mostly, make it done.
• Deadline ahead
• Quality ummmmm QA team will cover it for
somehow
• Aggressive Regression Test
• Customer will come when our software is “done”.
• Change request, Change request, Change request
26.
27. What about small organization?
• They need something that is really “work”.
• They can spend time with your team.
• So Waterfall again?
• We need methodology that focus on
delivering software that working.
31. Three simple truths
• 1. It is impossible to gather all the
requirements at the beginning of a project.
• 2. Whatever requirements you do gather are
guaranteed to change.
• 3. There will always be more to do than time
and money will allow.
33. Discipline
• Customer satisfaction by rapid delivery of useful software
• Welcome changing requirements, even late in development
• Working software is delivered frequently (weeks rather than
months)
• Working software is the principal measure of progress
• …
• …
• …
• Regular adaptation to changing circumstances
34. Developer Discipline
• According to 3 simple truth
• Agile coder will carry these four basic activities
along with them
– Coding
– Testing
– Listening
– designing
35.
36. Anyway
• Grocery Store does exist but …?
• Waterfall and Agile
• Waterfall still dominate the market.
• Waterfall itself doesn’t encourage
programmer to write good code.
• We need something.
• Applied TDD into development phase in
Waterfall
41. The Program
• a1 is a yng and gftd sftwreng attempting to
hackMnfrm() of sftw company ENCOM in
order to fndEvdc() that senior executive
a2 stole() a1's cde and prsnt() it as his own,
earning him a rapid series of promotions. a1 is
blcked() by the MCP, an ai that ctrl the ENCOM
mnfrm.
42. The Program
kevinFlynn is a young and gifted
SOFTWARE_ENGINEER attempting to hack() into
the mainframe of encom =
SoftwareCompany(“ENCOM”) in order to
findEvidence() that ENIOR_EXECUTIVE
edDillinger stole(kevinFlynn) code and presented
it as his own, earning him a rapid series of
promotions. kevinFlynn is blocked() by the
MasterControlProgram , an
artificialIntelligence that controls(encom) the
ENCOM mainframe.
43. Understandable
• Use Intention-Revealing Names
• Make Meaningful Distinctions
• Use Pronounceable Names
• Use Searchable Names
• Avoid Encodings
45. Use Intention-Revealing Names
public List<int[]> getThem() {
List<int[]> list1 = new
ArrayList<int[]>();
for (int[] x : theList)
if (x[0] == 4) list1.add(x);
return list1;
}
46. Use Intention-Revealing Names
public List<Cell> getFlaggedCells() {
List<Cell> flaggedCells =
new ArrayList<Cell>();
for (Cell cell : gameBoard)
if (cell.isFlagged())
flaggedCells.add(cell);
return flaggedCells;
}
47. Use Searchable Names
int realDaysPerIdealDay = 4;
const int WORK_DAYS_PER_WEEK = 5;
int sum = 0;
for(int j=0; j<NUMBER_OF_TASKS; j++){
int realTaskDays =
taskEstimate[j]*realDaysPerIdealDay;
int realTaskWeeks =
(realdays / WORK_DAYS_PER_WEEK);
sum += realTaskWeeks;
}
48. Avoid Side Effect
public class UserValidator {
private Cryptographer cryptographer;
public boolean checkPassword(String userName,
String password) {
User user = UserGateway.findByName(userName);
if (user != User.NULL) {
String codedPhrase =
user.getPhraseEncodedByPassword();
String phrase =
cryptographer.decrypt(codedPhrase,
password);
if ("Valid Password".equals(phrase)) {
Session.initialize();
return true; }
} return false;
}
}
61. Version Control
• You are not alone
• Code is your asset
• Choose one:
• GIT, SVN, CVS
62. Development Tools
• Build Tool
• Library dependency checking
• Single Repository
• Check Style
• IDE
63. Testing
• Junit
• DB Unit
• Mockito
• Selenium
64. JUnit
• JUnit is a unit testing framework
• Unit test itself is not enough we need
company
65. DBUnit
• Why do we need to test our database?
• You need [multiple] databases
66. Mock Object
• Mock objects are simulated objects that mimic
the behavior of real objects in controlled ways.
• supplies non-deterministic results
• has states that are difficult to create or reproduce
• is slow
• does not yet exist or may change behavior;
• would have to include information and methods
exclusively for testing purposes
67. Web App Test
• Selenium is a suite of tools to automate web
app testing across many platforms.
ทุกคนคิดว่าเหมือนอะไร ผมว่าเหมือนร้านขายของชำ หลายท่านคงคิดว่าเหมือนสร้างตึกแต่การสร้างตึกมันดู rigid ไปนิดมัน build to last มากไปนิดถ้าเทียบกับการสร้างซอฟท์แวร์
For example, an alarm clock program which causes a bell to ring at a certain time might get the current time from the outside world. To test this, the test must wait until the alarm time to know whether it has rung the bell correctly. If a mock object is used in place of the real object, it can be programmed to provide the bell-ringing time (whether it is actually that time or not) so that the alarm clock program can be tested in isolation.