Software Is Hardwork

ISimplicityAffinative: The endless pursuit of anti-complexity.
The technology-centric blog of D. P. Bullington.

Email D. P. Bullington View D. P. Bullington\ Get Software Is Hardwork code on CodePlex

Blog Post(s)

Software Engineering Series Part 4 - Software Testing and Quality Measurement
Monday, December 29, 2008

The goal of software testing is to provide development team members, project managers, and stakeholders a pulse on the quality of a software system. By extension, software testing aims to find the greatest number of defects with a manageable amount of effort applied over a realistic time span.

Roger S. Pressman notes the following points in his textbook regarding the measurement of software quality:

Measuring Quality

  • Correctness - the degree to which a program operates according to specification
  • Maintainability - the degree to which a program is amenable to change
  • Integrity - the degree to which a program is impervious to outside attack
  • Usability - the degree to which a program is easy to use

Many in the academic and business research space argue that the Defect Removal Efficiency or DRE should be the key quality indicator for most software projects:

Defect Removal Efficiency (DRE) = (errors) / (errors + defects)

where:
errors = problems found before release
defects = problems found after release

Given that most organizations use some form of defect tracking, the above metric can easily be calculated and tracked over time to see how the DRE changes. This metric, in my opinion, is useful only in the context of other metrics such as project sizing (KLOC), code coverage, test suite count, etc.

Software Engineering Series Part 3 - The Four P’s
Friday, December 19, 2008

Roger S. Pressman notes the following notable "Four P’s" in his textbook:

  • People - the most important element of a successful project
  • Product - the software or system to be built
  • Process - the set software engineering tasks to get the job done
  • Project - all work required to make the product a reality

I find it useful to keep these in the back of my head at all times.

Software Engineering Series Part 2 - Object-to-Object Communication
Wednesday, December 17, 2008

In object oriented programming, a message is an abstraction of object-to-object communication whereas one object (called the sender) sends a message to another object and the receiving object (called the receiver) responds. The response is NOT considered a second, distinct message.

In languages such as C/C++/Java/C#/etc., the concept of a "message" just happens to be the method call (and the response is a return value). In reality, a message is really just a message, nothing more, nothing less (as in Ruby, Smalltalk...).

Method calls being a manifestation of object-to-object messaging is just a necessary evil of compiled, strongly typed languages. As my colleague T.K. notes, it possibly also has a lot to do with language designers' attempts to step from a procedural mind set to objects; there's a lot of OO concepts that they just gloss over as unimportant and miss the real power of OO in the process.

Alan Kay, American computer scientist, known for his early pioneering work on object-oriented programming and windowing graphical user interface design, has argued that message passing is a concept more important than objects in his view of object-oriented programming, however people often miss the point and place too much emphasis on objects themselves and not enough on the messages being sent between them. [1]

 

References:

[1] http://www.wikipedia.org

Software Engineering Series Part 1 - The Nature of Software
Tuesday, December 16, 2008

Software by nature is intangible, that is, it has no real world physical manifestation. Software is designed to be changed, otherwise the functionality would have been implemented in hardware. It then easily follows that software does not "wear out" (no mechanical "parts"), rather it degrades in quality due to constant change. These simple statements about the nature of software will set the stage for future topics in this series.

Software Engineering Series Coming Soon

In the coming days and weeks, I will be presenting a blog series on various software engineering related topics inspired by my graduate studies. Possible topics include process frameworks, quality control, estimating and planning, requirements engineering, analysis and design, and more. The topics will have more a of an academic twist while hopefully relating them to practical experience. Stay tuned.

