实验一 软件工程准备
一、实验介绍
项目 | 内容 |
---|---|
班级博客链接 | https://edu.cnblogs.com/campus/xbsf/2020CSSE |
本次作业要求链接 | https://edu.cnblogs.com/campus/xbsf/2020CSSE/homework/12938 |
我的课程学习目标 | (1)学习博客园软件开发者学习社区使用技巧和经验。(2)了解Github的基本操作。 |
本次作业在哪些方面帮我实现学习目标 | (1) 老师的帮助以及作业要求文档中清晰的指导步骤。(2)为注册开通博客以及练习使用Markdown编辑器提供了详细的博文链接。(3)对github的注册与使用提供了详细的步骤,方便学生学习。 |
二、实验内容
1.任务1:调查问卷 在以下网址提交课程调查问卷:
https://www.wjx.cn/vm/e4jdhAf.aspx#
调查问卷已提交!
2.任务2:在博客园平台注册个人博客账号和加入班级博客
用途:师生交流、同学交流、发布作业、学习先进技术与工程经验
博客园地址:http://www.cnblogs.com/
参考这篇博客创建个人博客园博客账号
班级博客地址:https://edu.cnblogs.com/campus/xbsf/2020CSSE
登录博客后,在浏览器中打开链接,加入班级(2023年春软件工程)
3.任务3:注册Github账号
用途:管理项目,记录(源码、文档,历次版本变更,bug发现与修复)等信息。
Github地址:https://github.com/
Github基础操作及如何托管项目?
参考博客:https://www.cnblogs.com/wzq1998/p/14332417.html
4.任务4:各位同学点击以下链接填写博客园账号与github账号的链接
https://www.chaojibiaoge.com/U/url/7zsup981
已填写完毕!
5.任务5:构建之法与博客首秀
阅读《现代软件工程—构建之法》,参照参考文章的提问模板,尝试拟定3个准备从课程学习中找到答案的问题
(1)软件=程序+软件工程
程序=数据结构+算法
- 程序,在这里指的是源程序,就是一行行的代码。它们是建立在数据结构上的一些算法。程序还要对数据进行操作,这些数据有些是静态的(例如软件的图标、提示信息),有些是动态的(例如程序生成的随机数字、程序通过网络下载的数据、用户的文字或语音输人等)。但是光有代码和静态数据还是不行,工程师要把它们构建为机器能懂的可执行代码。构建不仅仅是 cc 和 link 命令,一个复杂的软件不但要有合理的软件架构( Software Architecture )、软件设计与实现( Software Design , Implementation and Debug ),还要有各种文件和数据来描述各个程序文件之间的依赖关系、编译参数、链接参数,等等。这些都是软件构建的过程。
- 软件团队的成员每天都在修改各种源代码,怎么保证软件在修改过程中质量不断提高,至少要维持以前的质量?有些时候,我们要为某个需求写一些特殊功能,不久后又要把这些功能再合并回主要版本。有些程序要配置不同的界面,运行在中文、英文或其他语言的操作系统上;有些程序还有32位版本、64位版本等。这是源代码管理( Source Code Control )的问题,也叫配置管理( Software Configuration Management )。我们还有一系列的工具、流程和文档来保证程序的正确性,这些工具(也是软件)、流程应该达到很高的质量,才能保证开发出来的软件的质量。这就是质量保障( Quality Assurance ),具体的验证过程叫做软件测试( Test )。
- 一个软件或者服务要有人买,就得找到顾客。顾客有各种需求,有些靠谱,有些不靠谱;有些容易做到,有些难以做到。软件团队要从需求分析( Requirement Analysis )开始,把合适的需求梳理出来,然后逐步展开后续工作,如设计(软件架构)、实现(写数据结构和算法)、测试,到最后发布软件。
- 软件团队的人员也会流动,新的成员要尽快读懂已有的程序,了解程序的设计,这叫程序理解( Program Comprehension )。软件在运行过程中还会这样那样的问题,也许我们要时不时给软件打一个补丁,或者维护众多的服务,团队的新老成员要一起修复各种各样的问题,这叫软件维护( Software Maintenance ),或者服务运营( Service Operation )。这一系列过程就是软件的生命周期( Software Life Cycle , SLC ),在这一周期中,有人得负责软件项目的管理( Project Management )。
(2)软件工程是什么?
- 软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。
- 软件工程包括下列领域:软件需求分析、软件设计、软件构建、软件测试和软件维护。
- 软件工程和下列的学科相关:计算机科学、计算机工程、管理学、数学、项目管理学、质量管理、软件人体工学、系统工程、工业设计和用户体验设计。
(3)软件系统使复杂的吗?
软件工程学科也没有提出通用的复杂性定义和度量方式,但针对某些具体的场景,有一些明确的定义和评估方式。
-
Manny Lehman的复杂度定义
- Manny Lehman教授在软件演进法则中首次系统性提出了软件复杂度。
-
软件(程序)复杂度是软件的一组特征,它由软件内部的相互关联引起。随着软件的实体(模块)的增加,软件内部的相互关联会指数式增长,直至无法被全部掌握和理解。
-
在他的描述中,软件复杂度的影响是:
软件的高复杂度,会导致在修改软件时引入非主观意图的变更的概率上升,最终在做变更的时候更容易引入缺陷。在更极端的情况下,软件复杂到几乎无法修改。
-
- Manny Lehman教授在软件演进法则中首次系统性提出了软件复杂度。
-
Halstead的复杂度定义
-
Halstead 复杂度 (Maurice H. Halstead, 1977) 是软件科学提出的第一个计算机软件的分析“定律”,用以确定计算机软件开发中的一些定量规律。Halstead 复杂度采用一组基本的度量值,这些度量值通常在程序产生之后得出,或者在设计完成之后进行估算。
-
Halstead 复杂度根据程序中语句行的操作符和操作数的数量计算程序复杂性。
- 操作符和操作数的量越大,程序结构就越复杂。
- 操作符通常包括语言保留字、函数调用、运算符,也可以包括有关的分隔符等。
- 操作数可以是常数和变量等标识符。
-