Class 1
第0节的主要内容是讲课程要求:
实验占35分,个人博客占5分,期末考试占60分(闭卷)
在cms中加入课程:链接在老师发的ppt里面有,这里就不展示了。
实验要求:
在Java+Eclipse/IntelliJ IDEA+Git环境下进行,通过GitHub Classroom提交
在GitHub Classroom 里,作业deadline都设定为周日晚上23:55
TA:助教(teaching assistant)
Class2
第1节的内容主要是讲软件工程的要求和评价标准
软件是什么?
在百度上的解释是这样的:
软件(中国大陆及香港用语,台湾称作软体,英文:software)是一系列按照特定顺序组织的计算机数据和指令的集合。
简单来说,我们可以通过下面这张图进行说明:
软件是用户和硬件之间进行交互的部分,相比起硬件来说,它更加靠近用户层。
软件系统的基础是它所处的硬件基础和技术环境。
多维软件视角
我们评价软件可以从以下几个维度来看:
1.Build-time View
(1) Build-time, moment, and code-level view
(2) Build-time, period, and code-level view
(3) Build-time, moment, and component-level view
(4) Build-time, period, and component-level view
2.Run-time View
(5) Run-time, moment, and code-level view
(6) Run-time, period and code-level view
(7) Run-time, moment, and component-level view
(8) Run-time, period, and component-level view
上面这几个视角只是提供一种思维,就是在程序构建的各个阶段,各个层次都需要注意相关的问题。不是说需要将上面的内容完全记住,只是了解即可。
软件系统的质量标准
可以从以下十个层面进行解释:
1.正确性(Correctness)
按照事先的“规约”执行(满足需求)
2.鲁棒性(Robustness)
软件能够良好地应对异常情况
3.扩展性(Extendibility)
如果对程序的规约有所变化,程序应该能够良好地处理
4.可复用性(Reusability)
避免“重复造轮子”,已经完成的任务可以在其他合适的地方使用(比如java中的库)
5.兼容性(Compatibility )
使得不同的软件系统之间能够良好地集成
6.性能(Efficiency)
使得软件运行效率较高(前提是保证正确性)
7.可移植性(Portability)
软件能够在不同技术环境(硬件环境、操作系统)之间迁移
8.易用性(Ease of use )
用户能够轻松地使用软件(希望以后设计者能够加强这方面,作者已经被各种复杂的软件折磨多年了)
9.功能性(Functionality)
软件能够拥有更多、更加强大的功能
10.及时性(Timeliness)
软件能够及时迎合市场的需要
软件构造的五个关键质量目标
1.可理解性(Understandability )
代码风格良好(注释、变量命名、代码布局等等)
项目架构清晰
2.可复用性(Reusability )
简单来说就是已经完成的任务不必再次完成,而是可以复用之前的结果
实现手段包括:接口与实现分类、继承、重载、重写等等
3.可维护性和适应性(Maintainability and Adaptability)
就是指软件能够根据需求被修改、纠正、更新的能力
实现手段包括:模块化设计、OO设计模式等
4.鲁棒性(Robustness )
鲁棒性大家应该已经很熟悉了,这里不多介绍
实现手段包括:异常处理机制、防御性编程等
5.效率(Performance)
提高软件性能和效率
实现手段包括:代码优化、空间复杂性、时间复杂性控制等等