Object Oriented Software Engineering   View all facts   Glossary   Help
subject > person or group > person > engineer > software engineer
Next engineerChartered Engineer    Upengineer, software developer    Previous engineerprofessional engineer   

software engineer
subjectfact 
software engineerapplies well-understood techniques in an organized and disciplined way2001-08-30 14:57:37.0
assists the manager of the development team2001-08-30 14:57:37.0
can design highly maintainable software by anticipating future changes and adding flexibility2001-08-30 14:57:38.0
can write detailed requirements before starting to design the system only if he or she is developing software in a well-known domain and using well-known technology2001-08-30 14:57:38.0
cannot develop a perfect user interface without the input of users2001-08-30 14:57:38.0
cannot know whether a system meets the customer's needs until it is delivered and in use2001-08-30 14:57:38.0
checks for valid generalizations by checking that:
  • superclasses and subclasses have unambiguous names
  • each subclass retains its distinctiveness throughout its life
  • all the inherited features make sense in each subclass
2001-08-30 14:57:38.0
communicates with other software engineers orally and in writing2001-08-30 14:57:38.0
has definition A person who has education in, and experience performing software engineering; an engineer who specializes in software2001-08-30 14:57:38.0
designs software systems2001-08-30 14:57:38.0
does not have to become an expert in the domain to do domain analysis2001-08-30 14:57:38.0
does not need to exceed quality objectives which helps them avoid spending more effort than is necessary2001-08-30 14:57:38.0
fills in certain missing details of a framework to complete the application or subsystem it represents2001-08-30 14:57:38.0
has purpose to solve problems economically by developing high quality software2001-08-30 14:57:38.0
is a subtopic of 1.1 - The Nature of Software2001-08-30 14:57:38.0
is often not educated as an engineer2001-08-30 14:57:38.0
is rarely taught interviewing skills2001-08-30 14:57:38.0
is a kind of engineer2001-08-30 14:57:38.0
is a kind of software developer2001-08-30 14:57:38.0
makes design decision by using all the knowledge at his or her disposal, including:
  • Knowledge of the requirements
  • Knowledge of the design as created so far
  • Knowledge of the technology available
  • Knowledge of software design principles and 'best practices'
  • Knowledge about what has worked well in the past
