Software Engineering

From CompSciWiki
Jump to: navigation, search

COMP 1010 Home > Software Engineering


Introduction

Software Engineering is the practice of designing, implementing and creating software by applying the ideologies and principles of software development. Designing the software is usually done in groups (pair programming) and a common programming language (C++, java) is selected for development. Software is designed to meet certain criteria such as; reliability, efficiency, affordability, effectiveness and durability. It has a systematic approach to the design, test and maintenance of the software by applying engineering techniques and pair programming towards it.

...By Students

Software Engineering 1 (Comp 3350) is a really cool course to take. Why? Because it gives hands on experience in developing software (during my time I created an Airline Information System, which checks available flights), work in a team environment (members of your class) and practice the Agile Software Development. Then your group will then present your software to the whole class and show its functions.



Types of Software Engineering Practice

Photo credit: original photo from Flickr user at http://commons.wikimedia.org

Agile Software Development

Is a group of software practices based on iterative development. It’s one of the most commonly used methodologies. The reason is that it allows for flexibility, quick adjustments to new ideas and is often a flat structure (pair programming is mostly done). The agile methodology has sub practice that can be performed to help in the release or maintenance of software.

Extreme Programming (XP)

Is an agile methodology that requires frequent releases in short period of time following the development cycles. It tends to improve the quality and productivity of customers request and introduces checkpoints for quick adaptation (change or add customers request on the fly).

The concerts of extreme programming methodology are as follows;

  • Coding – Is truly an important factor (backbone) when developing software. It’s a set of instructions that the computer can interpret to develop something meaningful. Coding is done in pairs (pair programming), where two people sit on one station (computer) to tackle one task. Without coding there is no software or working product.
  • Testing – Is a required concept in XP, because one cannot be sure if the functions work. During software development there are known to be bugs and design errors. An acceptance test is to verify if the developers’ functions meets the customers’ requirements, while a unit test checks a given function functionality if it works as intended.
  • Listening – Could also stand for understanding, because developers need to listen to the customers needs and what the system needs to do. Developers need to be able to understand the requirements in order to be able to provide feedback to the customers.
  • Designing – One cannot start developing software without designing what it should look like and how the functions should behave. You might think it’s possible but along the line you will get to a dead end and have no clue on the next step to take. Well designed software will avoid system dependencies, giving you the options to manipulate parts in the system and not affect other parts.
Photo credit: http://www.tcproject.net/weblog/images/32cores.jpg

Scrum

Is an agile approach in software engineering, which is seen as an iterative and incremental development. It is practiced in response to the weaknesses of the waterfall model, where a streamlined project management process that starts with an initial planning and produces a quality end product with the cyclic interactions in between.

The basics of scrum methodology are as follows;

  • Specific roles – the Scrum master (person who leads and initializes the project), product owner (person responsible for the value of work) and the team (developers who create the software and practice the scrum methodology)
  • Time Boxes – Is the point where the developers will meet and discuss on various time release and development agreements. This includes the release planning meeting (where qualities of the software are discussed), the sprint development meeting (where the work to be completed are discussed), the sprint (focused time period), daily scrum (brief meeting held before works starts), the sprint review (brief meeting held at the end of the day) and the sprint retrospective (meeting at the end of each sprint to discuss on the successful release).
  • Artifacts – Scrum project has four artifacts involved in the development of the software. The product backlog (tasks that need completing and new ideas added along the way), sprint backlog (tasks to be completed during that one sprint), release burndown (projects the completed backlog), sprint burndown (measure the sprint backlog and checking with the remaining sprint duration).
  • Rules – Helps in making sure that the basic scrum methodology are well implemented and carried out accurately.



Waterfall Development Model

Is a sequential design process, where its practice progress are seen as a steadily downwards slope (waterfall), through the phase of Initiation, Analysis, Design, Testing and Maintenance. This process is complicated because once the process of developing the software has started it is hard or impossible to change structures or functions. Since no formal development process existed at the time of its release, this process was adapted into software development or engineering practice.