Speaking Enagements

  • 11/18/2010 | Charlottesville .NET Users Group | Charlottesville, VA | Topic TBD
  • 09/14/2010 | Hampton Roads .NET Users Group | Cheaspeake, VA | Topic TBD
  • 07/01/2010 | Richmond .NET Users Group | Richmond, VA | Topic TBD
  • (past) 12/08/2009 | Hampton Roads .NET Users Group | Cheaspeake, VA | SharePoint Antithesis - A Case Study in Pragmatic Software Architecture and Engineering Processes
  • (past) 10/04/2009 | Richmond Code Camp 2009.2 | Richmond, VA | Soothing the Pain Points: Data Access, Validation, Rules, UI, Presentation, et. al
  • (past) 07/23/2009 | Charlottesville .NET Users Group | Charlottesville, VA | Debugging on the Windows Platform
  • (past) 05/23/2008 | NoVa CodeCamp 2009.01 | Reston, VA | Going Proxy-less - The WCF Proxy Factory
  • (past) 04/25/2009 | Richmond Code Camp 2009.1 | Richmond, VA | Software Programmer to Software Engineer: Concepts to Span the Divide
  • (past) 02/05/2009 | Richmond .NET Users Group | Richmond, VA | Debugging on the Windows Platform
  • (past) 10/04/2008 | Richmond Code Camp 2008.2 | Richmond, VA | Going Proxy-less - The WCF Proxy Factory

Blog Archive

Post Labels

.NET (64) .NETv4.0 (3) ACID (1) ActiveDirectory (1) ADF (2) Affiliate (1) Agile (6) AJAX (1) Allocator (3) Analysis (1) AOP (4) ASP.NET (6) ASP.NET MVC (1) Assembly (2) BadIdeaPile (1) BagOfBolts (5) Blogger (1) Books (2) BuildMgmt (8) C# (46) ChoDNUG (1) CLR (1) CLRv4.0 (2) CMP (1) CMS (2) CodeCamp (2) COM (1) Conversation (1) Coverage (1) CUI (1) Database (2) DDD (1) DeadFxs (1) Debugging (9) Design (4) DevAuto (3) DevCfg (1) Development (118) DI (6) DiffMerge (1) Domain (1) DTfW (2) EclipseIDE (1) ECM (1) EntityFramework (1) Estimating (1) FileShare (1) Frameworks (7) GAC (2) Google (1) Hardware (2) HRNUG (1) Humor (6) IIS (4) ILDASM (1) Impersonation (2) InstallError (1) IoC (6) KingTodd (1) LinkedIn (1) LINQtoSQL (2) MarketingHype (1) MBUnit (1) Mentoring (22) Metadata (1) Microsoft (7) MOSS2007 (5) MSBuild (2) MSIL (4) MSSCCI (2) NAnt (2) NCore (2) NCover (1) NDatabase (4) NetUse (1) NHibernate (2) NoVaCodeCamp (2) NTSD/CDB (2) NUnit (1) Observation (2) Office (2) OOD (7) OOP (6) OpenSource (14) Opinion (19) Personal (3) PMP (1) Polymorphism (1) PowerPoint (1) PowerShell (2) Presentation (3) Process (4) ProjectManagement (2) PublicKeyToken (1) QA (2) RDNUG (1) Reflection (2) Registry (2) Resharper (1) Reversing (2) RichmondCodeCamp (5) SCM (11) Scrum (5) Security (2) Series (3) Server2008 (4) ServicePack (1) SES (7) SharePoint (7) Silverlight (1) SoC (3) Software (49) SoftwareIsHardwork (17) Speaking (7) SQL (2) SSO (2) StrongName (2) Suite2008 (9) Suite2010 (1) SwEng (19) TechBlunder (1) Testing (14) Thread (3) Tools (8) Troubleshooting (10) Twitter (3) Types (2) UAC (1) UIP (1) Vault (2) VB6 (1) VC (1) Vista (3) VisualStudio (15) VSIP (2) VSTS (1) WCF (4) Web (4) WebForms (1) Win32 (3) WinDBG (3) WindowsIdentity (3) WinForms (1) WIT (1) Workhorse (1) WoW64 (1) WPF (1) WSS3 (2) x64 (2) x86 (2) xUnit (1)

Disclaimer

© D. P. Bullington, all rights reserved. Everything posted on this blog is my personal opinion and does not represent the views of my employer nor serves to infringe on the sovereignty of any nation.