2001-08-30 14:57:38.0
may become the manager of a development team at some point in her career2001-08-30 14:57:38.0
may have to optimize certain aspects of designs - achieving the best possible levels of certain qualities, while not exceeding a certain budget and at the same time meeting objectives for the other qualities2001-08-30 14:57:38.0
may not reuse software because there are no reusable components available to reuse, or because they do not feel confident about reusing whatever is available2001-08-30 14:57:38.0
may perform project management2001-08-30 14:57:38.0
must be able to find reusable components2001-08-30 14:57:38.0
must be able to write clear documentation2001-08-30 14:57:38.0
must be understand the software architecture of a system they are working on2001-08-30 14:57:38.0
must effectively communicate with people, to understand how they work and to understand what impact any proposed software may have on these people's productivity2001-08-30 14:57:38.0
must ensure that his systems can be produced within a limited budget and by a certain due date2001-08-30 14:57:38.0
must have sufficient general education, plus training in the technology to be used2001-08-30 14:57:38.0
must plan budget and schedule which requires a great deal of knowledge about what is required to produce a system, and how long each activity should take2001-08-30 14:57:38.0
must realize that the vicious circle of software reuse exists and costs money - in order to save money in the longer term, an investment in reusable code is justified2001-08-30 14:57:38.0
performs domain analysis by gathering information from domain experts, books, software and its documentation, and any other available documents2001-08-30 14:57:38.0
performs interviewing as part of requirements gathering2001-08-30 14:57:38.0
performs observation as part of requirements gathering2001-08-30 14:57:38.0
reuses commercial off-the-shelf software by adding extra code called glue code which is often written using scripting languages which run using an interpreter2001-08-30 14:57:38.0
reuses complete applications and adapts them to the needs of the client by adding a small amount of extra software that makes the applications behave in special ways the client wants2001-08-30 14:57:38.0
reuses expertise when they have many years of experience working on projects and can often save considerable time when it comes to developing new systems because they do not need to re-think many issues: their past experience tells them what needs to be done2001-08-30 14:57:38.0
reuses frameworks2001-08-30 14:57:38.0
reuses implemented algorithms, data structures and other facilities contained in libraries of classes or procedures, or of powerful commands built into languages and operating systems2001-08-30 14:57:38.0
reuses standard designs and algorithms described in books, standards documents and articles by implementing them if they are appropriate to the current task2001-08-30 14:57:38.0
should adjust the requirements or design as soon as important changes are discovered2001-08-30 14:57:38.0
should avoid duplication of requirements so as to help ensure consistency2001-08-30 14:57:38.0
should avoid obscure features of any technology2001-08-30 14:57:38.0
should avoid requirements creep2001-08-30 14:57:38.0
should avoid technology sold by just a single vendor and which has relatively few other customers2001-08-30 14:57:38.0
should balance the benefits of the use of third-party technology with the risks of problems2001-08-30 14:57:38.0
should be aware of things which may change2001-08-30 14:57:38.0
should be able to use cost-benefit analysis to choose among alternatives2001-08-30 14:57:38.0
should build flexibility and other aspects of maintainability into the software from the start so that changes are easier to make2001-08-30 14:57:38.0
should check the consistency of requirements with any standards, with other requirements in the document, with higher-level requirements and with the requirements for other subsystems2001-08-30 14:57:38.0
should combine the best features of each process model2001-08-30 14:57:38.0
should continually interact with users and clients to keep up-to-date on their needs2001-08-30 14:57:38.0
should create prototypes to try out the technology you will be using2001-08-30 14:57:38.0
should design system to meet quality objectives2001-08-30 14:57:38.0
should design user interface after doing some domain analysis and defining the problem2001-08-30 14:57:38.0
should design for flexibility to accommodate potential changes2001-08-30 14:57:38.0
should design with change in mind2001-08-30 14:57:38.0
should develop negotiating and other 'people' skills2001-08-30 14:57:38.0
should develop prototypes based on rough requirements to check out the validity of the ideas or the reliability of the technology before writing detailed requirements2001-08-30 14:57:38.0
should divide a system into smaller subsystems, so that each one is naturally simpler2001-08-30 14:57:38.0
should evaluate the requirements in a project where requirements have already been determined to ensure that the requirements on which is based are of good quality2001-08-30 14:57:38.0
should follow a good requirements gathering and analysis process2001-08-30 14:57:38.0
should follow the IEEE/ACM code of ethics2001-08-30 14:57:38.0
should have a mentor2001-08-30 14:57:38.0
should have user interface design skills2001-08-30 14:57:38.0
should learn how users and customers think and behave so it will be easier to produce software that meets their needs2001-08-30 14:57:38.0
should make their designs reusable by designing and documenting software so that it is understandable and flexible enough be used in a variety of different systems2001-08-30 14:57:38.0
should narrow the scope^2 of a system if possible by defining a more precise problem2001-08-30 14:57:38.0
should not accept a contract where she is required to implement requirements with no changes allowed2001-08-30 14:57:38.0
should not add unnecessary new features2001-08-30 14:57:38.0
should not ignore long-term needs of the customers2001-08-30 14:57:38.0
should not rush changes2001-08-30 14:57:38.0
should not undertake a serious software project without doing domain analysis2001-08-30 14:57:39.0
should participate in promoting and marketing the project2001-08-30 14:57:39.0
should perform quality assurance activities on each change in a system2001-08-30 14:57:39.0
should practice on prototypes or systems that are of lesser importance in order to gain sufficient experience in a particular technology2001-08-30 14:57:39.0
should prototype the system early, especially those parts that involve complex algorithms, in order to determine whether performance will be satisfactory2001-08-30 14:57:39.0
should recognize activities that are not consistent with the goal of solving customers' problems, such as adding unnecessary features, and situations when it would be most cost effective not to develop software at all, to develop simpler software or to purchase existing software2001-08-30 14:57:39.0
should redesign parts of an over-complex system as necessary2001-08-30 14:57:39.0
should regularly evaluate how the system will impact all the stakeholders, and work closely with them to foster increased understanding of issues2001-08-30 14:57:39.0
should remove features that are not needed2001-08-30 14:57:39.0
should reuse others' work, rather than re-developing software that others have already developed2001-08-30 14:57:39.0
should set objectives for quality when starting a project2001-08-30 14:57:39.0
should study Peter G. Neumann's Risks Digest to ensure they do not recreate the failures listed in it2001-08-30 14:57:39.0
should take time to understand software before making changes2001-08-30 14:57:39.0
should understand process standards2001-08-30 14:57:39.0
should understand the application domain so he or she can communicate effectively with clients and users2001-08-30 14:57:39.0
should understand basically how their managers run projects2001-08-30 14:57:39.0
should use tools that aid in understanding the structure of a software system2001-08-30 14:57:39.0
should use widely used technology because it is more likely to be supported and have had its defects removed2001-08-30 14:57:39.0
should work with the customer to resolve any problems with requirements in a project where requirements have already been determined2001-08-30 14:57:39.0
uses use case analysis to help define the tasks that the user interface must help the user perform2001-08-30 14:57:39.0
engineerdid not have to be licensed before the 1940's in most jurisdictions2001-08-30 14:55:28.0
has role to put knowledge to use in innovative ways to solve problems2001-08-30 14:55:28.0
must adhere to a code of ethics2001-08-30 14:55:28.0
must be licensed in most countries in order to legally perform consulting or self-employed work where you call yourself an 'engineer'2001-08-30 14:55:28.0
must take personal responsibility for work2001-08-30 14:55:29.0
software developerasks several evaluators to independently perform heuristic evaluations2001-08-30 14:57:35.0
has goal rewarding career, recognition, or the challenge of solving difficult problems or by being a well-respected 'guru' in a certain area of expertise2001-08-30 14:57:35.0
is part of software development team2001-08-30 14:57:35.0
maintains software2001-08-30 14:57:35.0
may be judged on when they deliver product, not on its quality level2001-08-30 14:57:35.0
may refuse to reuse components in which they lack confidence2001-08-30 14:57:35.0
most often works on custom software2001-08-30 14:57:35.0
must inform the project manager about any problems2001-08-30 14:57:35.0
often fails to adequately involve users in the development process2001-08-30 14:57:35.0
often underestimates software development time because it is very hard for people to assess the quality of software or to appreciate the amount of work involved in its development2001-08-30 14:57:35.0
should be rewarded for developing reusable components2001-08-30 14:57:35.0
should emphasize the use case or use cases which are central to the system, which represent a high risk because of problematic implementation, or which have high political or commercial value2001-08-30 14:57:35.0
should identify all the use cases associated with the software product2001-08-30 14:57:35.0
should not document a design only after it is complete2001-08-30 14:57:35.0
should not omit design documentation2001-08-30 14:57:35.0
should realize that attention to quality of reusable components is essential so that potential re-users have confidence in them2001-08-30 14:57:35.0
should realize that developing and reusing reusable components improves reliability, and can foster a sense of confidence2001-08-30 14:57:35.0
should realize that developing reusable components will normally simplify the resulting design, independently of whether reuse actually occurs2001-08-30 14:57:35.0
should work for several months on a testing team; this will heighten her awareness of quality problems she should avoid when she returns to designing software2001-08-30 14:57:36.0
wants software that is easy to design and maintain and which has parts that are easy to reuse2001-08-30 14:57:36.0
stakeholdermust agree on requirements2001-08-30 14:57:46.0

Kinds of software engineer :

Next engineerChartered Engineer    Upengineer, software developer    Previous engineerprofessional engineer