-
Recent Posts
Recent Comments
- R.P. Churchill on TWSL Series 07: Discovery and Data Collection
- R.P. Churchill on A Simulationist’s Framework for Business Analysis: Round Two
- LN on A Simulationist’s Framework for Business Analysis: Round Two
- R.P. Churchill on Starting to Learn About the Java Memory Model
- R.P. Churchill on Multidimensional Arrays in Javascript
Categories
Meta
October 2025 M T W T F S S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Author Archives: R.P. Churchill
Buggy, Design Contradictions, and TRIZ (now ARIZ)
A Tuesday session of the Project Summit / Business Analyst World conference (June 20th), featured an interesting talk by the New Jersey Department of Health’s Victoria Roza. She described methods of design and creativity coming out of a practice called … Continue reading
Posted in Engineering
Tagged ARIZ, business analysis, creativity, problem-solving, TRIZ
Leave a comment
Nine SDLC Cross-Functional Areas
I met the very impressive Kim Hardy at an IIBA Meetup in Pittsburgh a few weeks ago. She is passionate about relating her insights to people, their needs and values, and how to make them effective, engaged, and happy while … Continue reading
Addendum To Process Described in Post on Domain-Driven Design
I’ve edited the post from May 11th that describes my preferred project/VV&A methodology. I was reminded, while viewing some excellent presentations at the Project Summit / Business Analyst World conference in DC this week (at which I volunteered) that I … Continue reading
Posted in Management
Tagged customers, project management, requirements management, system architecture, VV&A
Leave a comment
fredfredfred
Example code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
package main.com.bankapp; /** * Created by rpchurchill on 9/3/2015. */ public class bankAccountClass { //HashSet<Object> accountList; String firstName, lastName; double balance; private EmailNotifier emailNotifier; private daoBankAcctDatabase bankDB; public bankAccountClass() { setBalance(0.0); setFirstName(""); setLastName(""); } public bankAccountClass(String first, String last, double initbal) { setFirstName(first); setLastName(last); setBalance(initbal); } public bankAccountClass(String first, String last, double initbal, EmailNotifier emailNotify) { setFirstName(first); setLastName(last); setBalance(initbal); emailNotifier = emailNotify; } public bankAccountClass(String first, String last, double initbal, daoBankAcctDatabase acctDB) { setFirstName(first); setLastName(last); setBalance(initbal); bankDB = acctDB; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public void setLastName(String lastName) { this.lastName = lastName; } public void setBalance(double balance) { this.balance = balance; } public String getLastName() { return lastName; } public double getBalance() { return balance; } public void deposit(double depamount) { setBalance(getBalance() + depamount); } //TODO figure out hoow to throw and test for excepptions public void withdrawal(double wdamount) { //throws acctOverdraftException { if (wdamount > getBalance()) { // throw new acctOverdraftException() emailNotifier.sendMessage("fred", "barney", "wilma", "betty"); } else deposit(-wdamount); } public double sumDeposits(int days) { double[] deposits; double sum = 0.0; deposits = bankDB.getDepositsFromDatabase(days); for (double d : deposits) { sum += d; } return sum; } } |
Example tests for above:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
package test.unit.com.bankapp; import junit.framework.Assert; import main.com.bankapp.EmailNotifier; import main.com.bankapp.bankAccountClass; import main.com.bankapp.daoBankAcctDatabase; import org.junit.Test; import static org.mockito.Mockito.*; /** * Created by rpchurchill on 9/3/2015. */ public class bankAccountClassTest { @Test //does account exist public void acctExists() { bankAccountClass account = new bankAccountClass("Fred","Flintstone",0.0); Assert.assertNotNull(account); Assert.assertEquals(0.0, account.getBalance(), 0.00000001); Assert.assertEquals("Fred", account.getFirstName()); Assert.assertEquals("Flintstone",account.getLastName()); } @Test public void acctDepositSimple() { bankAccountClass account = new bankAccountClass("Fred","Flintstone",0.0); account.deposit(100.0); Assert.assertEquals(account.getBalance(), 100.0, 0.00000001); } @Test public void acctDepositCents() { bankAccountClass account = new bankAccountClass("Fred","Flintstone",0.0); account.deposit(43.42); Assert.assertEquals(account.getBalance(), 43.42, 0.00000001); } @Test public void acctDepositModifyExisting() { bankAccountClass account = new bankAccountClass("Fred","Flintstone",0.0); account.deposit(250.24); account.deposit(100.0); Assert.assertEquals(account.getBalance(), 350.24, 0.00000001); } @Test public void acctDepositModifyExisting1() { bankAccountClass account = new bankAccountClass("Fred","Flintstone",100.0); account.deposit(25); Assert.assertEquals(account.getBalance(), 125.0, 0.00000001); account = new bankAccountClass("Fred","Flintstone",23.42); account.deposit(100); Assert.assertEquals(account.getBalance(), 123.42, 0.00000001); account = new bankAccountClass("Fred","Flintstone",12.41); account.deposit(55.00); Assert.assertEquals(account.getBalance(), 67.41, 0.00000001); account = new bankAccountClass("Fred","Flintstone",67.89); account.deposit(10.25); Assert.assertEquals(account.getBalance(), 78.14, 0.00000001); } @Test public void acctDepositModifyMultiple() { bankAccountClass account = new bankAccountClass("Fred","Flintstone",0.0); account.deposit(45.45); account.deposit(50.00); account.deposit(12.73); Assert.assertEquals(account.getBalance(), 108.18, 0.00000001); } @Test public void acctWithdrawal() { bankAccountClass account = new bankAccountClass("Fred","Flintstone",100.0); //try { account.withdrawal(50.00); //} //catch (acctOverdraftException e) {} Assert.assertEquals(account.getBalance(), 50.0, 0.00000001); } @Test public void acctWithdrawalMultiple() { bankAccountClass account = new bankAccountClass("Fred","Flintstone",45.45); //try { account.withdrawal(25.00); //} //catch (acctOverdraftException e) {} account.deposit(50.00); //try { account.withdrawal(10.25); //} //catch (acctOverdraftException e) {} account.deposit(12.73); Assert.assertEquals(account.getBalance(), 72.93, 0.00000001); } /* @Test //(expected = acctOverdraftException.class) public void acctWithdrawalOverdraft() { bankAccountClass account = new bankAccountClass("Fred","Flintstone",25.00); //try { account.withdrawal(50.00); //} //catch (acctOverdraftException e) {} } */ @Test public void acctEmailSentOnOverdraft() { EmailNotifier mockEmailNotifier = mock(EmailNotifier.class); bankAccountClass account = new bankAccountClass("Fred","Flintstone",25.00,mockEmailNotifier); account.withdrawal(50.00); verify(mockEmailNotifier).sendMessage("fred", "barney", "wilma", "betty"); Assert.assertEquals(account.getBalance(), 25.00, 0.0000001); } @Test public void acctDepositsFromDatabase() { daoBankAcctDatabase mockDB = mock(daoBankAcctDatabase.class); //List<Double> deposits = new ArrayList<Double>(); //deposits.add(11.12); //deposits.add(22.23); //deposits.add(33.34); double [] deposits = new double[3]; deposits[0] = 11.12; deposits[1] = 22.23; deposits[2] = 33.34; doReturn(deposits).when(mockDB).getDepositsFromDatabase(30); bankAccountClass account = new bankAccountClass("Fred","Flintstone",0.00,mockDB); //verify(mockDB.getDepositsFromDatabase(30)); Assert.assertEquals(account.sumDeposits(30),66.69,0.0000001); } } |
Domain-Driven Design
At yesterday’s DC PHP Developer’s Community Meetup Andrew Cassell gave a really nice presentation on Domain-Driven Design. He described the major books in the field, some of the main movers and history, and what the idea is all about. In … Continue reading
Posted in Management
Tagged customers, project management, requirements management, system architecture, VV&A
Leave a comment
Node.js
I finally finished working through the exercises in the LearnYouNode suite put out by NodeSchool, which organizes events in cities all over the country. They have a whole pile of different self-directed workshops. It was decent enough introduction to the … Continue reading
Posted in Uncategorized
Leave a comment
Screen Scraping
At my PHP meetup the other night some of the folks were discussing upgrade paths for content management systems, especially Drupal. They noted that there isn’t yet a good upgrade path to the most recent version from the previous version. … Continue reading
The Confederation Bridge
This weekend I finally made it to my twelfth Canadian province (only Nunavut remains) when I drove across the Confederation Bridge into Prince Edward Island (see also here). The bridge is seven miles long, 40-60 meters (about 131 to 196 … Continue reading
I Helped Design This
In 2004 or 2005 I attended a series of meetings where I helped do traffic projections for this new port of entry (and bridge) at Calais, ME. I also built and ran models of different port designs using the BorderWizard … Continue reading
Posted in Uncategorized
Leave a comment
Simulating Human Action
I used the book “Fundamentals of Classical Thermodynamics” by Van Wylen and Sonntag for my thermodynamics classes in college. In the first chapter it discussed the magnitude of relativistic effects compared to the magnitude of the general effects that would … Continue reading