Software Engineering Processes
In this module we will begin studying software engineering by looing at the factors that brought the field into existence, and examining the impetus and growth of software engineering processes that provide a framework for how software is designed, created, tested, and released.
Introduction to Software Engineering
In this first lecture we will begin studying the foundations of software engineering, and exploring the factors that brought the field into existence.
One of the surprising things we will discover is that, while software engineering certainly includes writing code, it calls on a number of technical and non-technical disciplines.
The purpose of this first lecture is to survey the field of software engineering to motivate the individual topics that we will discuss in more depth during the course.
Class Presentation
- Lecture 1 presentation
- Lecture 1 Zoom recording (Passcode: ?n!vqV9%)
Demo code
- Java program to demonstrate creation of JUnit tests and JavaDoc.
Recommended Readings
- Roger S. Pressman, Bruce Maxim,
Software Engineering: A Practitioner's Approach,
8th Edition. McGraw-Hill Education, 2014.
- Chapter 2: Software Engineering
- "What is Software Engineering" from Guru99.com.
- "Software Engineering from Wikipedia
- David Hooker, Seven Principles of Software Development, September, 1996.
Models of Software Engineering Processes
In this lecture we will begin looking at specific types of software engineering process models that have been developed to guide product development.
Class Presentation
- Lecture 2 presentation
- Lecture 2 Zoom recording (Passcode: .+9EU14U)
Recommended Readings
The readings in this section provide a basic understanding of the material covered in this lecture.- Roger S. Pressman, Bruce Maxim,
Software Engineering: A Practitioner's Approach,
8th Edition. McGraw-Hill Education, 2014.
- Chapter 4.1: Prescriptive Process Models
- "Waterfall model" from Wikipedia.
- "Software Engineering - Incremental Process Model" from GeeksforGeeks.
- V. Gowtham, et. al. "Evolutionary Models in Software Engineering", International Journal of New Technology and Research, vol. 3 issue 5, May 2017, pp 30-33.
- "Spiral model" from Wikipedia.
- Phillip A. Laplante,Colin J. Neill, "'The Demise of the Waterfall Model Is Imminent' and Other Urban Myths", ACM Queue, vol. 1, issue 10, February 24, 2004.
Additional Readings
The readings in this section provide additional information or more in-depth coverage of the material covered in this lecture.- "Methodology::Development Models" by Sergei Kostygov.
- "SLDC - Waterfall Model" from TutorialsPoint.
- Wilson W. Royce, "Managing the Development of Large Software Systems", Proceedings of IEEE Wescon 26, August 1970, pp. 328-338. (This is the original paper that presented the waterfall model as a "strawman".
- "Incremental build model" from Wikipedia.
- "Incremental Model" from Newline Technologies, January 3, 2018.
- "Evolutionary Process Models in Software Engineering" from TutorialRide.com
- Elaine L. May, Barbara A. Zimmer, "The Evolutionary Development Model for Software", Hewlett-Packard Journal, August 1994.
- Barry Boehm et. al., "Prototyping Versus Specifying: A Multiproject Experiment." IEEE Trans. on Software Engineering, vol 10 issue 3, pp 290-302, 1994. (Statement on Boehm's second law, describing the benefits of prototyping.)
- Barry Boehm, "A Spiral Model of Software Development and Enhancement" IEEE Computer, vol 21 issue 5, pp 61-72, May 1988. (This is the original paper that presented the spiral model.)
Focus on Agile Processes
Class Presentation
- Lecture 3 presentation
- Lecture 3 Zoom recording (Passcode: 9W$c6NyU)
Recommended Readings
The readings in this section provide a basic understanding of the material covered in this lecture.- Roger S. Pressman, Bruce Maxim,
Software Engineering: A Practitioner's Approach,
8th Edition. McGraw-Hill Education, 2014.
- Chapter 5: Agile Development
- Chapter 10,4: Class-responsibility-collaborator (CRC) modeling
- "Agile software development from Wikipedia.
- "Scrum (software development) from Wikipedia.
- "About Scrum from Scrum Alliance.
- "Extreme programming from Wikipedia.
- "Extreme Programming (XP) vs. Scrum" from Visual Paradigm.
Additional Readings
The readings in this section provide additional information or more in-depth coverage of the material covered in this lecture.- Kent Beck, et. al., "Manifesto for Agile Software Development" from the Agile Alliance, 2001.
- David Anderson, et. al. "Declaration of Interdependence", (archived from the original at the Internet Archive), 2005.
- Scott Ambler, "Examining the Agile Manifesto" from Ambysoft.
- "Rapid application development from Wikipedia.
- "Unified process" from Wikipedia.
- "Pair programming" from Wikipedia.
Online Courses
These online courses will give you hands-on experience with Scrum and XP. NEU students, faculty, and staff can access Linked-In Learning (formerly Linda.com) courses at no cost by logging in with your myNEU user name and password. See the login information page at the NEU Library website.- Scrum Fundamentals | Scrum Certification from Udemy.
- Scrum: The Basics from Linked-In Learning (formerly Linda.com).
- Scrum: Advanced from Linked-In Learning (formerly Linda.com).
- Scrum Master from Linked-In Learning (formerly Linda.com).
- Extreme Programming (XP) from Linked-In Learning (formerly Linda.com).
Focus on Open Source Processes
Class Presentation
- Lecture 4 presentation
- Lecture 4 Zoom recording (Passcode: K2ScT&zW)
Recommended Readings
The readings in this section provide a basic understanding of the material covered in this lecture.- Open-source software development from Wikipedia.
- Open Source Definition from Open Source Initiative.
- Ahmad Nassri, "Scrum is dead: Breaking down the new open development method" (13 Nov 2015), from OpenSource.com.
- Steve McConnell, "Open Source Methodology: Ready for Prime Time?", IEEE Software, July/August 1999.
- "“The Cathedral and the Bazaar", from Wikipedia. (See "Additional Readings" for reference to full essay.)
Additional Readings
The readings in this section provide additional information or more in-depth coverage of the material covered in this lecture.- Eric S. Raymond, "The Cathedral and the Bazaar: Musings on Linux and Open Source by an Accidental Revolutionary", 2010-02-18. An extended online version of the seminal essay that contrasts the open-source methodology (the bazzar) with more monolithic free-software methodologies (the cathedral).
- "History of the Open Source Initiative (OSI)", archived at the Internet Archives.
- Kajsa Ahlgren and Elin Dahlberg, “Investigating an Open Source based platform strategy at Sony Ericsson”, 2008. Thesis investigates whether the future development of the Digital Home creates incentives for Sony Ericsson to initiate an Open Source based platform strategy.
Online Courses
- A Beginner's Guide to Open Source Software Development from The Linux Foundation. This FREE course provides 7-10 hours of Course Material introducing developers to the key concepts of open source software.
- DUE DATE: Thu, Feb 4 by 11:59:59pm
Initial Assignment
The purpose of this assignment is to make sure that your Java development environment is set up and you are able to check out and check in code to a GitHub repository. For this exercise, you will need the ability to create JUnit test functions, and the capability to generate JavaDoc from your Java classes.
Create a class ContentInfo in the default package that provides information about content specified by a URL. Also create a class ContentInfoTest that implements JUnit tests for the ContentInfo class. Be sure to provide complete JavaDoc documentation for both classes, and include any helpful documentation within methods that aid in understanding their implemetation.
ContentInfo
This public class provides information about content specified by a URL by implementing these public constructors and methods.
| Returns | Parameters | Exceptions | Description | |
| ContentInfo | constructor | URL the content location |
NullPointerException if URL null |
Create an instance with the content URL. |
| ContentInfo | constructor | String the content location |
MalformedURLException if invalid url string |
Create an instance with a string representing the content URL. |
| getContentLength | int | IOException if content unavailable |
Get the length of this content in bytes. | |
| getContentType | String | IOException if content unavailable |
Gets the content type for this content (type/subtype). | |
| getImageSize | Dimension |
IllegalStateException if not image content IOException if content unavailable |
Gets the dimension for image content. | |
| getLastModified | Date | IOException if content unavailable |
Gets the date that this content was last modified. | |
| getLineCount | int |
IllegalStateException if not text content IOException if content unavailable |
Gets the line count for text content. | |
| getLocation | String | Get the location for this content. | ||
| isAvailable | boolean | Determines whether the content is available. | ||
| isImage | boolean |
IOException if content unavailable |
Determines whether the content is an image. | |
| isText | boolean |
IOException if content unavailable |
Determines whether the content is text. |
Notes
- IllegalStateException and NullPointerException are unchecked and so do not need to be declared, but they must be documented.
- See java.net.URL for information about functionality for accessing content information. See java.net.URLConnection for information about connecting to content through a URL.
- See java.util.Date for information about creating dates from long time values.
- See javax.imageio.ImageIO for information about getting image width and height from an image input stream.
Special note on getting a URL connection
Create a private getConnection() method that returns a URLConnection for the instance URL, or throws a IOException if the content is not available, Use this method to implement the public methods.
If the type of URLConnection returned by URL.connect() is HttpURLConnection, special handling is required for HTTP/HTTPS protocols. For other protocols, the URLConnection can be returned.
For a HttpURLConnection, getting the connection does not guarantee that the content exists. Instead, the HttpURLConnection.setRequestMethod() should be called with "GET", and then the connection response code requested. The HTTP server responds with HttpURLConnection.HTTP_OK if the content is available. Otherwise the getConnection() method throws a IOException.
An optimization is to add a boolean parameter to getConnection(). If true, use the request method "GET" because the content is required, or "HEAD" if false because the method is only being used to test for the existence of the content. This saves fetching the content if it is not required.
ContentInfoTest
This public class in the default package to provide JUnit tests for ContentInfo. The number of test functions is up to each student. For the purposes of testing lastModifiedDate(), it is sufficient to test the year.
Please use the data files located in the following web directory:
- 12lines.pdf
size: 12811, type: application/pdf, mod date: 2021 - 12lines.txt
size: 649, type: text/plain, lines: 12, mod date: 2021 - 500x200.png
size: 68643, type: image/png, width: 500, height: 200, mod date: 2021
There are a number of JUnit tutorials online. If possible, use JUnit4 because it is simpler, and more tutorial documentation is available than for later versions. A fairly good JUnit tutorial is available on TutorialsPoint. Most Java IDEs including Eclipse and JetBrains IntelliJ support creating JUnit tests.
JavaDoc
Generate standard JavaDoc for all public, package, protected, and private members and methods of both classes and for the classes themselves into a "docs" subdirectory. Make sure that JavaDoc does not report any errors such as undocumented parameters or undocumented exceptions thrown. Inspect your JavaDoc in a web browser starting with the generated "index.html" to make sure it is complete.
You should already be familiar with JavaDoc style of commenting from previous courses such as CS 5004 (Align), CS 5010 (MS), or from your previous course work. For good examples, see the source code for core Java classes. There is a brief tutorial available on TutorialsPoint.
Staffing
This is an individual assignment, so you will be working on your own.
Turning in the assignment
Turn your assignment in by uploading the two class source files you created and the "docs" directory to your 2021SPCS5500SB/assignment-1-khoury_id repository. The graders will download and run your JUnit tests, and also examine your JavaDoc. Once you have checked in your code, please verify that what you checked in is actually in the repository to avoid delays in grading your assignment.
You are welcome to check in intermediate versions during development as a backup to what is on your computer. Only the final version will be graded.
Grading Rubric
This assignment is worth 100 points, allocated as follows
- 25 pts: Correct implementation of ContentInfo constructors and methods. All methods and constructors must perform their required functionality for the specified content URL. They must also throw the expected exceptions for invalid content URLs or for content that does not exist or whose type does not apply (e.g. calling getLineCount() for non-text content type). The methods should not assume that the content specified by the URL exist or that its type remains the the same.
- 25 pts: Implementation of ContentInfoTest unit tests that confirm the correct operation of the ContentInfo constructors and methods, and handling of expected and unexpected exceptions thrown. You may construct unit tests that test each constructor and method of the class for various content types. Some IDEs can generate unit tests methods for each method of the class being tested. You may instead construct unit tests that tests all methods for a given test content type or error condition (e.g. not found, malformed URL, no server, etc.)
- 25 pts: Complete and correct JavaDoc comments in the source code of the two classes, as determined by reading the comments. The class comment blocks must describe the class, the author and the date using @author and @since tags. The constructor and method comments must include a description, parameters, return value, and exceptions thrown (specified checked and significant unchecked exceptions).
- 25 pts: Correctly generated JavaDoc structure in the "docs" directory that display correctly when viewed in a web browser, starting with the "index.html" file.
- DUE DATE: Thu, Feb 11 by 11:59:59pm
Reading a Professional Paper
In a quickly evolving field like Software Engineering, it is important to read papers about current topics in the professional literature, as well as papers where key concepts and methods were first presented. The purpose of this assignment is to give you experience reading professional literature and to provide you with some techniques that will help you get more out of the experience.
One the "Readings" page of this website is an article by Andrea G. Parker entitled, "How to Read a Research Paper". In it, Prof. Parker provides guidelines on how to read a paper, and describes a technique for taking notes by creating as a short, one-page review of the paper.
The assignment
In this assignment, you will apply Prof. Parker's guidelines, and create a one-page review of one of the papers in the "Recommended Readings" for lecture 2:
Following Prof. Parker's suggestions, your one-page paper will include:
- a one or two sentence summary of the paper.
- a deeper, more extensive outline of the main points of the paper, including for example assumptions made, arguments presented, data analyzed, conclusions drawn, and any limitations or extensions for the ideas in the paper.
- your opinion of the paper; primarily, the quality of the ideas and its potential impact.
Here is an example of a research paper review that follows these guidelines. The research paper is in the area of computer and operating systems, but provides an example of following these guidelines.
Staffing
This is an individual assignment, so you will be working on your own.
Submitting the assignment
Submit your review as a one-page PDF file, "assignment-2.pdf" to your 2021SPCS5500SB/assignment-2-khoury_id repository.
Grading Rubric
This assignment is worth 100 points, allocated as follows
- 10 pts: Creation of a one or two sentence summary of the paper that adequately captures the overall theme of the article. Provide a citation for the article at the top of the page so that you can locate it again later, including a URL or a text link if available.
- 40 pts: Outline of the paper with sufficient detail to capture assumptions made, arguments presented, data analyzed, and conclusions drawn to inform another reader about the essential points of the article.
- 40 pts: Your opinion of the paper in sufficient depth that another reader will understand your perspective on the paper and the reasons for your conclusions about it.
- 10 pts: Overall quality of formatting, including the use of headings, and how easy your paper is to read. Includes proper use of punctuation and spelling.
For further study
Also on the "Readings" page of this website is an article entitled, "Using the NEU Library" that describes how to access the many online resources, including books and articles, from major professional publications. As NEU students, you have full access to the library's many physical and online resources.
Try using the NEU Scholar OneSearch portal to locate a "Letter" that makes reference to this article. The letter is in vol. 2 issue 2 of ACM Queue. Included is the authors' response to the letter. You will need to log in to the portal using your NEU id and password to access the letter. Read this letter and response once you have written your own review.