The following phase are as follows;

  • Requirements specification and Design – This is the beginning of the phase where the developers collect the user stories (what the customer wants to design), then designing the user story to have some sort of idea on how the end product should look.
  • Construction and Integration – After the design comes the coding and implementation. Construction is the setting out the basic layers and functions, then integrating (link) the functions for them to work together.
  • Testing and debugging – is the stage where the developers check for code errors and make sure that each function does what its required.
  • Installation and Maintenance – At this stage the developers have reached the end of the waterfall process and have a working software. It is the duty of the developers to maintain software created by them if the customers wishes.



Future Career Options

Software engineers are responsible for the design and development for the programs that help us in our daily lives. Typically, these software include business applications, utility software(computer maintenance software), games, and operating systems. Software Engineers must attain a certain level of expertise in several fields to design and optimize their software effectively. As a software engineer, you must understand properly, the theory of computing systems and how hardware components communicate to ensure that the underlying systems will work properly. You may also be responsible for tasks such as directing projects, managing teams, estimating costs and resources, assessing business plans, reviewing proposals and suggesting innovations. Computer software engineers can generally be divided into two categories: applications engineers and systems engineers.

Applications Engineers

Computer applications software engineers analyze end users' needs and design, construct, deploy, and maintain general computer applications software or specialized utility programs. The programming languages most often used by application software engineers are C, C++, Java, and Python. Some software engineers develop packaged computer applications, but most create or adapt customized applications for business and other organizations. Some of these workers also develop databases.

Photo credit: original photo from Flickr user at http://flickr.com


Systems Engineers

Computer systems software engineers coordinate the construction, maintenance, and expansion of an organization's computer systems. Working with the organization, they coordinate each department's computer needs like; ordering, inventory, billing, and payroll record-keeping. They also might set up the organization's intranets—networks that link computers within the organization and ease communication among various departments.


According to the Bureau of Labor Statistics, "Computer software engineers are among the occupations projected to grow the fastest and add the most new jobs over the 2008-18 decade, resulting in excellent job prospects". There is no specified programming platform for software engineering. C, C++, C#, JAVA, .(dot)Net, PHP, Visual Basic, Perl, Python, Ruby, and Delphi are examples of platforms that are used for software development. A software Engineering graduate has the option to work in many different sectors of the society such as telecommunications, finance, health care, manufacturing, retailing, security, transport. The entertainment industry with video games and movie animation also has a large demand for Software Engineers. A bachelor's degree in computer science is usually sufficient for entering this professional field.

According to Job Canada's salary wizard, a typical Software Engineer I (one with 0-3 years of experience) working in Canada earns a median base salary of $57,902, according to our analysis of data reported by corporate HR departments. Half of the people in this job earn between $48,417 and $67,064.

Specialization in Software Engineering at the U of M

The Department of Computer Science at University of Manitoba offers their students the opportunity to specialize in software engineering as well as other fields. However, all computer science students regardless of your specialization area have to take the first software engineering course Software Engineering 1 (COMP 3350) as a requirement for a major or honours degree. In addition, student who obtain a minimum of a "C" in the enlisted courses will obtain a notification on their transcript stating that they have met the requirements for specialization in Software Engineering.

Distributed Computing (COMP 3010)

Human-Computer Interaction 1 (COMP 3020)

Technical Communication in Computer Science (COMP 3040)

Databases Concepts and Usage (COMP 3380)

Professional Practice in Computer Science (COMP 3620)

Project Management (COMP 4050)

Software Engineering 2 (COMP 4350)

References and Useful Links

http://www.cs.concordia.ca/prospectivestudents/softwareengineeringvscomputerscience/

http://blog.mountaingoatsoftware.com/differences-between-scrum-and-extreme-programming

http://ieeexplore.ieee.org.proxy2.lib.umanitoba.ca/stamp/stamp.jsp?tp=&arnumber=841783

http://www.globalknowledge.com -Top IT Jobs for 2010 and Beyond,

Previous Page: Networks Next Page: AI